编译程序总复习——例题

合集下载

编译原理课后习题答案(清华大学_张素琴)复习例题

编译原理课后习题答案(清华大学_张素琴)复习例题

编译原理复习例题(有些内容没有覆盖,比如优化、SLR(1)、LR(1)、LALR(1)等。

但要求至少要按照作业题的范围复习。

)一选择题1.编译的各阶段工作都涉及。

[A]词法分析[B]表格管理 [C]语法分析 [D]语义分析2.型文法也称为正规文法。

[A] 0 [B] 1 [C] 2 [D] 33.文法不是LL(1)的。

[A]递归 [B]右递归 [C]2型 [D]含有公共左因子的4.文法E→E+E|E*E|i的句子i*i+i*i有棵不同的语法树。

[A] 1 [B] 3 [C] 5 [D] 75.文法 S→aaS|abc 定义的语言是。

[A]{a2k bc|k>0} [B]{a k bc|k>0}[C]{a2k-1bc|k>0} [D]{a k a k bc|k>0}6.若B为非终结符,则 A→α.Bβ为。

[A]移进项目 [B]归约项目 [C]接受项目 [D]待约项目7.同心集合并可能会产生新的冲突。

[A]二义 [B]移进/移进 [C]移进/归约 [D]归约/归约8.代码优化时所依据的是。

[A]语法规则 [B]词法规则[C]等价变换规则 [D]语义规则9.表达式a-(-b)*c的逆波兰表示(@为单目减)为。

[A]a-b@c* [B]ab@c*- [C]ab@- [D]ab@c-*10.过程的DISPLAY表是用于存取过程的。

[A]非局部变量[B]嵌套层次 [C]返回地址 [D]入口地址二填空题1.词法分析阶段的任务式从左到右扫描字符流,从而逐个识别一个个的单词。

2.对于文法G[E]:E→T|E+T T→F|T*F F→P^F|P P→(E)|i,句型T+T*F+i的句柄是。

3.最右推导的逆过程称为规范归约,也称为最左归约。

4.符号表的每一项是由名字栏和两个栏目组成。

在目标代码生成阶段,符号表是的依据。

三判断题(认为正确的填“T”,错的填“F”)【】1.同心集的合并有可能产生“归约/归约”冲突。

编译程序总复习_例题

编译程序总复习_例题

5.有文法G[E]:E T|E+T|E-T 5.有文法 有文法G[E]: T|E+T|ET F|T*F|T/F F i/(E) 请判断(E+T)*i+F是 的一句型吗? 请判断(E+T)*i+F是G的一句型吗? 如果是,请画出它的推导的语法树。 如果是,请画出它的推导的语法树。 并写出语法树的短语、简单短语、 并写出语法树的短语、简单短语、 句柄。 句柄。
有文法G[E]: 有文法G[E]: E T|E+T|E-T T|E+T|ET F|T*F|T/F F i/(E) (E+T)*i+F是 (E+T)*i+F是G的一句型 T 每棵子树的 叶组成短语 叶组成短语 (E+T)*i+F (E+T)*I (E+T) E+T i F
F ( E E +
E E T * F i ) T + T F
7. 设有文法G[S]: 设有文法G[S]: S→E E→Aa | bB A→cA|d B→cB|d 构造其LR(0)分析表并利用分析表判断 分析表并利用分析表判断acccd是否为 构造其LR(0)分析表并利用分析表判断acccd是否为 文法G[S]的句子。 文法G[S]的句子。 的句子
解: (1)识别活前缀的自动机 LR分析表 (2)LR分析表 LR分析过程 分析过程——即判断acccd是 (3)LR分析过程——即判断acccd是 否为文法G[S]的句子 否为文法G[S]的句子
1 . 编译程序的功能和组织结构
表 处 理 前 端 中
源 程 序
词 法 分 析
语 法 分 析
语 义 分 析
间 代 码 生 成
中 后 目 端 间 标 代 代 码 码 优 生 化 成

编译概念复习题(参考答案)

编译概念复习题(参考答案)

编译概念复习题(参考答案)一、填空题1.高级程序设计语言是根据定义的。

A.词法规则B.语法规则C.语义规则D.以上三项规则2.编译程序各阶段工作都涉及到。

A.词法分析B.表格管理C.语法分析D.语义分析3.编译程序将源程序加工成目标程序是之间的转换。

A.词法B.语法C.语义D.规则4.解释程序和编译程序的区别在于。

A.是否生成中间代码B.加工的对象不同C.使用的实现技术不同D.是否生成目标程序5.一遍扫描的编译程序的优点是。

A.算法清晰B.便于分工C.便于优化D.编译速度快6.编译程序不能够检查、处理的错误是程序中的。

A.静态语义错误B.动态语义错误C.语法错误D.词法错误7.开发一个编译程序应掌握。

A.源语言B.目标语言C.编译技术D.以上三项都是8.中间代码生成所依据的是语言的。

A.词法规则B.语法规则C.语义规则D.产生规则10.测试一个编译程序时使用的测试数据是。

A.源程序B.中间代码C.目标程序D.任意数据11.可以作为目标代码的语言是。

A.高级语言B.中间语言C.低级语言D.程序设计语言12.编译程序检查、处理源程序中的错误具体指的是。

A.词法错误B.语法错误C.语义错误D.以上三项都是13.同正则表达式(a | b)+等价的正则表达式是。

A.(a | b) * B.(a | b) (a | b) *C.(a b)* (a b) D.(a | b)| (a | b)*14.词法分析器的输出结果是。

A.单词自身B.单词的机内符C.单词的词义信息D.单词的词法信息15.如果一个正则表达式所代表的集合是无穷的,则它必含有运算。

A.连接运算:“·”B.或运算:“|”C.闭包运算:“*”D.括弧:“(”和“)”16.称有限自动机A1和A2等价是指。

A.A1和A2都是定义在一个字母表Σ上的有限自动机B.A1和A2状态数和有向边数相等C.A1和A2状态数或有向边数相等D.A1和A2所能识别的字符串集合相同17.DFA同NFA的不同之处是。

编译原理期末总结复习

编译原理期末总结复习

编译原理期末总结复习编译原理期末总结复习篇一:一、简答题1.什么是编译程序?答:编译程序是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序。

将高级程序设计语言程序翻译成逻辑上等价的低级语言(汇编语言,机器语言)程序的翻译程序。

2.请写出文法的形式定义?答:一个文法G抽象地表示为四元组 G=(Vn,Vt,P,S)–其中Vn表示非终结符号– Vt表示终结符号,Vn∪Vt=V(字母表),Vn∩Vt=φ– S是开始符号,–P是产生式,形如:α→β(α∈V+且至少含有一个非终结符号,β∈V*)3.语法分析阶段的功能是什么?答:在词法分析的基础上,根据语言的语法规则,将单词符号串分解成各类语法短语(例:程序、语句、表达式)。

确定整个输入串是否构成语法上正确的程序。

4.局部优化有哪些常用的技术?答:优化技术1—删除公共子表达式优化技术2—复写传播优化技术3—删除无用代码优化技术4—对程序进行代数恒等变换(降低运算强度)优化技术5—代码外提优化技术6—强度削弱优化技术7—删除归纳变量优化技术简介——对程序进行代数恒等变换(代数简化)优化技术简介——对程序进行代数恒等变换(合并已知量)5.编译过程分哪几个阶段?答:逻辑上分五个阶段:词法分析、语法分析、语义分析与中间代码生成、代码优化、目标代码生成。

每个阶段把源程序从一种表示变换成另一种表示。

6. 什么是文法?答:文法是描述语言的语法结构的形式规则。

是一种工具,它可用于严格定义句子的结构;用有穷的规则刻划无穷的集合;文法是被用来精确而无歧义地描述语言的句子的构成方式;文法描述语言的时候不考虑语言的含义。

7. 语义分析阶段的功能是什么?答:对语法分析所识别出的各类语法范畴分析其含义,进行初步的翻译(翻译成中间代码);并对静态语义进行审查。

8.代码优化须遵循哪些原则?答:等价原则:不改变运行结果有效原则:优化后时间更短,占用空间更少合算原则:应用较低的代价取得较好的优化效果9.词法分析阶段的功能是什么?答:逐个读入源程序字符并按照构词规则切分成一系列单词任务:读入源程序,输出单词符号—滤掉空格,跳过注释、换行符—追踪换行标志,指出源程序出错的行列位置—宏展开,……10.什么是符号表?答:符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。

编译原理复习资料 例题习题讲解(ch3)

