当前位置:文档之家› 编译原理习题集与答案解析(整理后)

编译原理习题集与答案解析(整理后)

编译原理习题集与答案解析(整理后)
编译原理习题集与答案解析(整理后)

第一章

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、编译程序工作过程中,第一段输入是,最后阶段的输出为程序。

4、编译程序是指将程序翻译成程序的程序。

单选解答

1、将编译程序分成若干个“遍”是为了使编译程序的结构更加清晰,故选b。

2、构造编译程序应掌握源程序、目标语言及编译方法等三方面的知识,故选d。

3、对编译而言,变量既持有左值又持有右值,故选c。

4、编译程序打交道最多的就是各种表格,因此选d。

5、目标代码包括汇编指令代码、可重定位指令代码和绝对指令代码3种,因此不是目标代码的只能选d。

6、词法分析遵循的是构词规则,语法分析遵循的是语法规则,中间代码生成遵循的是语义规则,并且语义规则可以定义一个程序的意义。因此选a。

7、b 8、c 9、d 10、c

多选解答

1.b、c 2. a、b、c、e

填空解答

是否生成目标程序 2、词法分析中间代码生成 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)

c. a~b都不一定成立

d. a~b一定成立

5、如果文法G是无二义的,则它的任何句子α。

a. 最左推导和最右推导对应的语法树必定相同

b. 最左推导和最右推导对应的语法树可能不同

c. 最左推导和最右推导必定相同

d. 可能存在两个不同的最左推导,但它们对应的语法树相同

6、由文法的开始符经0步或多步推导产生的文法符号序列是。

a. 短语

b.句柄

c. 句型

d. 句子

7、文法G:E→E+T|T

T→T*P|P

P→(E)|I

则句型P+T+i的句柄和最左素短语为。

+T和i b. P和P+T c. i和P+T+i 和T

8、设文法为:S→SA|A

A→a|b

则对句子aba,下面是规范推导。

a. S SA SAA AAA aAA abA aba

b. S SA SAA AAA AAa Aba aba

c. S SA SAA SAa Sba Aba aba

d. S SA Sa SAa Sba Aba aba

9、文法G:S→b|∧(T)

T→T,S|S

则FIRSTVT(T) 。

a. {b,∧,(}

b. {b,∧,)}

c.{b,∧,(,,}

d.{b,∧,),,}

10、产生正规语言的文法为。

a. 0型

b. 1型

c. 2型

d. 3型

11、采用自上而下分析,必须。

a. 消除左递归

b. 消除右递归

c. 消除回溯

d. 提取公共左因子

12、在规范归约中,用来刻画可归约串。

a. 直接短语

b. 句柄

c. 最左素短语

d. 素短语

13、有文法G:E→E*T|T

T→T+i|i

句子1+2*8+6按该文法G归约,其值为。

a. 23 B. 42 c. 30 d. 17

14、规范归约指。

a. 最左推导的逆过程

b. 最右推导的逆过程

c. 规范推导

d. 最左归约的逆过程

二、多项选择题

1、下面哪些说法是错误的。

a. 有向图是一个状态转换图

b. 状态转换图是一个有向图

c.有向图是一个DFA 可以用状态转换图表示

2、对无二义性文法来说,一棵语法树往往代表了。

a. 多种推导过程

b. 多种最左推导过程

c.一种最左推导过程

d.仅一种推导过程

e.一种最左推导过程

3、如果文法G存在一个句子,满足下列条件之一时,则称该文法是二义文法。

a. 该句子的最左推导与最右推导相同

b. 该句子有两个不同的最左推导

c. 该句子有两棵不同的最右推导

d. 该句子有两棵不同的语法树

e.该句子的语法树只有一个

4、有一文法G:S→AB

A→aAb|ε

B→cBd|ε

它不产生下面集合。

a. {a n b m c n d m|n,m≥0}

b. {a n b n c m d m|n,m>0}

c. {a n b m c m d n|n,m≥0}

d. {a n b n c m d m|n,m≥0}

e. {a n b n c n d n|n≥0}

5、自下而上的语法分析中,应从开始分析。

a. 句型

b. 句子

c. 以单词为单位的程序

d. 文法的开始符

e. 句柄

6、对正规文法描述的语言,以下有能力描述它。

型文法型文法 c.上下文无关文法 d.右线性文法 e.左线性文法

三、填空题

1、文法中的终结符和非终结符的交集是。词法分析器交给语法分析器的文法符号一定是,它一定只出现在产生式的部。

2、最左推导是指每次都对句型中的非终结符进行扩展。

3、在语法分析中,最常见的两种方法一定是分析法,另一是分析法。

4、采用语法分析时,必须消除文法的左递归。

5、树代表推导过程,树代表归约过程。

6、自下而上分析法采用、归约、错误处理、等四种操作。

7、Chomsky把文法分为种类型,编译器构造中采用和文法,它们分别产生和语言,并分别用和自动机识别所产生的语言。

四、判断题

1、文法 S→aS|bR|ε描述的语言是(a|bc)* ( )

R→c S

2、在自下而上的语法分析中,语法树与分析树一定相同。()

3、二义文法不是上下文无关文法。()

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

5、规范归约和规范推导是互逆的两个过程。()

6、一个文法所有句型的集合形成该文法所能接受的语言。()

五、简答题

1、句柄

2、素短语

3、语法树

4、归约

5、推导

六、问答题

1、给出上下文无关文法的定义。

2、文法G[S]:

S→aSPQ|abQ

QP→PQ

bP→b b

bQ→bc

cQ→cc

(1)它是Chomsky哪一型文法

(2)它生成的语言是什么

3、按指定类型,给出语言的文法。

L={a i b j|j>i≥1}的上下文无关文法。

4、有文法G:S→aAcB|Bd

A→AaB|c

B→bScA|b

(1)试求句型aAaBcbbdcc和aAcbBdcc的句柄;

(2)写出句子acabcbbdcc的最左推导过程。

5、对于文法G[S]:

S→(L)|aS|a L→L, S|S

(1)画出句型(S,(a))的语法树。(2)写出上述句型的所有短语、直接短语、句柄和素短语。

6、考虑文法G[T]:

T→T*F|F

F→F↑P|P

P→(T)|i

证明T*P↑(T*F)是该文法的一个句型,并指出直接短语和句柄。

单选[解答]

1、选c。

2、选a。

3、选c。

4、虽然a与b没有优先关系,但构造优先函数后,a与b就一定存在优先关系了。所以,由

f(a)>g)(b)或f(a)

5、如果文法G无二义性,则最左推导是先生长右边的枝叶:对于d,如果有两个不同的是了左

