编译原理复习

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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) …