编译原理复习资料 例题习题讲解(ch3)

0 S 0 V 1 1 0 U 1 Z
图2文法 G[S]的状态转换图 对符号串 100101 的识别过程经历了状态 S、V、S、U、S、U、Z,终止于终止状态 Z,所以 100101 是此文法的句子。 对符号串 100111 的识别过程经历了状态 S、V、S、U、S、V识别出 10011 后,在 状态V无法进一步识别,所以 100111 不是此文法的句子。 例 7 给出描述包含奇数个 1 或奇数个 0 个二进制数串的正规表达式: 【解】解题思路: 本题求二进制串,并且要求包含奇数个 0 或奇数个 1,由于 0 和 1 都可以在二进制串中
任何地方出现,所以本题只需要考虑一种情况,另外一种情况也可以类似求得。考虑包含奇 数个 0 的字符串:由于只关心 0 的个数的奇偶数,我们可以把二进制串分成多段来考虑,第 1 段为二进制串的开始到第 1 个 0 为止, 这一段包含 1 个 0, 并且 0 的前面有 0 个或多个 1, 对于剩下的二进制串按照每段包含两个 0 的方式去划分,即以 0 开始,以 0 结尾,中间可以 有 0 个或多个 1,如果一个二进制串被这样划分完后,剩下的部分如果全部是全 1 串(这些 全 1 串在前面划分的串之间或最后) ,则该二进制串就具有奇数个 0,所以该二进制可以这 * * * 样描述:以第 1 段(1 ) )开始,后面由全 1 串(1 )以及包含两个 0 的串(01 0)组成, * * * * * 所以包含奇数个 0 的正规表达式为:1 0(1|01 0) ,本题的解答则是:1 0(1|01 0) * * * * |0 1(0|10 1) 。 例 8 语言 L 是所有由偶数个 0 和偶数个 1 组成的句子的集合,给出定义 L 的正规文法。 【解】解题思路: 这道题可以从状态转换图着手,由于每读入 1 个“0” , “0”的个数的奇偶数就会变,每 读入 1 个“1” , “1”的个的奇偶数也会改变,因此本题可以引入 4 个状态,分别代表偶数个 “0”和“1” 、奇数个“0”和“1” 、奇数个“1”偶数个“0”和奇数个“0”偶数个“1” , 那么,能接受语言 L 的状态转换图如下图 3 所示。

编译复习题目

编译复习题目

一、是非题1.设∑为{a,b},则a,ba,{∑},Φ都是∑上的正规式。

()2.对于上下文无关文法G[S],若 S⇒αAB ⇒αβγ则A →γ一定是一条产生式规则,其中α,β,γ∈(V T∨V N)*。

()3.对于逆波兰后缀式,无论从哪头开始分析均可得到唯一正确的分解。

()4.LR(0)分析法是一种规范归约法。

()5.算符优先分析法只能用来分析算符优先文法。

()6.解释程序和编译程序一样,生成目标代码。

()7.编译程序生成的目标代码只能是机器语言。

()8.等价文法是指两个文法完全相同。

()9.正规式所确定的语言为正规集。

()10.对于字母表Σ上的任一NFA M',必存在Σ上与NFA M' 等价的DFA M。

()11.词法分析中单词符号是用上下文无关文法描述的,语法分析中语法类是用正则文法描述的。

()12.算符优先关系表不一定存在对应的优先函数。

()13.每个文法都能改写为LL(1)文法。

()14.存在这样一些语言,它们能被确定的有穷自动机识别,但不能用正规表达式表示()15.不存在正规文法能产生语言:L={a n b n|n>=1}()16.算符优先分析法每次都是对素短语进行规约。

()二、简答题1、编译过程一般分为几个阶段?各阶段的输入输出分别为什么?2、文法G为:S→aABA→aB→α|β|γ则判断G为LL(1)文法的条件是:3、文法G=({A, B, S}, {a, b, c}, P, S)其中P为:S→Ac|aBA→abB→bc该文法是二义的吗?说明理由。

4、文法G=({E}, {+, *, i, (, )}, P, E)其中P为:E→iE→E+EE→E*EE→(E)该文法是二义的吗?说明理由。

三、最左、最右推导及语法树1、令文法为E→T|E+T|E-TT→F|T*F|T/FF→(E)|i1)给出i+i*i的最左推导和最右推导;2)E=e+t=e+t*f=e+f*f=t+f*f=f+f*f……. 3)E=e+t=t+t=f+t=f+t*f=f+f*f=…….. 4)给出i+i*i的最左推导语法树。

编译原理全复习(完整版)

编译原理全复习(完整版)

1》编译程序的框架图与功能块:(1)画出编译程序的总体结构,并简述各部分的主要功能:七个部分(2)编译程序的结构分为几个阶段,各阶段的任务是什么?答编译程序总框架(1)词法分析器,又称扫描器,输入源程序,进行词法分析,输出单词符号。

(2)语法分析器,简称分析器,对单词符号串进行语法分析(根据语法规则进行推导或规约),识别出各类语法单位,最终判断输入串是否构成语法上正确的“程序”。

(3)语义分析与中间代码产生器,按照语义规则对语法分析器归约出(或推导出)的语法单位进行语义分析并把它们翻译成一定形式的中间代码。

(4)优化器,对中间代码进行优化处理。

(5)目标代码生成器,把中间代码翻译成目标程序。

(6)表格管理,登记源程序的各类信息,编译各阶段的进展状况。

(7)出错管理,把错误信息报告给用户。

编译程序的结构分为五个阶段:(1)词法分析.任务是:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称单词符号或简称符号),如基本字,标识符,常熟,算符和界符。

(2)。

语法分析,任务是:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位(语法范畴)。

(3)语义分析与中间代码产生。

任务:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。

(4)优化。

任务在于对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(省时间和空间)的目标代码。

(5)目标代码生成。

任务是:把中间代码(或优化出理之后)变换成特定机械上的低级语言代码。

2》.重要概念:a. 编译程序:是指能够把源语言程序转换成逻辑上等价的目标语言程序的一个程序。

b. 单词符号:是语言的基本组成成分,是人们理解和编写程序的基本要素,是语言中具有独立意义的最基本结构,它一般包括:基本字、标识符、常数、运算符和界符等c. 中间代码:是一种含义明确,便于处理的记号系统,它通常独立于具体的硬件。

编译程序总复习_例题共25页文档

