各章练习题(编译原理)
编译原理试题及答案

编译原理试题及答案一、选择题1. 编译器的主要功能是什么?A. 程序设计B. 程序翻译C. 程序调试D. 数据处理答案:B2. 下列哪一项不是编译器的前端处理过程?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D3. 在编译原理中,词法分析器的主要作用是什么?A. 识别程序中的关键字和标识符B. 将源代码转换为中间代码C. 检查程序的语法结构D. 确定程序的运行环境答案:A4. 语法分析通常采用哪种方法?A. 自顶向下分析B. 自底向上分析C. 正则表达式匹配D. 直接解释执行答案:B5. 语义分析的主要任务是什么?A. 检查程序的语法结构B. 检查程序的类型安全C. 识别程序中的变量和常量D. 将源代码转换为机器代码答案:B二、简答题1. 简述编译器的工作原理。
答案:编译器的工作原理主要包括以下几个步骤:词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。
词法分析器将源代码分解成一系列的词素;语法分析器根据语法规则检查词素序列是否合法;语义分析器检查程序的语义正确性;中间代码生成器将源代码转换为中间代码;代码优化器对中间代码进行优化;最后,目标代码生成器将优化后的中间代码转换为目标机器代码。
2. 什么是词法分析器,它在编译过程中的作用是什么?答案:词法分析器是编译器前端的一个组成部分,负责将源代码分解成一个个的词素(tokens),如关键字、标识符、常量、运算符等。
它在编译过程中的作用是为语法分析器提供输入,是编译过程的基础。
三、论述题1. 论述编译器中的代码优化技术及其重要性。
答案:代码优化是编译过程中的一个重要环节,它旨在提高程序的执行效率,减少资源消耗。
常见的代码优化技术包括:常量折叠、死代码消除、公共子表达式消除、循环不变代码外提、数组边界检查消除等。
代码优化的重要性在于,它可以显著提高程序的运行速度和性能,同时降低程序对内存和处理器资源的需求。
四、计算题1. 给定一个简单的四则运算表达式,请写出其对应的逆波兰表达式。
编译原理习题(含历年专业考试题)

1. LR 分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错 地点。 () 2. 构造 LR 分析器的任务就是产生 LR 分析表。 () 3 .LR 文法肯定是无二义的,一个无二义文法决不会是 LR 文法。 () 4. 在任何时候,分析栈的活前缀 X1X2...Xm 的有效项目集就是栈顶状态 Sm 所 在的那个 项目集。 () 5 .同心集的合并有可能产生新的“移进”/“归约”冲突。 () 6. 由于 LR(0) 分析表构造简单,所以它的描述能力强、适用面宽; LR(1) 分析 表因构造复杂而描述能力弱、适用面窄。 () 7 .所有 LR 分析器的总控程序都是一样的,只是分析表各有不同。 () 8. LR 分析技术无法适用二义文法。 () 9. 项目 A →β 1 ·β 2 对活前缀αβ 1 是有效的,其条件是存在规范推导 S'*= aAW= a β 1 β 2 ω。 () 10. SLR(1) 文法的特点是:当符号栈中的符号串为βα,而面临的输入符号为α 则存在 把α归约为 A 的规范句型的前缀β A α时,方可把 a 归约为 A 。 ( )
已知文法 G[S] : S → dAB A → aA|a B → Bb| ε (1) 试问 G[S] 是否为正规文法,为什么? (2) G[S] 所产生的语言是什么? (3) G[S] 能否改写为等价的正规文法 ?
答:(1)因为S → dAB不符合正规文法产生式A→aB或A→a, a∈VT* ,A,B∈VN的格式,故G[S]不是正规文法。 (2) G[S]产生的语言为: L={danbm|n≥1,m≥0} (3)可以得到G[S]对应的正规文法G’[S]: S→dA A→aA|aB|a B→bB|ε
编译原理
第一章---第六章补充
例1
编译原理一些习题答案

第2章形式语言基础2.2 设有文法G[N]: N -> D | NDD -> 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 ⇒ 0123268的最左推导:N ⇒ ND ⇒ NDD ⇒ DDD ⇒ 2DDD ⇒ 26D ⇒ 268268的最右推导:N ⇒ ND ⇒ N8 ⇒ ND8 ⇒ N68 ⇒ D68 ⇒ 2682.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 | BNB -> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | B02.7 下面文法生成的语言是什么?G1:S->ABA->aA| εB->bc|bBc G2:S->aA|a A->aS解答:B ⇒ bcB ⇒ bBc⇒ bbccB ⇒ bBc⇒ bbBcc ⇒ bbbccc……A ⇒εA ⇒ aA ⇒ aA ⇒ 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 ⇒ aS ⇒ aA ⇒ aaS ⇒ aaaS ⇒ 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)))的短语、简单短语和句柄。
编译原理练习题