6、选c。

7、由图2-8-1的语法树和优先关系可以看出应选b。

8、规范推导是最左推导,故选d。

9、由T→T,…和T→(…得FIRSTVT(T))={(,,)};

由T→S得FIRSTVT(S)?FIRSTVT(T),而FIRSTVT(S)={b,∧,(};即

FIRSTVT(T)={b,∧,(,,};因此选c。

10、d 11、c 12、b 13、b 14、b

多选解答 1、e、a、c 2、a、c、e 3、b、c、d 4、a、c 5、b、c 6、a、b、c、d、e

填空解答 1、空集终结符右

2、最左

3、自上而上自下而上

4、自上而上

5、语法分析

6、移进接受

7、4 2 型 3型上下文无关语言正规语言下推自动机有限

判断解答 1、对 2、错 3、错 4、错 5、错 6、错

简答[解答]

1、句柄:一个句型的最左直接短语称为该句型的句柄。

2、素短语:至少含有一个终结符的素短语,并且除它自身之外不再含任何更小的素短语。

3、语法树:满足下面4个条件的树称之为文法G[S]的一棵语法树。

①每一终结均有一标记,此标记为V N∪V T中的一个符号;

②树的根结点以文法G[S]的开始符S标记;

③若一结点至少有一个直接后继,则此结点上的标记为V N中的一个符号;

④若一个以A为标记的结点有K个直接后继,且按从左至右的顺序,这些结点的标记分别

为X1,X2,…,X K,则A→X1,X2,…,X K,必然是G的一个产生式。

4、归约:我们称αγβ直接归约出αAβ,仅当A→γ是一个产生式,且α、β∈(V N∪V T)*。

归约过程就是从输入串开始,反复用产生式右部的符号替换成产生式左部符号,直至文法开始符。

5、推导:我们称αAβ直接推出αγβ,即αAβαγβ,仅当A→γ是一个产生式,且α、

β∈(V N∪V T)*。如果α1α2…αn,则我们称这个序列是从α1至α2的一个推导。若存在一个从α1αn的推导,则称α1可推导出αn。推导是归约的逆过程。

问答1[解答]

一个上下文无关文法G是一个四元式(V T,V N,S, P),其中:

●V T是一个非空有限集,它的每个元素称为终结符号;

●V N是一个非空有限集,它的每个元素称为非终结符号,V T∩V N=Φ;

●S是一个非终结符号,称为开始符号;

●P是一个产生式集合(有限),每个产生式的形式是P→α,其中,P∈V N,

α∈(V T∪V N)*。开始符号S至少必须在某个产生式的左部出现一次。

2[解答]

(1)由于产生式左部存在终结符号,且所有产生式左部符号的长度均小于等于产生式右部的符号长度,所以文法G[S]是Chomsky1型文法,即上下文有关文法。

(2)按产生式出现的顺序规定优先级由高到低(否则无法推出句子),我们可以得到:

S abQ abc

S aSPQ aabQPQ aabPQQ aabbQQ aabbcQ aabbcc

S aSPQ aaSPQPQ aaabQPQPQ aaabPQQPQ aaabPQPQQ aaaPPQQQ

aaabbPqqq aaabbQQQ aaabbbcQQ aaabbbccQ aaabbbccc

……

于是得到文法G[S]生成的语言L={a n b n c n|n≥1}

3【解答】

(1)由L={a i b j|j>i≥1}知,所求该语言对应的上下文无关文法首先应有S→aSb型产生式,以保证b的个数不少于a的个数;其次,还需有S→Sb或S→bS型的产生式,用以保证b的个数多于a的个数;也即所求上下文无关文法G[S]为:

G[S]:S→aSb|Sb|b

T

T * F

S ( L )

L , S

S ( L )

S

4【解答】(1)分别画出对应两句型的语法树,如图2-8-2所示 句柄:AaB Bd

图2-8-2 语法树

(2)句子acabcbbdcc 的最左推导如下: S

aAcB

aAaBcB

acaBcB

acabcB

acabcbScA

acabcbBdcA

acabcbbdcA acabcbbdcc 5【解答】

(1)句型(S,(a ))的语法树如图2-8-3所示

(2)由图2-8-3可知:

①短语:S 、a 、(a)、S,(a)、(S,(a)); ②直接短语:a 、S ; ③句柄:S ;

④素短语:素短语可由图2-8-3中相邻终结符之间的优先关系求得,即;

因此素短语为a 。 6【解答】

# ·(·, ·( ·a · )· )· #

S

a A c B

A a

B b S c A

B d c

S

a A c B

B S c A

B d c

首先构造T*P↑(T*F)的语法树如图2-8-4所示。

由图2-8-4可知,T*P↑(T*F)是文法G[T]的一个句型。

直接短语有两个,即P和T*F;句柄为P。

第三章

一、单项选择题

1、词法分析所依据的是。

a. 语义规则

b. 构词规则

c. 语法规则

d. 等价变换规则

2、词法分析器的输出结果是。

a. 单词的种别编码

b. 单词在符号表中的位置

c. 单词的种别编码和自身值

d. 单词自身值

3、正规式M1和M2等价是指。

a. M1和M2的状态数相等

b. M1和M2的有向弧条数相等

c. M1和M2所识别的语言集相等

d. M1和M2状态数和有向弧条数相等

4、状态转换图(见图3-6-1)接受的字集为。

a. 以 0开头的二进制数组成的集合

b. 以0结尾的二进制数组成的集合

c. 含奇数个0的二进制数组成的集合

d. 含偶数个0的二进制数组成的集合

5、词法分析器作为独立的阶段使整个编译程序结构更加简洁、明确,因此,。

a. 词法分析器应作为独立的一遍

b. 词法分析器作为子程序较好

c. 词法分析器分解为多个过程,由语法分析器选择使用

d. 词法分析器并不作为一个独立的阶段

二、多项选择题

1、在词法分析中,能识别出。

a. 基本字

b. 四元式

c. 运算符

d. 逆波兰式

e. 常数

2、令∑={a,b},则∑上所有以b开头,后跟若干个ab的字的全体对应的正规式为。

a. b(ab)*

b. b(ab)+

c.(ba)*b

d. (ba)+b

e. b(a|b)

三、填空题

1、确定有限自动机DFA是的一个特例。

2、若二个正规式所表示的相同,则认为二者是等价的。

3、一个字集是正规的,当且仅当它可由所。

四、判断题

1、一个有限状态自动机中,有且仅有一个唯一终态。()

2、设r和s分别是正规式,则有L(r|s)=L(r)|L(s)。()

3、自动机M和M′的状态数不同,则二者必不等价。()

4、确定的自动机以及不确定的自动机都能正确地识别正规集。()

5、对任意一个右线性文法G,都存在一个NFA M,满足L(G)=L(M)。()

6、对任意一个右线性文法G,都存在一个DFA M,满足L(G)=L(M)。()

7、对任何正规表达式e,都存在一个NFA M,满足L(G)=L(e)。()

8、对任何正规表达式e,都存在一个DFA M,满足L(G)=L(e)。()

五、基本题

1、设M=({x,y}, {a,b}, f,x,{y})为一非确定的有限自动机,其中f定义如下:

f(x,a)={x,y} f(x,b)={y}

f(y,a)=φf(y,b)={x,y} 试构造相应的确定有限自动机M′。

2、对给定正规式b*(d|ad)(b|ab)+,构造其NFA M;

单选解答 1、b 2、c 3、c 4、d 5、b

多选解答 1、a、c、e 2、a、b、d

填空解答 1、NFA 2、正规集 3、DFA(NFA)所识别

判断解答 1 、2、3、错 4、5、6、7、8、正确

将转换矩阵中的所有子集重新命名而形成表3-6-4所示的状态转换矩阵。

图3-6-7 的NFA M

表3-6-4 状态转换矩阵 即得到M ′=({0,1,2}, {a,b}, f,0, {1,2}),其状态转换图如图3-6-5所示。

将图3-6-5的DFA M ′最小化。首先,将M ′的状态分成终态组{1,2}与非终态组{0};其次,考察{1,2}。由于{0},{1,2}:令状态1代表2。最后,得到如图3-6-6所示化简DFA M ′。

2解答:首先用A +

*

**

NFA M ,如图3-6-7所示。

第四章1、构造下面文法的LL(1)分析表。

D→ TL

T→ int | real

L→ i d R

R→, id R | ε

2、下面文法G[S]是否为LL(1)文法说明理由。

S → A B | P Q x A → x y B → b c P → d P | εQ → a Q | ε

3、设有以下文法:

G[S]:S→aAbDe|d

A→BSD|e

B→SAc| cD| ε

D→Se| ε

(1)求出该文法的每一个非终结符U的FOLLOW集。

(2)该文法是LL(1)文法吗

(3)构造C[S]的LL(1)分析表。

4、将文法G[V]改造成为LL(1)的。

G[V]:V→N|N[E]

E→V|V+E

N→i

5、已知文法:

G[A]:A→aAa|ε

(1)该文法是LL(1)文法吗为什么

(2)若采用LL(1)方法进行语法分析,如何得到该文法的LL(1)分析表

(3)若输入符号串“aaaa”,请给出语法分析过程。

1解答: LL(1)分析表见表4-3-1

分析虽然这个文法很简单,我们还是从求开始符号集合和后继符号集合开始。

FIRST(D)=FIRST(T)={int, real} FOLLOW(D)=FOLLOW(L)={#}

FIRST(L)={id} FOLLOW(T)={id}

FIRST(R)={,, ε} FOLLOW(R)={#}

有了上面每个非终结符的FIRST集合,填分析表时要计算一个产生式右部α的FIRST(α)就不是件难事了。

填表时唯一要小心的时,ε是产生式R→ε右部的一个开始符号,而#在FOLLOW(R)中,所以R→ε填在输入符号#的栏目中。

表4-3-1 LL(1)分析表

2解答:该文法不是LL(1)文法,见下面分析中的说明。

分析只有三个非终结符有两个选择。

1、P的两个右部d P 和ε 的开始符号肯定不相交。

2、Q的两个右部a Q 和ε 的开始符号肯定不相交。

3、对S来说,由于x ∈ FIRS T(A B),同时也有x ∈ FIRST(P Q x)(因为P和Q都可能为空)。所以该文法不是LL(1)文法。

3解答:(1)求文法的每一个非终结符U的FOLLOW集的过程如下:因为:

① S是识别符号,且有A→BSD、B→SAc、D→Se,所以FOLLOW(S)应包含

FIRST(D)∪FIRST(Ac) ∪FIRST(e) ∪{#}

={a,d}∪{a,d,c,e}∪{e}∪{#}

={a,c,d,e#}

②又因为A→BSD和D→ε,所以FOLLOW中还包含FOLLOW(A)。

因为S→aAbDe和B→SAc,所以

FOLLOW(A)=FIRST(bDe)∪FIRST(c)={b,c}

综合①、②得FOLLOW(S)={a,d,c,e,#}∪{a,b,c,d,e,#}

因为A→BSD,所以 FOLLOW(B)=FIRST(SD)={a,d}

因为S→aAbDe | d、A→BSD| e和B→SAc | cD,所以

FOLLOW(D)=FIRST(e)∪FOLLOW(A)∪FOLLOW(B)

={e}∪{b,c}∪{a,d}={a,b,c,d,e}

(2)G[S]不是LL(1)文法。

因为产生式B→SAc|cD| ε中

FIRST(SAc)∩FOLLOW(B)={a,d}≠?

(3)构造G[S]的LL(1)分析表。

按照LL(1)分析表的构造算法构造方法G[S]的LL(1)分析表如表4-3-2所示。

表4-3-2 G[S]的LL(1)分析表

4解答:对文法G[V]提取公共左因子后得到文法:

G′[V]:V→NA

A→ε|[E]

E→VB

B→ε|+E

N→i

求出文法G′[V]中每一个非终结符号的FIRST集:

FIRST(V)={i} FIRST(A)={[, ε}

FIRST(E)={i} FIRST(B)={+, ε}

FIRST(N)={i}

求出文法G′[V]中每一个非终结符号的FOLLOW集:

FOLLOW(V)={#}∪FIRST(B)\{ε}∪FOLLOW(E)={#,+,]}

FOLLOW(A)= FOLLOW(V)={+,,#}

FOLLOW(E)= FIRST(])\{ε}∪FOLLOW(B)= FIRST(])\{ε}∪FOLLOW(E)={]}

FOLLOW(B)= FOLLOW(E)={ ]}

FOLLOW(N)= FIRST(A)\{ε}∪FOLLOW(V)={[,],+,#}

可以看到,对文法G′[V]的产生式A→ε|[E],有

FIRST([E])∩FOLLOW(A)={[}∩{+,],#}= ?

对产生式B→ε|+E,有

FIRST(+E)∩FOLLOW(B)={+}∩{]}= ?

而文法的其他产生式都只有一个不为ε的右部,所以文法G′[V]是LL(1)文法。

5解答:(1)因为产生式A→aAa|ε有空产生式右部,而

FOLLOW(A)={#}∪FIRST(a)={a, #}

造成 FIRST(A)∩FOLLOW(A)={A, ε}∩{a, #}≠?

所以该文法不是LL(1)文法。

(2)若采用LL(1)方法进行语法分析,必须修改该文法。

因该文法产生偶数(可以为0)个a,所以得到文法

G′[A]:A→aaA|ε

此时对产生式A→aaA|ε,有 FOLLOW(A)={#}∪FOLLOW(A)={#},因而

FIRST(A)∩FOLLOW(A)={a, ε}∩{#}=?

所以文法G′[A]是LL(1)文法,按LL(1)分析表构造算法构造该文法的LL(1)分析表如表4-3-3所示。

表4-3-3 文法G′[A]的LL(1)分析表

(3)若采用LL(1)方法进行语法分析,对符号串“aaaa”的分析过程如表4-3-4所示。

表4-3-4 对符号串“aaaa”的分析过程

第五章

1.设有文法G[S]为:

S→a|b|(A)

A→SdA|S

(1)完成下列算符优先关系表,见表5-7-1,并判断G[S]是否为算符优先文法。

表5-7-1 算符优先关系表

(2)给出句型(SdSdS)的短语、简单短语、句柄、素短语和最左素短语。

(3)给出输入串(adb)#的分析过程。

解答:

(1)先求文法G[S]的FIRSTVT集和LASTVT集:

由S→a|b|(A)得:FIRSTVT(S)={a,b,( );

由A→Sd…得:FIRSTVT(A)={d};又由A→S…得:FIRSTVT(S) ?FIRSTVT(A),即FIRSTVT(A)={d,a,b,(};

由S→a|b|(A)得;LASTVT(S)={a,b,}};

由A→…dA得:LASTVT(A)={d},又由A→S得:LASTVT(S) ?LASTVT(A),即LASTVT(A)={d,a,b,)}。

构造优先关系表方法如下:

①对P→…ab…,或P→…aQb…,有a?b;

②对P→…aR…,而b∈FIRSTVT(R),有a?b;

③对P→…Rb…,而a∈FIRSTVT(R),有a?b。

由此得到:

①由S→(A)得:(?);

②由S→(A…得:(?FIRSTVT(A),即:(?d,(? a ,(?b,(?(;由A→…dA得:d?FIRSTVT(A),即:d?d,d?a,d?b,d?(;

③由S→A)得,LASTVT(A)?),即:d?),a?),b?),)?);由A→Sd…得:LASTVT(S)?d,即:a ?d,b?d,)?d;

此外,由#S#得:#?#;

由#?FIRSTVT(S)得:#?a,#?b,#?(;脂由LASTVT(S)?#得:d?#,a?#,b?#,)?#。

最后得到算符优先关系表,见表5-7-2。

表5-7-2 算符优先关系表

由表5-7-2可以看出,任何两个终结符之间至少只满足?、?、?三种优先关系之一,故G[S]为算符优先文法。

(2)为求出句型(SdSdS )的短语、简单短语、句柄,我们先画出该句型对应的语法树,如图5-7-3所示。由图5-7-3得到: 短语:S ,SdS

,SdSdS ,(SdSdS ) 简单短语(即直接短语):S 句柄(即最左直接短语):S

素短语:SdS ,它同时也是该句型的最左素短语。

(3)输入串(adb )#的分析过程见表5-7-4

表5-7-4 输入串(adb )#的分析过程

第六章

一、单项选择题

1、若a为终结符,则A→α·aβ为项目

a.归约

b.移进

c.接受

d.待约

2、若项目集I k含有A→α·,则在状态k时,仅当面临的输入符号a∈FOLLOW(A)时,才采取“A →α·”动作的一定是。

文法(0)文法(1)文法(1)文法

3、就文法的描述能力来说,有。

a. SLR(1)?LR(0)

b. LR(1)?LR(0)

c. SLR(1)?LR(1)

d.无二义文法?LR(1)

4、在LR(0)的ACTION子表中,如果某一行中存在标记“r j”的栏,则。

a.该行必定填满r j

b.该行未填满r j

c.其他行也有r j子表中也有r j

5、一个指明了在分析过程中的某时刻所能看到产生式多大一部分。

a.活前缀

b.前缀

c.项目

d.项目集

二、多项选择题

1、一个LR分析器包括。

a.一个总控程序

b.一个项目集

c.一个活前缀

d.一张分析表

e.一个分析栈

2、LR分析器核心部分是一张分析表,该表包括等子表。

(1)分析 b.优先关系

3、每一项ACTION[S,a]所规定的动作包括。

a.移进

b.比较

c.接受

d.归约

e.报错

4、对LR分析表的构造,有可能存在动作冲突。

a.移进

b.归约

c.移进/归约

d.移进/移进

e.归约/归约

5、就文法的描述能力来说,有。

a. SLR(1)?LR(1)

b. LR(1)?SLR(1)

c. LR(0)?LR(1)

d. LR(1)?无二义文法

e. SLR(1)?无二义文法

编译原理期末复习

编译原理期末复习 鉴于编译原理马上就要期末考试,我将手中集中的一些资料上的题目进行了整理归类,每种类型题目给出了所涉及到的基本知识,然后对每类题目中的第一道例题进行了做法进行了讲解,剩下的例题请给大家作为练习,答案也都给出,希望对大家复习有所帮助,最后由于时间很紧,整理的有些仓促,整理中难免有遗漏或错误,请大家见谅。 注:下面出现的字母中,若无特别说明,小写英文字母为终结符,大写英文字母为非终结符,希腊字母为终结符与非终结符的任意组合。 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:产生式集合(有限)。

编译原理期末考试习题及答案

一、填空题|(每题4分,共20分) 1. 乔母斯基定义的3型文法(线性文法)产生式形式 A→Ba|a,或A→aB|a,A,B∈Vn, a,b∈Vt 。 2.语法分析程序的输入是单词符号,其输出是语法单位。 3 型为 B → .aB 的LR(0)项目被称为移进项目,型为 B → a.B 的LR(0) 项目被称为待约项目, 4.在属性文法中文法符号的两种属性分别为继承属性和综合属性。 5、运行时存贮管理方案有静态存储分配、动态存储分配和堆式存储分配和方案。 二.已知文法 G(S) (1) E → T | E+T (2) T → F | F*F (3) F →(E)| i (1)写出句型(T*F+i)的最右推到并画出语法树。(4分) (2)写出上述句型的短语,直接短语和句柄。(4分) 答:(1)最右推到(2分) E ==> T ==> F ==> (E) ==> (E+T) ==> (E+F) ==> (E+i) ==> (T+i) ==> (T*F+i) (2) 语法树(2分) (3)(4分) 短语:(T*F+i),T*F+i ,T*F , i 直接短语:T*F , i 句柄:T*F 三. 证明文法G(S) :S → SaS |ε是二义的。(6分) 答:句子aaa对应的两颗语法树为:

因此,文法是二义文法 四.给定正规文法G(S): (1) S → Sa | Ab |b (2) A → Sa 请构造与之等价的DFA。(6分) 答:对应的NFA为:(6分) 状态转换表: a b {F} Φ{S} {S} {S,A} Φ {S,A} {S,A} {S} 五. 构造识别正规语言b*a(bb*a)*b* 最小的DFA(要求写出求解过程)。(15分)答:(1)对应的NFA(5分) a b {0} {1,3} {0} {1,3} Φ{2,3} {2,3} {1,3} {2,3} (5分) 六. 已知文法G(S) : (1) S → ^ | a | (T) (2) T → T,S | S 试:(1)消除文法的左递归;(4分) (2)构造相应的first 和 follow 集合。(6分) 答:(1)消除文法的左递归后文法 G’(S)为: (1) S → ^ | a | (T)

编译原理56章作业答案

第五章 练习5.1.1: 对于图5-1中的SDD,给出下列表达式对应的注释语法分析树: 1)(3+4)*(5+6)n 练习5.2.4: 这个文法生成了含“小数点”的二进制数: S->L.L|L L->LB|B B->0|1 设计一个L属性的SDD来计算S.val,即输入串的十进制数值。比如,串101.101应该被翻译为十进制的5.625。提示:使用一个继承属性L.side来指明一个二进制位在小数点的哪一边。 答: 元文法消除左递归后可得到文法: S->L.L|L L->BL’ L’->BL’|ε B->0|1 使用继承属性L.side指明一个二进制位数在小数点的哪一边,2表示左边,1表示右边 使用继承属性m记录B的幂次 非终结符号L和L’具有继承属性inh、side、m和综合属性syn

练习5.3.1:下面是涉及运算符+和整数或浮点运算分量的表达式文法。区分浮点数的方法是看它有无小数点。 E-〉E+T|T T-〉num.num|num 1)给出一个SDD来确定每个项T和表达式E的类型 2)扩展(1)中得到的SDD,使得它可以把表达式转换成为后缀表达式。使用一个单目运算符intToFloat把一个整数转换为相等的浮点数 答: 练习5.4.4:为下面的产生式写出一个和例5.10类似的L属性SDD。这里的每个产生式表

示一个常见的C语言中的那样的控制流结构。你可能需要生成一个三地址语句来跳转到某个标号L,此时你可以生成语句goto L 1)S->if (C) S1 else S2 2)S->do S1 while (C) 3)S->’{’ L ‘}’; L -> LS|ε 请注意,列表中的任何语句都可以包含一条从它的内部跳转到下一个语句的跳转指令,因此简单地为各个语句按序生成代码是不够的。 第六章 练习6.1.1:为下面的表达式构造DAG ((x+y)-((x+y)*(x-y)))+((x+y)*(x-y)) 答:DAG如下

编译原理作业答案

编译原理作业答案 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】

《编译原理》第一次作业参考答案 一、下列正则表达式定义了什么语言(用尽可能简短的自然语言描述) 1.b*(ab*ab*)* 所有含有偶数个a的由a和b组成的字符串. 2.c*a(a|c)*b(a|b|c)* | c*b(b|c)*a(a|b|c)* 答案一:所有至少含有1个a和1个b的由a,b和c组成的字符串. 答案二:所有含有子序列ab或子序列ba的由a,b和c组成的字符串. 说明:答案一要比答案二更好,因为用自然语言描述是为了便于和非专业的人员交 流,而非专业人员很可能不知道什么是“子序列”,所以相比较而言,答案一要更 “自然”. 二、设字母表∑={a,b},用正则表达式(只使用a,b,?,|,*,+,)描述下列语言: 1.不包含子串ab的所有字符串. b*a* 2.不包含子串abb的所有字符串. b*(ab)* 3.不包含子序列abb的所有字符串. b*a*ba* 注意:关于子串(substring)和子序列(subsequence)的区别可以参考课本第119页方框中的内容. ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ 《编译原理》第二次作业参考答案

一、考虑以下NFA: 1.这一NFA接受什么语言(用自然语言描述) 所有只含有字母a和b,并且a出现偶数次或b出现偶数次的字符串. 2.构造接受同一语言的DFA. 答案一(直接构造通常得到这一答案): 答案二(由NFA构造DFA得到这一答案): 二、正则语言补运算

编译原理知识点

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

编译原理第4章作业答案

编译原理第4章作业 答案 本页仅作为文档封面,使用时可以删除 This document is for reference only-rar21year.March

第四章 习题4.2.1:考虑上下文无关文法: S->S S +|S S *|a 以及串aa + a* (1)给出这个串的一个最左推导 S -> S S * -> S S + S * -> a S + S * -> a a + S * -> aa + a* (3)给出这个串的一棵语法分析树 习题4.3.1:下面是一个只包含符号a和b的正则表达式的文法。它使用+替代表示并运算的符号|,以避免和文法中作为元符号使用的竖线相混淆: rexpr→ rexpr + rterm | rterm rterm→rterm rfactor | rfactor rfactor→ rfactor * | rprimary rprimary→a | b 1)对这个文法提取公因子 2)提取公因子的变换使这个文法适用于自顶向下的语法分析技术吗? 3)提取公因子之后,原文法中消除左递归 4)得到的文法适用于自顶向下的语法分析吗? 解

1)提取左公因子之后的文法变为 rexpr→ rexpr + rterm | rterm rterm→rterm rfactor | rfactor rfactor→ rfactor * | rprimary rprimary→a | b 2)不可以,文法中存在左递归,而自顶向下技术不适合左递归文法 3)消除左递归后的文法