编译程序总复习_例题共25页文档
编译程序总复习_例题
36、“不可能”这个字(法语是一个字 ),只 在愚人 的字典 中找得 到。--拿 破仑。 37、不要生气要争气,不要看破要突 破,不 要嫉妒 要欣赏 ,不要 托延要 积极, 不要心 动要行 动。 38、勤奋,机会,乐观是成功的三要 素。(注 意:传 统观念 认为勤 奋和机 会是成 功的要 素,但 是经过 统计学 和成功 人士的 分析得 出,乐 观是成 功的第 三要素 。
39、没有不老的誓言,40、对时间的价值没有没有深切认识 的人, 决不会 坚韧勤 勉。
31、只有永远躺在泥坑里的人,才不会再掉进坑里。——黑格尔 32、希望的灯一旦熄灭,生活刹那间变成了一片黑暗。——普列姆昌德 33、希望是人生的乳母。——科策布 34、形成天才的决定因素应该是勤奋。——郭沫若 35、学到很多东西的诀窍,就是一下子不要学很多。——洛克

编译原理总复习

编译原理总复习

总复习■第1章1、编译程序是一种翻译程序,它将高级语言所写的源程序翻译成等价的机器语言或者汇编语言的目标程序。

2、编译程序是计算机系统中重要的系统软件!3、解释程序与编译程序的主要区别是解释程序在执行过程中不产生目标程序。

4、编译的各个阶段。

答:整个编译过程可以分为5个阶段:词法分析,语法分析,语义分析及中间代码生成,代码优化和目标代码生成。

5、编译程序的结构框图或步骤。

6、遍(趟):是对源程序或源程序的中间结果从头到尾扫描一遍,并作有关加工处理,生成新的中间结果或目标程序的过程。

■第2章1、符号串的基本运算。

2、简单的说文法由产生式组成;产生式中的符号分为两类:终结符号和非终结符号。

3、推导(最左、最右)、句型、句子、短语、句柄4、乔姆斯基层次中:L3 ⊂ L2 ⊂ L1 ⊂ L0■第2章例题已知文法G[E]:E→T|E+T|E-TT→F|T*F|T/FF→(E)|i(1)该文法的开始符号是什么?(2)请给出该文法的终结符号集合VT和非终结符号集合VN。

(3)找出句型T+T*F+i的所有短语、直接(简单)短语、句柄。

■第3章1、词法分析程序的输出是单词符号序列。

2、DFA的三种表示形式——状态转移图、状态转换表和五元组表示(Q, ∑, f, S, Z );3、正规式向DFA的转换:(1)正规式——NFA;(转换原则见下页)(2)NFA——DFA;(3)DFA的最小化。

4、DFA向正规式的转换。

正则式向NFA转换的原则:例:构造与正则表达式R=ba(a|b)*等价的状态最少的DFA,并写出该DFA的五元组形式或状态转换表。

■第4章1、语法分析方法的各种分类;2、LL(1)分析方法。

提示:在此算法中注意First集和Follow集的求法。

并且一定要注意分析过程中步骤要完整。

(分析步骤见下页总结)例:文法:S◊a|^|(T) T◊T,S|S试判断该文法是否是LL(1)文法。

习题4:P100 4.3 4.7 4.9■LL(1)分析方法相关知识总结1、消除文法中的左递归或提取左因子;(1)简单直接左递归的消除A →βA’A →Aα| β→A’ →αA’| ε(2)将文法G:A→αβ|αγ提取左因子。

编译原理例题与习题解答

编译原理例题与习题解答

G2(S): S→AB A→aA|ε B→bBc|bc
L3={anbnambm| m,n≥0} G3(S): S→AB A→aAb|ε B→aBb|ε
20
编译原理
L4={1n 0m 1m 0n| n,m≥0} 可以看成是两部分: 中间部分是 0m 1m : A→ 0A1 | ε 剩下两边的部分就是: S→ 1S0 | A 所以G4[S]可以写为: S→ 1S0 | A A→ 0A1 |ε
S i S e S i S S
i
S
i
i
i
S e S
i i
结论:因为该文法存在句子iiiei对应两棵 不同的语法树,因而该文法是二义的。
编译原理
18
10. 把下面文法改写成无二义性的文法 S->SS | (S) | ( )
解答: S-> TS | T T->(S) | ( )
编译原理
19
11、给出下面语言的相应文法 L2={aibncn| n≥1,i≥0}
编译原理
21
例题与习题解答
第三章
22
非确定有限自动机状态图的改造
1. 假定NFA M=<S, , , S0, F>,我们对M的 状态转换图进行以下改造:
1) 引进新的初态结点X和终态结点Y,X,YS, 从X到S0中任意状态结点连一条箭弧, 从F 中任意状态结点连一条箭弧到Y。
2) 对M的状态转换图进一步施行替换,其中k是 新引入的状态。
法G是一个四元式G=(VT,VN,S,P),其中
VT:终结符集合(非空)
VN:非终结符集合(非空),且VT VN=
S:文法的开始符号,SVN
P:产生式集合(有限),每个产生式形式为

(完整版)编译技术复习题答案

(完整版)编译技术复习题答案

第一章:编译系统概述一.单选题1.编译程序前三个阶段完成的工作是( C )。

A.词法分析、语法分析和代码优化B.代码生成、代码优化和词法分析C.词法分析、语法分析、语义分析和中间代码生成D.词法分析、语法分析和代码优化2.编译程序绝大多数时间花在(D )上。

A.出错处理B.词法分析C.目标代码生成D.表格管理3.编译程序是对(C )。

A.汇编程序的翻译B.高级语言程序的解释执行C.高级语言的翻译D.机器语言的执行4.在使用高级语言编程时,首先可通过编译程序发现源程序的全部( A )错误。

A.语法B.语义C.语用D.运行二.填空题1.编译程序首先要识别出源程序中每个( 单词),然后再分析每个( 句子)并翻译其意义。

2.通常把编译过程分为分析前端与后端两大阶段。

词法、语法和语义分析是对源程序的( 分析),中间代码生成、代码优化与目标代码的生成则是对源程序的(综合)。

3.对编译程序而言,输入数据是( 源程序),输出结果是( 目标程序)。

4.对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、代码生成)报告的。

(1)else 没有匹配的if (语法分析)(2)数组下标越界(语义分析)(3)使用的函数没有定义(语法分析)(4)在数中出现非数字字符(词法分析)5.如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:(编译阶段)和(运行阶段)。

如果编译程序生成的目标程序是汇编语言程序,则源程序的执行方式分成三个阶段:(编译阶段)(汇编阶段)和(运行阶段)。

6.编译程序在其工作过程使用最多的数据结构是(表),它记录着源程序中各种信息,以便查询或修改,在这些(表)中,尤以(符号表)最重要,它的生存期最长,使用也最频繁。

三.简述题:1.编译程序的工作分为那几个阶段?答:词法分析、语法分析和语义分析是对源程序进行的分析(称为编译程序的前端),而中间代码生成、代码优化和代码生成三个阶段合称为对源程序进行综合(称为编译程序的后端),它们从源程序的中间表示建立起和源程序等价的目标程序。

编译复习题库

编译复习题库

编译复习题库二、词法分析(25分)1、对于正规式1*(01*)*,构造等价的NFA2、对正规式((a∣b) *∣ab*)b ,构造与其相应的状态转换图。

3、对于正规式 1(0|1)*,构造等价的NFA4、对正规式(a∣ab)*ab*,构造与其相应的状态转换图。

5、对于字母表Σ={a,d }上正规式a(a|d)*,构造等价的NFA (|)*,构造等价的NFA6、对于正规式10110167、对于如下的状态转换矩阵画出相应的状态转换图8、已知NFA M如下图所示。

用子集法构造等价的DFA M’,并最小化。

(要求给出详细过程,状态转换表,状态转换矩阵以及状态转换图)9、已知NFA M如下图所示。

用子集法构造等价的DFA M’,并最小化。

(要求给出详细过程,状态转换表,状态转换矩阵以及状态转换图)10、已知NFA M如下图所示。

用子集法构造等价的DFA M’,并最小化。

(要求给出详细过程,状态转换表,状态转换矩阵以及状态转换图)11、将如图所示的NFA确定化。

12、将如图所示的具有ε动作的NFA确定化。

13、将如图所示的NFA确定化。

14.将如图所示的DFA最小化。

15.将如图所示的DFA最小化。

五、中间代码题(15分)给定下列语句,分别写出其等价的语法树表示、逆波兰表示、四元式序列、三元式序列。

1、a+b*(c-d)/(e+f)2、f×(e+(a×d+c)/d)3、a*(b-c)+(b*c-d)/e4、-a+b*(-c+d)5、(a*b+c)*2/c6、a+b*(c+d/e)7、-(a+b)*(c+d)-(a+b*c)8、X:=A-B/(C+D)9、(a*b+c) / 210、A:=B*(-C+D)三、语法分析题综合题1、给定文法G[S],S →L.L|LL →LB|BB→0|1[1]改写文法为LL(1)文法。

[2]求改写后文法每个非终结符的First,Follow集。

[3]构造改写后文法的预测分析表。

编译原理总复习

编译原理总复习

编译原理试题整理考试题型:简答(4道)、计算(4道)、综合(3道)一、简答题:1、什么是编译程序?其分为几个阶段?编译程序:也称为编译器,能够直接将高级语言程序翻译为对应的低级语言程序。

编译程序通常分为:词法分析、语法分析、语义分析与中间代码生成、代码优化、目标代码生成5个阶段。

2、文法的形式定义是什么? 文法的形式定义为G=(N V ,T V ,P ,S ),其中N V 为非终结符集,T V 是终结符集, P 是产生式集合,S 是开始符号3、什么是上下文无关文法?若在文法的定义中限定文法的产生式左部只有一个非终结符,则该文法称为上下文无关文法。

4、什么是文法的语言?从文法G 的开始符号S 出发,所能推导出的句子的全体称为文法G 产生的语言。

5、文法的分类?乔姆斯基把文法分为0型文法(短语文法)、1型文法(上下文有关文法)、2型文法(上下文无关文法)、3型文法(正规文法)四类。

这几类的差别在于对产生式施加不同的限制。

6、词法分析的功能?1)按规则识别单词,输出单词本身及其类别码;(主要任务) 2)滤掉程序中的无用成分;3)调用出错处理程序,识别并定位错误;4)调用符号管理程序,将识别出来的单词及其属性进行管理。

7、什么是符号表?有何作用?符号表:是一种用于保存源程序中出现的标识符和常数的各种信息的数据结构。

作用:编译器在分析阶段收集信息放入符号表中,在综合阶段生成目标代码时使用符号表中的信息。