编译原理练习题一、选择题(每题2分,共10分)1. 编译器的主要功能是将源代码转换为:A. 可执行文件B. 汇编代码C. 机器代码D. 中间代码2. 词法分析阶段的主要任务是:A. 将源代码分解成多个语句B. 将源代码分解成多个单词C. 将源代码分解成多个符号D. 将源代码分解成多个表达式3. 下列哪个是自顶向下的语法分析方法?A. LL(1)分析B. LR分析C. LALR分析D. GLR分析4. 语义分析的主要任务是:A. 检查语法正确性B. 检查类型正确性C. 检查代码风格D. 检查代码的可读性5. 编译过程中的优化主要发生在:A. 词法分析阶段B. 语法分析阶段C. 语义分析阶段D. 代码生成阶段二、填空题(每空1分,共10分)6. 编译器的前端主要包括词法分析、语法分析、________和________四个阶段。
7. 编译器的后端主要包括代码生成、________和________两个阶段。
8. 编译原理中的“三地址代码”是指每个指令最多有三个________。
9. 编译过程中的“死代码”是指________。
10. 编译器的优化技术可以分为________优化和________优化。
三、计算题(每题5分,共10分)11. 假设有一个简单的算术表达式:a * b + c * d。
请使用三地址代码表示这个表达式,并给出相应的指令序列。
四、简答题(每题5分,共10分)12. 简述编译原理中词法分析器的作用和实现方法。
五、论述题(每题15分,共15分)13. 论述编译原理中语法分析的两种主要方法:自顶向下分析和自底向上分析,并比较它们的优缺点。
(完整版)哈工大编译原理习题及答案

何谓源程序、目标程序、翻译程序、编译程序和解释程序它们之间可能有何种关系一个典型的编译系统通常由哪些部分组成各部分的主要功能是什么选择一种你所熟悉的程序设计语言,试列出此语言中的全部关键字,并通过上机使用该语言以判明这些关键字是否为保留字。
选取一种你所熟悉的语言,试对它进行分析,以找出此语言中的括号、关键字END以及逗号有多少种不同的用途。
试用你常用的一种高级语言编写一短小的程序,上机进行编译和运行,记录下操作步骤和输出信息,如果可能,请卸出中间代码和目标代码。
第一章习题解答1.解:源程序是指以某种程序设计语言所编写的程序。
目标程序是指编译程序(或解释程序)将源程序处理加工而得的另一种语言(目标语言)的程序。
翻译程序是将某种语言翻译成另一种语言的程序的统称。
编译程序与解释程序均为翻译程序,但二者工作方法不同。
解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。
即边解释边执行,翻译所得的指令序列并不保存。
编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之。
即先翻译、后执行。
2.解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。
3.解:C语言的关键字有:auto break case char const continue default do double else enum externfloat for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while。
编译原理各章习题

