编译原理复习整理

编译原理复习整理
编译原理复习整理

1、给出下面语言的相应文法。L1={a n b n c i|n≥1,i≥0}

从n,i的不同取值来把L1分成两部分:前半部分是anbn:A→aAb|ab后半部分是ci:B→Bc|ε所以整个文法G1[S]可以写为:G1(S):S→AB;A→aAb|ab;B→cB|ε

3、构造一个DFA,它接受?={a,b}上所有包含ab的字符串。

(要求:先将正规式转化为NFA,再将NFA确定化,最小化)

4、对下面的文法G:

E →TE ’ E ’→+E|ε T →FT ’ T ’→T|ε

F →PF ’ F ’ →*F ’|ε P →(E)|a|b|∧

(1)证明这个文法是LL(1)的。 (2)构造它的预测分析表。

(1)FIRST(E)={(,a,b,^}FIRST(E')={+,ε}FIRST(T)={(,a,b,^}FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^}FIRST(F')={*,ε}FIRST(P)={(,a,b,^}FOLLOW(E)={#,)}

FOLLOW(E')={#,)}FOLLOW(T)={+,),#}FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#}FOLLOW(P)={*,(,a,b,^,+,),#} (2)考虑下列产生式:

'→+'→'→'→E E T T F F P E a b ||*|()|^||εεε

FIRST(+E)∩FIRST(ε)={+}∩{ε}=φ FIRST(+E)∩FOLLOW(E')={+}∩{#,)}=φ FIRST(T)∩FIRST(ε)={(,a,b,^}∩{ε}=φ FIRST(T)∩FOLLOW(T')={(,a,b,^}∩{+,),#}=φ FIRST(*F')∩FIRST(ε)={*}∩{ε}=φ

FIRST(*F')∩FOLLOW(F')={*}∩{(,a,b,^,+,),#}=φ FIRST((E))∩FIRST(a) ∩FIRST(b) ∩FIRST(^)=φ 所以,该文法式LL(1)文法. (3)

+

*

(

)

a

b

^

#

E E TE →'

E TE →' E TE →' E TE →'

E' '→+E E

'→E ε

'→E ε

T

T F T →'

T F T →' T F T →' T F T →'

T' '→T ε

'→T T '→T ε '→T T '→T T '→T T '→T ε

F

F P F →'

F P F →' F P F →' F P F →'

F' '→F ε '→'F F * '→F ε '→F ε '→F ε '→F ε '→F ε '→F ε

P

P E →()

P a → P b → P →^

5、考虑文法: S →AS|b A →SA|a (1)列出这个文法的所有LR(0) 项目。

0.'→?S S 1.'→?S S 2.S AS →? S A S →?.S AS →? S b →?S b →?A SA →?A S A →? 9.A SA →? 10.A a →? 11.A a →?

(2)给出识别文法所有活前缀的DFA 。

S A ε

S

ε ε ε

7 1

8 9

ε a

ε ε ε

A S ε ε

b 确定化:

S A a b {0,2,5,7,10}

{1,2,5,7,8,10

}

{2,3,5,7,10} {11}

{6}

{1,2,5,7,8,10

} {2,5,7,8,10}

{2,3,5,7,9,10}

{11} {6}

{2,3,5,7,10}

{2,4,5,7,8,10

}

{2,3,5,7,10}

{11} {6}

{2,5,7,8,10} {2,5,7,8,10} {2,3,5,7,9,10} {11} {6} {2,3,5,7,9,10

} {2,4,5,7,8,10

} {2,3,5,7,10} {11}

{6}

{2,4,5,7,8,10

} {2,5,7,8,10}

{2,3,5,7,9,10} {11} {6}

{11}

φ

φ

φ φ

10 5

6

11

2 3

4

{6} φ φ φ φ

A S

S A a

b

S a A S b S A b a A

A S

0:'→?S S

S AS →? S b →? 4:S A S →?

S AS →? S b →? A SA →?

3:'

→?S S

A S A →?

A SA →?

A a →?

5:A S A →?

S AS →? S b →?

A SA →? 6:A SA →?

S A S →?

S AS →? S b →?

7:S AS →?

A S A →? S AS →? S b →?

b

a a

b b a

DFA

6、设有文法:P →P+Q|Q Q →Q*R|R R →(P)|i

(1)证明Q*R+Q+Q 是它的一个句型。(3分) P=>P+Q=>P+Q+Q=>Q+Q+Q=>Q*R+Q+Q

(2)给出Q*R+Q+Q 的所有短语,直接短语和句柄。(4分)

短语: Q*R,Q*R+Q,Q*R+Q+Q 直接短语: Q*R 句柄: Q*R

(3)给出句子i+i*i的最右推导。(4分) (4)给出句子i+i*i的最左推导。(4分)

7、设有文法:E →E+T|T T →T*F|F F →(E)|i

(1)证明E+T*F 是它的一个句型。(3分)E E T E T F ?+?+* (2)给出E+T*F 的所有短语,直接短语和句柄。(4分)

短语: E+T*F, T*F, 直接短语: T*F 句柄: T*F

(3)给出句子i+i*i的最右推导。(4分)

11、构造下面正规式相应的DFA

1(0|1)*

101

2:S b →?

1:A a →?

14、对下面的文法G:

Expr→- Expr Expr→(Expr)|Var ExprTail ExprTail→- Expr|εVar→id VarTail VarTail→(Expr) |ε

(1)构造LL(1)分析表。(12分)

(2)给出对句子id—id((id))的分析过程。(8分)

16、已知文法G[S] 为:S->a|^|(T)

T->T,S|S

①消除文法G[S]中的左递归,得文法G ′[S]。

ε

|,)

(||^)

(T S T T S T T a S S G '→''→→'

② 文法G ′[S]是否为LL(1)的若是,给出它的预测分析表。

FIRST(S)={a,^,(} FIRST(T)={a,^,(} FIRST('T )={,,ε} FOLLOW(S)={),,,#} FOLLOW(T)={)} FOLLOW('T )={)} 预测分析表

a

^

(

) , # S S a → S →^

S T →()

T

T ST →' T ST →' T ST →'

'T

'→T ε '→'T ST ,

是LL(1)文法

17、对下面的文法G:

S ? S ? a T | a T | ? a T T ? ? a T | ? a

(1) 消除该文法的左递归和提取左公因子;构造各非终结符的FIRST 和FOLLOW 集合;

18、文法G(S)及其LR分析表如下,请给出串baba#的分析过程。

(1) S → DbB(2) D → d(3) D → ε

(4) B → a(5) B → Bba(6) B → ε

LR分析表

2、写出表达式a=b*c+b*d对应的逆波兰式、四元式序列和三元式序列。

答:逆波兰式: abc*bd*+:=

四元式序列:三元式序列: OP ARG1 ARG2

(1) (*, b, c, t

1

) (1) (* b, c )

(2) (*, b, d, t

2

) (2) (* b, d )

(3) (+, t1, t

2,t

3

) (3) (+ (1), (2))

(4) (:=, t3, /, a) (4) (:= (3), a)

八、语义分析题

1、将语句

if ((A<0) ? (B>0)) then while (C>0) do C:=C-D

翻译成四元式

答案:100 (j<, A, 0, 104)

101 (j, -, -, 102)

102 (j>, B, 0, 104)

103 (j, -, -, 109)

104 (j>, C, 0, 106)

105 (j, -, -, 109)

106 (-, C, D, T1)

107 (:=, T1, -, C)

108 (j, -, -, 104)

109

2、写出下面语句经语法制导翻译后所生成的四元式代码序列。

if xc do c:=c+1 else x:=x+5

答案:假设初始为100,则四元式代码序列为

100if x

101goto107

102if e>c goto104

103goto109

104M:=C+1

105C:=M

106goto102

107N:=X+5

108X:=N

109

8、写出表达式a+b*(c-d)对应的逆波兰式和三元式序列。答案:逆波兰式:(abcd-*+)

三元式序列:

OP ARG1 ARG2

(1) - c d

(2) * b (1)

(3) + a (2)

1.编译程序是对高级语言程序的解释执行。(× )

2.一个有限状态自动机中,有且仅有一个唯一的终态。(×)

3.一个算符优先文法可能不存在算符优先函数与之对应。(√ )

4.语法分析时必须先消除文法中的左递归。(×)

5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。(√) 6.逆波兰表示法表示表达式时无须使用括号。(√ )

7.静态数组的存储空间可以在编译时确定。(×)

8.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。(×)

9.两个正规集相等的必要条件是他们对应的正规式等价。(× )

10.一个语义子程序描述了一个文法所对应的翻译工作。(×)

1.一个上下文无关文法的开始符,可以是终结符或非终结符。 ( × )

2.一个句型的直接短语是唯一的。(×)

3.已经证明文法的二义性是可判定的。(×)

4.每个基本块可用一个DAG表示。(√)

5.每个过程的活动记录的体积在编译时可静态确定。(√)

型文法一定是3型文法。(×)

7.一个句型一定句子。( × )

8.算符优先分析法每次都是对句柄进行归约。 ( × )

9.采用三元式实现三地址代码时,不利于对中间代码进行优化。(√)

10.编译过程中,语法分析器的任务是分析单词是怎样构成的。 ( × )

11.一个优先表一定存在相应的优先函数。( √ )

12.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。 ( √ )

13.递归下降分析法是一种自下而上分析法。( × )

14.并不是每个文法都能改写成LL(1)文法。( √ )

15.每个基本块只有一个入口和一个出口。( √ )

16.一个LL(1)文法一定是无二义的。 ( √ )

17.逆波兰法表示的表达试亦称前缀式。 ( × )

18.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。 ( √ )

19.正规文法产生的语言都可以用上下文无关文法来描述。 ( √ )

20.一个优先表一定存在相应的优先函数。 ( √ )

型文法一定是2型文法。( √ )

22.如果一个文法存在某个句子对应两棵不同的语法树,则文法是二义性的。( √ )

1、简述编译程序的工作过程:编译程序的工作过程,是指从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的,就其过程而言,一般可以划分为五个工作阶段:①词法分析,对构成源程序的字符串进行扫描和分解,识别出一个个的单词;②语法分析,根据语言的语法规则,把单词符号串分解成各类语法单位;③语义分析与中间代码产生,即对各类语法单位,分析其汉一并进行初步翻译;④代码优化,以期产生更高效的代码;⑤目标代码生成,把中间代码变换成特定机器上的低级语言指令形式。

2.简述代码优化的目的和意义:代码优化是尽量生成“好”的代码的编译阶段。也就是要对程序代码进行一种等价变换,在保证变换前后代码执行结果相同的前提下,尽量使目标程序运行时所需要的时间短,同时所占用的存储空间少。

3、简要说明语义分析的基本功能:确定类型、类型检查、语义处理和某些静态语义检查。1.词法分析:词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位,并转换成统一的内部表示(token),送给语法分析程序。

3.简述自下而上的分析方法。:所谓自下而上分析法就是从输入串开始,逐步进行“归约”,直至归约到文法的开始符号;或者说从语法树的末端开始,步步向上“归约”,直到根节点。

2.LL(1)文法:若文法的任何两个产生式A ? ? | ?都满足下面两个条件:(1)FIRST(? ) ? FIRST(? ) = ?;(2)若? ?* ? ,那么FIRST(? ) ? FOLLOW( A ) = ?。我们把满足这两个条件的文法叫做LL(1)文法,其中的第一个L代表从左向右扫描输入,第二个L表示产生最左推导,1代表在决定分析器的每步动作时向前看一个输入符号。除了没有公共左因子外,LL(1)文法还有一些明显的性质,它不是二义的,也不含左递归。

3.语法树:句子的树结构表示法称为语法树(语法分析树或语法推导树)。给定文法G=(V N,V T,P,S),对于G的任何句型都能构造与之关联的语法树。这棵树具有下列特征:(1)根节点的标记是开始符号S。(2)每个节点的标记都是V中的一个符号。(3)若一棵子树的根节点

为A ,且其所有直接子孙的标记从左向右的排列次序为A 1A 2…A R ,那么A?A 1A 2…A R 一定是P 中的一条产生式。(4)若一标记为A 的节点至少有一个除它以外的子孙,则A ∈V N 。(5)若树的所有叶节点上的标记从左到右排列为字符串w ,则w 是文法G 的句型;若w 中仅含终结符号,则w 为文法G 所产生的句子。

4.LR(0)分析器:所谓LR(0)分析,是指从左至右扫描和自底向上的语法分析,且在分析的 每一步,只须根据分析栈当前已移进和归约出的全部文法符号,并至多再向前查看0个输入符号,就能确定相对于某一产生式左部符号的句柄是否已在分析栈的顶部形成,从而也就可以确定当前所应采取的分析动作 (是移进还是按某一产生式进行归约等)。

5.语言和文法:文法就是语言结构的定义和描述,是有穷非空的产生式集合。文法G 定义为四元组的形式:G=(V N ,V T ,P ,S)其中:V N 是非空有穷集合,称为非终结符号集合;V T 是非空有穷集合,称为终结符号集合;P 是产生式的集合(非空);S 是开始符号(或识别符号)。这里,V N ∩V T =?,S ∈V N 。V=V N ∪V T ,称为文法G 的字母表,它是出现文法产生式中的一切符号的集合。

文法G 所描述的语言用L(G)表示,它由文法G 所产生的全部句子组成,即 L(G)={x| S?*x ,其中S 为文法开始符号,且+

∈T V x } 简单的说,文法描述的语言是该文法一切句子的集合。

2.二义性文法:如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义性文法。

6.语法:一组规则,用它可形成和产生一组合式的程序。

7.文法:描述语言的语法结构的形式规则。12.规范句型------由规范推导所得到的句型。

15.句柄:一个句型的最左直接短语。21.语义:定义程序的意义的一组规则。

10.短语:令G 是一个文法,S 划文法的开始符号,假定αβδ是文法G 的一个句型,如果有S αAδ且A β,则称β是句型αβδ相对非终结符A 的短语。

1.编译程序和高级语言有什么区别

用汇编语言或高级语言编写的程序,必须先送入计算机,经过转换成用机器语言表示的目标程序(这个过程即编译),才能由计算机执行。执行转换过程的程序叫编译程序。汇编程序是指没有编译过的汇编语言源文件。编译程序转换过的叫目标程序,也就是机器语言。 编译程序的工作情况有三种:汇编型、解释型和编译型。汇编型编译程序用来将汇编语言编写的程序,按照一一对应的关系,转换成用机器语言表示的程序。

解释型编译程序将高级语言程序的一个语句,先解释成为一组机器语言的指令,然后立即执行,执行完了,取下一组语句解释和执行,如此继续到完成一个程序止。用解释型编译程序,

执行速度很慢,但可以进行人和计算机的"对话",随时可以修改高级语言的程序。BASIC语言就是解释型高级语言。编译型编译程序将级语言编写的程序,一次就会部翻译成机器语言表示的程序,而且过程进行很快,在过程中,不能进行人机对话修改。FORTRAN语言就是编译型高级语言。

1.计算机执行用高级语言编写的程序主要有两种途径:___解释__和__编译___。

2.扫描器是__词法分析器___,它接受输入的__源程序___,对源程序进行___词法分析__并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。

3.自上而下分析法采用___移进__、归约、错误处理、___接受__等四种操作。

4.一个LR分析器包括两部分:一个总控程序和___一张分析表__。

5.后缀式abc-/所代表的表达式是___a/(b-c)__。

6.局部优化是在__基本块___范围内进行的一种优化。

2.编译过程可分为(词法分析),(语法分析),(语义分析与中间代码生成),(优化)和(目标代码生成)五个阶段。

3.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是(二义性的)。

5.语法分析器的输入是(单词符号),其输出是(语法单位)。

6.扫描器的任务是从(源程序)中识别出一个个(单词符号)。

13.根据优化所涉及的程序范围,可将优化分成为(局部优化),(循环优化),(全局优化)三个级别。

14.语法分析的方法大致可分为两类,一类是(自上而下)分析法,另一类是(自下而上)分析法。

15.预测分析程序是使用一张(分析表)和一个(符号栈)进行联合控制的。

17.一张转换图只包含有限个状态,其中有一个被认为是(初)态;而且实际上至少要有一个(终)态。

19.语法分析是依据语言的(语法)规则进行。中间代码产生是依据语言的(语义)规则进行的。

21.一个文法G,若它的预测分析表M不含多重定义,则该文法是(LL(1) 文法)。

24.最右推导亦称为(规范推导),由此得到的句型称为(规范)句型。

26.对于文法G,仅含终结符号的句型称为 ( 句子)。

27.所谓自上而下分析法是指(从开始符号出发,向下推导,推出句子)

29.局限于基本块范围的优化称(局部优化)。

型文法又称为(上下文无关)文法;3型文法又称为(正规)文法。

33.算符优先分析法每次都是对(最左素短语)进行归约。

L1: L2: L3: L4:

ε

||cC C ab aAb A AC S →→→ bc bBc B aA A AB S ||→→→ε

εε

||aBb B aAb A AB S →→→ A

B B A A B A S |01|10|→→→ε

编译原理期末复习

编译原理期末复习 鉴于编译原理马上就要期末考试,我将手中集中的一些资料上的题目进行了整理归类,每种类型题目给出了所涉及到的基本知识,然后对每类题目中的第一道例题进行了做法进行了讲解,剩下的例题请给大家作为练习,答案也都给出,希望对大家复习有所帮助,最后由于时间很紧,整理的有些仓促,整理中难免有遗漏或错误,请大家见谅。 注:下面出现的字母中,若无特别说明,小写英文字母为终结符,大写英文字母为非终结符,希腊字母为终结符与非终结符的任意组合。 1、简答题(或者名词解释) 下面涉及到的概念中,加下划线的都是在以往一些试卷中出现的原题,务必掌握。 注:这类题目老师说答案不会超过一百个字,否则写的再多也不给分,有些点到即可,不要重复啰嗦。(1)简述编译程序的概念及其构成 答:1)编译程序:它特指把某种高级程序设计语言翻译成等价的低级程序设计语言的翻译程序。 2)构成: (2)简述词法分析阶段的主要任务(也有可能问语法分析阶段主要任务)答:词法分析的任务是输入源程序,对源程序进行扫描,识别其中的单词符号,把字符串形式的源程序转换成单词符号形式的源程序。 语法分析的主要任务是对输入的单词符号进行语法分析(根据语法规则进行推导或者归约),识别各类语法单位,判断输入是不是语法上正确的程序 (3) 简述编译程序的构造过程(这个大家看看,是对(1)和(2)的综合) 答:1)构造词法分析器:用于输入源程序进行词法分析,输出单词符号; 2)构造语法分析器:对输入的单词符号进行语法分析,识别各类语法单位,判断输入是不是语法上正确的程序 3)构造语义分析和中间代码产生器:按照语义规则对已归约出的语法单位进行语义分析并把它们翻译成中间代码。 4)构造优化器:对中间代码进行优化。 5) 构造目标代码生成器:把中间的代码翻译成目标程序。 6) 构造表格管理程序:登记源程序的各类信息和编译各阶段的进展情况。 7)构造错误处理程序:对出错进行处理。 (4) 说明编译和解释的区别: 1)编译要程序产生目标程序,解释程序是边解释边执行,不产生目标程序; 2)编译程序运行效率高而解释程序便于人机对话。 (5)文法:描述语言语法结构的形式规则,一般用一个四元式表示: G=(V T,V N,S,P),其中V T:终结符集合(非空) V N:非终结符集合(非空),且V T ?V N=? S:文法的开始符号,S?V N P:产生式集合(有限)。

