《编译原理》第四章试题

合集下载

编译原理 第四章习题

编译原理 第四章习题

S→aA A→Ab|b (1) 构造识别该文法项目活前缀的DFA (2) 判定该文法是否为LR(0)文法。若是的话构造相应的LR分析 表。 (3) 对句子abbb#进行分析。、 6.已知文法G[S] S→ r D D→ D , i D→ i (1) 构造识别该文法项目活前缀的DFA (2) 判定该文法为哪类LR文法?构造相应. 对文法G[S] S→a|∧|(T) T→T,S|S (1) 给出(a,(a,a))和(((a,a),∧,(a)),a)的最左推导。 (2) 对文法G,进行改写,然后对每个非终结符写出不带回 溯的递归子程序。 (3) 经改写后的文法是否是LL(1)的?给出它的预测分析表。 (4) 给出输入串(a,a)#的分析过程,并说明该串是否为G的 句子。 2. 已知文法G[S]: S→MH|a H→LSo|ε K→dML|ε L→eHf M→K|bLM (1)求出各个非终结符的First集Follow集。 (2)判断G是否是LL(1)文法,如果是,构造LL(1)分析表。 3.已知文法G[Z] Z→aAAa A→bF’b F’→F F→cF|c (1) 求出各个非终结符的FIRSTVT 集和LASTVT集。 (2) 判断该文法是否为算符优先文法。(请以a,b,c,’,#的顺 序构造相应的算符优先矩阵。) 4. 设有文法G[S]: S→V V→T|ViT T→F|T+F F→)V*|( (1) 求出各个非终结符的FIRSTVT 集和LASTVT集。 (2) 判断该文法是否为算符优先文法。(请以i,+,*,(,),#的顺 序构造相应的算符优先矩阵) (3)给出(+(i(#的分析过程。 5. 已知文法G[s]

北方工业大学编译原理第4章习题

