编译原理复习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章编译概述
1 编译程序的功能。
2 编译程序各阶段的主要任务。
3 解释程序与编译翻译的区别。
解释:不产生目标程序的翻译程序。
编译:会产生目标程序的翻译程序。
第二章文法和语言的基本知识1 文法的形式定义。
G=(VN,VT,P,S)
2 文法与语言之间的相互转换
例:写出文法对应的语言。
•G[S]:S→AB
•A→aA|a 解:L={aibj | i,j≥1}
•B→bB|b
3 句型的短语、直接短语和句柄
(1)句柄-一个句型最左边的直接短语。
(2)会写出句型的短语、直接短语、句柄以及素短语。
例:G[E]:
E→E+T |E-T |T
T→T*F | T/F |F
F→(E) | i
写出文法句型T+T*F 的短语、直接短语、句柄和素短语。
4 文法的分类
(1)四类:0型、1型、2型、3型。
其中,2型文法也称为上下文无关文法;
3型文法也称为正规文法。
(2)会判断给出一个文法是那一型的文法。
第三章词法分析
1 正规式与正规文法之间的转换
例:有正规文法G[Z]:
Z→0A
A→0A|0B
B→1A|ε
给出该文法所对应的正规式。
解:相应的正规方程组为:
Z=0A (1)
A=0A+0B (2)
B=1A+ ε(3)
将(3)代入(2),可得
A=0A+01A+0 (4)
由(4)得:
A=(0+01)A+0 (5)
由(5)得:
A=(0+01)*0 (6)
将(6)代入(1),得
Z=0(0+01)*0
即所求正规式为0(0|01)*0。
2 正规式与自动机之间的转换。
例:
①试构造正规式a*b*的NFA。
①试构造正规式a*b*的NFA,并确定化,用状态图表示。
解
(1)NFA:
3 文法去掉ε规则的等价变换。
例:将下述文法去掉ε规则。
G[S]:S →aA
A→aA | dA |ε
解:该文法去掉ε规则,改写为:
G[S]:
S →aA | a
A →aA | dA | a | d
第四章语法分析
1 语法分析方法的分类。
2 预测分析法
(1)预测分析法属于自上而下的语法分析方法。
(2)非LL(1)文法的改造-消除左递归和提公共左因子。
例:
消除文法的直接左递归,并提取公共左因子。
S→SaP|Sf|P
P→QbP|Q
Q→cSd|e
解:改写后的文法为:
S→PS’
S’→aPS’|fS’|ε
P →QP’
P’→bP| ε
Q →cSd|e
(3) 构造文法的预测分析表。
例:文法G[S]:
S→(L)|aS|a
L→L,S|S
(a) 消除文法的左递归,并提取公共左因子;
(b) 计算改写后文法每个非终结符的FIRST集和FOLLOW集;
(c) 构造它的预测分析表。
解: (a) 改写后的文法为:
S→(L)|aS’
S’→S|ε
L →SL’
L’→,SL’|ε
(b)
3 算符优先分析法
(1)算符优先分析法,当栈顶出现最左素短语时进行归约。
(2)会写出句型的素短语和最左素短语。
第五章语义分析和中间代码生成
1 综合属性和继承属性的区别。
综合属性用于自下而上的传递信息;
继承属性用于自上而下的传递信息。
2 会写出表达式的逆波兰式。
例:写出算术表达式a↑c *-(b+d)的逆波兰式。
逆波兰式为:ac↑bd+@*
3 会构造标注语义值的语法树。
例:属性文法如下:
(1)S’→E {print E.val}
(2)E →E(1)+E(2) {E.val=E(1).val+ E(2).val}
(3)E →E(1)*E(2) {E.val=E(1).val* E(2).val}
(4)E →(E(1)) {E.val=E(1).val}
(5)E →n {E.val=n.LEXV AL}
如采用LR分析法,给出表达式2*(8+5*4)的语法树并在各结点注明语义值V AL.
解语法树如图:
4 三种基本句型翻译成四元式。
例①while (a>b) do
if c>d then Y=Y-1;
翻译成四元式。(假设四元式序列由100开始)
解可得四元式为:
(100) if a>b goto (102)
(101) goto (107)
(102) if c>d goto (104)
(103) goto (100)
(104) T1=Y-1
(105) Y=T1
(106) goto (100)
(107) …
4 三种基本句型翻译成四元式。
例:②while A
if (T or E>F) then S=C-D;
翻译成四元式。(假设四元式序列由100开始)
解可得四元式为:
(100) if A
(101) goto (109)
(102) if T goto (106)
(103) goto (104)
(104) if E>F goto (106)
(105) goto (100)
(106) T1=C-D
(107) S=T1
(108) goto (100)
(109) …