编译原理习题及答案(整理后)

第一章 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.等价变换规则 9、编译程序就是对。 a.汇编程序得翻译b.高级语言程序得解释执行 c.机器语言得执行d.高级语言得翻译 10、语法分析应遵循。 a.语义规则b.语法规则 c.构词规则d.等价变换规则 二、多项选择题 1、编译程序各阶段得工作都涉及到。 a.语法分析b.表格管理c.出错处理 d.语义分析e.词法分析 2、编译程序工作时,通常有阶段。 a.词法分析b.语法分析c.中间代码生成 d.语义检查e.目标代码生成 三、填空题 1、解释程序与编译程序得区别在于。 2、编译过程通常可分为5个阶段,分别就是、语法分析、代码优化与目标代码生成。 3、编译程序工作过程中,第一段输入就是,最后阶段得输出为程序。

编译原理概念_名词解释

编译过程的六个阶段:词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成 解释程序:把某种语言的源程序转换成等价的另一种语言程序——目标语言程序,然后再执行目标程序。 解释方式是接受某高级语言的一个语句输入,进行解释并控制计算机执行,马上得到这句的执 行结果,然后再接受下一句。 编译程序:就是指这样一种程序,通过它能够将用高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序(机器语言程序或汇编语言程序)。 解释程序和编译程序的根本区别:是否生成目标代码 句子的二义性(这里的二义性是指语法结构上的。):文法G[S]的一个句子如果能找到两种不同的最左推导(或最右推导),或者存在两棵不同的语法树,则称这个句子是二义性的。 文法的二义性:一个文法如果包含二义性的句子,则这个文法是二义文法,否则是无二义文法。 LL(1)的含义:(LL(1)文法是无二义的; LL(1)文法不含左递归) 第1个L:从左到右扫描输入串第2个L:生成的是最左推导 1:向右看1个输入符号便可决定选择哪个产生式 某些非LL(1)文法到LL(1)文法的等价变换: 1. 提取公因子 2. 消除左递归 文法符号的属性:单词的含义,即与文法符号相关的一些信息。如,类型、值、存储地址等。 一个属性文法(attribute grammar)是一个三元组A=(G, V, F) G:上下文无关文法。 V:属性的有穷集。每个属性与文法的一个终结符或非终结符相连。属性与变量一样,可以进行计算和传递。 F:关于属性的断言或谓词(一组属性的计算规则)的有穷集。断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符或非终结符相联的属性。 综合属性:若产生式左部的单非终结符A的属性值由右部各非终结符的属性值决定,则A的属性称为综合属继承属性:若产生式右部符号B的属性值是根据左部非终结符的属性值或者右部其它符号的属性值决定的,则B的属性为继承属性。 (1)非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性。 (2) 终结符只有综合属性,没有继承属性,它们由词法程序提供。 在计算时:综合属性沿属性语法树向上传递;继承属性沿属性语法树向下传递。 语法制导翻译:是指在语法分析过程中,完成附加在所使用的产生式上的语义规则描述的动作。 语法制导翻译实现:对单词符号串进行语法分析,构造语法分析树,然后根据需要构造属性依赖图,遍历语法树并在语法树的各结点处按语义规则进行计算。 中间代码(中间语言) 1、是复杂性介于源程序语言和机器语言的一种表示形式。 2、一般,快速编译程序直接生成目标代码。 3、为了使编译程序结构在逻辑上更为简单明确,常采用中间代码,这样可以将与机器相关的某些实现细节置于代码生成阶段仔细处理,并且可以在中间代码一级进行优化工作,使得代码优化比较容易实现。 何谓中间代码:源程序的一种内部表示,不依赖目标机的结构,易于代码的机械生成。 为何要转换成中间代码:(1)逻辑结构清楚;利于不同目标机上实现同一种语言。 (2)便于移植,便于修改,便于进行与机器无关的优化。 中间代码的几种形式:逆波兰记号,三元式和树形表示,四元式 符号表的一般形式:一张符号表的的组成包括两项,即名字栏和信息栏。 信息栏包含许多子栏和标志位,用来记录相应名字和种种不同属性,名字栏也称主栏。主栏的内容称为关键字(key word)。 符号表的功能:(1)收集符号属性(2) 上下文语义的合法性检查的依据:检查标识符属性在上下文中的一致性和合法性。(3)作为目标代码生成阶段地址分配的依据