rexpr -> rterm rexpr’ rexpr’-> + rterm rexpr’|ε rterm-> rfactor rterm’ rterm’-> rfactor rterm’|ε rfactor-> rprimay rfactor’ rfactor’-> *rfactor’|ε rprimary-> a | b 4)该文法无左递归,适合于自顶向下的语法分析 习题4.4.1:为下面的每一个文法设计一个预测分析器,并给出预测分析表。可能要先对文法进行提取左公因子或消除左递归 (3)S->S(S)S|ε (5)S->(L)|a L->L,S|S 解 (3) ①消除该文法的左递归后得到文法 S->S’ S’->(S)SS’|ε ②计算FIRST和FOLLOW集合 FIRST(S)={(,ε} FOLLOW(S)={),$} FIRST(S’)={(,ε} FOLLOW(S’)={),$} ③构建预测分析表

编译原理作业

编译原理作业 P7:1.1;1.2自编2.1;2.2自编2.3;2.4自编2.5自编3.1 自编3.2自编3.3;3.4P100.4.1;4.2自编4.3;4.4自编5.1 自编5.2自编7.1;7.2 自编8.1 P7:1.1 P7;1.2 自编2.1 文法G[S]:S→xSx│y所识别的语言是。 a. xyx b. (xyx)* c. x n yx n(n≥0) d. x*yx* 【解答】 自编2.2 令文法G[N]为 G[N]: N→D∣ND D→0∣1∣2∣3∣4∣5∣6∣7∣8∣9 (1) G[N]的语言L(G)是什么? (2) 给出句子0127、34和568的最左推导和最右推导。 【解答】 自编2.3 对于文法G[S]: S→(L)∣aS∣a L→L, S∣S (1) 画出句型(S,(a))的语法树; (2) 写出上述句型的所有短语、直接短语、句柄。 【解答】 自编2.4 已知文法G[S]为S→SaS∣ε,试证明文法G[S]为二义文法。 【解答】 自编2.5 按指定类型,给出语言的文法。 (1) L={a i b j│j>i≥1}的上下文无关文法; (2) 字母表∑={a,b}上的同时只有奇数个a和奇数个b的所有串的集合的正规文法;