第二章高级语言及其语法描述1、设有文法G[S]:S→NN→D|NDD→0|1|2|…|9试写出028和4321的最左推导和最右推导过程。
2、证明文法G[S]是二义性文法:S→if E then S else S |if E then S |sE→0|13、设有文法G[E]:E→E-T|TT→T/F|FF→i|(E)(1)试写出i/(i-i-i)的推导树。
(2)试写出(F-i)/F的短语、简单短语和句柄。
4、设∑={0,1},请给出∑上下列语言的文法(1)所有以0开头的串(2)所有以0开头,以1结尾的串5、证明文法G1和G2等价G1:S→0S1,S→01G2:A→0R,A→01,R→A1第三章有限状态自动机和词法分析1、请用中文描述下列正规式表示的正规集(1)0(0|1)*0(2)0*10*10*10*2、试写出∑={0,1}上下列集合的正则表达式:(1)所有以1开始和结束的符号串。
(2)恰含有3个1的所有符号所组成的集合。
(3)集合{01,1}。
(4)所有以111结束的符号串。
3、试写出∑={0,1}上下述集合的正则表达式: (1)试写出非负整数集的正则表达式。
(2)试写出以非5数字为头的所有非负整数集的正则表达式。
4、试将图3.1中所示的有限状态自动机M 最小化。
图3.1 M 的状态转换图5、设∑={a,b},试构造下述正则表达式的确定性有限状态自动机: (1)a(a|b)*baa (2)(a|b)*bbb *6、对于下列的状态转换矩阵:(1)分别画出相应的状态转换图。
(2)用自然语言分别描述它们所识别的输入串的特征 7、将图3.2所示的非确定的有限状态自动机确定化和最小化。
图3.2 非确定的有限状态自动机M第四章 自顶向下语法分析 1、从下列文法中消去左递归。
(1)S→Aa|bA→Ac|Sd(2)A→A∨B|BB→B∧C|CC→⌝D|DD→(A)|i2、请消去下面文法G[S]中的回溯G[S]:S→aBc|aB→bB|ε3、有文法G[S]:S→ABA→a|εB→b|ε(1)验证该文法是LL(1)文法;(2)请构造预测分析表4、考虑文法G[A]:A→aABc|d|εB→Bb|b(1)改写为LL(1)文法;(2)请构造预测分析表(3)给出句子adbc的分析过程第五章自底向上语法分析1、请对下列文法G[S]构造算符优先分析表S→bAbA→(B|aB→A a)2、文法G[S]:S→S(SaS→b该文法是LR(0)还是SLR(1)文法?3、文法G[A]:A→(A)|a构造该文法的LR(0)分析表,并请描述((a))的分析过程。
编译原理考试习题及答案

( T ② S ① a
T ,
T ④ S ③ a
2019/1/29
CH.5.练习题3(P133.)
3.(1) 计算练习2文法G2的FIRSTVT和LASTVT。 S→a||(T) T→T,S|S
(1) 解: (执行相应的算法可求得) FIRSTVT(S)={ a, ∧, ( } FIRSTVT(T)={ , , a, ∧, ( } LASTVT(S)={ a, ∧, ) } LASTVT(T)={ , , a, ∧, ) }
(1) 正规式 1(0|1)*101
0
0
DFA:
3,2
1 0
3,5,2
1 1 0
x
1
1,3,2
1
0
3,4,2
1
3,Y,4,2 I0 I1 1 3 3 3 5 3
I {X} {1,3,2} {3,2} {3,4,2} {3,5,2} {3,Y,4,2}
I0 {3,2} {3,2} {3,5,2} {3,2} {3,5,2}
2019/1/29 22
CH.5.练习题2(P133.)
2.(2).给出(a,(a,a))“移进-归约”的过程。 (2) 解: (a,(a,a))的“移进-归约”过程: 步骤 符号栈 输入串 动作 9 #(T,( S ,a))# 归约 S → a 10 #(T,(T , a ))# 归约 T → S 11 #(T,(T, a ))# 移进 , 12 #(T,(T, a ))# 移进 a 13 #(T,( T,S ))# 归约 S → a 14 #(T, (T ) )# 归约 T → T,S 15 #(T, (T) )# 移进 ) 16 #( T, S )# 归约 S → (T)
编译原理习题及答案(整理后)

第一章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. xyxb. (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>bb.若f(a)<g(b),则a<bc. a~b都不一定成立d. a~b一定成立5、如果文法G是无二义的,则它的任何句子α。
a. 最左推导和最右推导对应的语法树必定相同b. 最左推导和最右推导对应的语法树可能不同c. 最左推导和最右推导必定相同d. 可能存在两个不同的最左推导,但它们对应的语法树相同6、由文法的开始符经0步或多步推导产生的文法符号序列是。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章复习重点:1.文法与语言的对应关系思路要点:注意结构拆分技巧:如何将表示语言的通用字符串形式作适当的“切割”?例:已知语言:L1 = {a x b2x c y | x, y >= 0},给出此语言的文法,并证明此语言是上下文无关语言。
提示:该题实际上要求为相应语言设计上下文无关文法。
一个文法设计好后,严格来说应当证明此文法是否对应于该语言。
解:G[S]:S →AB A →ε | aAbb B →ε | cB推导过程:S ⇒ AB +⇒ a x Ab2x B /*使用A →aAbb x次*/⇒ a x b2x B /*使用A →ε一次*/⇒ a x b2x c x B /*使用B →cB x次*/⇒ a x b2x c x/*使用B →ε一次*/举一反三:已知语言L2 = {a x b2y c y | x, y >= 0},给出此语言的文法,并证明此语言是上下文无关语言。
解:G[S]:S →AB A →ε | aA B →ε | bBcc练习:14:写出下列语言对应的文法(1).{a n b n a m b m|n,m≥0}2. {1n 0m 0m 0n |n,m ≥0}3. {1n 0m 0m 0n |n ≥0,m>0}4. { a n b m c k |n,m,k ≥0}G1: S —>AA G2: S —>ABA —>aAb|ε A —>aAb|εB —>aBb|ε G: S —>1S0 S —>A A —>0A1 A —>εG: S →1S0|A S →1S0|0A1 A →0A1|01 A →0A1|ε2. 给出文法,证明文法符号串是否为文法的句型,若是句型,找出这个句型的所有短语、直接短语、句柄。
1. 令文法G [E ]为:Z →bMb M →a|(L L →Ma )① 符号串b(Ma)b 是否为该文法的一个句型,并证明。
② 若此符号串是句型,指出这个句型的所有短语、直接短语、句柄。
1)(5分)证明:S=> bMb=>b(Lb=>b(Ma)b所以,符号串b(Ma)b 是该文法的一个句型。
(2)(5分)短语: Ma), (Ma), b(Ma)b直接短语: Ma) 句柄: Ma)练习:(10分)已知文法G[T]: T →T*F | F ;F →F ↑P | P ; P →(T) | i(1)用最右推导法证明β:T*P ↑(T*F) 是G[T]的一个句型; (2)画出β的语法树;(3)写出β的全部短语、直接短语和句柄。
(1) T=>T*F=>T*F ↑P=>T*F ↑(T)=> T*F ↑(T*F) =>T*P ↑(T*F) 证毕。
(2) 如图T T* F F ↑PPT* TF()第3题 语法树(3)短语:T*P ↑(T*F) ;P ↑(T*F) ;(T*F) ;T*F ;P 直接短语:T*F ;P句柄: P3. 证明一个文法是二义性文法。
证明下述文法G [S ]是二义的。
(5分) S->iSeS|iS|i解:S Si S e S i Si S i S e S可见,句型iises 有两种不同的语法树,所以G[S]是二义的。
练习:证明下述文法G :S →aSbS|aS|d 是二义性文法。
解:一个文法,如果存在某个句子有不只一棵语法分析树与之对应,那么称这个 文法是二义性文法。
句子aadbd 有两棵语法树。
如下图:(1) (2)由此可知,S →aSbS|aS|d 定义的文法是二义性文法。
第四章: 重点:1. NFA DFA 的确定化及DFA 的最小化。
2. 试写出描述语言L 的正规式,构造能识别该语言L 等价的NFA ,再确定化 将下图所示的NFA 确定化,再最小化。
(2010年出过)d SS a b S S a d S a SS a bS ddB B{1,2,3,4} B {1,2,3,4} C{1,2,4,Y}CC{1,2,4,Y} B {1,2,3,4} C{1,2,4,Y}由于对于非终态的状态A 和B 来说,它们输入a 、b 的下一个状态都是一样的,故状态A 和B 可以合并,将合并后的状态重命名为A ,而终态则重命名为B ,则合并后的状态转换矩阵为:S a b A A B BAB由此可以得到最小化的DFA ,如下图所示:练习1:给出接受字母表 ={a ,b},语言为以b 开头,以aa 结尾的字符串集合的正规表达式,并构造与之等价状态的DFA 。
(2010年出过)答:依题意,以b 开头,以aa 结尾的字符串集合的正规表达式可写为: b(a|b)*aa画NFA ,如下图所示用子集法确定化如下表II aI b{X}A {1} B {1,2}C {1,2,Y}D - {1,2}C {1,2,Y}D {1,2,Y}D . {1}B {1} B {1} B {1} B(10分)将下图的NFA 确定化为DFA 。
(2011年重修卷A 出过)X 12baY abaABCba Da ba bABa b答:用子集法确定化如下表用子集法对所给图的确定化I Ia Ib状态{X,1,2} {1,2}.. {1,2,3} {1,2,Y}{1,2}..{1,2}..{1,2,Y}{1,2}..{1,2,3}{1,2,3}{1,2,3}{1,2,3}X123确定化后如下图第五章重点:1.LL(1)的判别要点:(1)计算First\Follow\Select集,然后判断是否是LL(1)文法。
(2)如果是LL(1)文法,则构造预测分析表。
(消除左递归和左公共因子也要了解)例:(10分)已给文法G[S] :S → PS'S' → aP S'| fS' |εP → qP'P' → bP |ε(1)该文法是否是LL(1)文法,并说明理由。
(2)给出该文法的预测分析表。
答:(10 分)(1)Select(S → PS')=first(P)={q}Select(S’→ aPS')={a}Select(S’→ fS')={f}Select(S' →ε)=follow(S’)=follow(S)={#}Select(P→ qP')={q}Select(P' → bP)={b}Select(P' →ε)=follow(P’)=follow(P)={first(S’)-{ ε}}⋃follow(S)={a,f}⋃{#}={a,f,#}Select(S’→ aPS')⋂ Select(S’→ fS') ⋂ Select(S' →ε)=∅Select(P' → bP) ⋂ Select(P' →ε)=∅所以文法是LL(1)文法。
(7分)(2a b f q #S PS’S’aPS’fS’εP qP’(15分)LL (1)分析表,并说明它是否为LL(1)文法。
(2011年重修卷A出过)S →aA|BAA→cB|εB →bB|ε各候选式的FIRST集(4分)FIRST(aA)={a} FIRST(BA)={ b,c,ε } FIRST(cB)={c}FIRST(ε)={ε} FIRST(bB)={ b } FIRST(ε)={ε}各非终结符的FOLLOW集(4分)FOLLOW(S)= {#} FOLLOW(A)= {#} FOLLOW(B)= { c,#}LL(1)分析表(5分)a b c #S S →aA S →BA S →BA S →BAA A→cB A →εB B →bB B →ε B →ε说明它是否为LL(1)文法(2分) 判断1分,理由1分因为LL(1)分析表无冲突,所以该文法是LL(1)文法。
2. 设文法G(S):S→^ | a | (T)T→T,S | S⑴消除左递归;⑵构造相应的FIRST和FOLLOW集合;⑶构造预测分析表解:(1)消除左递,文法变为G’[S]:S→^ | a | (T)'T→ST’ | ST’→,ST’ |ε此文法无左公共左因子。
(2)构造相应的FIRST和FOLLOW集合:FIRST(S)={a, ^, (},FOLLOW(S)={#, ,, )}FIRST(T)={a, ^, (} ,FOLLOW(T)={}}FIRST(T’)={,, ε} ,FOLLOW(F)={)}(3)第七章重点:1. 识别活前缀的有限自动机的构造,判断某个文法是否是LR(0)文法,或SLR (1)文法或LR(1)文法,若不是,请说明理由,若是,构造相应的LR分析表。
2. 查LR分析表,进行句子的识别。
典型例题:文法G[S]及其LR分析表如下,请给出串baba#的LR分析过程。
(1) S → DbB(2) D → d(3) D → ε(4) B → a(5) B → Bba(6) B → ε(注:答案格式为步骤状态栈符号栈输入串ACTION GOTO)答案:步骤状态符号输入串 ACTION GOTO0 0 # baba# r3 21 02 #D baba# S42 024 #Db aba# S53 0245 #Dba ba# r4 64 0246 #DbB ba# S75 02467 #DbBb a# S86 024678 #DbBba # r5 67 0246 #DbB # r1 18 01 #S # acc2. (8分)已知拓广文法G[S’]:S’→S S→AS∣εA→aA∣b (1)试构造以LR(1)项目集为状态的识别活前缀的有穷自动机;(2)试判断文法是否是LR(1)文法,并说明理由。
( 1 ) I0: I2: I6:(2)有穷自动机所有的状态都不含有“移进-归约”、“归约-归约”冲突,因而该文法是LR(1)文法。
练习:. (20 分 ) 给定文法 G[S] : S → SaA|a A → AbS|b⑴ (8 分 ) 请构造该文法的以 LR(0) 项目集为状态的识别规范句型活前缀的 DFA 。
⑵ (4 分 ) 请构造该文法的 LR(0) 分析表。
⑶ (4 分 ) 什么是 LR(0) 文法?该文法是 LR(0) 文法吗?为什么? ⑷ (4 分 ) 什么是 SLR(1) 文法?该文法是 SLR(1) 文法吗?为什么? 答:⑴拓广文法 1 分 G[S ′ ]: S ′→ S ⑴ S → SaA ⑵ S → a ⑶ A → AbS ⑷ A → b ⑸该文法的以LR(0) 项目集为状态的识别规范句型活前缀的DFA :⑵该文法的LR(0) 分析表:状态ACTION GOTOa b # S A0 S 2 11 S 3 acc2 r3 r 3 r 33 S 5 44 r 2 r 2 /S 6 r 25 r 5 r 5 r 56 S 2 77 r 4 /S 3 r 4 r 4⑶ LR(0) 文法:该文法的以LR(0) 项目集为状态的识别规范句型活前缀的DFA 中没有冲突状态。