最新编译原理试题汇总+编译原理期末试题(8套含答案+大题集)

编译原理考试题及答案汇总一、选择 1.将编译程序分成若干个“遍”是为了_B__。 A . 提高程序的执行效率 B.使程序的结构更加清晰 C. 利用有限的机器内存并提高机器的执行效率 D.利用有限的机器内存但降低了机器的执行效率 2.正规式 MI 和 M2 等价是指__C__。 A . MI 和 M2 的状态数相等 B.Ml 和 M2 的有向弧条数相等。 C .M1 和 M2 所识别的语言集相等 D. Ml 和 M2 状态数和有向弧条数相等 3.中间代码生成时所依据的是 _C_。 A.语法规则 B.词法规则 C.语义规则 D.等价变换规则 4.后缀式 ab+cd+/可用表达式__B_来表示。 A. a+b/c+d B.(a+b)/(c+d) C. a+b/(c+d) D. a+b+c/d 6.一个编译程序中,不仅包含词法分析,_A____,中间代码生成,代码优化,目标代码生成等五个部分。 A.( ) 语法分析 B.( )文法分析 C.( )语言分析 D.( )解释分析 7.词法分析器用于识别__C___。 A.( ) 字符串 B.( )语句 C.( )单词 D.( )标识符 8.语法分析器则可以发现源程序中的___D__。 A.( ) 语义错误 B.( ) 语法和语义错误 C.( ) 错误并校正 D.( ) 语法错误 9.下面关于解释程序的描述正确的是__B___。 (1) 解释程序的特点是处理程序时不产生目标代码 (2) 解释程序适用于 COBOL 和 FORTRAN 语言 (3) 解释程序是为打开编译程序技术的僵局而开发的 A.( ) (1)(2) B.( ) (1) C.( ) (1)(2)(3) D.( ) (2)(3) 10.解释程序处理语言时 , 大多数采用的是__B___方法。 A.( ) 源程序命令被逐个直接解释执行 B.( ) 先将源程序转化为中间代码 , 再解释执行 C.( ) 先将源程序解释转化为目标程序 , 再执行 D.( ) 以上方法都可以 11.编译过程中 , 语法分析器的任务就是__B___。 (1) 分析单词是怎样构成的 (2) 分析单词串是如何构成语句和说明的 (3) 分析语句和说明是如何构成程序的 (4) 分析程序的结构 A.( ) (2)(3) B.( ) (2)(3)(4)C.( ) (1)(2)(3) D.( ) (1)(2)(3)(4) 12.编译程序是一种___C__。 A. ( ) 汇编程序 B.( ) 翻译程序 C.( ) 解释程序 D.( ) 目标程序 13.文法 G 所描述的语言是_C____的集合。 A. ( ) 文法 G 的字母表 V 中所有符号组成的符号串 B.( ) 文法 G 的字母表 V 的闭包 V* 中的所有符号串 C.( ) 由文法的开始符号推出的所有终极符串 D. ( ) 由文法的开始符号推出的所有符号串 14.文法分为四种类型,即 0 型、1 型、2 型、3 型。其中 3 型文法是___B__。 A. ( ) 短语文法 B.( ) 正则文法 C.( ) 上下文有关文法 D.( ) 上下文无关文法15.一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 __D___。 A.( ) 句子 B.( ) 句型 C.( ) 单词 D.( ) 产生式