自编3.1 什么是扫描器?扫描器的功能是什么? 自编3.2 结合自动机证明:正规式(ab)*a与正规式a(ba)*是否等价?给出分析过程。 自编3.3 已知自动机DFA如图3-4所示 图3-4 DFA 写出其对应的语言,分别用正规文法和自然语言描述。 【解答】 自编3.4 设有L(G)={a2n+1b2m a2p+1| n≥0,p≥0,m≥1}。 (1) 给出描述该语言的正规表达式; (2) 构造识别该语言的确定有限自动机(可直接用状态图形式给出)。【解答】 P100:4.1 P100;4.2 自编4.3 在算符优先分析法中,为什么要在找到最左素短语的尾时才返回来确定其对应的头,能否按扫描顺序先找到头后再找到对应的尾,为什么? 【解答】 自编4.4 设有文法G[S]: S→a|b|(A) A→SdA|S (1) 构造算符优先关系表;

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

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,^,+,),#}=φ

编译原理期末考试题目及答案

一、填空题(每空2分,共20分) 1.编译程序首先要识别出源程序中每个单词,然后再分析每个句子并翻译其意义。 2.编译器常用的语法分析方法有自底向上和自顶向下两种。 3.通常把编译过程分为分析前端与综合后端两大阶段。词法、语法和语义分析是对源程序的分析,中间代码生成、代码优化与目标代码的生成则是对源程序的综合。 4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即静态存储分配方案和动态存储分配方案。 5.对编译程序而言,输入数据是源程序,输出结果是目标程序。 1.计算机执行用高级语言编写的程序主要有两种途径:解释和编译。 2.扫描器是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。 3.自下而上分析法采用移进、归约、错误处理、接受等四种操作。 4.一个LL(1)分析程序需要用到一张分析表和符号栈。 5.后缀式abc-/所代表的表达式是a/(b-c)。 二、单项选择题(每小题2分,共20分) 1.词法分析器的输出结果是__C。 A.单词的种别编码B.单词在符号表中的位置 C.单词的种别编码和自身值D.单词自身值 2.正规式M 1 和M 2 等价是指__C_。 A.M1和M2的状态数相等 B.M1和M2的有向边条数相等 C.M1和M2所识别的语言集相等D.M1和M2状态数和有向边条数相等 3.文法G:S→xSx|y所识别的语言是_C____。 A.xyx B.(xyx)* C.xnyxn(n≥0) D.x*yx* 4.如果文法G是无二义的,则它的任何句子α_A____。 A.最左推导和最右推导对应的语法树必定相同B.最左推导和最右推导对应的语法树可能不同 C.最左推导和最右推导必定相同D.可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握____D__。 A.源程序B.目标语言C.编译方法D.以上三项都是 6.四元式之间的联系是通过__B___实现的。 A.指示器B.临时变量C.符号表D.程序变量 7.表达式(┐A∨B)∧(C∨D)的逆波兰表示为__B___。 A.┐AB∨∧CD∨B.A┐B∨CD∨∧ C.AB∨┐CD∨∧D.A┐B∨∧CD∨ 8. 优化可生成__D___的目标代码。 A.运行时间较短 B.占用存储空间较小 C.运行时间短但占用内存空间大D.运行时间短且占用存储空间小 9.下列___C___优化方法不是针对循环优化进行的。 A. 强度削弱B.删除归纳变量C.删除多余运算D.代码外提 10.编译程序使用_B_区别标识符的作用域。 A. 说明标识符的过程或函数名B.说明标识符的过程或函数的静态层次 C.说明标识符的过程或函数的动态层次 D. 标识符的行号 三、判断题(对的打√,错的打×,每小题1分,共10分) 2.一个有限状态自动机中,有且仅有一个唯一的终态。x