8、什么是正规文法?若文法G=(N V ,T V ,P ,S )中的每个产生式P 的形式都是A →aB 或A →a ,其中A 、B ∈N V ,a ∈*T V ,则G 是正规文法。

9、语义分析的主要任务?1)对语法分析所识别出的各类语法短语进行静态语义审查;2)若无语义错误,再根据识别出的语法单位的类型进行处理,若是说明语句,则将变量的类型等属性填入符号表,若是可执行语句,则进行初步的翻译,将其翻译为中间代码。

编译原理期末复习

编译原理期末复习

编译原理期末复习鉴于编译原理马上就要期末考试,我将手中集中的一些资料上的题目进行了整理归类,每种类型题目给出了所涉及到的基本知识,然后对每类题目中的第一道例题进行了做法进行了讲解,剩下的例题请给大家作为练习,答案也都给出,希望对大家复习有所帮助,最后由于时间很紧,整理的有些仓促,整理中难免有遗漏或错误,请大家见谅;注:下面出现的字母中,若无特别说明,小写英文字母为终结符,大写英文字母为非终结符,希腊字母为终结符与非终结符的任意组合;1、简答题或者名词解释下面涉及到的概念中,加下划线的都是在以往一些试卷中出现的原题,务必掌握;注:这类题目老师说答案不会超过一百个字,否则写的再多也不给分,有些点到即可,不要重复啰嗦;1简述编译程序的概念及其构成答:1编译程序:它特指把某种高级程序设计语言翻译成等价的低级程序设计语言的翻译程序;2构成:2简述词法分析阶段的主要任务也有可能问语法分析阶段主要任务答:词法分析的任务是输入源程序,对源程序进行扫描,识别其中的单词符号,把字符串形式的源程序转换成单词符号形式的源程序;语法分析的主要任务是对输入的单词符号进行语法分析根据语法规则进行推导或者归约,识别各类语法单位,判断输入是不是语法上正确的程序3 简述编译程序的构造过程这个大家看看,是对1和2的综合答:1构造词法分析器:用于输入源程序进行词法分析,输出单词符号;2构造语法分析器:对输入的单词符号进行语法分析,识别各类语法单位,判断输入是不是语法上正确的程序3构造语义分析和中间代码产生器:按照语义规则对已归约出的语法单位进行语义分析并把它们翻译成中间代码;4构造优化器:对中间代码进行优化;5 构造目标代码生成器:把中间的代码翻译成目标程序;6 构造表格管理程序:登记源程序的各类信息和编译各阶段的进展情况;7构造错误处理程序:对出错进行处理;4 说明编译和解释的区别:1编译要程序产生目标程序,解释程序是边解释边执行,不产生目标程序; 2编译程序运行效率高而解释程序便于人机对话;5 文法:描述语言语法结构的形式规则,一般用一个四元式表示: G=VT ,VN,S,P,其中VT :终结符集合非空 VN:非终结符集合非空,且VTVN= S:文法的开始符号,SVNP:产生式集合有限;6二义性文法:一个文法中存某个句子,它有两个不同的最左或者最右推导,则称该文法是二义性的;例子如文法G :S →if expr then S |otherS →if expr then S else S 句子if e1 then if e2 then s1else s2是二义性的;7文法的形式注:文法的形式一定要牢记,特别是2型和3型文法一定要牢记,不仅在概念题中有用,在下面的根据语言写文法题中也有重要作用,如果所写的文法形式不对,一切都是无用功……10型文法短语文法,图灵机:产生式形式为: ,其中: V T V N 且至少含有一个非终结符; V T V N21型上下文有关文法,线性界限自动机:产生式形式为: 其中:|| ||,仅 S 例外但是S 不得出现在任何产生式右部;32型文法上下文无关文法,非确定下推自动机:产生式形式为:P, PV N , V T V N ; 43型文法正规文法,有限自动机:右线性文法:产生式形如:A B 或 A 其中: V T ;A,BV N 左线性文法:产生式形如:A B 或 A 其中: V T ;A,BV N例题:设G=V T ,V N ,S,P 是一个上下文无关文法,产生集合P 中的任一个产生式应具有什么样的形式若G 是1型文法呢若G 是正则文法呢 上下文无关文法, 产生式形式为:P, PV N , V T V N ; 1型文法:产生式形式为: 其中:|| ||,仅 S 例外;正则文法:右线性文法:产生式形如:A B 或 A 其中: V T ;A,BV N左线性文法:产生式形如:A B 或 A 其中: V T ;A,BV N 8什么是PDA 下推自动机答:PDA 是下推自动机,PDA M 用一个七元组表示K,Σ,f,H,h0,S,Z K: 有穷状态集 :输入字母表有穷 H:下推栈符号的有穷字母表h0 :H中的初始符号f: K Σ{} H –> K H S:属于K是初始状态;Z:包含于K,是终结状态集合;9 什么是DFA有穷状态自动机, F,其中:自动机M是一个五元式M=S, , f, S1S: 有穷状态集, 2 :输入字母表有穷,3 f: 状态转换函数,为SS的单值部分映射,fs,a=s’表示:当现行状态为s,输入字符为a时,将状态转换到下一状态s’;我们把s’称为s的一个后继状态;S是唯一的一个初态; 5 FS :终态集可空;4 S10推导:所谓推导就是对于一个含非终结符A的符号串,利用规则A→α,把A替换成α得到新符号串的过程;最左推导:在推导的每一步,选择符号串最左边的非终结符进行替换;最右推导:在推导的每一步,选择符号串最右边的非终结符进行替换;11归约:归约是推倒的逆过程,即用产生式的左部非终结符替换右部符号串;12什么是句型什么称为句子什么是语言句型:从文法的起始符号出发,经过有限步的推导能够推导出来的符号称为句子;句子:只由终结符构成的句型称为句子;语言:所有句子的集合构成该文法描述的语言;13什么是短语什么是直接短语也称为简单短语什么是句柄什么是素短语什么是最左素短语以下几个概念一定要理解,考试中肯定会考哪些是短语,直接短语,句柄等,具体方法请参见后面的短语:如果存在某个文法非终结符P,满足S*⇒βPγ,并且P+⇒α则称α为句型βαγ相对于非终结符P的短语;直接短语:如果Pα,即从P出发一步推出α,则α称为直接短语;句柄:一个句型的最左直接短语称为该句型的句柄;素短语:至少含有一个终结符的短语,并且除了自身外,不包含更小的素短语;最左素短语:句型中最左边的素短语;14自顶向下的语法分析方法中需要解决的主要问题什么如何表示答:1主要需要解决回溯和左递归问题;2表示方式,回溯:文法中存在形如A→α1|α2|…|αn,即产生式右部存在多个候选,导致推导时不能确定到底应该选择哪个候选式;左递归:文法中存在形如P→Pα的形式,推导时会导致推导过程无休止的进行下去;注:解决方法,对回溯采取的是提取左公因子,对左递归使消除左递归包括直接左递归和间接左递归;15内情向量:一般编译程序对数组说明的处理是把数组的有关信息汇集在一个叫做“内情向量”或“信息向量”的表格中,以便以后计算数组元素的地址时引用这些信息;每个数组有一个内情向量;其中的信息包括,数组的类型,维数,各维的上、下界,以及数组的首地址;(16) C语言的活动记录:SP TOP2、最左最右推导,画语法树,找短语、直接短语、句柄等;这种题目很简单,送分题,一定不能丢分考题:1文法GS为:S→SdT | T T→T<G | G G→S | a试给出句型SdG<a的推导过程及语法树,并找出SdG<a的短语,直接简单短语、句柄和最左素短语;分析:1推导和画语法树这些都很简单,不再赘述;2根据所画出的语法树,可以很快的找出短语,直接短语,句柄和最左素短语等,先讲一个简单子树的概念,所谓简单子树是指仅具有单层分支的子树;具体方法如下:短语:任一子树的树叶全体具有共同祖先的叶节点符号串皆为短语;直接短语:任一简单子树的树叶全体具有共同父亲的叶节点符号串皆为简单短语;句柄:最左边的直接短语;素短语:至少含有一个终结符的短语,并且除了自身外,不包含更小的素短语;最左素短语:最左边的素短语;答:1S T T<G G<G S<GSdT<G SdG<GSdG<a语法树:2短语:G,SdG, SdG, a, SdG<a 直接短语:G,a 句柄:G 最左素短:a 注:还有一份试卷将句型改为adT<S,与这个类似,大家自己做做,答案是短语:a,S,T<S,adT<S 直接短语:a,S 句柄:a 最左素短语:SdG下面两道例题大家看看,一定要会找短语,直接短语,句柄等.考题:2文法GE的产生式为E→E+T|T T→TF|F F→i|E①对于句型i+ii,给出最左最右推导及相应的推导树②列出句型的所有短语、简单短语;还有一份试卷上是出句型F+TF的所有短语、简单短语和句柄,大家自己做做答:1最左推导:E TTFFFEFE+TFT+TFF+TFi+TFi+FFi+iFi+ii最右推导ETTFTiFiEiE+TiE+FiE+iiT+iiF+iii+ii推导树如下:2短语;i,i+i,i+i,i+ii 直接短语:i 句柄:i3、根据语言推文法这类题目首先要看清题目,指定的是什么文法,一般都是2型上下无关文法或者3型正规文法,这两类文法形式一定要记住,具体请参见第2页的文法分类;掌握几个基本形式{a n| n>0}对应文法S→aS| a 如果是n>=0则为S→a S|εε是空字{a n b n | n>0}对应文法S→aSb| ab下面这四道题目老是在试卷中重复出现,所以大家好好看看;考题这是书P36 第11题的答案如下:大家作为练习,可以发现比上述题目简单的多了;或者 G4:4、词法分析———正规式、NFA 和DFA 之间的转化:1这类题目一般是三者之间的转换,正规式→NFA →确定化的DFA→最小化的DFA,有时已经给出NFA 了,则只需要确定化为DFA 和最小化就行了,一般每一步都是五分;具体怎么转换请参照我期中考试时整理的提纲,主要就是下面这幅关系对照图,因时间和篇幅限制不再追溯; 2注意优先级关系,闭包运算最高,连接运算.次之,或运算|最低; 3考题1:1构造正则式ab|abb 对应的DFA;15分 ①画出NFA ②确定化DFAG1: S →ACG2: S →ABG3: S →AB A →aAb|εG4:S →1S0|A注:C和E是终态③最小化DFA首先将集合分为{A,B,D,F,G},{C,E};{A,B,D,G}都有a,b作为条件输出,F只有b输出,所以分为{A,B,D,G}和{F} 同理{C,E}分为{C},{E};{A,B,D}a ={B,D} {G}a={F}所以{A,B,D,G}分为{A,B,D}和{G};{A}b ={C} {B,D}a={D}所以分为{A} {B,D}综上所述:划分的结果为{A},{B,D},{C},{E},{G}.考题2:将NFA确定化为DFA10分NFA:含有Y的状态子集为DFA的终态,题目中要求是确定化,{F},{D},{E}然后再画出最小化后的考题3:构造奇数个0和奇数个1组成的自动机;10分状态1:偶数个0 偶数个1 状态2:奇数个0偶数个1状态3:奇数个0 奇数个1 状态4:偶数个0奇数个1如果题目改成偶数个0,奇数个1,只要将状态4转换成终态即可,其他类似;5、语法分析——自顶向下分析法LL1分析法和递归向下构造子程序法注:自顶向下分析法本质是由开始符号,按照产生式逐步推导看能否产生需要分析的句子;1自顶向下分析中存在的问题左递归和回溯具体请参见简答题中的第14题 2消除回溯——提取公因子法提取公共左因子:假定关于A 的规则 A→ 1 | 2 | …| n | 1 | 2 | … | m 其中,每个 不以开头 那么,可以把这些规则改写成A→A | 1 | 2 | … | mA→ 1 | 2 | … | n3消除左递归1消除直接左递归:直接消除见诸于产生式中的左递归:假定关于非终结符P 的规则为P→P | ,其中不以P 开头; 我们可以把P 的规则等价地改写为如下的非直接左递归形式:P→P P→P|注:一般而言,假定P 关于的全部产生式是P→P 1 | P 2 | … | P m | 1 | 2|…|n 其中,每个都不等于,每个都不以P 开头 那么,消除P 的直接左递归性就是把这些规则改写成: P→1P | 2P | … | n P P→1P | 2P |… | m P | 例:文法GE:E→E +T | T T→TF | F F→E | i 经消去直接左递归后变成:E→TE E→+TE | T→FT T →FT | F→E | i2消除间接左递归这个请参见我期中整理的提纲篇幅较多,这里不再重复赘述,请参照下面的考题2;考题1:将文法GS改写为等价的G’S,使得G’S不含左递归和左公因子;S→A A→B|AS B→aB|a答:消除左递归和左公因子后的文法为:S→A A→ BA’A’ → S A’| B→aB’B’ →B|考题2:写出文法GA: A→Ba|Cb|c B→dA|Ae|f C→Bg|h消除左递归后的文法;答:1经分析发现文法GA并无直接左递归;2消除间接左递归:将A,B,C按照B,C,A排序建议将A放在最后由于出现C →Bg形式,将B代入C得:C→dAg|Aeg|fg|h又由于A出现A→Ba A→Cb将B,C带入A得到:A→dAa|Aea|fa|dAgb|Aegb|fgb|hb|c等价于A→Aea|Aegb |dAa|fa|dAgb |fgb|hb|c将A消除直接左递归A→dAaA’|fa A’|dAgb A’ |fgb A’|hb A’|c A’A’→ea A’| egb A’|此时,对于B→dA|Ae|f,C→dAg|Aeg|fg|h由于未在任何产生式的右部出现,所以是多余的;综上所述:消除递归后的文法为:A→dAaA’|fa A’|dAgb A’ |fgb A’|hb A’|c A’A’→ea A’| egb A’|4LL1分析法1含义:LL1分析方法也叫预测分析法:是指从左到右扫描、最左推导LL和只查看一个当前符号括号中的 1;2判断一个文法是否是LL1文法的充要条件:1. 文法不含左递归,2. 对于文法中每一个非终结符A的各个产生式的候选首符集两两不相交;即,若A→ 1| 2|…| n则FIRST i∩FIRST j=ij3. 对文法中的每个非终结符A,若它存在某个候选首符集包含,则FIRSTi∩FOLLOWA= i=1,2,...,n如果一个文法G满足以上条件,则称该文法G为LL1文法;5LL1文法分析表的构造与运用这类题目,主要就是判断文法是否满足LL1文法的三个充要条件,分为以下几步:1首先将文法分解,判断是否有左递归好,有的话肯定不是LL1文法;2算非终结符的First集合和Follow集合,具体方法请参见期中考试的提纲,其实最本质的要抓住first集合是U*a…,Follow集合石…Ua…即可;3算Select集合,书上没有提到Select集合,计算Select集合实质就是计算First,当然考试时不一定非要写成Select集合形式,可以直接计算First来判断交集是否为空,从而是否为LL1文法,请看考题1;4至于判断一个句子的分析过程,大家注意一下,所给的句子不一定是能通过该文法分析出来的,实际上在分析之前可以自己根据文法推推看,请看考题1.5分析表中没有填的空格代表出错,如果分析时遇到了代表该句子不符合该文法; 考题1:判断下面文法是否为LL1文法,若是,请构造相应的LL1分析表并分析句子aabe的分析过程;15分S→aD D→STe|εT→bM M→bH H→M|ε分析:判断一个文法是否为LL1文法是否为LL1文法,主要就是判断是否满足LL1文法的充要条件,有一个不满足就不是LL1文法;对于aabe根据文法SaDaSTeaaDTeaaTeaabMe由于M不能为空字ε,所以最后肯定推不出来,也就是该句子不能由该文法推出,出错;当然一般题目都是LL1文法,否则题目就不好往下做,没有意义;答:1经分析该文法无左递归;2①非终结符的First和Follow集合如下表所示②将文法分解为:S→aD D→Ste D→ε T→bM M→bH H→M H→ε依次计算:FirstaD={a} FirstSte={a}FollowD={ b} FirstbM={b}FirstbH={b} FirstM={b} FollowH={ e }∵FirstSte∩FollowD=ФFirstM∩FollowH=Ф∴该文法是LL1文法LL1分析表如下:3aabe的分析过程如下:考题2:判断下面文法是不是LL1文法,若是请构造相应的LL1分析表,写出aaabd 的分析过程;S→aH H→aMd|d M→Ab|A→aM|e答:1可以判断该文法无左递归;2将文法分解为分解:S→aH H→aMd H→d M→Ab M→A→aM A→e 求First和Follow集合求Select集合SelectS→aH=FirstaH={a} SelectH→aMd=FirstaMd={a}SelectH→d={d} SelectM→Ab=FirstAb={a,e}SelectM→=FirstUFollowM= FollowM={d,b}Select A→aM=First{aM}={a} Select A→e=Firste={e}∵SelectH→aMd ∩SelectH→d= ФSelectM→Ab ∩SelectM→e=ФSelectA→aM ∩SelectA→e= Ф∴该文法是LL1文法;3LL1分析表如下:aaabd的分析过程如下:考题3:构造LL1分析方法的总控流程图6、构造递归下降识别程序这类题目首先看文法有无左递归和左公因子,有的话一定要消除,我期中给大家的答案错了,考题1为更正后的答案;考题1:为文法GE:E → V | V+E V → N | NE N → i构造递归下降识别程序10分解:1提取左公因子:E→VE’E’ →+E|V →NV’V’→E|N → i(3)构造递归下降识别程序PROCEDURE E;BEGINV; E’END; PROCEDURE E’;IF SYM=‘+’ THENBEGINADVANCE;EENDPROCEDURE V;BEGINEND;PROCEDURE F;IF SYM=‘’ THEN BEGINADVANCE; E;IF SYM=‘’PROCEDURE N;IF SYM=‘i’ THENADVANCEELSE ERROR;THENADVANCEELSE ERRORENDELSE ERROR;考题2:为文法GE:E→E+T|T T→TF|F F→E|i构造递归下降识别程序解:1消除左递归:E→TE E→+TE | T→FT T→FT | F→E | i 2构造递归下降识别程序PROCEDURE E;BEGINT;E END;PROCEDURE T;BEGINF;TENDPROCEDURE F;IF SYM=‘i’ THENADVANCEELSEIF SYM=‘’ THENBEGINADVANCE;E;IFSYM=‘’ THENADVANCEELSE ERRORENDELSE ERROR;PROCEDURE E;IF SYM=‘+’ THENBEGINADVANCE; T;EEND PROCEDURE T;IF SYM=‘’ THENBEGINADVANCE; F;TEND7、自底向上分析法——LR0分析法注:自底向上分析法本质是从输入串开始,逐步进行“归约”,直到文法的开始符号,其关键问题是寻找句柄;自底向上分析法还有算符优先分析法,SLR1,LR1等等,老师那天重点讲了一道LR0分析法的题目,他说算符优先分析法A卷不考,但是补考的B卷会考,按照他的意思,这次期末考试LR0是考定的了,SLR1,LR1应该不考,因为LR0分析法个人感觉也是所有题目中最繁的了,下面已老师讲的题目为例这,也是一份试卷上的考题,首先介绍一些相关知识;(1)LR0项目:通俗点讲,文法G中的任何一个产生式的右部的任何位置添加一个圆点就成了LR0项目,比如A→Ab是产生式,则A→Ab A→Ab A→Ab都是该产生式对应的全部项目;项目动态的表示归约的一个阶段:对于项目A→A b,可以这样理解它:“”之前的A表示的是在识别Ab过程中已输入到栈终的部分;“”之后的表示在识别Ab过程中期望出现的部分;“”表示则是在识别Ab过程中当前的识别进度的定位;项目A→Ab 已经具备了识别Ab的一切条件,因此被称为归约项目;项目可以分为以下四类:P→αaβ称为移进项目其中, P→αXβ称为待约项目,其中X为非终结符,P→α称为归约项目,S’→S称为接收项目2LR0的分析栈可以看成两部分状态栈LR分析器的核心是一张分析表:ACTIONs,a:当状态s面临输入符号a时,应采取什么动作.GOTOs,X:状态s面对文法符号X时,下一状态是什么. 下面几张PPT大家看看,对基本概念有个印象:这一章的概念较多较抽象,我一时半会也讲不完讲不清楚,这里不再赘述,直接看题目,知道怎么做就行,下面以一道考题这也是老师讲的原题为例讲解如何做这类题目,首先一般这种题目分三步走:1拓广文法:假定文法G是一个以S为开始符号的文法,我们构造一个G,它包含了整个G,但它引进了一个不出现在G中的非终结符S,并加进一个新产生式S→S,而这个S是G的开始符号;那么,我们称G是G的拓广文法;这样,便会有一个仅含项目S→S.的状态,这就是唯一的“接受”态;2构造识别文法活前缀的DFA:对于任意的项目即I,其闭包CLOSUREI计算方法如下,I中的所有项目都属于CLOSUREI;如果P→αXβ,并且X为非终结符,则所有形如X→γ的项目也属于ClOSUREI定义函数GOI,X,其中I是项目集,X是任意的文法符号终结符,非终结符都可以,GOI,X=CLOSUREJ.J是从I中项目出发后读取X后到达的后继项目,即J={P→αXβ| P→αXβ∈I}有了上述CLOSURE和GO的定以后,从CLOSURE{S→S}出发,利用GO函数,产生出它在每个可能的文法符号下,要转移的项目集,再对新产生的项目集采取同样的方法直到没有新产生的项目集未被处理为止;(4) 根据计算出的项目集之间的关系画出DFA 和LR0分析表,其中LR0构造方法如下:(5) 对具体的句子运用LR0分析的方法如下: 每一项ACTIONs,a 所规定的四种动作:1. 移进 把s,a 的下一状态s’和输入符号a 推进栈,下一输入符号变成现行输入符号.2. 归约 指用某产生式A →β进行归约. 假若β的长度为r, 归约动作是, 去除栈顶r 个项,使状态s m-r 变成栈顶状态,然后把s m-r, A 的下一状态s’=GOTOs m-r, A 和文法符号A 推进栈.3. 接受即acc 宣布分析成功,停止分析器工作.4. 报错 考题:构造文法GE 的LR0分析表,并给出accd 的分析过程; 0S→E1E →aA 2E →bB 3A →cA 4 A →d 5B →cB 6B →d分析:题中已经进行了推广文法,所以第一步就不需要了,下面就是开始构造识别活前缀的DFA,然后构造出LR0分析表,最后在进行分析,实际上对于accd 我们自己可以先推一下,EaAacAaccAaccd 所以该句子符合文法,那么最终构造出的LR0分析表对该句子进行分析后必定得到“acc ”接受的意思,否则构造的LR0分析表出错; 答:1构造识别活前缀的DFA:I 0=Closure{S→E }={ S→E , E→aA, E→bB } I1=GOI0,E=Closure{S→E }={ S→E }I 2=GOI 0,a=Closure{ E→aA }={ E→aA ,A→cA ,A→d } I 3=GOI 0,b=Closure{ E→bB }={E →bB, B→cB ,B→d }为了方便,下面计算中的Closure 不再写了,直接给出答案,考试时可以不写,当然计算I 0是必须要的I 4=GOI 2,A={ E→aA} I 5=GOI 2,c={ A→cA ,A→cA ,A→d } I 6= GOI 2,d={ A→d} I 7=GOI 3,B ={ E→bB}I 8= GOI 3,c= { B→cB ,B→cB ,B→d } I 9= GOI 3,d={ B→d} I 10= GOI 5,A ={ A→cA } GOI 5,c=I 5 GO=I 6 I 11= GOI 8,B { B→cB } GOI 8,c=I 8 GO=I 9 画出DFA:注:实际上构造LR0分析表时这个图没有必要画,根据上述计算结果即可填写下表; 2画出LR0分析表注:至于怎么填这个表请参见上一页中的PPT,这里不再赘述,Action 表中si 代表跳转到第i 个状态,ri 代表选择文法中第i 条规则进行归约,acc 代表接受,即分析成功;Goto 表中数字i 代表跳转到第i 个状态; (3)对accd 进行分析逆波兰式和四元式是三地址代码的两种记录表现形式,当然表示形式还有三元式、间接三元式等等,根据老师的意思应该不考,四元式和逆波兰式必考;1逆波兰表达式逆波兰表达式即后缀表达式,就是中缀表达式也就是我们一般看到的表达式形式对应的后续遍历结果,这个方法有很多,个人认为搞清楚运算优先级,观察一下就可写出,先算谁就将其对应的操作数写出,运算符放在后面就行很简单:例如:写出下列各式的逆波兰表示1 -a-bc/c-d + -ba2 -A+BC↑ D/E/F解: 1 abccd-/ba+ - 2 ABCDE/↑F/+注:代表负号“-”2四元式四元式形式如下op,arg1,arg2,Result从左至右分别代表运算符,第一操作数,第二操作数,运算结果;如:A + B C - D + E / C - D ^N 对应的四元式序列如下:四元式 : 1 - ,C ,D,T1 2 ,B,T1,T23 + ,A,T2,T34 - ,C,D,T45 ^ ,T4,N,T56 / ,E ,T5,T67 + ,T3 ,T6 ,T7注:T1,T2等等位存放结果的临时变量;条件语句等四元式的表示jnz , a ,-- , p 表示 if a goto pjrop, x , y, p 表示 if x rop y goto prop代表关系运算符,如<,>等等j , --, --- , p 表示 goto p例如:写出条件语句 IF a>0 THEN x:=x+1 ELSE x:=4 x- 1 四元式序列解:1 j > , a ,0 ,32 j , -, -,63+,x , 1 , T14 := , T1,-, T25j ,-, -,96 -, x,1, T37 , 4 ,T3 ,T48 := , T4 ,-,x9注意:5和9不能写丢,否则一分没有上述四元式中第二第三个位置的“-”代表没有元素;其实四元式就是对上述程序进行解释,如果满足则跳转到哪里执行,不满足则跳转到哪里执行,大家自己分析一下,应该能够看懂;考题:根据要求写出下列表达式的中间形式;15+6a+b写出表达式的逆波兰式逆波兰表达式为:56ab++2注意:同上题,本题答案加红色的部分此外上述编号随意,从0开始也行从100开始也行;不能丢,否则一分没有9、参数传递这种题目很简单,是送分题,一定要做对参数传递方式分为三种,值传递,地址传递和传名;值传递过程中形参值的改变不会影响实参值的改变,地址传递形参值的改变导致对应是实参值的改变,传名传递类似于C语言中的宏展开,将实参原封不动的替换相应的形参文字替换;请看下题:(1)高级语言程序中常用的参数传递方式有哪些请根据这些传递方式写出程序的运行结果;static int a=1;int pint x,int y,int z {y=y+1;z=z+x;cout<<"In P "<<a<<endl; } int main{int a=2;int b=3;pa,a,a;cout<<"In main "<<a<<endl; return 0;}分析:函数p中输出地a的值是全局变量a的值,与主函数中的局部变量a无关,不要被迷惑住,所以p中输出的a就是1.传值时,由于实参值不受影响,所以a仍为2;传地址时,在函数P中,将实参代入后a=a+1得a=3;再由a=a+a得到a=6;传名时,直接将实参带入形参,原来程序被替换为:a=a+1;a=a+a;将a=2代入得到结果为6.答:①C语言中函数传递的方式有1传值 2传地址 3传名②运行结果:1传值方式:In P 1In main 2 2传地址:In P 1In main 63传名: In P 1In main 62Procedure p x,y,z ; beginy:=y+1;z:=z+x;end; {p} begina:=2;b:=3;pa+b , a , a print a end.传值传递时输出结果为: 2 实参值不受影响,a=2传地址传递时输出结果为:8 a=2+1=3;a=3+5=8传名传递时输出结果为:9 a=a+1;a=a+a+b;得到a=2+1=3;a=3+3+3=910、程序分块、画DAG图这个也比较简单,具体方法如下:(1)分块就是将程序分成一块块的,主要就是确定每一块的入口语句:1寻找入口语句的方法:满足以下条件之一的都是入口语句a程序的第一条语句;b条件转移语句或无条件转移语句可以转移到的语句c紧跟在条件转移语句后面的语句2对每一入口语句,构造其所属的基本块;它是由该语句到下一入口语句不包括下一入口语句,或到一转移语句包括该转移语句,或到一停语句包括该停语句之间的语句序列组成的;3凡未被纳入某一基本块的语句,都是程序中控制流程无法到达的语句,因而也是不会被执行到的语句,我们可以把它们删除;根据基本块画DAG图上述图中的DAG只给出了最后完整的结果,老师要求在考试中需要把每一步都体现出来,具体请参见书上284页,因为篇幅限制所以不再赘述;另外,根据老师的意思可能会将DAG和四元式结合在一起考,给一段程序,先写出其四元式然后在画出其DAG图,四元式与DAG对应关系如下:根据下面的对应关系,DAG图很容易画出来;。