编译原理知识点

1.解释程序:不生成目标代码 编译程序:生成目标代码 2.编译程序组成:8个 分析< 前端>:(词法分析程序、语法分析程序、语义分析程序、中间代码生成程序) 综合< 后端>:(代码优化程序、目标代码生成程序) 贯穿始末:表格管理程序、出错处理程序 3.文法四元组: 终结符号集合Vt 、非终结符号集合Vn、产生式集合P、识别符号(开始符号)S V T∩V N=Φ 文法-> 语言(推导、规约)唯一;语言-> 文法(凑规则)不唯一。 4.文法分类: 0型文法(短语结构文法):左侧至少含有一个非终结符 1型文法(上下文有关文法):左侧长度<= 右侧长度S->ε除外,S不能出现在右侧2型文法(上下文无关文法):左侧只能有一个非终结符( 语法分析) 3型文法(正规文法):A-> aB A->a 右线性;( 词法分析) A->Ba 或A->a 左线性(看非终结符位置) 5.A*=A0 ∪A+ A0 ={ε} !={ } =Φ空集 A+ =AA* =A*A 6.句型:符号串x是从识别符号S推导出来的,x称为一个句型 句子:x仅由终结符号组成,仅含终结符号的句型是一个句子 短语:子树的末端(叶子)从左至右连成的串(包括整棵语法树) 简单子树:只含有单层分枝的子树 直接短语( 简单短语):由简单子树的叶子组成 句柄:最左边的直接短语(不一定含终结符) 素短语:至少含有一个终结符的短语,并且除它自身之外不再含任何更小的素短语最左素短语:最左边的素短语 短语:P(相对于T、E)、P+T(相对于E)、i(相对于P、F)、P+T+i(相对于E)直接短语:P、i 句柄:P (最左边的直接短语) 素短语:P+T 、i (至少含有一个终结符的短语)最左素短语:P+T 7.二义性文法:有两个不同的最左推导或有两个不同的最右推导或能产生两棵语法树 8.文法产生式正规式 规则1 A→xB B→y A = xy

《编译原理》练习题