编译原理作业答案

《编译原理》第一次作业参考答案 一、下列正则表达式定义了什么语言(用尽可能简短的自然语言描述)? 1.b*(ab*ab*)* 所有含有偶数个a的由a和b组成的字符串. 2.c*a(a|c)*b(a|b|c)* | c*b(b|c)*a(a|b|c)* 答案一:所有至少含有1个a和1个b的由a,b和c组成的字符串. 答案二:所有含有子序列ab或子序列ba的由a,b和c组成的字符串. 说明:答案一要比答案二更好,因为用自然语言描述是为了便于和非专业的人员交流,而非专业人员很可能不知道什么是“子序列”,所以相比较而言,答案一要更“自然”. 二、设字母表∑={a,b},用正则表达式(只使用a,b, ,|,*,+,?)描述下列语言: 1.不包含子串ab的所有字符串. b*a* 2.不包含子串abb的所有字符串. b*(ab?)* 3.不包含子序列abb的所有字符串. b*a*b?a* 注意:关于子串(substring)和子序列(subsequence)的区别可以参考课本第119页方框中的内容. ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ 《编译原理》第二次作业参考答案 一、考虑以下NFA: 1.这一NFA接受什么语言(用自然语言描述)? 所有只含有字母a和b,并且a出现偶数次或b出现偶数次的字符串. 2.构造接受同一语言的DFA. 答案一(直接构造通常得到这一答案):