编译原理例题与习题解答

编译原理例题与习题解答

最右推导 E T T*F T*(E) T*(E+T) T*(E+F)
T*(E+i) T*(T+i) T*(F+i) T*(i+i) F*(i+i) i*(i+i)
• 8. 令文法为
E → T|E+T|E-T T → F|T*F|T/F
F → (E)|i
(2) 给出 i+i+i、i+i*i和i-i-i的语法树。 注意:树枝和符号均不可随意增减!
例题与习题解答
第二章
1
回顾
• 程序语言的定义
–一个程序语言是一个记号系统,它主要由以下 方面定义:
• 语法 • 语义
每个句子构成的规律 研究语言
每个句子的含义
语法 语义
2
回顾
语法={词法规则+语法规则}
• 词法规则:单词符号的形成规则。
–单词符号是语言中具有独立意义的最基本结构 。一般包括:常数、标识符、基本字、算符、 界符等。
4
回顾
• 上下文无关文法的定义:一个上下文无关文 法G是一个四元式G=(VT,VN,S,P),其中
–VT:终结符集合(非空) –VN:非终结符集合(非空),且VT VN= –S:文法的开始符号,SVN –P:产生式集合(有限),每个产生式形式为
P, PVN, (VT VN)*
–开始符S至少必须在某个产生式的左部出现一次。
首先:找到此文法对应的一个句子 iiiei 其次:构造与之对应的两棵语法树
S
S
i SeS
iS
iS
i
i S eS
i
ii
结论:因为该文法存在句子iiiei对应两棵 不同的语18 法树,因而该文法是二义的。

