编译原理第4章作业答案
编译原理作业集-第四章-修订版(精选.)

第四章语法分析—自上而下分析本章要点1. 语法分析器的功能;2. 自上而下分析方法,LL(1)文法3. 递归下降分析程序构造;4. 预测分析表的构造及预测分析过程;5. LL(1)分析中的错误处理。
本章目标理解和掌握语法分析器的功能、自上而下分析所面临的问题、LL(1)分析法、递归下降分析的构造过程、预测分析程序等内容。
本章重点1.语法分析器的功能,自上而下的基本概念2.LL(1)文法的条件及其判别,计算first集和follow集3.递归下降分析方法、预测分析表的构造及其预测过程。
本章难点1. 非终结符的First集合,产生式候选的First集合,非终结符的follow集合的求解;2. 左递归消除;3. 递归下降分析程序的编写;作业题一、单项选择题:1. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于分析法。
a. 自左至右b. 自顶向下c. 自底向上d. 自右向左 2. 上下文无关文法可以用 来描述。
a. 正则表达式b. 正规文法c. 扩展的BNFd. 翻译模式 3. 自上而下分析面临的四个问题中,不包括a. 需消除左递归;b. 存在回朔;c. 虚假匹配;d. 寻找可归约串4. 语法分析器接收以________为单位的输入,并产生有关信息供以后各阶段使用。
a. 表达式;b. 产生式;c. 单词;d. 语句;5. 自上而下分析的主旨是,对任何单词符号串,试图用一切可能的办法,从文法开始符号(根结点)出发,________。
a. 为输入串寻找最右推导;b. 为输入串寻找最左直接子树;c. 为输入串建立最右直接子树;d. 为输入串寻找最左推导;6. 把规则T→F | T*F 表示成扩展的巴克斯范式以后,画出它的语法图应该是 。
图a图b图c图d7. 下列文法中,_______是LL(1)文法。
a. S →aSb|abb. S →ab|Sabc. S →aS|bd. S →aS|a 8. 设有文法G : S→Ap|Bq A→a|cAB→b|dB则,First(Ap)={_______________} a. a,c b. b,d c. p, q d. A, p一.答案:1. b ;2. c ;3. d ;4. c ;5. d ;6. 图a ;二、填空题:1. 语法分析器的工作本质上就是按____________________,识别输入符号串是否为一个句子。
编译基础学习知识原理第4章规范标准答案