北方工业大学编译原理第4章习题
procedure T; begin if sym=ˊ(ˊor sym=ˊaˊ or sym=ˊbˊ or sym=ˊ∧ˊ then begin F; T end else error end;
(4)构造它的递归下降分析程序。
procedure T ; begin
if sym= ˊ(ˊ or sym= ˊaˊ or sym= ˊbˊ or sym= ˊ∧ˊ then T else if sym= ˊ*ˊ then error end;
(3)该文法不含左递归,而且每一个 非终结符的各个产生式的候选首符集两 两不相交。
FIRST(A)= {a}
FOLLOW(A)={d, #}
FIRST (A) = { ε, a} FOLLOW(A)={d, #}
FIRST(B) = {d} FOLLOW(B )={e}
FIRST(B) = {ε ,b} 法G ’
(S): S → a∣∧∣(T) T → ST ’ T’ → ,ST’ | ε
其中:过程advance把输入串指示器IP调至指向下一个输入 符号;sym是指IP当前所指的那个输入符号;error为出错诊 断处理程序。
(2)经改写后的文法是否是LL(1)的?给出它的预测分析表。
else error end else error end;
4.2 试消除下面文法G[A] 中的左递归,并提取公共左因子, 判断改写后的文法是否为LL(1)文法?
A→aABe∣a
B→Bb∣d
解: (1)首先消除左递归
A→aABe∣a B →dB B →bB | ε (2)提取公共左因子 A → aA A → ABe | ε B → dB B →bB | ε
证明:对于具有形如A|的产生式有: A → ABe | ε B →bB | ε

编译原理第4章习题答案

编译原理第4章习题答案

S-> S’ S’->(S)SS’| First( (S)SS’) = { ( } Follow(S)=Follow(S’)= { (, ),$ }
预测分析表
非终结符 S ( S->S’ ) S->S’ $ S->S’
S’
S’->(S)SS’
S’->
S’->
S’->
冲突
仔细分析后,发现该文法 S->S(S)S| 是二义性文法。 二义性文法不可能是LL(1)文法。 例如:( ) ( )
S->aS’ S’->aS’AS’|Ɛ A->+|*
First(S) = First(aS’)={a} First(S’)= First(aS’AS’) ∪ First(Ɛ)= {a} ∪{Ɛ}= {a, Ɛ} First(A) = { +,*}
Follow(S) ={$} 因为 S->aS’,所以把Follow(S)加入到Follow(S’)中。 因为 S’->aS’AS’的第一个S’ ,所以把First(AS’)={+,*}加入到Follow(S’)中。 因为 S’->aS’AS’的第二个S’ ,所以Follow(S)加入到Follow(S’)中。 所以,Follow(S’)= {$, +,*} 对 S’->aS’AS’的A ,当A后面的S’推导出非空时,把First(S’)-{Ɛ}={a}加入到Follow(A)中。 对 S’->aS’AS’的A ,当A后面的S’推导出空时,把Follow(S’)={$,+,*}加入到Follow(A)中。 所以,Follow(A)= {a, +,*,$} 对于S’->aS’AS’|Ɛ,因为First(aS’AS’) ∩Follow(S’)={a} ∩{$,+,*}=空集,所以没有冲突。 对于A->+|*,因为First(+) ∩First(*)={+} ∩{*}=空集,所以没有冲突。 所以该文法是LL(1)文法。

《编译原理》第四章试题

《编译原理》第四章试题

编译原理2014—2015学年第二学期第四单元测试试卷(闭卷考试)时间:45分钟满分:100分姓名班级出题人刘兵班级 2一、选择题(5*2分)(每题1分,共10分)1.编译过程中语法分析器的任务就是__________。

(1) 分析单词是怎样构成的(2)分析单词串是如何构成语句和说明的(3)分析语句和说明是如何构成程序的(4)分析程序的结构A (2)(3) B(2)(3)(4) C (1)(2)(3) D(1)(2)(3)(4)2.给定文法G[S]及其非终结符A,FIRST(A)定义为:从A 出发能推导出的终结符号的集合(S 是文法的起始符号,为非终结符)。

对于文法G[S]:S→[L] | aL→L, S| S其中,G[S]包含的四个终结符号分别为:a , [ ]则FIRST(S)的成员包括。

A. aB. a、[C. a、[和]D. a、[、]和,3.若一个文法是递归的,则它产生的句子个数是( )A.无穷个 B.不确定 C.有限个 D.根据具体情况而定4.语法分析器则可以发现源程序中的__D___。

A.语义错误 B.语法和语义错误 C.错误并校正 D.语法错误5.若文法 G 定义的语言是无限集,则文法必然是( ) 。

A.递归的 B.前后文无关的C.二义性的 D.无二义性的二、简答题(2*10分)(每题10分,共20分)1.自上而下分析的前提?2.若有文法A→(A)A|ε,说明该文法是LL(1)的文法。

三、分析题(4题共70分)1.设有文法G[E]:E→Aa|BbA→cA|eBB→bd试按照递归子程序法为该文法构造语法分析程序。

2.设有文法G[S]:S→ABA→bB|AaB→Sb|a试消除该文法的左递归。

3.计算练习4.2.2的文法的FIRST和FOLLOW集合(1)S->S(S)S|ε(2)S->(L)|a, L->L, S|S4. 正规式(ab)*a与正规式a(ba)*是否等价?请说明理由。

蒋立源编译原理第三版第四章习题与答案.docx

蒋立源编译原理第三版第四章习题与答案.docx

第五章习题5-1设有文法G[S] :S→A/A→aA∣ AS∣/(1)找出部分符号序偶间的简单优先关系。

(2)验证 G[S] 不是简单优先文法。

5-2对于算符文法G[S] :S→E E→ E-T∣ T T→T*F∣F F→ -P∣P P→ (E)∣i(1)找出部分终结符号序偶间的算符优先关系。

(2)验证 G[S] 不是算符优先文法。

5-3 设有文法G′[E] :E→E E→E+T |T1T →T T→T*F|F F→(E)|i11111其相应的简单优先矩阵如题图5-3所示,试给出对符号串(i+i )进行简单优先分析的过程。

题图 5-3 文法 G′ [E] 的简单优先矩阵5-4设有文法G[E]:E→E+T|TT→T*F|FF→(E)|i其相应的算符优先矩阵如题图5-4 所示。

试给出对符号串(i+i )进行算符优先分析的过程。

(i*+)#(○○○○○<<<<=i○○○○>>>>○○○○○○*<<>>>>○○○○○○+<<<>>>○○○○)>>>>○○○○#<<<<题图 5-4文法 G[E] 的算符优先矩阵5-5对于下列的文法,试分别构造识别其全部可归前缀的DFA和 LR(0) 分析表,并判断哪些是LR(0) 文法。

(1)S →aSb∣ aSc∣ ab(2)S →aSSb∣ aSSS∣c(3)S →AA→Ab∣ a5-6下列文法是否是SLR(1)文法?若是,构造相应的SLR(1) 分析表,若不是,则阐明其理由。

(1) S →Sab∣ bR R→S∣a(2) S →aSAB∣ BA A→aA∣ B B→ b(3) S →aA∣bB A→cAd∣εB→cBdd∣ε5-7对如下的文法分别构造LR(0) 及 SLR(1) 分析表,并比较两者的异同。

S→cAd∣ b A→ASc∣a5-8对于文法G[S]:S→A A→BA∣εB→ aB∣ b(1)构造 LR(1) 分析表;(2)给出用LR(1)分析表对输入符号串abab 的分析过程。

编译原理龙书第四章答案

编译原理龙书第四章答案

编译原理龙书第四章答案编译原理是计算机科学中的一门基础课程,是用于教授计算机程序的设计、构建和优化的学科,常常被用于编写编译器和解释器。

在编译原理课程中,龙书(Compilers: Principles, Techniques, and Tools)是一本经典的教材,其中第四章主要讲述了词法分析器的设计和实现。

以下是第四章的答案,按照列表划分:1. 什么是词法分析器?词法分析器(Lexical Analyzer)是编译器的组成部分之一,它用于将程序中的字符序列转换为一系列单词或词法单元(Lexeme),以便后续的语法分析和语义分析使用。

2. 词法分析器的工作流程是什么?词法分析器的工作流程如下:(1)读入字符序列。

(2)将字符序列划分为一个个词法单元,或者检查字符序列是否合法。

(3)生成一个词法单元序列,并将其传递给语法分析器。

3. 词法单元的定义是什么?词法单元是编程语言中的一个基本单元,它是对代码中的一个单一概念进行编码的基本方式。

例如,在C语言中,词法单元包括关键字(如int,if,while等)、标识符(Identifier,即自定义变量名)、运算符和特殊符号等。

4. 有哪些方法可以实现词法分析器?可以使用正则表达式、自动机等方法实现词法分析器。

其中,正则表达式可以表示字符串的集合,因此可以将其用于识别单词类别;自动机是根据输入字符序列转换状态的一种计算模型,因此可以用于实现有限自动机(Deterministic Finite Automaton)和非确定有限自动机(Nondeterministic Finite Automaton)等。

5. DFA和NFA分别是什么?DFA和NFA都是有限自动机的一种,但在转换动作上有所不同。

DFA 是确定的有限自动机,即在状态转换时只有唯一的一个选择;而NFA 是非确定的有限自动机,即在状态转换时可以有多个选择。

6. DFA和NFA之间有什么关系?DFA和NFA虽然在转换动作上不同,但它们可以互相转化。

编译原理第四章答案

编译原理第四章答案
3)
First( A' ) Follow ( A' ) {d , } {), b}
4.4(2)
见课后答案 规则见课本P66
问题?
Select( E gAf ) Select( E c) First( gAf ) Frist(c) {g} {c}
4.2
对下面的文法G: E→TE’ E’→+TE’|ε T→FT’ T’→*FT’|ε F→(E)|id (1)计算这个文法的每个非终结符的FIRST和FOLLOW。 (2)证明这个文法是LL(1)的。 (3)构造它的预测分析表。 (4)构造它的递归下降分析程序。
第四章习题
4.1 4.2 4.3 4.4
4.1
1、考虑下面文法G[A]: A→BCc|gDB B→bCDE|ε C→DaB|ca D→dD|ε E→gAf|c (1)FIRST集和FOLLOW集 (2)是否是LL(1)文法。
4.1(1) First集
First( A) First( BCc) First( gDB) First( B) \ { } First(C ) {g} {b} First( D) \ { } {a} First(ca) {g} {b} {d } {a} {c} {g} {a, b, c, d , g}
E’→ε T→FT ’ T’→ε F→idFra bibliotekE’→ε
T’→ε
4.2(4)
规则见课本P66 见课后答案 E→TE’ T→FT’ F→(E)|id E’→+TE’|ε T’→*FT’|ε
4.3
文法G[S]: S→A A→B|AiB B→C|B+C C→)A*|( 1)改写为LL(1)文法 2)求改写后的文法的每个非终结符的First集和Follow集 3)构造相应的预测分析表

编译原理第4章答案

编译原理第4章答案

第四章 词法分析1.构造下列正规式相应的DFA :(1) 1(0|1)*101(2) 1(1010*| 1(010)*1)*0 (3) a((a|b)*|ab *a)*b (4) b((ab)*| bb)*ab 解:(1)1(0|1)*101对应的NFA 为下表由子集法将NFA 转换为DFA :(2)1(1010*| 1(010)*1)*0对应的NFA 为 10,1下表由子集法将NFA转换为DFA:(3)a((a|b)*|ab *a)*b (略) (4)b((ab)*| bb)*ab (略)2.已知NFA=({x,y,z},{0,1},M,{x},{z})其中:M(x,0)={z},M(y,0)={x,y},M(z,0)={x,z},M(x,1)={x}, M(y,1)=φ,M(z,1)={y},构造相应的DFA 。

解:根据题意有NFA 图如下下表由子集法将NFA 转换为DFA :0,1下面将该DFA最小化:(1)首先将它的状态集分成两个子集:P1={A,D,E},P2={B,C,F}(2)区分P2:由于F(F,1)=F(C,1)=E,F(F,0)=F并且F(C,0)=C,所以F,C等价。

由于F(B,0)=F(C,0)=C,F(B,1)=D,F(C,1)=E,而D,E不等价(见下步),从而B与C,F可以区分。

有P21={C,F},P22={B}。

(3)区分P1:由于A,E输入0到终态,而D输入0不到终态,所以D与A,E可以区分,有P11={A,E},P12={D}。

(4)由于F(A,0)=B,F(E,0)=F,而B,F不等价,所以A,E可以区分。

(5)综上所述,DFA可以区分为P={{A},{B},{D},{E},{C,F}}。

所以最小化的DFA如下:3.将图确定化:1101111解:下表由子集法将NFA 转换为DFA :4.把图的(a)和(b)分别确定化和最小化:(a) (b)解: (a):下表由子集法将NFA 转换为DFA :0,1a可得图(a1),由于F(A,b)=F(B,b)=C,并且F(A,a)=F(B,a)=B,所以A,B 等价,可将DFA 最小化,即:删除B ,将原来引向B 的引线引向与其等价的状态A ,有图(a2)。

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

编译原理
2014—2015学年第二学期第四单元测试试卷(闭卷考试)时间:45分钟满分:100分
姓名班级出题人刘兵班级 2
一、选择题(5*2分)(每题1分,共10分)
1.编译过程中语法分析器的任务就是__________。

(1) 分析单词是怎样构成的(2)分析单词串是如何构成语句和说明的
(3)分析语句和说明是如何构成程序的(4)分析程序的结构
A (2)(3) B(2)(3)(4) C (1)(2)(3) D(1)(2)(3)(4)
2.给定文法G[S]及其非终结符A,FIRST(A)定义为:从A 出发能推导出的终结符号的集合(S 是文法的起始符号,为非终结符)。

对于文法G[S]:
S→[L] | a
L→L, S| S
其中,G[S]包含的四个终结符号分别为:a , [ ]
则FIRST(S)的成员包括。

A. a
B. a、[
C. a、[和]
D. a、[、]和,
3.若一个文法是递归的,则它产生的句子个数是( )
A.无穷个 B.不确定 C.有限个 D.根据具体情况而定
4.语法分析器则可以发现源程序中的__D___。

A.语义错误 B.语法和语义错误 C.错误并校正 D.语法错误
5.若文法 G 定义的语言是无限集,则文法必然是( ) 。

A.递归的 B.前后文无关的
C.二义性的 D.无二义性的
二、简答题(2*10分)(每题10分,共20分)
1.自上而下分析的前提?
2.若有文法A→(A)A|ε,说明该文法是LL(1)的文法。

三、分析题(4题共70分)
1.设有文法G[E]:
E→Aa|Bb
A→cA|eB
B→bd
试按照递归子程序法为该文法构造语法分析程序。

2.设有文法G[S]:
S→AB
A→bB|Aa
B→Sb|a
试消除该文法的左递归。

3.计算练习
4.2.2的文法的FIRST和FOLLOW集合
(1)S->S(S)S|ε
(2)S->(L)|a, L->L, S|S
4. 正规式(ab)*a与正规式a(ba)*是否等价?请说明理由。

编译原理
2014—2015学年第二学期第四单元测试试卷答案一、选择题
1—5 B、B、D、D、A
二、简答题(2*10分)(每题10分,共20分)
1
.解:消除左递规和消除回溯。

2.
解:该文法不含左递归;
FIRST((A)A)={(},FIRST(ε)={ε},FIRST((A)A)∩FIRST(ε)=Φ,且FOLLOW(A)={),#},FIRST((A)A)∩ FOLLOW(A) =Φ,
因此,该文法满足LL(1)文法的条件,是LL(1)文法。

三、分析题(4题共70分)
1. 解:本题考查递归子程序的构造方法。

首先判断文法是否满足递归子程序法对文法的要求,然后再构造递归子程序。

因为:
(1)该文法无左递归。

(2)文法的产生式E→Aa|Bb和A→cA|eB的右部有若干选项,判断这两条产生式右部各候选式的终结首符号集合是否两两互不相交。

对产生式E→Aa|Bb,有
FIRST(Aa)∩FIRST(Bb)={c,e}∩{b}=ø
对产生式A→cA|eB,有
FIRST(cA)∩FIRST(eB)={c}∩{e}=ø
文法中其他产生式都只有一个非空ε的右部。

综合(1)、(2),该文法可以采用自上而下分析方法进行语法分析而不会出现回朔和无限循环。

下面为该文法的每一个非终结符号构造递归子程序。

假设用READAWORD代表读下一个单词。

用P(E)、P(A)、P(B)分别表示非终结符号E、A、B对应的子程序名。

约定输入符号串以“#”作为输入结束符。

P(E)的递归子程序为:
PROCEDURE P(E);
BEGIN
IF WORD IN FIRST(Aa)
THEN
BEGIN
P(A);
READAWORD;
IF WORD=’a’
THEN READAWORD
ELSE ERROR
END
ELSE IF WORD IN FIRST(Bb)
THEN
BEGIN
P(B);
READAWORD;
IF WORD=’b’
THEN READAWORD
ELSE ERROR
END
ELSE ERROR
END;
P(A)的递归子程序为:
PROCEDURE P(A);
BEGIN
IF WORDD=’c’
THEN
BEGIN
READAWORD;
P(A)
END
ELSE IF WORD=’e’
THEN
BEGIN
READWORD;
P(B)
END
ELSE ERROR
END;
P(B)的递归子程序为:
PROCEDURE P(B);
BEGIN
IF WORD=’b’
THEN
BEGIN
READAWORD;
IF WORD=’d’
THEN READAWORD
ELSE ERROR
END
ELSE ERROR
END;
主程序中的主要内容为:
READAWORD;
P(E);
IF WORD=”#”
THEN WRITE(“RIGHT!”)
ELSE WRITE(“ERROR!”)
2、解:本题考查消除左递归的方法。

应用消除文法左递归的算法对文法G[S]消除左递归的过程如下:(1)将非终结符排序为:U1=S,U2=A,U3=B
(2)进入算法排序:
i=1时,对文法无影响
i=2,j=1时:A→Aa有直接左递归,消去该直接左递归,得
A→bBA’
A’→aA’|ε
i=3,j=1时:改写文法,有
B→ABb|a
j=2时:改写文法,有
B→bBA’Bb|a无左递归。

(3)所以文法G[S]消除左递归后变为:
G’[S]:S→AB
A→bBA’
A’→aA’|ε
B→bBA’Bb|a
3、解:1)FIRST(S)={ ε,( } FOLLOW(S)={ (,),$ }
2)FIRST(S)={ (,a } FOLLOW(S)={ ),,,$ }
FIRST(L)={ (,a } FOLLOW(L)={ ),, }
4、
解:(1)FOLLOW(A)=First(B)∪{#}={b,#}
FOLLOW(B)={e,b}
(2)该文法中的规则B::=Bb|b为左递归,因此该文法不是LL(1)文法
(3)先消除文法的左递归(转成右递归),文法变为:A::=aABe|ε,B::=bB’,B’::=bB’|ε,该文法的LL(1)分析表为:
更常用且简单的LL(1)分析表:。

相关文档
最新文档