编译原理复习题

编译原理复习题

编译原理复习题⼀、单项选择题概述部分1.构造编译程序应掌握。

D A. 源程序 B. ⽬标语⾔ C. 编译⽅法 D. 以上三项都是 2.编译程序绝⼤多数时间花在上。

DA. 出错处理B. 词法分析C. ⽬标代码⽣成D. 表格管理 3.编译程序是对。

DA. 汇编程序的翻译B. ⾼级语⾔程序的解释执⾏C. 机器语⾔的执⾏D. ⾼级语⾔的翻译 4. 将编译程序分成若⼲“遍”,是为了。

BA. 提⾼程序的执⾏效率B. 使程序的结构更为清晰 C 利⽤有限的机器内存并提⾼机器的执⾏效率 D. 利⽤有限的机器内存但降低了机器的执⾏效率词法分析部分1.DFA M(见图1-1)接受的字集为。

D A. 以0开头的⼆进制数组成的集合B. 以0结尾的⼆进制数组成的集合C. 含奇数个0的⼆进制数组成的集合D. 含偶数个0的⼆进制数组成的集合2.词法分析器的输出结果是。

CA. 单词的种别编码B. 单词在符号表中的位置C. 单词的种别编码和⾃⾝值D. 单词⾃⾝值 3.正规式M1和M2等价是指。

