编译原理期末复习题
- 格式:doc
- 大小:397.50 KB
- 文档页数:25
编译原理期末考试试题及答案一、选择题(每题2分,共20分)1. 编译器的前端主要负责以下哪项工作?A. 代码优化B. 目标代码生成C. 词法分析和语法分析D. 运行时支持2. 词法分析器的主要任务是什么?A. 识别语法结构B. 识别词法单元C. 构建语法树D. 代码优化3. 语法分析中,使用哪种方法可以避免回溯?A. 递归下降分析B. LR分析C. LL分析D. 自顶向下分析4. 下列哪个选项不是中间代码的形式?A. 三地址代码B. 四元组C. 抽象语法树D. 汇编语言5. 代码优化的目标不包括以下哪项?A. 提高代码执行速度B. 减少程序占用的内存C. 增加程序的可读性D. 减少程序的执行时间二、简答题(每题10分,共30分)1. 简述编译器的主要组成部分及其功能。
2. 解释什么是语法制导翻译,并举例说明其在编译过程中的应用。
3. 描述静态作用域规则和动态作用域规则的区别。
三、计算题(每题15分,共30分)1. 给定一个简单的算术表达式 `3 + (4 * 5) - 2`,请使用逆波兰表示法表示,并说明其转换过程。
2. 假设有一个简单的文法如下:```S -> A BA -> a A | εB -> b B | ε```请写出使用该文法生成字符串 "ab" 的所有派生树。
四、论述题(每题20分,共20分)1. 论述编译器中代码优化的重要性,并举例说明常见的优化技术。
参考答案一、选择题1. C2. B3. B4. D5. C二、简答题1. 编译器的主要组成部分包括前端、中端和后端。
前端负责词法分析和语法分析,中端进行语义分析和中间代码生成,后端则负责代码优化和目标代码生成。
2. 语法制导翻译是一种基于文法规则的翻译技术,它将源程序的语法结构映射到相应的语义操作上。
例如,在编译过程中,语法制导翻译可以用于将源代码中的条件语句转换为中间代码中的跳转指令。
3. 静态作用域规则是指变量的作用域在编译时确定,而动态作用域规则是指变量的作用域在运行时确定。
《编译原理》期末试题(一)一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)1.编译程序是对高级语言程序的解释执行。
(× )2.一个有限状态自动机中,有且仅有一个唯一的终态。
(×)3.一个算符优先文法可能不存在算符优先函数与之对应。
(√ )4.语法分析时必须先消除文法中的左递归。
(×)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。
(√)6.逆波兰表示法表示表达式时无须使用括号。
(√ )7.静态数组的存储空间可以在编译时确定。
(×)8.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。
(×) 9.两个正规集相等的必要条件是他们对应的正规式等价。
(× )10.一个语义子程序描述了一个文法所对应的翻译工作。
(×)二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分) 1.词法分析器的输出结果是_____。
A.( ) 单词的种别编码B.( ) 单词在符号表中的位置C.( ) 单词的种别编码和自身值D.( ) 单词自身值2.正规式M 1 和M 2 等价是指_____。
A.( ) M1和M2的状态数相等B.( ) M1和M2的有向边条数相等C.( ) M1和M2所识别的语言集相等D.( ) M1和M2状态数和有向边条数相等3.文法G:S→xSx|y所识别的语言是_____。
A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx*4.如果文法G是无二义的,则它的任何句子α_____。
A.( )最左推导和最右推导对应的语法树必定相同B.( ) 最左推导和最右推导对应的语法树可能不同C.( ) 最左推导和最右推导必定相同D.( )可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握______。
1.给出语言{a n b n a m b m | n,m≥0}的一个上下文无关文法。
(6分)解:G[S]:S—>ABA—>aAb |εB—>aBb |ε2.给出语言{1 n 0 m 1 m0 n | n,m≥0}的一个上下文无关文法。
解:G[S]:S—>1S0 | AA—>0A1 |ε3.P48 第6题(5)、(6).画语法树6、已知文法G:<表达式>::=<项>|<表达式>+<项><项>::=<因子>|<项>*<因子><因子>::=(<表达式>)|i(5)i+(i+i) (6)i+i*i解:(5)语法树:(6)语法树:4.P48第13题直接短语等13、一个上下文无关文法生成句子abbaa的推导树如下:(3)求直接短语解:直接短语有:a ε bP102例题6.1及其分析.( 后加画语法树)例6.1 设文法G[S]为:(1)S—>aAcBe(2)A—>b(3)A—>Ab(4)B—>d对输入串abbcde#进行分析,检查该符号串是否是G[S]的句子。
步骤符号栈输入符号串动作(1)# abbcde# 移进(2)#a bbcde# 移进(3)#ab bcde# 归约(A—>b)(4)#aA bcde#移进(5)#aAb cde# 归约(A—>Ab)(6)#aA cde# 移进(7)#aAc de# 移进(8)#aAcd e# 归约(B—>d)(9)#aAcB e# 移进(10)#aAcBe # 归约(S—>aAcBe)(11)#S # 接受一、计算分析题(60%)1、正规式→ NFA→ DFA→最简DFAP72第1题(1)、(4);第一题1、构造下列正规式相应的DFA.(1)1(0|1)*101解:先构造NFA0 1S AA A ABAB AC ABAC A ABZABZ AC AB除S,A外,重新命名其他状态,令AB为B、AC为C、ABZ为D,因为D含有Z(NFA的终态),所以0 1S AA A BB C BC A DD C B(4) b((ab)*|bb)*ab解:先构造NFA得到DFA如下所示:P72第4题(a)4、把下图确定化和最小化解:确定化:a b0 01 101 01 11 0、{1},其中A为初态,A,B为终态,因此有:a bA B CB B CC A最小化::初始分划得终态组{A,B},非终态组{C}Π0:{A,B},{C},对终态组进行审查,判断A和B是等价的,故这是最后的划分。
编译原理复习题有答案编译原理复习题及答案一、选择题1. 编译器的主要功能是什么?A. 代码格式化B. 代码优化C. 将源代码转换为机器码D. 错误检测和修复答案:C2. 词法分析阶段的主要任务是什么?A. 语法分析B. 语义分析C. 识别源程序中的词法单元D. 代码生成答案:C3. 下列哪个不是编译原理中的常见数据结构?A. 栈B. 队列C. 哈希表D. 链表答案:D4. 语法分析通常采用哪种方法?A. 递归下降分析B. 动态规划C. 贪心算法D. 深度优先搜索答案:A5. 代码优化的目的是什么?A. 增加程序长度B. 减少程序运行时间C. 提高程序的可读性D. 增加程序的复杂性答案:B二、简答题1. 简述编译过程的主要阶段。
答案:编译过程主要分为四个阶段:词法分析、语法分析、语义分析和代码生成。
词法分析负责将源代码分解成词法单元;语法分析构建语法树,检查源代码的语法结构;语义分析检查程序的语义正确性;代码生成将源代码转换成目标代码或机器码。
2. 什么是自底向上的语法分析方法?答案:自底向上的语法分析方法是一种从叶子节点开始,逐步向上构建语法树的方法。
它通常使用移进-归约分析技术,通过将输入符号与栈顶符号进行匹配,不断地将它们归约成非终结符,直到整个输入被归约为起始符号。
3. 请解释什么是中间代码,并说明其作用。
答案:中间代码是一种介于源代码和目标代码之间的代码形式,通常用于代码优化和目标代码生成。
它具有高级语言的可读性,同时又能表达程序的控制流和数据流信息。
中间代码使得编译器可以在不同的阶段对程序进行优化,提高程序的执行效率。
三、论述题1. 论述编译原理中的错误处理机制。
答案:编译原理中的错误处理机制主要包括错误检测、错误恢复和错误报告。
错误检测是指在编译过程中识别出源代码中的语法或语义错误;错误恢复是指在检测到错误后,编译器采取的措施以继续编译过程,避免因单个错误而中断整个编译;错误报告则是向程序员提供错误信息,帮助其定位和修复错误。
模拟习题1 一、单项选择题 1、 ________________________________________ 将编译程序分成若干个“遍”是为了 _________________ a. 提高程序的执行效率 b. 使程序的结构更加清晰 C.利用有限的机器内存并提高机器的执行效率d.利用有限的机器内存但降低了机器的执行效率 2、 构造编译程序应掌握 a.源程序 C.编译方法 3、 变量应当_ a.持有左值C.既持有左值又持有右值 4、 编译程序绝大多数时间花在a.出错处理C. 目标代码生成 不可能是目标代码。
a.汇编指令代码C.绝对指令代码 6、 使用 ______a.语义规则 C.产生规则5、 o b. 目标语言 d.以上三项都是 b.持有右值 d.既不持有左值也不持有右值上。
b.词法分析 d.管理表格b.可重定位指令代码 d.中间代码 可以定义一个程序的意义。
b.词法规则 d.词法规则 7、词法分析器的输入是 —a.单词符号串 C.语法单位8、 中间代码生成时所遵循的是a.语法规则 C.语义规则 9、编译程序是对—a.汇编程序的翻译 C.机器语言的执行 10、 语法分析应遵循.a.语义规则 C.构词规则 解答1、 将编译程序分成若干个“遍”是为了使编译程序的结构更加清晰,故选2、 构造编译程序应掌握源程序、目标语言及编译方法等三方面的知识,故选3、 对编译而言,变量既持有左值又持有右值,故选4、 编译程序打交道最多的就是各种表格,因此选 b.源程序 d.目标程序 ______ O b.词法规则 d.等价变换规则b.高级语言程序的解释执行 d.高级语言的翻译 b.语法规则 d.等价变换规则boC o do5、 目标代码包括汇编指令代码、 可重定位指令代码和绝对指令代码 3种,因此不是目标代码的 只能选d o6、 词法分析遵循的是构词规则, 语法分析遵循的是语法规则, 中间代码生成遵循的是语义规则, 并且语义规则可以定义一个程序的意义。
<编译原理>历年试题及答案一.(每项选择2分,共20分)选择题1.将编译程序分成若干个“遍”是为了_b__。
a.提高程序的执行效率b.使程序的结构更加清晰c.利用有限的机器内存并提高机器的执行效率d.利用有限的机器内存但降低了机器的执行效率2.构造编译程序应掌握__d__。
a.源程序b.目标语言c.编译方法d.以上三项都是3.变量应当c_。
a.持有左值b.持有右值c.既持有左值又持有右值d.既不持有左值也不持有右值4.编译程序绝大多数时间花在_d___上。
a.出错处理b.词法分析c.目标代码生成d.管理表格5.词法分析器的输出结果是_c___。
a.单词的种别编码b.单词在符号表中的位置c.单词的种别编码和自身值d.单词自身值6.正规式MI和M2等价是指__c__。
a.MI和M2的状态数相等b.Ml和M2的有向弧条数相等。
C.M1和M2所识别的语言集相等 d.Ml和M2状态数和有向弧条数相等7.中间代码生成时所依据的是—c。
a.语法规则b.词法规则c.语义规则d.等价变换规则8.后缀式ab+cd+/可用表达式__b_来表示。
a.a+b/c+d b.(a+b)/(c+d)c.a+b/(c+d)d.a+b+c/d9.程序所需的数据空间在程序运行前就可确定,称为____c__管理技术。
a.动态存储b.栈式存储c.静态存储d.堆式存储10.堆式动态分配申请和释放存储空间遵守___d_____原则。
a.先请先放b.先请后放c.后请先放d.任意二(每小题10分,共80分)简答题1.画出编译程序的总体结构图,简述各部分的主要功能。
2.已知文法G[E]:E→ET+|T T→TF*|F F→F^|a试证:FF^^*是文法的句型,指出该句型的短语、简单短语和句柄.3.为正规式(a|b)*a(a|b)构造一个确定的有限自动机。
4.设文法G(S):S→(L)|a S|aL→L,S|S(1)消除左递归和回溯;(2)计算每个非终结符的FIRST和FOLLOW;(3)构造预测分析表。
编译原理期末复习题及答案# 一、选择题1. 编译程序的前端主要完成以下哪项工作?A. 代码优化B. 目标代码生成C. 词法分析D. 运行时支持答案:C2. 语法分析中,用于表示语法规则的是:A. 正则表达式B. 语法树C. 产生式D. 语法图答案:C3. 语义分析的主要任务是:A. 识别词法单位B. 构建语法树C. 确定语法单位的意义D. 生成中间代码答案:C4. 下列哪一项不是中间代码的形式?A. 三地址代码B. 四元组C. 抽象语法树D. 汇编语言答案:D5. 代码优化的目的是:A. 增加程序的可读性B. 减少程序的运行时间C. 提高程序的执行安全性D. 增强程序的可移植性答案:B# 二、简答题1. 简述词法分析的主要任务和实现方法。
答案:词法分析的主要任务是将源程序文本分解成一系列的词法单元,即标记。
实现方法通常包括模式匹配和状态转换,使用有限自动机(如正则表达式引擎)来识别词法单元。
2. 描述语法分析的过程,并解释递归下降分析法。
答案:语法分析是将词法分析得到的标记序列转换成一个语法树的过程。
递归下降分析法是一种自顶向下的语法分析方法,它通过递归调用分析函数,根据当前的输入符号和语法规则来决定下一步的分析动作。
3. 解释代码优化中的“死码消除”是什么,并给出一个例子。
答案:死码消除是一种代码优化技术,用于删除程序中不再使用的代码,这些代码对程序的输出没有影响。
例如,如果一个变量的值在赋值后不再被使用,那么这个赋值语句就是死码,可以被消除。
# 三、计算题1. 给定一个简单的算术表达式 `a + b * c`,请使用递归下降分析法生成其语法树。
答案:首先识别 `a` 和 `b` 为因子,然后识别 `*` 为乘法操作符,接着识别 `c` 为因子。
根据运算符优先级,先计算 `b * c`,再与 `a` 相加。
语法树结构如下:```+/ \a */ \b c```2. 给定一个简单的三地址代码序列 `[1] = a + [2]`,`[2] = b * c`,请转换为四元组形式。
编译原理期末试题及答案一、选择题(每题2分,共20分)1. 编译器的主要功能是将()代码转换成()代码。
A. 高级语言,低级语言B. 高级语言,机器语言C. 汇编语言,机器语言D. 机器语言,汇编语言答案:B2. 编译过程中,词法分析的输出是()。
A. 语法树B. 语法分析表C. 词法单元D. 抽象语法树答案:C3. 在编译原理中,语法分析通常采用()方法。
A. 递归下降分析B. 动态规划C. 贪心算法D. 回溯算法答案:A4. 语义分析的主要任务是()。
A. 检查语法错误B. 生成中间代码C. 检查语义错误D. 优化代码答案:C5. 编译器的优化通常发生在()阶段。
A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D6. 编译器的前端主要负责()。
A. 代码生成B. 代码优化C. 语法分析D. 目标代码生成答案:C7. 编译器的后端主要负责()。
A. 代码生成B. 代码优化C. 语法分析D. 词法分析答案:A8. 编译原理中,LL(1)分析方法的特点是()。
A. 左到右,最右推导B. 左到右,最左推导C. 右到左,最右推导D. 右到左,最左推导答案:B9. 编译原理中,LR(1)分析方法的特点是()。
A. 左到右,最右推导B. 左到右,最左推导C. 右到左,最右推导D. 右到左,最左推导答案:B10. 编译原理中,语法制导翻译的主要思想是()。
A. 根据语法树的结构进行翻译B. 根据词法单元进行翻译C. 根据语法分析表进行翻译D. 根据语义分析表进行翻译答案:A二、填空题(每题2分,共20分)1. 编译器中,用于表示语法规则的产生式通常由非终结符、产生符号和()组成。
答案:产生式右侧2. 在编译原理中,一个文法是()的,如果它的任何两个产生式都不会导致相同的句柄。
答案:无二义性3. 编译器的词法分析阶段通常使用()算法来识别和分类词法单元。
答案:有限自动机4. 语法分析阶段,如果一个文法是左递归的,编译器需要使用()技术来消除左递归。
3.2是非判断,对下面的陈述,正确的在陈述后的括号内写T,否则写F。
(1)有穷自动机接受的语言是正则语言。
()(2)若r1和r2是Σ上的正规式,则r1|r2也是。
()(3)设M是一个NFA,并且L(M)={x,y,z},则M的状态数至少为4个。
()(4)令Σ={a,b},则Σ上所有以b为首的字构成的正规集的正规式为b*(a|b)*。
()(5)对任何一个NFA M,都存在一个DFA M',使得L(M')=L(M)。
()(6)对一个右线性文法G,必存在一个左线性文法G',使得L(G)=L(G'),反之亦然。
()答案(1) T (2) T (3) F(4) F (5) T (6) T3.3描述下列各正规表达式所表示的语言。
(1) 0(0|1)*0(2) ((ε|0)1*)*(3) (0|1)*0(0|1)(0|1)(4) 0*10*10*10*(5) (00|11)*((01|10)(00|11)*(01|10)(00|11)*)*答案(1) 以0开头并且以0结尾的,由0和1组成的符号串。
(2) {α|α∈{0,1}*}(3) 由0和1组成的符号串,且从右边开始数第3位为0。
(4) 含3个1的由0和1组成的符号串。
{α|α∈{0,1}+,且α中含有3个1 }(5) {α|α∈{0,1}*,α中0和1为偶数}3.4对于下列语言分别写出它们的正规表达式。
(1) 英文字母组成的所有符号串,要求符号串中顺序包含五个元音。
(2) 英文字母组成的所有符号串,要求符号串中的字母依照词典顺序排列。
(3) Σ={0,1}上的含偶数个1的所有串。
(4) Σ={0,1}上的含奇数个1的所有串。
(5) 具有偶数个0和奇数个1的有0和1组成的符号串的全体。
(6) 不包含子串011的由0和1组成的符号串的全体。
(7) 由0和1组成的符号串,把它看成二进制数,能被3整除的符号串的全体。
答案(1) 令Letter表示除这五个元音外的其它字母。
((letter)*A(letter)*E(letter)*I(letter)*O(letter)*U(letter))*(2) A*B*....Z*(3) (0|10*1)*(4) (0|10*1)*1(5) [分析]设S是符合要求的串,|S|=2k+1 (k≥0)。
则S→S10|S21,|S1|=2k (k>0),|S2|=2k (k≥0)。
且S1是{0,1}上的串,含有奇数个0和奇数个1。
S2是{0,1}上的串,含有偶数个0和偶数个1。
考虑有一个自动机M1接受S1,那么自动机M1如下:和L(M1)等价的正规表达式,即S1为:((00|11)|(01|10)(00|11)*(01|10))*(01|10)(00|11)*类似的考虑有一个自动机M2接受S2,那么自动机M2如下:和L(M2)等价的正规表达式,即S2为:((00|11)|(01|10)(00|11)*(01|10))*因此,S为:((00|11)|(01|10)(00|11)*(01|10))*(01|10)(00|11)*0|((00|11)|(01|10)(00|11)*(01|10))*1(6)1*|1*0(0|10)*(1|ε)(7)接受w的自动机如下:对应的正规表达式:(1(01*0)1|0)*3.6给出接受下列在字母表{0,1}上的语言的DFA。
(1) 所有以00结束的符号串的集合。
(2) 所有具有3个0的符号串的集合。
答案(a) DFA M=({0,1},{q0,q1,q2},q0,{q2},δ)其中δ定义如下:δ(q0,0)=q1δ(q0,1)=q0δ(q1,0)=q2δ(q1,1)=q0δ(q2,0)=q2δ(q2,1)=q0(b)正则表达式: 1*01*01*01*DFA M=({0,1},{q0,q1,q2,q3},q0,{q3},δ)其中δ定义如下:δ(q0,0)=q1δ(q0,1)=q0δ(q1,0)=q2δ(q1,1)=q1δ(q2,0)=q3δ(q2,1)=q2δ(q3,1)=q33.7构造等价于下列正规表达式的有限自动机。
(1)10|(0|11)0*1(2)((0|1)*|(11))*答案(1)DFA M=({0,1},{q0,q1,q2,q3},q0,{q3},δ)其中δ定义如下:(2)δ(q0,0)=q1δ(q0,1)=q2(3)δ(q1,0)=q1δ(q1,1)=q3(4)δ(q2,0)=q3δ(q2,1)=q1(5)(6)(2) DFA M=({0,1},{q0},q0,{q0},δ)(7)其中δ定义如下:(8)δ(q0,0)=q0δ(q0,1)=q0(9)3.8给定右线性文法G:S->0S|1S|1A|0BA->1C|1B->0C|0C->0C|1C|0|1试求一个于G等价的左线性文法G'3.9试对于下列正规表达式使用证明定理3。
5的构造算法构造非确定的有限自动机。
请给出每个自动机在处理输入符号串ababbab的过程中的动作序列。
(1) (a|b)*(2) (a*|b*)*(3) ((ε|a)b*)*3.10转换练习3.9中的每个 NFA 为 DFA 。
并给出每个DFA在处理输入符号串ababbab的过程中的动作序列。
3.11试把练习3.10中得到的DFA的状态给以最小化。
答案(1),(2),(3)的DFA M相同,化简结果为:(4)3.12我们可以证明两个正规表达式是等价的,如果它们的最小状态DFA是相同的(除了状态的名字以外)。
利用这一结论,请说明下列正规表达式都是等价的。
(1) (a|b)*(2) (a*|b*)*(3) ((ε|a)b*)*答案根据3.11的结果知这几个正规表达式是等价的。
3.13对于下列正规表达式构造最小状态的DFA。
(1) (a|b)*a(a|b)(2) (a)b)*a(a|b)(a|b)5.对如下文法:G[S]:S → a b S | a a B | a dB → b b B | b分别给出句子abaabbb和ad的句柄句子ad的语法分析树为:句子abaabbb的语法分析树为: Sa d所以句子abaabbb的句柄是b;句子ad的句柄是ad .二、(10分)说明如下文法是否是LL(1)文法,若不是,将其转换为LL(1)文法。
最后给出该文法的LL(1)分析表。
G[A]: A → B eB → B b | a文法中有左递归,不是LL(1)文法。
转换为G′:A→ B eB→ a B′B′→b B′ | λPredict(A→ B e) ={ a }Predict(B→ a B′) ={ a }Predict(B′→b B′) ={ b }Predict(B′→λ) ={ e }LL(1)分析表:4. 给出识别正则表达式((a|bc)*d)+的NFA 。
5.已知文法G[S]:S → S;G│GG → G(T)│ HH → a │ (S)T → T+S │ S找出句型:a(T+S);H;(S)的短语、简单短语和句柄。
短语: a, T+S, a(T+S) , H , a(T+S);H , (S)简单短语:a , T+S , H , (S) 句柄是a .6.已知文法G[S]为:S→AB | bC A→b | λB→aD | λC→AD | bD→aS| c对其每一个非终级符求First集和Follow集。
First (S) = { b , a , λ }First (A) = { b , λ }First (B) = { a , λ }First (C) = { b , a , c }First (D) = { a , c }Follow (S) = { # }Follow (A) = { a , c , #}Follow (B) = { # }Follow (C) = { # }Follow (D) = { # }二、(10分)设有文法G[A]: A → iB*eB → SB|εS → [eC]|.iC → eC|ε判定该文法是否为LL(1)文法?若是则给出它的LL(1)分析表,否则说明理由。
先计算各个产生式的Predict集:Predict (A-> iB*e)={ i };Predict (B-> SB) ={ [ , .}Predict (B->ε ) ={ * }Predict (S->[eC]) ={ [ }Predict (S->. i) ={ . }Predict (C-> eC) ={ e }Predict (C->ε ) ={ ] }因为Predict集没有冲突,所以是LL(1)文法。
LL(1)分析表如下:i * e [ ] .A -> iB*e -> εB ->S B ->S BS ->[e C] ->. iC ->eC -> ε1、证明下面文法是LL(1)的但不是SLR(1)文法S→AaAb|BbBa A→εB→ε解:对于产生式S→AaAb|BbBa 来说FIRST(AaAb)∩FIRST(BbBa)={a}∩{b}=Φ而A,B∈V N仅有一条候选式。
因此,这个文法是LL(1)的。
下面构造这个文法的识别活前缀的DFA。
I0= {S'→·S, S→·AaAb, S→·BbBa, A→·, B→·}I1= {S'→S·}I2= {S→A·aAb}I3= {S→B·bBa}I4= {S→Aa·Ab, A→·}I5= {S→Bb·Ba, B→·}I6= {S→AaA·b}I7= {S→BbB·a}I8= {S→AaAb·}I9= {S→BbBa·}由于FOLLOW(A)=FOLLOW(B)={a, b}因此项目集I0中存在归约-归约冲突。
在I0状态下,当输入符号是a或是b时,不知用A→ε还是B→ε进行归约。
故此文法不是SLR(1)的。
但是,此文法是LR(1)的。
五、已知文法G[S],其产生式如下:S→(L)|a L→L,S|S从G[S]中消除左递归,并为之构造一个非递归预测分析器LL(1)分析表。
请说明在句子(a,(a,a))上的分析器的动作。
(20分)解:将所给文法消除左递归得G':S →(L)|a L →SL' L'→,SL' | ε实现预测分析器的不含递归调用的一种有效方法是使用一张分析表和一个栈进行联合控制,下面构造预测分析表:根据文法G'有FIRST(s) = { ( , a ) FOLLOW(S) = { } , ', ' , $ }FIRST(L) = { ( , a ) FOLLOW(L) = { } }FIRST(L’) = { ', ' }FOLLOW(L’) = { } }按以上结果,构造预测分析表M如下:文法G’是LL(1)的,因为它的LL(1)分析表不含多重定义入口。