第四章 词法分析1.构造下列正规式相应的DFA :(1) 1(0|1)*101(2) 1(1010* | 1(010)* 1)*(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 为下表由子集法将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图如下0,1 下表由子集法将NFA转换为DFA:下面将该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.将图4.16确定化:图4.16解:下表由子集法将NFA转换为DFA:14.把图4.17的(a)和(b)分别确定化和最小化:(a) (b)解: (a):可得图(a1),由于F(A,b)=F(B,b)=C,并且F(A,a)=F(B,a)=B,所以A,B 等价,可将DFA 最小化,即:删除B ,将原来引向B 的引线引向与其等价的状态A ,有图(a2)。
编译原理 第四章习题

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章.doc

第四章作业4.1 对下面文法,设计递归下降分析程序。
S→aAS|(A) , A→Ab|c解:将左递归去掉,将规则A→Ab|c 改成 A→c{b}非终结符号S的分析程序如下:非终结符号A的分析程序如下:4.2 设有文法G[Z]:Z∷=(A) , A∷=a|Bb , B∷=Aab若采用递归下降分析方法,对此文法来说,在分析过程中,能否避免回溯?为什么?解:若采用递归下降分析方法,对此文法来说,在分析过程中,不能避免回朔。
因为A∷=a|Bb和B∷=Aab构成了间接的左递归,不满足实现没有回溯的递归下降分析方法的条件,因此在分析过程中,将造成回溯。
4.3 若有文法如下,设计递归下降分析程序。
<语句>→<语句><赋值语句>|ε<赋值语句>→ID=<表达式><表达式>→<项>|<表达式>+<项>|<表达式>-<项><项>→<因子>|<项>*<因子>|<项>/<因子><因子>→ID|NUM|(<表达式>)解:首先,去掉左递归(1)<语句>→<语句><赋值语句>|ε改为: <语句>→{<赋值语句>}(3)<表达式>→<项> | <表达式> + <项> | <表达式> - <项> 改为:<表达式>→<项>{(+ | -)<项>}(4)<项>→<因子> | <项> * <因子> | <项> / <因子>改为:<项>→<因子>{(* | /)<因子>}则文法变为:<语句>→{<赋值语句>}<赋值语句>→ID=<表达式><表达式>→<项>{(+ | -)<项>}<项>→<因子>{(* | /)<因子>}<因子>→ID|NUM|(<表达式>)非终结符号 <语句>→{<赋值语句>} 的分析程序如下:非终结符号 <赋值语句>→ID=<表达式> 的分析程序如下:非终结符号<表达式>→<项>{(+ | -)<项>} 的分析程序如下:非终结符号 <项>→<因子>{(* | /)<因子>} 的分析程序如下:非终结符号 <因子>→ID|NUM|(<表达式>) 的分析程序如下:4.4 有文法G[A]:A::=aABe|ε,B::=Bb|b(1)求每个非终结符号的FOLLOW集。
北语20新上《编译原理》作业4答案

(判断题)1: 题目见图片
A: 错误
B: 正确
正确答案: A
(判断题)2: 在解释方式下,解释程序将按照源程序中语句的动态顺序,逐句地进行分析解释,并立即予以执行。
A: 错误
B: 正确
正确答案: B
(判断题)3: 静态数据区用于可变数据以及管理过程活动的控制信息。
A: 错误
B: 正确
正确答案: A
(判断题)4: 静态数组的存储空间可以在编译时确定。
( )
A: 错误
B: 正确
正确答案: A
(判断题)5: 简单优先文法允许任意两个产生式具有相同右部。
( )
A: 错误
B: 正确
正确答案: A
(判断题)6: 逆波兰法表示的表达式把运算对象放在运算符的后面。
( )
A: 错误
B: 正确
正确答案: A
(判断题)7: 题目见图片
A: 错误
B: 正确
正确答案: B
(判断题)8: 程序设计语言中的布尔表达式只有一个作用,即用做改变控制流语句中的表达式。
A: 错误
B: 正确
正确答案: A
(判断题)9: 题目见图片
A: 错误
B: 正确。
蒋立源编译原理第三版第四章习题与答案.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 的分析过程。
编译原理课后习题答案ch4
注意:本题应该理解为对图(a)进行确定化和对图(b)进行最小化。提供的答案没有对图(a)确 定化。
盛威网()专业的计算机学习网站 14
《编译原理》课后习题答案第四章
第5题 构造一个 DFA,它接收 Σ={0,1}上所有满足如下条件的字符串:每个 1 都有 0 直接跟在 右边。并给出该语言的正规式。 答案: 按题意相应的正规表达式是(0*10)*0*, 或 0*(0 | 10)*0* 构造相应的 DFA, 首先构造 NFA 为
7
《编译原理》课后习题答案第四章
注意:这个题,也可以这样构造 NFA(用最少的ε,但注意不能出错) :
a,b 0 a a 2 a,b 1 a b 3
盛威网()专业的计算机学习网站
8
《编译原理》课后习题答 ε X b A ε F B a C b ε b G b H ε ε D ε E a I b Y
除 X,A 外,重新命名其他状态,令 AB 为 B、AC 为 C、ABY 为 D,因为 D 含有 Y(NFA 的终态),所以 D 为终态。 . X A B C D DFA 的状态图:: 0 . A C A C 1 A B B D B
(2)先构造 NFA: 0 ε X 1 A ε ε F B 1 C 1 0 ε 0 D 1 E 1 0 ε 用子集法将 NFA 确定化 ε X T0=X A T1= ABFL Y CG T2= Y T3= CGJ DH K T4= DH EI T5= ABFKL T6= ABEFIL EJY T7= ABEFGJLY EHY CGK T8= ABEFHLY EY CGI T9= ABCFGJKL DHY T10= ABEFLY T11= CGJI DHJ T12= DHY T13= DHJ EIK T14= ABEFIKL ABEFIKL EJY CG DHJ ?正确 DHJG EI EIK DHY EY DHJ CG K ABEFLY CGJI DHY CGK ABEFHLY ABCFGJKL EY CGI ABEFGJLY EHY CGK ABEFIL Y EJY CG CG DH ABFKL EI DH K Y CGJ ABFL Y CG X A 0 1 1 ε L ε K ε J 0 Y
清华大学编译原理第二版课后习答案
Lw.《编译原理》课后习题答案第一章第1章引论第1题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)源程序:源语言编写的程序称为源程序。
(3)目标程序:目标语言书写的程序称为目标程序。
(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第2题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
盛威网()专业的计算机学习网站1《编译原理》课后习题答案第一章目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和查找等一系列表格工作。
《编译原理》课后习题答案
第7 题证明下述文法G[〈表达式〉]是二义的。
〈表达式〉∷=a|(〈表达式〉)|〈表达式〉〈运算符〉〈表达式〉〈运算符〉∷=+|-|*|/答案:可为句子a+a*a 构造两个不同的最右推导:最右推导1 〈表达式〉=>〈表达式〉〈运算符〉〈表达式〉=>〈表达式〉〈运算符〉a=>〈表达式〉* a=>〈表达式〉〈运算符〉〈表达式〉* a=>〈表达式〉〈运算符〉a * a=>〈表达式〉+ a * a=>a + a * a最右推导2 〈表达式〉=>〈表达式〉〈运算符〉〈表达式〉=>〈表达式〉〈运算符〉〈表达式〉〈运算符〉〈表达式〉=>〈表达式〉〈运算符〉〈表达式〉〈运算符〉a=>〈表达式〉〈运算符〉〈表达式〉* a=>〈表达式〉〈运算符〉a * a=>〈表达式〉+ a * a=>a + a * a第8 题文法G[S]为:S→Ac|aB A→ab B→bc该文法是否为二义的?为什么?答案:对于串abc(1)S=>Ac=>abc (2)S=>aB=>abc即存在两不同的最右推导。
所以,该文法是二义的。
或者:对输入字符串abc,能构造两棵不同的语法树,所以它是二义的。
第9 题考虑下面上下文无关文法:S→SS*|SS+|a(1)表明通过此文法如何生成串aa+a*,并为该串构造语法树。
(2)G[S]的语言是什么?答案:(1)此文法生成串aa+a*的最右推导如下S=>SS*=>SS*=>Sa*=>SS+a*=>Sa+a*=>aa+a*(2)该文法生成的语言是:*和+的后缀表达式,即逆波兰式。
第10 题文法S→S(S)S|ε(1) 生成的语言是什么?(2) 该文法是二义的吗?说明理由。
答案:(1)嵌套的括号(2)是二义的,因为对于()()可以构造两棵不同的语法树。
第11 题令文法G[E]为:E→T|E+T|E-T T→F|T*F|T/F F→(E)|i证明E+T*F 是它的一个句型,指出这个句型的所有短语、直接短语和句柄。
编译原理韩太鲁第四章第五章答案
第四章4.1文法G1为:N→ND | D D→0 | 1(1)L(G1)如何表示?(2)给出句子011100的最左推导和最右推导。
解答:(1) L(G1)为无符号二进制数。
(2)最左推导:N⇒ND⇒NDD⇒ NDDD⇒ NDDDD⇒ NDDDD⇒ NDDDDD⇒ DDDDDD ⇒ 0DDDDD⇒ 01DDDD⇒ 011DDD⇒ 0111DD⇒ 01110D⇒ 011100最右推导:N⇒ND⇒N0⇒ ND0⇒ N00⇒ ND00⇒ N100⇒ ND100⇒ N1100 ⇒ ND1100 ⇒ N11100⇒ D11100 ⇒ 0111004.2 写一文法G2,使其L(G2)是正奇数集合,且每个数不以0打头。
解答:令G2={ V N,V T,P, <正奇数>},其中,V T ={0,1,2,3,4,5,6,7,8,9},V N ={<正奇数>, <一位奇数>, <一位偶数>, <数字串>, <数字1>, <数字>},P:<正奇数>→<一位奇数>│<数字串> <一位奇数><数字串>→<数字串><数字>│<数字1><数字>→<一位奇数>│<一位偶数>数字1→1│2│3│4│5│6│7│8│9<一位奇数>→1│3│5│7│9<一位偶数>→0│2│4│6│84.3 设文法G3为:E→E+T | TT→T*F | FF→(E) | i试证明符号串T*F+ i是G3的句型,并给出此句型的所有短语以及句柄。
解答:由于有推导E⇒E+T⇒T+T⇒T*F+T⇒ T*F+F⇒T*F+i所以T*F+i是的G3的句型。
此句型T*F+i的语法树如图4-5:EE + TT Fi图4-5 句型T*F+i的语法树根据语法树此句型的短语有:T*F, i, T*F+i.句柄为T*F。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章 习题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 rtermrterm rfactor | rfactor rfactor rfactor * | rprimary rprimarya | b 1)对这个文法提取公因子 2)提取公因子的变换使这个文法适用于自顶向下的语法分析技术吗? 3)提取公因子之后,原文法中消除左递归 4)得到的文法适用于自顶向下的语法分析吗? 解 1) 提取左公因子之后的文法变为 rexpr rexpr + rterm | rterm rtermrterm rfactor | rfactor rfactor rfactor * | rprimary rprimarya | 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’)={),$} ③构建预测分析表 非终结符号 输入符号 ( ) $ S S->S’ S->S’ S->S’ S’ S’->(S)SS’ S’-> S’-> (5) ①消除该文法的左递归得到文法 S->(L)|a
用类Pascal语言构造的一个预测分析器: PROCEDURE S BEGIN S; WHILE (lookahead==’(') THEN BEGIN match ('('); S; match (')'); END; ELSE IF (lookahead=='a') THEN match('a') ELSE error END; L->SL’ L’->,SL’|
②计算FIRST与FOLLOW集合 FIRST(S)={(,a} FOLLOW(S)={ ),, ,$} FIRST(L)={(,a} FOLLOW(L)={ ) } FIRST(L’)={,,} FOLLOW(L’)={ ) } ③构建预测分析表 非终结符号 输入符号 ( ) , a $ S S->(L) S->a L L->SL’ L->SL’ L’ L’-> L’->,SL’
习题4.4.4 计算练习4.2.2的文法的FIRST和FOLLOW集合 3)SS(S)S| 5)S(L)|a,LL,S|S 解: 3)FIRST(S)={ ,( } FOLLOW(S)={ (,),$ } 5)FIRST(S)={ (,a } FOLLOW(S)={ ),,,$ }
用类Pascal语言的一个预测分析器: PROCEDURE S BEGIN if (lookahead==’(') THEN BEGIN match ('('); L; match (')'); END; ELSE IF (lookahead=='a') THEN match('a') ELSE error END; PROCEDURE L; BEGIN S; WHILE (lookahead ==','); BEGIN match (','); S; END; END; FIRST(L)={ (,a } FOLLOW(L)={ ),, } 习题4.6.2 为练习4.2.1中的增广文法构造SLR项集,计算这些项集的GOTO函数,给出这个文法的语法分析表。这个文法是SLR文法吗? SSS+|SS*|a 解: ①构造该文法的增广文法如下 S’->S S->SS+ S->SS* S->a ②构造该文法的LR(0)项集如下
③GOTO函数如下 GOTO(I0,S)=I1 GOTO(I0,a)=I2 GOTO(I1,S)=I3 GOTO(I1,a)=I2 GOTO(I1,$)=acc GOTO(I3,S)=I3 GOTO(I3,+)=I4 GOTO(I3,*)=I5 GOTO(I3,a)=I2 ④构造该文法的语法分析表 状态 ACTION GOTO + * a $ S 0 S2 1 1 S2 acc 3 2 R3 R3 R3 R3 3 S4 S5 S2 3 4 R1 R1 R1 R1 5 R2 R2 R2 R2 注:FOLLOW(S’)=FOLLOW(S)={+,*,a,$} 这个文法是SLR文法,因为语法分析表中没有重复的条目
习题4.6.6说明下面文法 SSA|A Aa 是SLR(1)的,而不是LL(1)的。 证明: 1) 可以求得FIRST(SA)=FIRST(A)={a},故该文法不是LL(1)文法 2) 构造该文法的增广文法的语法分析表如下
I0 S’->.S S->.SS+ S->.SS* S->.a I1 S’->S. S->S.S+ S->S.S* S->.SS+ S->.SS* S->.a I2 S->a. I3 S->SS.+ S->SS.* S->S.S+ S->S.S* S->.SS+ S->.SS* S->.a I4 S->SS+. I5 S->SS*. ①构造增广文法 S’->S S->SA S->A A->a ②构造LR(0)项集族
③GOTO函数如下 GOTO(I0,S)=I1 GOTO(I0,A)=I2 GOTO(I0,a)=I3 GOTO(I1,A)=I4 GOTO(I1,a)=I3 GOTO(I1,$)=acc ④构建语法分析表如下(FOLLOW(A)=FOLLOW(S)={a,$}) 状态 ACTION GOTO a $ S A 0 S3 1 2 1 S3 acc 4 2 R2 R2 3 R3 R3 4 R1 R1 可以看到该语法分析表中没有重复的条目故该文法是SLR(1)文法
习题4.7.4说明下面的文法 S->Aa|bAc|dc|bda A->d 是LALR(1)的,但不是SLR(1)的 证明: 1、 构造该文法的SLR(1)语法分析表 ①构造增广文法 S’->S S->Aa S->bAc S->dc S->bda A->d
②构造LR(0)项集族
I0 S’->.S S->.SA S->.A A->.a I1 S’->S. S->S.A A->.a I2 S->A. I3 A->a. I4 S->SA. ③GOTO函数 GOTO(I0,S)=I1 GOTO(I0,A)=I2 GOTO(I0,b)=I3 GOTO(I0,d)=I4 GOTO(I1,$)=acc GOTO(I2,a)=I5 GOTO(I3,A)=I6 GOTO(I3,d)=I7 GOTO(I4,c)=I8 GOTO(I6,c)=I9 GOTO(I7,a)=I10 ④构建SLR语法分析表如下(FOLLOW(A)={a,c}) 状态 ACTION GOTO a b c d $ S A
0 S3 S4 1 2
1 acc 2 S5 3 S7 6 4 R5 S8|R5 5 R1 6 S9 7 S10|R5 R5 8 R3 9 R2 10 R4 可以看到在图中存在二义性的条目,故该文法不是SLR(1)文法
2、构造该文法的LALR(1)语法分析表 ①构造该增广文法的LR(1)项集族如下
②项集合并:没有可以合并的项集
I0 S’->.S S->.Aa S->.bAc S->.dc S->.bda A->.d I1 S’->S. I2 S->A.a I3 S->b.Ac S->b.da A->.d I4 S->d.c A->d. I5 S->Aa. I6 S->bA.c I7 S->bd.a A->d. I8 S->dc.
I9 S->bAc.
I10 S->bda.
I0 S’->.S,$ S->.Aa,$ S->.bAc,$ S->.dc,$ S->.bda,$ A->.d,a I1 S’->S.,$ I2 S->A.a,$ I3 S->b.Ac,$ S->b.da,$ A->.d,c I4 S->d.c,$ A->d.,$ I5 S->Aa.,$ I6 S->bA.c.,$ I7 S->bd.a.,$ A->d.,c I8 S->dc.,$ I9 S->bAc.,$
I10 S->bda.,$