C A. M1和M2的状态数相等 B. M1和M2的有向边条数相等 C. M1和M2所识别的语⾔集相等 D. M1和M2状态数和有向边条数相等 4.词法分析器的加⼯对象是。

C A .中间代码 B .单词 C .源程序 D .元程序 5.同正规式(a|b )*等价的正规式为。

D A .(a|b)+ B .a*|b* C .(ab)* D .(a*|b*)+ 6. 两个DFA 等价是指:。

D A.这两个DFA 的状态数相同B. 这两个DFA 的状态数和有向弧条数都相等C. 这两个DFA 的有向弧条数相等D. 这两个DFA 接受的语⾔相同7. 下列符号串不可以由符号集S ={a,b}上的正闭包运算产⽣的是:(A ) A. ε B. a C. aa D. ab 8.称有限⾃动机A1和A2等价是指________。

D A .A1和A2都是定义在⼀个字母表上的有限⾃动机 B .A1和A2状态数和有向边数相等图1-11C.A1和A2状态数或有向边数相等D.A1和A2所能识别的字符串集合相等9.同正规式(a|b)+等价的正规式是_______。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

9. (1)表达式a*b-c-d$e$f-g-h*I中,运算符 表达式a*b- d$e$f- h*I中 的优先级由高到低依次为的优先级由高到低依次为-、*、$,且相应 的后缀式为abcd
- - *efgh - -I*$$。
(2)表达式-a+b*c+d+(e*f)/d*e,如果运算 表达式-a+b*c+d+(e*f)/d*e, 符的优先级由高到低依次为符的优先级由高到低依次为-、+、*、/,且 均左结合, 均左结合,则其后缀式为
5.有文法G[E]:E T|E+T|E-T 5.有文法 有文法G[E]: T|E+T|ET F|T*F|T/F F i/(E) 请判断(E+T)*i+F是 的一句型吗? 请判断(E+T)*i+F是G的一句型吗? 如果是,请画出它的推导的语法树。 如果是,请画出它的推导的语法树。 并写出语法树的短语、简单短语、 并写出语法树的短语、简单短语、 句柄。 句柄。
a-b+cd+ef*+*de*/。
10.试写出算术表达式 10.试写出算术表达式 a+b*c-(c*b+aa+b*c-(c*b+a-e)/(b*c+d) 优化后的四元式序列。 优化后的四元式序列。
11.目标代码 11.目标代码 写出下列表达式的目标代码 T := C*(A+B)+(A+B) C*(A+B) A+B) C := A+B A :=(C*D)+(E-F) :=(C*D)
7. 设有文法G[S]: 设有文法G[S]: S→E E→Aa | bB A→cA|d B→cB|d 构造其LR(0)分析表并利用分析表判断 分析表并利用分析表判断acccd是否为 构造其LR(0)分析表并利用分析表判断acccd是否为 文法G[S]的句子。 文法G[S]的句子。 的句子
解: (1)识别活前缀的自动机 LR分析表 (2)LR分析表 LR分析过程 分析过程——即判断acccd是 (3)LR分析过程——即判断acccd是 否为文法G[S]的句子 否为文法G[S]的句子
E,R2 F,R2 C,R1 D,R1 R2,R1 A,R2
编译器设计方案
• C -惯用的词法 • C -语言的Tiny Machine 运行时环境 语言的Tiny • C -的语法和语义 • 使用C -和T M 的编程设计 使用C • C -的程序例子 这里定义了一个编程语言称作C 这里定义了一个编程语言称作C -M i n u s (或简称为C -),这是一种适合编译器设计方案 或简称为C 的语言,它比T 语言更复杂, 的语言,它比T I N Y 语言更复杂,包括函数和 数组。本质上它是C 的一个子集, 数组。本质上它是C 的一个子集,但省去了一 些重要的部分,因此得名。 些重要的部分,因此得名。
Z → aAb A → aAb | b
上述文法可以产生语言L 上述文法可以产生语言L。 设有文法G[I]: (3)设有文法G[I]: I→I1 | I0 | Ic | a | b | c 该文法的句子有 ②③④ 。 该文法的句子 句子有 ①ab0 ②a0c01 ③aaa ④bc10
7. 设有文法G[S]: 设有文法G[S]: S→E E→Aa | bB A→cA|d B→cB|d 构造其LR(0)分析表并利用分析 构造其LR(0)分析表并利用分析 表判断acccd是否为文法 是否为文法G[S]的句 表判断acccd是否为文法G[S]的句 子。
• 语言惯用的词法(包括语言标记的描 语言惯用的词法( 述) • 每个语言构造的B N F 描述 每个语言构造的B • 相关语义的英语描述 • C -的两个示例程序 • C -的一个Tiny Machine 运行时环 的一个Tiny 境 • C -和T M 的编程设计方案
8 .在一个移入-规约的分析中采用 .在一个移入 在一个移入以下的语法制导的翻译模式, 以下的语法制导的翻译模式,在按 一产生式规约时, 一产生式规约时,立即执行括号中 的动作。 的动作。 A → aB {print “0”} 0 } A → c {print “”} } B → Ab {print “2”} 2 } 当分析器的输入为aacbb aacbb时 当分析器的输入为aacbb时,打印 的字符串是什么? 的字符串是什么?
编译程序总复习——例题 编译程序总复习——例题
1. 编译程序的功能和组织结构 2. 编译和解释程序 3. 正则表达式 4. NFA → DFA → DFA 最小化 5. 句型→推导的语法树→短语→简单短语→ 句型→推导的语法树→短语→简单短语→ 句柄
6.文法 6.文法←→语言←→句子 文法← 语言← 7.语法分析 7.语法分析——自顶向下和自底向上 语法分析——自顶向下和自底向上 LL法 LR法 (LL法、 LR法) 8.语法制导翻译 8.语法制导翻译 9.中间代码 9.中间代码 10.中间代码优化 10.中间代码优化 11.目标代码 11.目标代码
6. 设有文法G[S]=({b},{S,B},S, (1)设有文法G[S]=({b},{S,B},S, {S →b|bB,B→bS}),该文法所描述的语言是 →b|bB,B→bS}),该文法所描述的语言是 2i+1|i ≥0} L(G[S]={b (2)已知语言L={anbbn|n ≥1},则 已知语言L={a ≥1},
1 . 编译程序的功能和组织结构
表 处 理 前 端 中
源 程 序
词 法 分 析
语 法 目 端 间 标 代 代 码 码 优 生 化 成
目 标 程 序
错 误 处 理
2. 编译和解释程序
源 程 序 编 译 程 序
初始数据
目标程序
计 算 结 果
源程序
初始数据
解: [(a|b)(a|b)*] ([(a|b)(a|b)*])*
4.请构造与正则式R=(a*b)*ba(a|b)* 4.请构造与正则式 请构造与正则式R=(a*b)*ba(a|b)* 等价的状态最少的DFA( 等价的状态最少的DFA(确定有限自 动机)。 动机)。
解: (1) NFA (2) NFA → DFA (3) DFA 最小化
解 释 程 序
计 算 结 果
解释程序和编译程序的区别
功能 解释 程序 编译 程序 源程序的一 执行系统 个执行系统 源程序的一 转换系统 个转换系统 工作结果 源程序的 执行结果 源程序的 目标代码 实现技术上 执行中间代码 把中间代码转 换成目标程序
解释程序和编译程序的根本区别: 是否生成目标代码
3. 正则表达式
设文法G[A]: 设文法G[A]: A → [B B → X] | BA X → Xa | Xb | a | b 试求出文法G[A] G[A]产生的语言对应的 试求出文法G[A]产生的语言对应的 正则式。 正则式。
3. 设文法 设文法G[A]: A→[B B →X] | BA X →Xa | Xb | a | b 试求出文法G[A]产生的语言对应的正则式。 产生的语言对应的正则式。 试求出文法 产生的语言对应的正则式
有文法G[E]: 有文法G[E]: E T|E+T|E-T T|E+T|ET F|T*F|T/F F i/(E) (E+T)*i+F是 (E+T)*i+F是G的一句型 T 每棵子树的 叶组成短语 叶组成短语 (E+T)*i+F (E+T)*I (E+T) E+T i F
F ( E E +
E E T * F i ) T + T F
A a A a A c B B
⑤ b ④ ③
b
A → aB {print “0”} 0 } A → c {print “”} } B → Ab {print “2”} 2 }