答案二(由NFA构造DFA得到这一答案): 二、正则语言补运算 3.画出一个DFA,该DFA恰好识别所有不含011子串的所有二进制串. 1.画出一个DFA,该DFA恰好识别所有不含011子串的所有二进制串.

编译原理知识点汇总

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

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

编译原理试题及答案3

编译原理复习题 一、填空题: 1、编译方式与解释方式的根本区别在于(是否生成目标代码)。 2、对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。 3、如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:(编译阶段)和(运行阶段)。 4、如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分成三个阶段:(编译阶段)、(汇编阶段)和(运行阶段)。 5、自顶向下语法分析方法会遇到的主要问题有(回溯)和((左递归带来的)无限循环)。 6、LL(k)分析法中,第一个L的含义是(从左到右进行分析),第二个L的含义是(每次进行最左推导),“k”的含义是(向输入串中查看K个输入符号)。 7、LL(1)分析法中,第一个L的含义是(从左到右进行分析),第二个L的含义是(每次进行最左推导),“1”的含义是(向输入串中查看1个输入符号)。 8、自顶向下语法分析方法的基本思想是:从(识别符号)出发,不断建立(直接推导),试图构造一个推导序列,最终由它推导出与输入符号相同的(符号串)。 9、自底向上语法分析方法的基本思想是:从待输入的符号串开始,利用文法的规则步步向上进行(直接归约),试图(归约)到文法的(识别符号|开始符号)。 10、LR(0)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“0”的含义是(向貌似句柄的符号串后查看0个输入符号)。 11、LR(1)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。 12、SLR(1)分析法的名字中,“S”的含义是(简单的),“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。 13、在编译过程中,常见的中间语言形式有(逆波兰表示)、(三元式)、(四元式)和(树形表示)。 14、在编译程序中安排中间代码生成的目的是(便于代码优化)和(便于目标程序的移植)。 15、表达式-a+b*(-c+d)的逆波兰表示为(a-bc-d+*+ )。 16、表达式a+b*(c+d/e)的逆波兰表示为(abcde/+*+ )。 17、表达式a:=a+b*c↑(d/e)/f的逆波兰表示为(aabcde/↑*f/+:= )。 18、文法符号的属性有(继承属性)和(综合属性)两种。 19、一个文法符号的继承属性是通过语法树中它的(兄弟结点与父)结点的相应文法符号的属性来计算的。 20、一个文法符号的综合属性是通过语法树中它的(子)结点的属性来计算的。