《编译原理》练习题一 一、填空题(每空1分) 1.设G [S ]是一个文法,我们把能由文法的 (1) 推导出来的符号串α称为G 的一个句型。当句型α仅由 (2) 组成时 (即α∈V T * ),则将它称为G 产生的句子。 2.从某一给定的状态q 出发,仅经过若干条 (3) 的矢线所能达到的状态所组成的集合称为ε-CLOSURE(q)。 3.设G=(V N ,V T ,P,S)是一文法,我们说G 中的一个符号X ∈V N ∪V T 是有用的,是指X 至少出现在 (4) 的推导过程中,否则,就说X 是无用的。我们将不含形如A→A 的产生式和不含无用符号及无用产生式的文法称为 (5) 。 4.我们常采用形如 (class, value)的二元式作为一个单词的 (6) 。其中,class 是一个整数,用来指示该单词的 (7) ,value 则是单词之值。 5.一个文法G[S]可表示成形如 (8) 的四元式。其中V N ,V T ,P 均为非空的有限集,分别称为非终结符号集、终结符号集和产生式集, S ∈V N 为文法的开始符号。此外,将出现在各产生式左部和右部的一切符号所组成的集合称为 (9) ,记作V 。显然,V=V N ∪V T ,V N ∩V T =?。 6.通常,可通过两种途径来构造词法分析程序。其一是根据对语言中各类单词的某种描述或定义,用 (10) 构造词法分析程序;另外一种途径是所谓词法分析程序的 (11) 。 7.设G 为一文法,A→α是G 的一个产生式,如果α具有υA δ的形式,其中υ,δ不同时为ε,则称产生式A→α是 (12) 。若存在推导δυαA A * ??,则 称产生式A→α是 (13) 。 8.设M=(K,Σ,f,S 0,Z)为一DFA ,并设s 和t 是M 的两个不同状态,我们说状态s,t 为某一输入串w (14) ,是指从s,t 中之一出发,当扫视完w 之后到达M 的终态,但从其中的另一个状态出发,当扫视完同一个w 后而进入 (15) 。 9.把最右推导称为 (16) ,而把右句型称为 (17) 。 10.如果从状态转换图的初态出发,分别沿着一切可能的路径到达 (18) ,并

编译原理知识点汇总

编译原理的复习提纲 1.编译原理=形式语言+编译技术 2.汇编程序: 把汇编语言程序翻译成等价的机器语言程序 3.编译程序: 把高级语言程序翻译成等价的低级语言程序 4.解释执行方式: 解释程序,逐个语句地模拟执行 翻译执行方式: 翻译程序,把程序设计语言程序翻译成等价的目标程序 5.计算机程序的编译过程类似,一般分为五个阶段: 词法分析、语法分析、语义分析及中间代码生成、代码优化、目标代码生成 词法分析的任务: 扫描源程序的字符串,识别出的最小的语法单位(标识符或无正负号数等) 语法分析是: 在词法分析的基础上的,语法分析不考虑语义。语法分析读入词法分析程序识别出的符号,根据给定的语法规则,识别出各个语法结构。 语义分析的任务是检查程序语义的正确性,解释程序结构的含义,语义分析包括检查变量是否有定义,变量在使用前是否具有值,数值是否溢出等。