分析器输入 分析器输入 aacbb, 为aacbb,打 印的字符为 12020
9. 表达式a*b- d$e$f- h*I中 (1)表达式a*b-c-d$e$f-g-h*I中, 运算符的优先级由高到低依次为由高到低依次为 运算符的优先级由高到低依次为-、 *、$,且均右结合,且相应的后 且均右结合 右结合, 缀式为______。 缀式为______。 表达式-a+b*c+d+(e*f)/d*e, (2)表达式-a+b*c+d+(e*f)/d*e, 如果运算符的优先级由高到低 由高到低依 如果运算符的优先级由高到低依 次为且均左结合 左结合, 次为-、+、*、/,且均左结合,则 其后缀式为______。 其后缀式为______。
每棵简单 子树的叶 组成简单 组成简单 短语 E+T i F
最左简单子树的叶组成句柄 最左简单子树的叶组成句柄 E+T
6.( 6.(1)设有文法G[S]=({b},{S,B},S, 设有文法G[S]=({b},{S,B},S, →b|bB,B→bS}), {S →b|bB,B→bS}),该文法所描述的 语言是_________。 语言是_________。 (2)已知语言L={anbbn|n ≥1},则 已知语言L={a ≥1}, _______文法可以产生语言L 文法可以产生语言 _______文法可以产生语言L。 (3)设有文法G[I]: 设有文法G[I]: I→I1 | I0 | Ic | a | b | c 该文法的句子有 该文法的句子 句子有 ________ ①ab0 ②a0c01 ③aaa ④bc10
写出下列表达式的目标代码 T := C*(A+B)+(A+B) C*(A+B) A+B) C := A+B A :=(C*D)+(E-F) :=(C*D) 解答: 解答:
LOAD ADD LOAD MULT ADD STORE
相关文档
最新文档