编译原理中重点整理

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. 中间语言,各种常见中间语言形式; 2. 说明语句、赋值语句、布尔表达式、控制语句等的翻译; 3. 过程调用的处理; 4. 类型检查; 本章目标 掌握和理解中间语言,各种常见中间语言形式;各种语句到中间语言的翻译;以及类型检查等内容。 本章重点 1.中间代码的几种形式,它们之间的相互转换:四元式、三元式、逆波兰表示; 3.赋值语句、算术表达式、布尔表达式的翻译及其中间代码格式; 4.各种控制流语句的翻译及其中间代码格式; 5.过程调用的中间代码格式; 6.类型检查; 本章难点 1. 各种语句的翻译; 2. 类型系统和类型检查; 作业题 一、单项选择题: 1. 布尔表达式计算时可以采用某种优化措施,比如A and B用if-then-else可解释为_______。 a. if A then true else B; b. if A then B else false; c. if A then false else true; d. if A then true else false; 2. 为了便于优化处理,三地址代码可以表示成________。 a. 三元式 b. 四元式 c. 后缀式 d. 间接三元式 3. 使用三元式是为了________:

a. 便于代码优化处理 b. 避免把临时变量填入符号表 c. 节省存储代码的空间 d. 提高访问代码的速度 4. 表达式-a+b*(-c+d)的逆波兰式是________。 a. ab+-cd+-*; b. a-b+c-d+*; c. a-b+c-d+*; d. a-bc-d+*+; 5. 赋值语句x:=-(a+b)/(c-d)-(a+b*c)的逆波兰式表示是_______。 a. xab+cd-/-bc*a+-:=;a. xab+/cd-bc*a+--:=;a. xab+-cd-/abc*+-:=;a. xab+cd-/abc*+--:=; 6. 在一棵语法树中结点的继承属性和综合属性之间的相互依赖关系可以由________来描述。 a. 抽象语法树; b. 语法规则; c. 依赖图; d. 三地址代码; 7. 按照教材中的约定,三地址语句if x relop y then L表示成四元式为。 a. (relop,x,y,L); b. (relop,L,x,y); c. (relop,x,L,y); d. (L,x,y,relop); 8. 在编译程序中,不是常见的中间语言形式。 a.波兰式; b. 三元式; c. 四元式; d. 抽象语法树; 9. 在编译程序中安排中间代码生成的目的是________。 a. 便于提高编译效率; b. 便于提高分析的正确性; c. 便于代码优化和目标程序的移植; d.便于提高编译速度; 10. 按照教材中的约定,下面不是类型表达式: a. boolean; b. type-error; c. real; d. DAG; 11. 一个Pascal函数 function f ( a, b:char ) :↑integer; …… 其作用域类型是: a. char×integer; b. char×char; c. char×pointer(integer); d. integer×integer; 12. 因为标识符可用于多种情况,比如常量标识符、变量标识符、过程标识符等等。因此,在符号表中为了给出各个符号的标志,常给标识符引入一个属性kind,然后在相应产生式的语义动作中添加给kind属性赋值的语句。比如,在在产生式D id:T的语义动作中添加赋值语句id.kind= 。 a. V AR; b. CONSTANT; c. PROC; d. FUNC; 13. 下面情况下,编译器需要创建一张新的符号表。 a. 过程调用语句; b. 标号说明语句; c. 数组说明语句; d.记录说明语句; 14. 函数function f(a,b:char):↑integer;… 所以f函数的类型表达式为: a. char×char→pointer(integer); b. char×char→pointer; c. char×char→integer; d. char×char→integer (pointer) 15. 如果一个语言的编译器能保证编译通过的程序,在运行时不会出现类型错误,则称该语言是。 a. 静态的; b. 强类型的; c. 动态的; d. 良类型的; 一.答案:1. b;2. d;3. b;4. d;5. c;6. c.;7. a;8. a;9. c;10. d;11. b;12. a;13. d; 14. a;15. b;

编译原理试题及答案