语法分析完成之后,编译程序通常就依据语言的语义规则,利用语法制导技术把源程序翻译成某种中间代码。所谓中间代码是一种定义明确、便于处理、独立于计算机硬件的记号系统,可以认为是一种抽象机的程序 代码优化的主要任务是对前一阶段产生的中间代码进行等价变换,以便产生速度快、空间小的目标代码 编译的最后一个阶段是目标代码生成,其主要任务是把中间代码翻译成特定的机器指令或汇编程序 编译程序结构包括五个基本功能模块和两个辅助模块 6.编译划分成前端和后端。 编译前端的工作包括词法分析、语法分析、语义分析。编译前端只依赖于源程序,独立于目标计算机。前端进行分析 编译后端的工作主要是目标代码的生成和优化后端进行综合。独立于源程序,完全依赖于目标机器和中间代码。 把编译程序分为前端和后端的优点是: 可以优化配置不同的编译程序组合,实现编译重用,保持语言与机器的独立性。 7.汇编器把汇编语言代码翻译成一个特定的机器指令序列 第二章 1.符号,字母表,符号串,符号串的长度计算P18,子符号串的含义,符号串的简单运算XY,Xn, 2.符号串集合的概念,符号串集合的乘积运算,方幂运算,闭包与正闭包的概念P19,P20A0 ={ε} 3.重写规则,简称规则。非xx(V

编译原理复习整理(重点含答案)

1、给出下面语言的相应文法。L1={a n b n c i|n≥1,i≥0} 从n,i的不同取值来把L1分成两部分:前半部分是anbn:A→aAb|ab后半部分是ci:B→Bc|ε所以整个文法G1[S]可以写为:G1(S):S→AB;A→aAb|ab;B→cB|ε 3、构造一个DFA,它接受 ={a,b}上所有包含ab的字符串。 (要求:先将正规式转化为NFA,再将NFA确定化,最小化)

4、对下面的文法G: E →TE ’ E ’→+E|ε T →FT ’ T ’→T|ε F →PF ’ F ’ →*F ’|ε P →(E)|a|b|∧ (1)证明这个文法是LL(1)的。 (2)构造它的预测分析表。 (1)FIRST(E)={(,a,b,^}FIRST(E')={+, ε}FIRST(T)={(,a,b,^}FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^}FIRST(F')={*,ε}FIRST(P)={(,a,b,^}FOLLOW(E)={#,)} FOLLOW(E')={#,)}FOLLOW(T)={+,),#}FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#}FOLLOW(P)={*,(,a,b,^,+,),#} (2)考虑下列产生式: '→+'→'→'→E E T T F F P E a b ||*|()|^||εεε FIRST(+E)∩FIRST(ε)={+}∩{ε}=φ FIRST(+E)∩FOLLOW(E')={+}∩{#,)}=φ FIRST(T)∩FIRST(ε)={(,a,b,^}∩{ε}=φ FIRST(T)∩FOLLOW(T')={(,a,b,^}∩{+,),#}=φ FIRST(*F')∩FIRST(ε)={*}∩{ε}=φ FIRST(*F')∩FOLLOW(F')={*}∩{(,a,b,^,+,),#}=φ

编译原理习题及答案(整理后)

第一章 1、将编译程序分成若干个“遍”是为了。 b.使程序的结构更加清晰 2、构造编译程序应掌握。 a.源程序b.目标语言 c.编译方法 3、变量应当。 c.既持有左值又持有右值 4、编译程序绝大多数时间花在上。 d.管理表格 5、不可能是目标代码。 d.中间代码 6、使用可以定义一个程序的意义。 a.语义规则 7、词法分析器的输入是。 b.源程序 8、中间代码生成时所遵循的是- 。 c.语义规则 9、编译程序是对。 d.高级语言的翻译 10、语法分析应遵循。 c.构词规则 二、多项选择题 1、编译程序各阶段的工作都涉及到。 b.表格管理c.出错处理 2、编译程序工作时,通常有阶段。 a.词法分析b.语法分析c.中间代码生成e.目标代码生成 三、填空题 1、解释程序和编译程序的区别在于是否生成目标程序。 2、编译过程通常可分为5个阶段,分别是词法分析、语法分析中间代码生成、代码优化和目标代码生成。 3、编译程序工作过程中,第一段输入是源程序,最后阶段的输出为标代码生成程序。 4、编译程序是指将源程序程序翻译成目标语言程序的程序。

一、单项选择题 1、文法G:S→xSx|y所识别的语言是。 a. xyx b. (xyx)* c. x n yx n(n≥0) d. x*yx* 2、文法G描述的语言L(G)是指。 a. L(G)={α|S+?α , α∈V T*} b. L(G)={α|S*?α, α∈V T*} c. L(G)={α|S*?α,α∈(V T∪V N*)} d. L(G)={α|S+?α, α∈(V T∪V N*)} 3、有限状态自动机能识别。 a. 上下文无关文法 b. 上下文有关文法 c.正规文法 d. 短语文法 4、设G为算符优先文法,G的任意终结符对a、b有以下关系成立。 a. 若f(a)>g(b),则a>b b.若f(a)

编译原理中重点整理

1.翻译程序:将某一种语言(源语言)程序转换为与其逻辑上等价的另一种语言(目标语言) 程序。 编译程序:源语言为高级语言,目标语言为汇编语言或机器语言的翻译程序。 汇编程序:源语言为汇编语言,目标语言为机器语言的翻译程序。 解释程序:源语言程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。 2.解释器与编译器的主要区别在于:运行目标程序时的控制权在解释器而不在目标程序。 3.编译程序的工作过程可划分五个阶段: ①词法分析:从左到右一个字符一个字符的读入源程序,对构成源程序的字符串进行扫描 和分解,从而识别出一个个单词(也称单词符号或简称符号) ②语法分析:在词法分析的基础上将单词序列分解成各类语法短语,如“程序”,“语句”, “表达式”等等 ③语义分析和中间代码生成:语义分析是在语法分析程序确定出语法短语后,审查有无语义 错误,并为代码生成阶段收集类型信息。完成语法分析和语义 处理工作后,编译程序将源程序变成一种内部表示形式,这种 内部表示形式叫做中间语言或称中间代码,它是一种结构简单、 含义明确的记号系统。 ④代码优化:为了使生成的目标代码更为高效,可以对产生的中间代码进行变换或进行改造, 这就是代码的优化。 ⑤目标代码生成:目标代码生成阶段的任务就是是把中间代码变换成特定机器上的绝对指令 代码或可重定位的指令代码或汇编指令代码。 4.前端(Front-End)——与目标机无关的部分 后端(Back-End )——与目标机有关的部分 5.编译系统:编译程序与运行系统合称编译系统 6.遍:对源程序或源程序的中间结果从头到尾扫描一次,并做有关的加工处理,生成新的中 间结果或目标程序。 7.文法是一个四元组:G[S]=(VN, VT, P, S) VN:非终结符集合; VT :终结符集合; P :产生式集合(α→β或α∷=β); S :开始符号(或称根符号,识别符号)。 若S ->α,α∈V*,则称α为文法G的句型 若S ->α,α,α∈VT*,则称α为文法G的句子 语言是所有句子构成的集合,它是所有终结符号串所组成的集合VT*的子集,即L(G) VT* 8.0型文法又叫短语文法,它所确定的语言称为0型语言。 1型文法,上下文敏感文法或上下文有关文法。 2型文法,上下文无关文法 3型文法线性文法、正则文法或正规文法 规范(最右)推导即任何一步α->β都是对α中的最右非终结符进行替换的,规范(最左)归约文法可唯一地确定一个语言 子树与短语:在句型所对应的语法树中,若某些符号按从左到右的顺序组成某棵子树的末端结点,那么由这些末端结点所组成的符号串是相对于子树根结点的短语。 原则上语法树有多少棵子树,就有多少个短语。

编译原理课后习题答案

第1 章 1、编译过程包括哪几个主要阶段及每个 阶段的功能。 答案:编译过程包括词法分析、语法分析、语义分析和中间代码生成、优化、目标代码生成5 个阶段。词法分析的功能是对输入的高级语言源程序进行词法分析,识别其中的单词符号,确定它们的种类,交给语法分析器,即把字符串形式的源程序分解为单词符号串形式。语法分析的功能是在词法分析结果的基础上,运用语言的语法规则,对程序进行语法分析,识别构成程序的各类语法范畴及它们之间的层次关系,并把这种层次关系表达成语法树的形式。词义分析和中间代码生成的功能是在语法分析的基础上,对程序进行语义分析,“理解”其含义,产生出表达程序语义的内部表达形式(中间代码)。优化的功能是按照等价变换的原则,对语义分析器产生的中间代码序列进行等价变换,删除其中多余的操作,对耗时耗空间的代码进行优化,以期最后得到高效的可执行代码。目标代码生成的功能是把优化后的中间代码变换成机器指令代码,得到可在目标机器上执行的机器语言程序。 第2 章 1、写一上下文无关文法G,它能产生配 对的圆括号串(如:(),(()),()(())等,甚至 包括0 对括号) 文法为:S→(L)|LS|L L→S| ε 2 、已知文法G :E→E+T|E-T|T T→T*F|T/F|F F→(E) |i (1)给出i+i*i,i*(i-i)的最左推导,最右推导以及语法树。 (2)i-i+i 哪个算符优先。 【解答】 (1)最左推导:E?E+T?T+T? F+T ? i+T ? i+T*F ? i+F*F ?i+i*F ?i+i*i E?T?T*F? F*F ? i*F ? i*(E) ? i*(E-T) ? i*(T-T) ? i*(F-T) ? i*(i-T) ? i*(i-F) ?i*(i-i) 最右推导:E?E+T?E+T*F? E+T*i ? E+F*i ? E+i*i ? T+i*i ? F+i*i ? i+i*i 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) i+i*i 以及i*(i-i)的语法树如下所示: (2)i-i+i 的语法树如下图所示。 从上图的语法树可知:“-”的位置位 于“+”的下层,也就是前面两个i 先进 行“-”运算,再与后面的i 进行“+” 运算,所以“-”的优先级高于“+”的 优先级。 3 、文法G: E→ET+|T T→TF*|F F→FP↑|P P→E|i (1)试证明符号串TET+*i↑是G 的一 个句型(要求画出语法树). (2)写出该句型的所有短语,直接短语和句柄. 【解答】(1)采用最右推导: E?T?F? FP↑? Fi↑? Pi↑? Ei↑ ? Ti↑? TF*i↑? TP*i↑? TE*i↑? TET+*i↑ 语法树如下图所示。 从文法G 的起始符号出发,能够推导 出符号串TET+*i↑,所以给定符号串是文法G的句型。 (2) 该句型的短语有: ET+,TET+*,i ,TET+*i↑ 直接短语有:ET+, i 句柄是:ET+ 4、已知文法G:S→iSeS|iS|i ,该文法 是二义文法吗?为什么? 【解答】该文法是二义文法。 因为对于句子iiiei 存在两种不同的最 左推导: 第 1 种推导:S? iSeS? iiSeS? iiieS? iiiei 第2种推导:S?iS?iiSeS?iiieS?iiiei 第3 章 1、用正规式描述下列正规集: (1)C 语言的十六进制整数; (2)以ex 开始或以ex 结束的所有小写字母构成的符号串; (3)十进制的偶数。 【解答】 (1)C 语言十六进制整数以0x 或者0X 开头,所以一般形式应该为(+|-|ε) (0x|0X)AA*,其中前面括号表示符号, 可以有正号、负号,也可以省略(用ε表示)默认是正数,A 表示有资格出现在十六进制整数数位上的数字,AA*表示一位或者多位(一个或者多个数字的

编译原理概念期末总结复习

翻译程序:把一种语言程序转换成另一种语言程序,且在功能上是相同的这样的程序。 编译程序:把高级语言转换成低级语言,且在功能上是相同的这样的程序。 解释程序:边解释边执行源程序的程序。区别:编译程序有中间代码,而解释程序没有。编译过程的五个阶段: 1、词法分析任务:对构成源程序的字符串进行扫描和分解,识别出一个个单词。 2、语法分析任务:在词法分析的基础上,根据语言规则,把单词符号串分解成各类语法 单位。 3、语义分析和中间代码产生任务:对语法分析所识别出的各类语法范畴,分析其含义, 并进行初步翻译。 4、优化任务:对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效 的目标代码。 5、目标代码生成任务:把中间代码变换成特定机器上的低级语言代码。 编译程序的七个部分词法分析器,语法分析器、语义分析与中间代码产生器、优化器、目标代码生成器、表格管理和出错处理。 编译程序生成的五个办法:机器语言、高级语言、移植、自编译方式和使用工具自动生成。词法规则:指单词符号的形成规则。(也就是正规式) 语法规则:规定了如何从单词符号形成更大的结构。就是语法单位的形成规则。 空字:不包含任何符号的序列。 闭包: 中所有的符号组成的集合。 上下文无关文法是指:所定义的语法范畴是完全独立于这种范畴可能出现的环境的文法。上下文无关文法的四个组成部分:一组终结符号、一组非终结符号、一个开始符号和一组产生式。 终结符号也就是不可再分的基本符号。 非终结符号是用来代表语法范畴,表示一定符号串的集合。 开始符号是语言中我们最感兴趣的语法范畴。 产生式是定义语法范畴的书写规则。 句子:文法中从开始符号推导的终结符号串。 句型:从开始符号推导的符号串。 语言:文法中所有句子的集合。 程序语言的单词符号分为五种:关键字、标识符、常数、运算符和界符。 二元式表示:(种类,属性) 正规式的运算符有三种:或,连接和闭包。优先顺序是:闭包,连接,或。 DFA怎么识别字:若存在一条从初态结点到某一终态结点的通路,且这条通路上所有弧的标记符连接成的字是a,则称a可为DFA所识别。 DFA怎么识别空字:若DFA的初态结点同时又是终态结点,则空字可为DFA所识别。NFA怎么识别字:若存在一条从某一初态结点到终态结点的通路,且这条通路上所有弧的标记字依序连接成的字等于a,则称a可为NFA识别。 NFA怎么识别空字:若M的某些结点即是初态又是终态结点,或者存在一条从某个初态结点到某个终态结点的空通路,那么,空字可为M所识别。 语言的语法结构是用上下文无关文法描述的。 语法分析分为两类:自上而下分析法,自下而上分析法。 自上而下分析法面临的问题:1.文法的左递归问题。2.回溯3.成功可能是暂时的,产生虚假匹配。4.难于知道输入串中出错的确切位置。5.效率低,代价高。

编译原理一些习题答案

第2章形式语言基础 2.2 设有文法G[N]: N -> D | ND D -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (1)G[N]定义的语言是什么? (2)给出句子0123和268的最左推导和最右推导。 解答: (1)L(G[N])={(0|1|2|3|4|5|6|7|8|9)+} 或L(G[N])={α| α为可带前导0的正整数} (2) 0123的最左推导:N ? ND ? NDD ? NDDD ? DDDD ? 0DDD ? 01DD ? 012D ? 0123 0123的最右推导:N ? ND ? N3 ? ND3 ? N23 ? ND23 ? N123 ? D123 ? 0123 268的最左推导:N ? ND ? NDD ? DDD ? 2DDD ? 26D ? 268 268的最右推导:N ? ND ? N8 ? ND8 ? N68 ? D68 ? 268 2.4 写一个文法,使其语言是奇数的集合,且每个奇数不以0开头。 解答: 首先分析题意,本题是希望构造一个文法,由它产生的句子是奇数,并且不以0开头,也就是说它的每个句子都是以1、3、5、7、9中的某个数结尾。如果数字只有一位,则1、3、5、7、9就满足要求,如果有多位,则要求第1位不能是0,而中间有多少位,每位是什么数字(必须是数字)则没什么要求,因此,我们可以把这个文法分3部分来完成。分别用3个非终结符来产生句子的第1位、中间部分和最后一位。引入几个非终结符,其中,一个用作产生句子的开头,可以是1-9之间的数,不包括0,一个用来产生句子的结尾,为奇数,另一个则用来产生以非0整数开头后面跟任意多个数字的数字串,进行分解之后,这个文法就很好写了。 N -> 1 | 3 | 5 | 7 | 9 | BN B -> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | B0 2.7 下面文法生成的语言是什么? G1: S->AB A->aA| εB->bc|bBc G2: S->aA|a A->aS 解答: B ? bc B ? bBc? bbcc B ? bBc? bbBcc ? bbbccc …… A ?ε A ? aA ? a A ? aA ? aaA ? aa …… ∴S ? AB ? a m b n c n , 其中m≥0,n≥1即L(G1)={ a m b n c n | m≥0,n≥1} S ? a S ? aA ? aaS ? aaa S ? aA ? aaS ? aaaA ?aaaaS ? aaaaa …… ∴S ? a2n+1 , 其中n≥0 即L(G2)={ a2n+1 | n≥0} 2.11 已知文法G[S]: S->(AS)|(b) A->(SaA)|(a) 请找出符号串(a)和(A((SaA)(b)))的短语、简单短语和句柄。

(2020年整理)编译原理期末总复习题(含答案).doc

第八节习题一、单项选择题 1、将编译程序分成若干个“遍”是为了 b 。 a.提高程序的执行效率 b.使程序的结构更加清晰 c.利用有限的机器内存并提高机器的执行效率 d.利用有限的机器内存但降低了机器的执行效率 2、构造编译程序应掌握 d 。 a.源程序b.目标语言 c.编译方法d.以上三项都是 3、变量应当 c 。 a.持有左值b.持有右值 c.既持有左值又持有右值d.既不持有左值也不持有右值 4、编译程序绝大多数时间花在 b 上。 a.出错处理b.词法分析 c.目标代码生成d.管理表格 5、 d 不可能是目标代码。 a.汇编指令代码b.可重定位指令代码 c.绝对指令代码d.中间代码 6、使用 a 可以定义一个程序的意义。 a.语义规则b.词法规则 c.产生规则d.词法规则 7、词法分析器的输入是 a 。 a.单词符号串b.源程序 c.语法单位d.目标程序 8、中间代码生成时所遵循的是- d 。 a.语法规则b.词法规则 c.语义规则d.等价变换规则 9、编译程序是对 d 。 a.汇编程序的翻译b.高级语言程序的解释执行 c.机器语言的执行d.高级语言的翻译 10、语法分析应遵循 b 。 a.语义规则b.语法规则 c.构词规则d.等价变换规则 解答 1、将编译程序分成若干个“遍”是为了使编译程序的结构更加清晰,故选b。 2、构造编译程序应掌握源程序、目标语言及编译方法等三方面的知识,故选d。 3、对编译而言,变量既持有左值又持有右值,故选c。 4、编译程序打交道最多的就是各种表格,因此选d。 5、目标代码包括汇编指令代码、可重定位指令代码和绝对指令代码3种,因此不是目标代码的只能选d。 6、词法分析遵循的是构词规则,语法分析遵循的是语法规则,中间代码生成遵循的是语义规则,并且语义规则可以定义一个程序的意义。因此选a。 7、b 8、c 9、d 10、c 二、多项选择题

编译原理复习提纲整理

说明 1.这份资料的最初来源是王金伟老师给大家发的复习提纲,我在下面会给大家附一份原版,后面的21面资料是在那个的基础上整理和细化得到的。最初做这份资料的目的是我本人作为班长为了帮助我们班的同学顺利通过考试而整理的。听王老师说有想法留给学弟学妹们用,我放假后又对一些内容进行了修正和改进,得到了大家看到的这个版本 2.这份资料加入了很多我个人的理解。与原提纲相比,我增删了一些内容,并对某些内容进行了调序与合并。 3.这份资料融入了老师平时上课的以及最后复习课给的,更重要的是我个人的理解和猜测。大家或许都有感受,觉得编译原理书上或者上说的句子根本看不懂。针对这个问题,我把很多晦涩难懂的形式化的算法通过我的理解后用比较形象易懂的话表述了 出来,表述得可能并不科学严谨,但我的目的是为了能帮助大家做题和考试 4.里面的每一个考点我都在最后用括号加了注释,方便不同起点不同准备时间的同学进行选择,这里简单说明 “了解”:代表这一部分的内容被老师列在提纲内,但其实并不太影响大家对大题的计算;并且据我的分析也并不太可能出小题所以时间很紧的同学可以略看就好,当然看看还是有好处的。

“小题”一类的字样代表这一块的知识点值得出填空选择,大家 1 / 47 有时间应该理解性的记忆下来(在2012年的期末考试上,选择 为1分*10题;填空为1分*10题,判断改错为2分*5题,小题总计30分) “简答”:老师在最后复习课上说过编译原理是有简答题的,简 答不同于计算,很可能是让你默写一些步骤。所以这一块内容大家需要背诵,即使不理解也要背下来(在2012年的期末考试上,简答题的分值为5分*4题=20分 “铺垫”“大题步骤”等代表这一块的内容对于综合大题的做题 是必须了解的,或者其实就是做大题的分解步骤,这些块的内容是所有人必须看懂并且记下来的 “实际大题”:总共列出的有4道,应该每年考察的都会是这4 中题型,每一道的分值都在12~15分左右,是所有人想通过考试所必须攻克的。这里通常我会标出他需要用到之前的哪些哪些知识点(2012年期末考试4道题的总分值为50分) 5.如果大家想去打印,最好在装有2007及以上的机器上打印,否则有些符号可能会显示不出来。建议大家去生活广场找机器打,不要去景元鸿 6.由于时间仓促,这份资料做的并不完善和严谨,难免有错漏之处,希望大家谅解。大家可以一边看我的这份资料,一边看老师

编译原理复习要点

考试安排:7月13日(20周周三),15:00-17:00,20208 填空10X1分、选择10X2分、简答4X5分、大题5X10分 考试大题:循环优化 LL(1).定义之类的 算符优先算法 … 自下而上分析法(20分,选择、填空、大题) 第一章引论 一.编译程序(compiler): 把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序 二.编译程序的工作的五个阶段: 词法分析、语法分析、中间代码产生、优化、目标代码产生 1.词法分析 任务: 输入源程序, 符号。 依循的原则:构词规则 描述工具:有限自动机 保留字标识符等符整常数保留字整常数保留字 2.语法分析 任务:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位。 依循的原则:语法规则 述工具:上下文无关文法 3.语义分析与中间代码产生 任务:对各类不同语法范畴按语言的语义进行初步翻译。(变量是否定义、类型是否正确等) 依循的原则:语义规则 中间代码:三元式,四元式,逆波兰记号,树形结构等。是一种独立于具体硬件的记号系统。 例:将Z:=X + 0.618 * Y 翻译成四元式为 (1) * 0.618 Y T1 (2) + X T1 T2 (3) := T2 _ Z 4. 优化 任务:对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效 的目标代码。 依循的原则:程序的等价变换规则 FOR K:=1 TO 100 DO BEGIN M := I + 10 * K;

N := J + 10 * K; END 4.目标代码产生 任务: 把中间代码变换成特定机器上的目标代码。 依赖于硬件系统结构和机器指令的含义 目标代码三种形式: a)绝对指令代码: 可直接运行 b)可重新定位指令代码: 需要连接装配 c)汇编指令代码: 需要进行汇编 三. 编译程序结构 编译程序总框 (简答题5分) 第二章高级语言及其语法描述 2.1.1语法 词法规则:单词符号的形成规则。 a)单词符号是语言中具有独立意义的最基本结构。一般包括:常数、标识符、基 本字、算符、界符等。 b)描述工具:正规式和有限自动机 语法规则:语法单位的形成规则。 a) 语法单位通常包括:表达式、语句、分程序、过程、函数、程序等; c)描述工具:上下文无关文法 2.1.2语义 语义:一组规则,用它可以定义一个程序的意义。 描述方法: a)自然语言描述:隐藏错误、二义性和不完整性 b)形式描述: ?无二义性 ?完整性

