编译原理基础试题
- 格式:doc
- 大小:220.50 KB
- 文档页数:5
编译原理试题及答案一、选择题1. 编译器的主要功能是什么?A. 程序设计B. 程序翻译C. 程序调试D. 数据处理答案:B2. 下列哪一项不是编译器的前端处理过程?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D3. 在编译原理中,词法分析器的主要作用是什么?A. 识别程序中的关键字和标识符B. 将源代码转换为中间代码C. 检查程序的语法结构D. 确定程序的运行环境答案:A4. 语法分析通常采用哪种方法?A. 自顶向下分析B. 自底向上分析C. 正则表达式匹配D. 直接解释执行答案:B5. 语义分析的主要任务是什么?A. 检查程序的语法结构B. 检查程序的类型安全C. 识别程序中的变量和常量D. 将源代码转换为机器代码答案:B二、简答题1. 简述编译器的工作原理。
答案:编译器的工作原理主要包括以下几个步骤:词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。
词法分析器将源代码分解成一系列的词素;语法分析器根据语法规则检查词素序列是否合法;语义分析器检查程序的语义正确性;中间代码生成器将源代码转换为中间代码;代码优化器对中间代码进行优化;最后,目标代码生成器将优化后的中间代码转换为目标机器代码。
2. 什么是词法分析器,它在编译过程中的作用是什么?答案:词法分析器是编译器前端的一个组成部分,负责将源代码分解成一个个的词素(tokens),如关键字、标识符、常量、运算符等。
它在编译过程中的作用是为语法分析器提供输入,是编译过程的基础。
三、论述题1. 论述编译器中的代码优化技术及其重要性。
答案:代码优化是编译过程中的一个重要环节,它旨在提高程序的执行效率,减少资源消耗。
常见的代码优化技术包括:常量折叠、死代码消除、公共子表达式消除、循环不变代码外提、数组边界检查消除等。
代码优化的重要性在于,它可以显著提高程序的运行速度和性能,同时降低程序对内存和处理器资源的需求。
四、计算题1. 给定一个简单的四则运算表达式,请写出其对应的逆波兰表达式。
《编译原理》考试试题及答案(附录)一、判断题:1.一个上下文无关文法的开始符,可以是终结符或非终结符。
( X )2.一个句型的直接短语是唯一的。
( X )3.已经证明文法的二义性是可判定的。
( X )4.每个基本块可用一个DAG表示。
(√)5.每个过程的活动记录的体积在编译时可静态确定。
(√)6.2型文法一定是3型文法。
( x )7.一个句型一定句子。
( X )8.算符优先分析法每次都是对句柄进行归约。
(应是最左素短语) ( X )9.采用三元式实现三地址代码时,不利于对中间代码进行优化。
(√)10.编译过程中,语法分析器的任务是分析单词是怎样构成的。
( x )11.一个优先表一定存在相应的优先函数。
( x )12.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
( )13.递归下降分析法是一种自下而上分析法。
( )14.并不是每个文法都能改写成LL(1)文法。
( )15.每个基本块只有一个入口和一个出口。
( )16.一个LL(1)文法一定是无二义的。
( )17.逆波兰法表示的表达试亦称前缀式。
( )18.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
( )19.正规文法产生的语言都可以用上下文无关文法来描述。
( )20.一个优先表一定存在相应的优先函数。
( )21.3型文法一定是2型文法。
( )22.如果一个文法存在某个句子对应两棵不同的语法树,则文法是二义性的。
( )二、填空题:1.( 最右推导 )称为规范推导。
2.编译过程可分为(词法分析),(语法分析),(语义分析和中间代码生成),(代码优化)和(目标代码生成)五个阶段。
3.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是()。
4.从功能上说,程序语言的语句大体可分为()语句和()语句两大类。
5.语法分析器的输入是(),其输出是()。
6.扫描器的任务是从()中识别出一个个()。
一、填空1.源程序中的动态错误时源程序中的逻辑错误,它们发生在程序运行的时候,也被称为(1)错误。
动态语义2.设∑={0,1}上的正规集s由倒数第二个字符为0的所有字符串组成,则该正规集对应的正规式表示为(2)。
(0|1)*0(0|1)3. 假设G是一个文法,S是文法的开始符号,如果S * x,则称x是该文法的一个(3)。
句型4. 文法G产生的(4)的全体是该文法描述的语言。
句子5. 已知文法G:S→aABeA→b|AbcB→d该文法的开始符号是(5),终结符号集合V T是(6),非终结符号集合V N是(7)。
S,a、b、c、d、e,S、A、B6. 在中间代码的三元式表示式中,三元式的编号具有双重含义,既代表(8),又代表(9)。
三元式,三元式所存放的结果7. 自上而下语法分析的基本思想是:(10)。
对任何输入序列,从文法的开始符号开始,进行最左推导,直到得到一个合法的句子或非法结构。
8. 规约是推导的逆过程,是一个(11)的过程。
反复用产生式的左部替换产生式的右部、谋求对输入序列进行匹配9. 若文法G构造的移进—规约分析表中不含多重定义的条目,则G为(12)文法。
LR(k)10. 文法符号的属性有两种,一种称为(13)属性,另一种称为继承属性。
综合二、论述1.简述编译器和解释器的区别。
P4编译器将源程序的翻译和翻译后程序的运行分成两个独立的不同阶段,而解释器则把翻译和程序的运行结合在一起,翻译一段源程序,紧接着运行它。
与编译器相比,解释器有以下两个优点:1.具有较好的动态特性。
2.具有较好的可移植性。
但是,由于解释器把源程序的翻译和目标程序的运行过程结合在一起,因此,与编译器相比,解释器在时间和空间上的损失较大,运行效率低。
2.编译一般包括哪些阶段?简述各阶段的工作与作用(结合例子)。
P8编译一般过程:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成词法分析:词法分析根据词法规则识别出源程序的各个几号(token)语法分析:语法分析根据语法规则识别出记号流中的结构(短语、句子)语义分析:语义分析根据语义规则对语法树中的语法单元进行静态语义检查中间代码生成:根据语义分析器的输出生成中间代码代码优化:使优化后的代码序列在占用的空间上和程序执行的时间上都更节省、更有效。
编译原理试题编译原理试题一、单项选择题1.将编译程序分成若干个“遍”是为了( B )A.提高程序的执行效率B. 使程序的结构更加清晰C.利用有限的机器内存并提高机器的执行效率D.利用有限的机器内存但降低了机器的执行效率2.不可能是目标代码的是( D )A.汇编指令代码 B.可重定位指令代码C.绝对指令代码 D.中间代码3.词法分析器的输入是( B )A.单词符号串 B.源程序C.语法单位 D.目标程序4.中间代码生成时所遵循的是( C )A.语法规则 B.词法规则C.语义规则 D.等价变换规则5.编译程序是对( D )A.汇编程序的翻译 B.高级语言程序的解释执行C.机器语言的执行 D.高级语言的翻译6.词法分析应遵循( C )A.语义规则 B.语法规则C.构词规则 D.等价变换规则7.词法分析器的输出结果是( C )A.单词的种别编码 B.单词在符号表中的位置C.单词的种别编码和属性值 D.单词属性值8.正规式M1和M2等价是指( C )A.M1和M2的状态数相等 B.M1和M2的有向弧条数相等C.M1和M2所识别的语言集相等D.M1和M2状态数和有向弧条数相等9.词法分析器作为独立的阶段使整个编译程序结构更加简洁、明确,因此,( B ) A.词法分析器应作为独立的一遍B.词法分析器作为子程序较好C.词法分析器分解为多个过程,由语法分析器选择使用.D.词法分析器并不作为一个独立的阶段10.如果L(M1)=L(M2),则M1与M2( A )A.等价 B.都是二义的C .都是无二义的D .它们的状态数相等 11.文法G :S →xSx|y 所识别的语言是( C )A .xyxB .(xyx)* c .x n yx n (n ≥0) d .x *yx *12.文法G 描述的语言L(G)是指( A )A .∈?=+*,|)(T V S G L αααB .∈?=+*)(,|)(N T V V S G L ααα C .∈?=**,|)(T V S G L ααα D .?∈?=**)(,|)(N T V V S G L ααα 13.有限状态自动机能识别( C )A .上下文无关文法B .上下文有关文法C .正规文法D .短语文法14.如果文法G 是无二义的,则它的任何句子( A ) A .最左推导和最右推导对应的语法树必定相同B .最左推导和最右推导对应的语法树可能不同 C .最左推导和最右推导必定相同D .可能存在两个不同的最左推导,但它们对应的语法树相同15.由文法的开始符经0步或多步推导产生的文法符号序列是( C ) A .短语 B .句柄 C .句型 D .句子 16.文法G :E →E+T|T T →T*P|P P →(E)|i则句型P+T+i 的句柄为( B )A .P+TB .PC .P+T+iD .i 17.文法G :S →b|∧|(T) T →T ∨S|S 则FIRSTVT(T)=( C )A .{ b ,∧,( }B .{ b ,∧,) }C .{ b ,∧,(,∨ }D .{ b ,∧,),∨ } 18.产生正规语言的文法为( D )A .0型B .1型C .2型D .3型 19.任何算符优先文法( D )优先函数。
编译原理试题与答案第1讲绪论本讲模拟练习题(不计分)1. 编译是对( )。
A. 机器语⾔的执⾏B. 汇编语⾔的翻译C. ⾼级语⾔的翻译D. ⾼级语⾔程序的解释执⾏正确答案:C你选对了2. ⽤⾼级语⾔编写的程序经编译后产⽣的程序叫( )。
A. 源程序B. ⽬标程序C. 连接程序D. 解释程序正确答案:B你选对了3. ( )不是编译程序的组成部分。
A. 词法分析程序B. 代码⽣成程序C. 设备管理程序D. 语法分析程序正确答案:C你选对了4. 源程序是句⼦的集合,( )可以较好地反映句⼦的结构。
A. 线性表B. 树C. 完全图D. 堆栈正确答案:B你选对了5. 编译程序是⼀种( )。
A. 汇编程序B. 翻译程序C. 解释程序D. ⽬标程序正确答案:B你选对了6. 按逻辑上划分,编译程序第三步⼯作是( )。
A. 语义分析B. 词法分析C. 语法分析D. 代码⽣成正确答案:A你选对了7. 编译程序中语法分析器接收以( )为单位的输⼊。
A. 单词B. 表达式C. 产⽣式D. 句⼦正确答案:A你选对了8. 编译过程中,语法分析器的任务就是( )。
A. 分析单词是怎样构成的B. 分析单词串是如何构成语句和声明的C. 分析语句和声明是如何构成程序的D. 分析程序的结构正确答案:B你选对了9. 语法分析时所依据的是( )A. 语法规则B. 词法规则C. 语义规则D. 等价变换规则正确答案:A你选对了第1讲测验(计分)把汇编语⾔程序翻译成机器可执⾏的⽬标程序的⼯作是由( )完成的。
1. 单选(1分) 把汇编语⾔程序翻译成机器可执⾏的⽬标程序的⼯作是由A. 编译器B. 解释器C. 预处理器D. 汇编器正确答案:D你选对了2. 单选(1分) ( )不是编译程序的组成部分。
A. 词法分析程序B. 语法分析程序C. 代码⽣成程序D. 设备管理程序正确答案:D你选对了3. 单选(1分) 通常⼀个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码⽣成,代码优化,⽬标代码⽣成等六个部分,还应包括( )。
《编译原理基础》期末考试复习题☆注意事项:本复习题满分共:200分。
一、单项选择题1、以010结尾的二进制串的正规式为()。
A.(1|0)*01 B.0*01*C.(1|0)*010 D.0(1|0)*012、与(s|t)* (s|t)等价的正规式是()。
A.s*| t* B.(st)*(s|t)C.(s|t)(s|t)* D.(s|t)*3、对正规式(a*|b*)+所描述的语言,下列说法准确的是()。
A.连续个a再加连续个b所组成的串的集合B.a和b个数相等的串的集合C.a和b组成的所有串(不含空串)的集合D.a和b组成的所有串(包含空串)的集合4、对于DFA模型,说法错误的是()。
A.DFA从任何状态出发,对于任何输入符号,可有多个转换B.任何状态都没有ε转换C.DFA有唯一的开始状态D.DFA可以有多个接受状态5、以下说法错误的是()。
A. NFA的状态集合是无限的B. NFA的输入符号可能有多个C. DFA的状态集合是有限的D. DFA的输入符号可能有多个6、符号串ab1b2是文法G[A]:A→aB B→bB|b的句子,该句子的句柄是()。
A.b1B.b2C.a D.b1b27、移进-归约分析为输入串构造分析树是从()开始的。
A.根结点B.叶结点C.中间结点D.任一结点8、下列叙述正确的是()。
A.任何LL(1)文法都是LR(1)文法B.任何LL(1)文法都是SLR(1)文法C.任何SLR(1)文法肯定是LR(1)文法D.任何LR(1)文法肯定是LALR(1)文法9、下列叙述正确的是()。
A.S属性定义属于L属性定义B.变量类型声明的语法制导定义不是一个L属性定义C.L属性定义只包含综合属性D.L属性定义只包含继承属性10、中间代码生成时所依据的为()。
A.语法规则B.语法规则C.语义规则D.等价变换规则单选题答案1. C 2. B 3. D 4. A 5. A6. B 7. B 8. C 9. A 10.C二、填空题1、对编译程序而言,输入数据是,输出结果是。
编译原理试题及答案一、选择题1. 下列哪个不是编译器所需的基本处理步骤?A. 词法分析B. 语法分析C. 语义分析D. 目标代码优化答案:D2. 编译器的主要功能是将高级语言程序翻译成什么形式?A. 汇编语言B. 机器语言C. 中间代码D. 高级语言答案:B3. 下列哪个不属于编译器的后端阶段?A. 代码优化B. 目标代码生成C. 词法分析D. 目标程序优化答案:C二、填空题1. 编译器的输入是源程序,输出是目标程序。
2. 目标代码生成阶段的任务是将中间代码翻译成汇编语言或机器语言。
3. 语法分析阶段的输出是抽象语法树。
三、简答题1. 请简述编译器的工作原理。
编译器的工作原理主要包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等阶段。
词法分析阶段将源程序分解成单词(也称为词法单元),语法分析阶段根据语法规则将词法单元组织成一个语法树,语义分析阶段对语法树进行语义检查,中间代码生成阶段将语法树转化为中间代码,代码优化阶段对中间代码进行优化,最后目标代码生成阶段将中间代码转化为机器语言或汇编语言。
2. 请说明词法分析的作用是什么,如何实现?词法分析的作用是将源程序中的字符序列转化为单词序列,也就是将一段代码切分成不同的词法单元。
实现词法分析可以通过有限状态自动机来处理输入字符序列,并根据一系列规则将字符序列划分为词法单元。
常用的方法有手写分析器和使用词法分析生成器等。
3. 简要介绍一下代码优化的目的和方法。
代码优化的目的是通过对程序的中间代码或目标代码进行调整,以达到提高程序性能、减小程序的空间占用或减小程序的执行时间等目的。
代码优化的方法主要包括局部优化和全局优化两种。
局部优化主要针对某个代码块进行优化,如常量折叠、公共子表达式消除等。
全局优化则考虑整个程序,对程序的整体结构进行优化,如循环优化、函数内联等。
总结:编译原理试题及答案主要涵盖了选择题、填空题和简答题三个部分。
其中选择题主要考察对编译器基本处理步骤和功能的理解。
编译原理考试题及答案一、选择题(每题5分,共20分)1. 编译器的主要功能是什么?A. 代码优化B. 代码翻译C. 代码调试D. 代码运行答案:B2. 下列哪个选项不属于编译器的前端部分?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D3. 在编译原理中,文法的产生式通常表示为:A. A -> αB. A -> βC. A -> γD. A -> δ答案:A4. 下列哪个算法用于构建语法分析树?A. LL(1)分析B. LR(1)分析C. SLR(1)分析D. LALR(1)分析答案:A二、填空题(每空5分,共20分)1. 编译器的前端通常包括词法分析、语法分析和________。
答案:语义分析2. 编译器的后端主要负责________和目标代码生成。
答案:代码优化3. 编译器中的词法分析器通常使用________算法来识别单词。
答案:有限自动机4. 语法分析中,________分析是一种自顶向下的分析方法。
答案:递归下降三、简答题(每题10分,共30分)1. 简述编译器的作用。
答案:编译器的主要作用是将高级语言编写的源代码转换成计算机能够理解的低级语言或机器代码,以便执行。
2. 解释一下什么是语法制导翻译。
答案:语法制导翻译是一种翻译技术,它利用源语言的语法信息来指导翻译过程,使得翻译过程能够更好地理解源代码的语义。
3. 什么是词法分析器?答案:词法分析器是编译器前端的一部分,它的任务是将源代码文本分解成一系列的标记(tokens),这些标记是源代码的最小有意义的单位。
四、计算题(每题10分,共30分)1. 给定一个简单的文法G(E):E → E + T | TT → T * F | FF → (E) | id请计算文法的非终结符号E的FIRST集和FOLLOW集。
答案:E的FIRST集为{(, id},FOLLOW集为{), +, $}。
2. 假设编译器在进行语法分析时,遇到一个语法错误的代码片段,请简述编译器如何处理这种情况。
编译原理试题A一、单项选择题(每题1分,共20分)1、哪个不是编译系统的组成部分(C )A.词法分析器 B. 代码生成器C.设备管理程序 D. 语法分析器2. 设有表达式a*b-c,将其中a*b识别为表达式的编译阶段是什么( B )A.词法分析 B. 语法分析C.语义分析 D. 代码生成3. 下面不能用于对文法进行描述的是(A )A.源语言 B. EBNF C.BNF D. 语法图4. 设有文法G[S]: S→S1|S0|Sa|Sc|a|b|c,下列符号串中不是该文法的句子的是(A )A.ab0 B. a0c01 C.aaa D. bc105. 文法G[S]:S→aAA→bBB→a|aS ,则L(G)为(C )A.{(ab)n a|n≥1} B. {a (ba)n|n≥1}C.{(aba)n|n≥1} D. {(aba)n|n≥0}6. 哪个不是DFA的构成成分(B )A.有穷字母表 B. 初始状态集合C.终止状态集合 D. 有限状态集合7.词法分析器的输入是(B )A.单词符号串 B.源程序C.语法单位 D.目标程序8.在词法分析阶段不能识别的是(C )A.标识符 B. 运算符C.四元式 D. 常数9.设有一段C语言程序while(i&&++j){c=2.19;j+=k;i++;} ,经过词法分析后可以识别的单词个数是(B )A.19 B.20 C.21 D.2310.自上而下语法分析的主要动作是(B )A.移进 B. 推导C.规约 D. 匹配11.下面不属于LL(1)分析器的组成部分是(D )A.LL(1)总控程序 B. LL(1)分析表C.分析栈 D.源程序串12.设有文法G[S]为S→AB|bC,A→ε|b,B→ε|aD,C→AD|b,D→aS|c则FOLLOW(A)为(A )A.{a,c,#} B.{c,#} C.{a,#} D.{#}13.设有文法G[S]:S→Ap|Bq,A→a|cA,B→b|dB,则FIRST(Ap)为( C )A.{p,q} B. {b,d} C.{a,c} D. 其他14.自下而上语法分析的主要分析动作是(D )A.推导 B. 规约C.匹配 D. 移进-规约15.算法优先分析中,可规约串是(C )A.句柄B.活前缀C.最左素短语D.素短语16. 设有文法G={{S},{a},{S→SaS|ε},S},该文法是(B )A.LL(1)文法B.二义性文法C.SLR(1)文法D.算法优先文法17、中间代码生成时所以据的是(C )A.语法规则B.词法规则C.语义规则 D.等价变换规则18、给定文法G: E→E+T|T,T→T*F|F,F→i|(E)则L(G)中的一个句子i+i+(i*i)*i的逆波兰表示为(C)A.iii*i++B.ii+iii**+ C.ii+ii*i*+ D.其他19.在编译程序中与生成中间代码的目的无关的是(B)A.便于目标代码优化B.便于存储空间的组织C.便于目标代码的移植D.便于编译程序的移植20.中间代码是介于源语言程序和什么之间的一种代码 (D )A .源代码 B. 机器语言 C. 汇编语言 D. 目标代码二.简答(每题3分,共12分) 1. 什么是编译程序?编译程序是将源语言程序翻译为目标语言程序的程序。
编译原理试题及答案一、选择题1. 编译器的主要功能是什么?A. 将高级语言代码翻译成机器语言代码B. 进行程序调试C. 进行代码优化D. 管理程序运行时的内存分配答案:A2. 词法分析器的主要任务是什么?A. 将源代码分解成多个语句B. 将源代码分解成多个词素C. 检查源代码的语法正确性D. 将词素转换为相应的语法单位答案:B3. 下列哪个是自顶向下的语法分析方法?A. LL(1)分析法B. LR(1)分析法C. LALR(1)分析法D. GLR分析法答案:A4. 语义分析的主要任务是什么?A. 检查程序的语法正确性B. 检查程序的类型正确性C. 将源代码转换为目标代码D. 进行程序的优化答案:B5. 代码生成阶段的主要任务是什么?A. 将语法树转换为目标代码B. 进行程序的优化C. 检查程序的类型正确性D. 将源代码分解成多个词素答案:A二、简答题1. 简述编译过程的主要阶段。
答案:编译过程主要分为四个阶段:词法分析、语法分析、语义分析和代码生成。
词法分析将源代码分解成词素,语法分析检查源代码的语法结构,语义分析检查源代码的语义正确性,代码生成将源代码转换为目标代码。
2. 什么是中间代码?它在编译过程中起到什么作用?答案:中间代码是一种介于源代码和目标代码之间的代码形式,它通常具有更接近于机器语言的特性,但仍然保持一定的抽象级别。
中间代码在编译过程中起到桥梁的作用,它使得代码优化和目标代码生成更加方便和高效。
三、论述题1. 论述编译器优化的几种常见方法。
答案:编译器优化主要包括以下几种方法:常量折叠、死代码消除、公共子表达式消除、循环优化、代码内联、寄存器分配等。
这些优化方法可以提高程序的执行效率,减少资源消耗,提高程序的运行速度。
结束语:本试题涵盖了编译原理的基本知识点,包括编译器的功能、编译过程的主要阶段、中间代码的作用以及编译器优化的方法。
希望考生能够通过本试题加深对编译原理的理解和掌握。
一、填空
1.源程序中的动态错误时源程序中的逻辑错误,它们发生在程序运行的时候,也被称为(1)错误。
动态语义
2.设∑={0,1}上的正规集s由倒数第二个字符为0的所有字符串组成,则该正规集对应的正规式表示为(2)。
(0|1)*0(0|1)
3. 假设G是一个文法,S是文法的开始符号,如果S * x,则称x是该文法的一个(3)。
句型
4. 文法G产生的(4)的全体是该文法描述的语言。
句子
5. 已知文法G:
S→aABe
A→b|Abc
B→d
该文法的开始符号是(5),终结符号集合V T是(6),非终结符号集合V N是(7)。
S,a、b、c、d、e,S、A、B
6. 在中间代码的三元式表示式中,三元式的编号具有双重含义,既代表(8),又代表(9)。
三元式,三元式所存放的结果
7. 自上而下语法分析的基本思想是:(10)。
对任何输入序列,从文法的开始符号开始,进行最左推导,直到得到一个合法的句子或非法结构。
8. 规约是推导的逆过程,是一个(11)的过程。
反复用产生式的左部替换产生式的右部、谋求对输入序列进行匹配
9. 若文法G构造的移进—规约分析表中不含多重定义的条目,则G为(12)文法。
LR(k)
10. 文法符号的属性有两种,一种称为(13)属性,另一种称为继承属性。
综合
二、论述
1.简述编译器和解释器的区别。
P4
编译器将源程序的翻译和翻译后程序的运行分成两个独立的不同阶段,而解释器则把翻译和程序的运行结合在一起,翻译一段源程序,紧接着运行它。
与编译器相比,解释器有以下两个优点:
1.具有较好的动态特性。
2.具有较好的可移植性。
但是,由于解释器把源程序的翻译和目标程序的运行过程结合在一起,因此,与编译器相比,解释器在时间和空间上的损失较大,运行效率低。
2.编译一般包括哪些阶段?简述各阶段的工作与作用(结合例子)。
P8
编译一般过程:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成
词法分析:词法分析根据词法规则识别出源程序的各个几号(token)
语法分析:语法分析根据语法规则识别出记号流中的结构(短语、句子)
语义分析:语义分析根据语义规则对语法树中的语法单元进行静态语义检查
中间代码生成:根据语义分析器的输出生成中间代码
代码优化:使优化后的代码序列在占用的空间上和程序执行的时间上都更节省、更有效。
目标代码生成:生成具体机器上可运行的代码。
3.简述使用词法分析器构造LEX构造词法分析程序的过程,并写出能识别无符号常数num的LEX程序。
P97
正规式——NFA——DFA——最少状态DFA——词法分析器或
正规式——语法树——DFA——最少状态DFA——词法分析器
digit [0-9]
digits digit+
number digits(.digits)?
%%
{number} {
yylval.type=REAL;
strcpy(yylval.lexeme,yytext);
num=atof(yytext);
if (num>=0) return num;
}
%%
main()
{
yylex();
}
4. 表达式a+b*c-(d*e)/f,如果优先级由高到低依次为*、/、+、-,且均为左结合,请画
出其树形结构,写出其后缀式及四元式。
P170、P165、P169
三、简答
1. 有NFA定义如下:
N=(S={0,1},∑={a,b},s0=0,F={0},
move ={move(0,a)=0,move(0,a)=1,move(0,b)=1,move(1,a)=0} )(1)画出N的状态转换图;
(2)构造N的最小DFA D;
(3)给出D所接受语言的正规式描述;
(4)举出语言中的三个串,并给出D识别它们的过程。
P46
2. 对所给文法
S→(L)|a
L→L,S|S
对下述语句建立最左推导和最右推导,并给出它们最终的分析树。
(1)(a,a)
(2)(a,((a,a),(a,a)))
3. 文法G如下
S→aAbe
A→b|Abc
B→d
(1)改写G为等价的LL(1)文法(提示:消除文法中的左递归)(2)求每个非终结符的FIRST集合和FOLLOW集合
(3)构造预测分析表。
P137
a E
b
4. 已知文法G3:
S ’→E
E →aA|bB
A →cA|d
B →cB|d
(1) 写出句型bcccB 的所有短语、直接短语和句柄;
(2) 列出4个项目集I1、I2、I3、I4(如下图),请将这4个项目集补充完整。
I2:E →a.A I4:E →b.B I3:S'→E. I1:S ’→.E
E →.aA
E →.bB。