参考答案 一、单项选择题(共10小题,每小题2分,共20分) 1.语言是 A .句子的集合 B .产生式的集合 C .符号串的集合 D .句型的集合 2.编译程序前三个阶段完成的工作是 A .词法分析、语法分析和代码优化 B .代码生成、代码优化和词法分析 C .词法分析、语法分析、语义分析和中间代码生成 D .词法分析、语法分析和代码优化 3.一个句型中称为句柄的是该句型的最左 A .非终结符号 B .短语 C .句子 D .直接短语 4.下推自动机识别的语言是 A .0型语言 B .1型语言 C .2型语言 D .3型语言 5.扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即 A . 字符 B .单词 C .句子 D .句型 6.对应Chomsky 四种文法的四种语言之间的关系是 A .L 0?L 1?L 2?L 3 B .L 3?L 2?L 1?L 0 C .L 3=L 2?L 1?L 0 D .L 0?L 1?L 2=L 3 7.词法分析的任务是 A .识别单词 B .分析句子的含义 C .识别句子 D .生成目标代码 8.常用的中间代码形式不含 A .三元式 B .四元式 C .逆波兰式 D .语法树 9. 代码优化的目的是 A .节省时间 B .节省空间 C .节省时间和空间 D .把编译程序进行等价交换 10.代码生成阶段的主要任务是 A .把高级语言翻译成汇编语言 B .把高级语言翻译成机器语言 C .把中间代码变换成依赖具体机器的目标代码 装 订 线

D.把汇编语言翻译成机器语言 二、填空题(本大题共5小题,每小题2分,共10分) 1.编译程序首先要识别出源程序中每个(单词),然后再分析每个(句子)并翻译其意义。2.编译器常用的语法分析方法有(自底向上)和(自顶向下)两种。 3.通常把编译过程分为分析前端与综合后端两大阶段。词法、语法和语义分析是对源程序的(分析),中间代码生成、代码优化与目标代码的生成则是对源程序的(综合)。 4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即(静态存储分配)方案和(动态存储分配)方案。 5.对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。 三、名词解释题(共5小题,每小题4分,共20分) 1.词法分析 词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则 从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位, 并转换成统一的内部表示(token),送给语法分析程序。 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,且其所有直接子孙的标记从左向右的排列 次序为A1A2…A R,那么A→A1A2…A R一定是P中的一条产生式。

编译原理作业参考答案

第1章引言 1、解释下列各词 源语言:编写源程序的语言(基本符号,关键字),各种程序设计语言都可以作为源语言。 源程序: 用接近自然语言(数学语言)的源语言(基本符号,关键字)编写的程序,它是翻译程序处理的对象。 目标程序: 目标程序是源程序经过翻译程序加工最后得到的程序。目标程序 (结果程序)一般可由计算机直接执行。 低级语言:机器语言和汇编语言。 高级语言:是人们根据描述实际问题的需要而设计的一个记号系统。如同自然语言(接近数学语言和工程语言)一样,语言的基本单位是语句,由符号组和一组用来组织它们成为有确定意义的组合规则。 翻译程序: 能够把某一种语言程序(源语言程序)改变成另一种语言程序(目 标语言程序),后者与前者在逻辑上是等价的。其中包括:编译程序,解释程序,汇编程序。 编译程序: 把输入的源程序翻译成等价的目标程序(汇编语言或机器语言), 然后再执行目标程序(先编译后执行),执行翻译工作的程序称为编译程序。 解释程序: 以该语言写的源程序作为输入,但不产生目标程序。按源程序中语句动态顺序逐句的边解释边执行的过程,完成翻译工作的程序称为解释程序。 2、什么叫“遍” 指对源程序或源程序的中间形式(如单词,中间代码)从头到尾扫描一次,并作相应的加工处理,称为一遍。

3、简述编译程序的基本过程的任务。 编译程序的工作是指从输入源程序开始到输出目标程序为止的整个过程,整个过程可以划分5个阶段。 词法分析:输入源程序,进行词法分析,输出单词符号。 语法分析:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位,并判断输入串是否构成语法正确的“程序”。 中间代码生成:按照语义规则把语法分析器归约(或推导)出的语法单位翻译成一定形式的中间代码。 优化:对中间代码进行优化处理。 目标代码生成:把中间代码翻译成目标语言程序。 4、编译程序与解释程序的区别 编译程序生成目标程序后,再执行目标程序;然而解释程序不生成目标程序,边解释边执行。 5、有人认为编译程序的五个组成部分缺一不可,这种看法正确吗 编译程序的5个阶段中,词法分析,语法分析,语义分析和代码生成生成是必须完成的。而中间代码生成和代码优化并不是必不可少的。优化的目的是为了提高目标程序的质量,没有这一部分工作,仍然能够得到目标代码。 6、编译程序的分类 目前基本分为:诊断编译程序,优化编译程序,交叉编译程序,可变目标编译程序。

编译原理课程作业

编译原理课程作业 一、单选题 1. (4分)文法G所描述的语言是______的集合。 A. 文法G的字符表V中所有符号组成的符号串 B. 文法G的字符表V的闭包V*中的所有符号串 C. 由文法的识别符号推出的所有符号串 D. 由文法的识别符号推出的所有终结符号串 得分:0 知识点:第六章 收起解析 答案 D 解析 第六章属性文法 2. (4分)在LR 分析法中,分析栈中存放的状态是识别规范句型_____的DFA 状态。 A. 句柄 B. 前缀 C. 活前缀 D. LR(0) 项目 得分:0 知识点:第五章 收起解析 答案 C 解析 第五章LR分析法 3. (4分)下面关于解释程序的描述正确的是____. (1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于COBOL 和FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的 A. (1)(2) B. (1) C. (1)(2)(3) D. (2)(3) 得分:0 知识点:第一章 收起解析 答案 B 解析 第一章绪论

4. (4分)动态存储分配可采用的分配方案是()。 A. 队式存储分配 B. 栈式存储分配 C. 线性存储分配 D. 链式存储分配 得分:0 知识点:第八章 收起解析 答案 B 解析 第八章存储空间组织 5. (4分)正规式M 1 和M 2 等价是指_____。 A. M1和M2的状态数相等 B. M1和M2的有向边条数相等 C. M1和M2所识别的语言集相等 D. M1和M2状态数和有向边条数相等 得分:0 知识点:第三章 收起解析 答案 C 解析 第三章正规文法 6. (4分)编写一个计算机高级语言的源程序后,到正式上机运行一般要经过____这几步. (1) 编辑(2) 编译(3) 连接(4) 运行 A. (1)(2)(3)(4) B. (1)(2)(3) C. (1)(3) D. (1)(4) 得分:0 知识点:第一章 收起解析 答案 B 解析 第一章绪论 7. (4分)文法G 产生的()的全体是该文法描述的语言。 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)

相关主题
文本预览
相关文档 最新文档