编译原理课后习题答案

第一章 1.典型的编译程序在逻辑功能上由哪几部分组成? 答:编译程序主要由以下几个部分组成:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成、错误处理、表格管理。 2. 实现编译程序的主要方法有哪些? 答:主要有:转换法、移植法、自展法、自动生成法。 3. 将用户使用高级语言编写的程序翻译为可直接执行的机器语言程序有哪几种主要的方式? 答:编译法、解释法。 4. 编译方式和解释方式的根本区别是什么? 答:编译方式:是将源程序经编译得到可执行文件后,就可脱离源程序和编译程序单独执行,所以编译方式的效率高,执行速度快; 解释方式:在执行时,必须源程序和解释程序同时参与才能运行,其不产生可执行程序文件,效率低,执行速度慢。

第二章 1.乔姆斯基文法体系中将文法分为哪几类?文法的分类同程序设计语言的设计与实现关 系如何? 答:1)0型文法、1型文法、2型文法、3型文法。 2) 2. 写一个文法,使其语言是偶整数的集合,每个偶整数不以0为前导。 答: Z→SME | B S→1|2|3|4|5|6|7|8|9 M→ε | D | MD D→0|S B→2|4|6|8 E→0|B 3. 设文法G为: N→ D|ND D→ 0|1|2|3|4|5|6|7|8|9 请给出句子123、301和75431的最右推导和最左推导。 答:N?ND?N3?ND3?N23?D23?123 N?ND?NDD?DDD?1DD?12D?123 N?ND?N1?ND1?N01?D01?301 N?ND?NDD?DDD?3DD?30D?301 N?ND?N1?ND1?N31?ND31?N431?ND431?N5431?D5431?75431 N?ND?NDD?NDDD?NDDDD?DDDDD?7DDDD?75DDD?754DD?7543D?75431 4. 证明文法S→iSeS|iS| i是二义性文法。 答:对于句型iiSeS存在两个不同的最左推导: S?iSeS?iiSes S?iS?iiSeS 所以该文法是二义性文法。 5. 给出描述下面语言的上下文无关文法。 (1)L1={a n b n c i |n>=1,i>=0 } (2)L2={a i b j|j>=i>=1} (3)L3={a n b m c m d n |m,n>=0} 答: (1)S→AB A→aAb | ab B→cB | ε (2)S→ASb |ab

相关文档
最新文档