ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:115.70KB ,
资源ID:6810137      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6810137.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理作业集第四章修订版.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理作业集第四章修订版.docx

1、编译原理作业集第四章修订版第四章 语法分析自上而下分析本章要点1. 语法分析器的功能;2. 自上而下分析方法,LL(1)文法3. 递归下降分析程序构造;4. 预测分析表的构造及预测分析过程;5. LL(1)分析中的错误处理。本章目标理解和掌握语法分析器的功能、自上而下分析所面临的问题、LL(1)分析法、递归下降分析的构造过程、预测分析程序等内容。本章重点1语法分析器的功能,自上而下的基本概念2LL(1)文法的条件及其判别,计算first集和follow集3递归下降分析方法、预测分析表的构造及其预测过程。本章难点1. 非终结符的First集合,产生式候选的First集合,非终结符的follow集

2、合的求解;2. 左递归消除;3. 递归下降分析程序的编写;作业题一、单项选择题:1. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于 分析法。a. 自左至右 b. 自顶向下 c. 自底向上 d. 自右向左2. 上下文无关文法可以用 来描述。a. 正则表达式 b. 正规文法 c. 扩展的BNF d. 翻译模式3. 自上而下分析面临的四个问题中,不包括 a. 需消除左递归;b. 存在回朔;c. 虚假匹配;d. 寻找可归约串4. 语法分析器接收以_为单位的输入,并产生有关信息供以后各阶段使用。a. 表达式;b. 产生式; c. 单词;d. 语句;5. 自上而下分析的主旨是,对任何单词符号串

3、,试图用一切可能的办法,从文法开始符号(根结点)出发,_。a. 为输入串寻找最右推导; b. 为输入串寻找最左直接子树;c. 为输入串建立最右直接子树;d. 为输入串寻找最左推导;6. 把规则TF | T*F表示成扩展的巴克斯范式以后,画出它的语法图应该是 。7. 下列文法中,_是LL(1)文法。a. SaSb|ab b. Sab|Sab c. SaS|b d. SaS|a 8. 设有文法G: SAp|Bq Aa|cA Bb|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;二、填空

4、题:1. 语法分析器的工作本质上就是按_,识别输入符号串是否为一个句子。这里所说的输入串是指由_组成的有限序列。2. 自顶向下分析会遇到的主要问题是_和_。3. 自上而下地为输入串建立一棵语法树,就是为输入串寻找一个_。4. 在扩充的巴科斯范式中,用_表示符号或串的出现可有可无。5. 对于一个文法,当给出一串符号时,怎么能知道它是不是该文法的一个句子呢?这就要判断,看是否能 。6. 文法exp exp addop term | term 消除左递归的结果为 。7. 写出ET | E+T的EBNF范式为 。8. 扩展的巴克斯范式描述语法的好处是,直观易懂,便于表示 。 二答案:1. 文法的产生式

5、,单词符号(文法的终结符)2. 左递归,回溯;3.最左推导;4. 方括号(或);5. 从文法的开始符号出发推导出这个输入串。(或:能否建立一棵与输入串相匹配的语法分析树。)6. exp term exp;exp addop term exp| ;7. ET+T;8. 左递归消去和左因子提取。三、判断题:1. LL(k)文法都不是二义性的。( )2. 存在一种算法,能判定任何上下文无关文法是否是LL(1)的。 ( )3. 一个文法是含有左递归的,如果存在非终结符P,使得P*P。( )4. 提取公共左因子的副产品是引进了大量的非终结符和产生式。 ( )5. 把一个文法改造成任何非终结符的所有后选终

6、结首符集两两不相交的办法是消除左递归。( )6. 若XVT,则FIRST(X)= X 。 ( )7. 一个文法的预测分析表含有多重定义入口,说明该文法是LL(1)的。( )8. 自上而下分析及自下而上分析中的“下”是指被分析的源程序串。( )三答案:1. ;2. ;3. ;4. ;5. ;6. ;7. ;8. ;四、名词解释:1. 左递归;2. 递归下降分析器;3. LL(1)文法;4. 预测分析表5. 自上而下分析四答案:1.一个文法如果存在非终结符P,P=+P,则称该文法是左递归的。2. 当一个文法满足LL(1)条件时,可以为它构造一个不带回溯的的自上而下分析程序,该程序是由一组递归过程组

7、成的,每个过程对应文法的一个非终结符。这样的分析程序称为递归下降分析器。3. 一个文法G,如果满足以下条件,则称为LL(1)文法:(1)文法不含左递归;(2)对于文法中每一个非终结符A的各个产生式的候选首符集两两不相交;(3)对文法中的每个非终结符A,若它存在某个候选首符集包含,则A的First集合和Follow集合的交集为空。4. 预测分析表是一个MA, a形式的矩阵。其中A为非终结符,a是终结符或“#”。矩阵元素MA, a中存放着一条关于A的产生式,指出当A面临输入符号a时所应采取的候选。MA, a中也可能存放一个“出错标志”,指出A根本不该面临输入符号a。5. 自上而下分析是,对任何输入

8、串,试图用一切可能的办法,从文法开始符号(根结点)出发,自上而下地为输入串建立一棵语法树。或者说,为输入串寻找一个最左推导。五、简答题:1. 词法分析和语法分析都是对字符串进行识别的,二者有何区别?2. 试说明没有一个左递归文法是LL(1)的。3. 试说明没有一个LL(1)文法是二义性的。4. 为什么要消除回溯?5. 为什么要提取左因子?6. 下面文法是有左递归吗?若有,提取左递归。 DeclistDeclist; Decl | Decl DeclidList:Type IdListIdlist, id | id TypeScalarType | array (ScalarTypeList)

9、of Type ScalarTypeid | Bound.Bound BoundSign IntLiteral | id Sign+ | - | e ScalarTypeListScalarTypeList, ScalarType | ScalarType五答案:1. 答:词法分析的输入符号串是一个单词,而语法分析的输入符号串是一个句子。词法分析的一个输入符号串是由单个符号组成的单词;语法分析的输入符号串是由词法分析得来的单词组成的句子。2. 对于任一个左递归文法来说,存在一个AVN,有AA.,因此,在文法中必有如下的规则序列:A A1.A1 A2. . An A|A。显然,FIRST(A)F

10、IRST()。因此,没有一个左递归文法是LL(1)的。3. 解:设有一个LL(1)文法G是二义性的,那么,一定存在一个WL(G),W=a1, a2., an,有两棵不同的分析树。如果按最左推导构造这两棵分析树,按么,一定有两个最左推导序列,这来年改革最左推导序列的不同在于,于对某一个AVN和当前要匹配的ai(1in),分别使用A的两个不同的候选式A和A进行推导以匹配ai(i) 若且,则必有aiFIRST()且aiFIRST(),FIRST()FIRST()(ii) 若和有一个能推导出,比如,则aiFIRST()且aiFOLLOW(A)显然,FIRST()FOLLOW(A)无论(i)还是(ii)

11、,都和G是LL(1)文法矛盾。4. 假定当前轮到非终结符A去执行匹配任务,A共有n个候选1、2、n,这时候该用哪一个候选去替换A,原始的办法是采用对所有候选采取“试探”的方法。如果某个候选不成功就需要“回退”。这个回退的过程会导致前次匹配的许多工作推到重来,效率低。而且,最终匹配不成功的时候,难以直到输入串中出错的确切位置。5. 假定当前轮到非终结符A去执行匹配任务,A共有n个候选1、2、n,即A1|2|n。A面临的第一个输入符号为a,如果a属于某个First(i),则用该i来匹配A。但是,若a既属于某个First(i),又属于某个First(j),则说明i和i存在共同的左部,也就是说,有共同

12、的左因子。此时无法确定到底是用i还是用j来匹配A。所以要消除左因子。六、应用题1. 已知文法GS:S (L) | aL L,S | S.消除左递归,若有左因子则提取之;.对(1)中得到的文法求First集合和Follow集合.对(1)中得到的文法构造一个预测分析表;.给出对句子(a,(a,a)上的分析动作1.答案:将所给文法消除左递归得G: S (L) | a L SL L ,SL |实现预测分析器的不含递归调用的一种有效方法是使用一张分析表和一个栈进行联合控制,下面构造预测分析表:根据文法G有 FIRST(S) = ( , a FOLLOW(S) = #, ) , , FIRST(L) =

13、( , a FOLLOW(S) = ) FIRST(L) = , , FOLLOW(L) = ) 按以上结果,构造预测分析表M如下:非终结符号输入符号(),a#SS ( L )S aLL SLL SLLL L ,SL文法G是LL(1)的,因为它的分析表不含多重定义入口。预测分析器对输入符号串(a, (a, a)做出的分析动作如下:栈输入输出$S(a, (a, a)$)L(a, (a, a)$S (L)$)La, (a, a)$)LSa, (a, a)$L SL$)Laa, (a, a)$S a$)L, (a, a)$)LS, (a, a)$L , SL$)LS(a, a)$)L)L(a, a)

14、$S (L)$)L)La, a)$)L)LSa, a)$L SL$)L)Laa, a)$S a$)L)L, a)$)L)LS, a)$L ,SL$)L)LSa)$)L)Laa)$S a$)L)L)$)L)$L $)L)$)$L $2. 考查文法G(s): S( T ) | a + S | aTT, S | S. 消除文法的左递归,提取公共左因子. 改造后的文法是LL(1)的吗?为什么?. 如果是LL(1)文法,对每个非终结符,写出不带回朔的递归子程序。2.答案:.消除文法的左递归G ( s ):S ( T ) | a + S | aT S T T , S T| 再提取公共左因子,最后得到改造后

15、的文法GS:S( T ) | a SS + S | T S TT, S T | .First(S)=(,a ; Follow(S)=#,,;First(S)=,; Follow(S)= #,,;First(T)=(,a ; Follow(T)= ) ;First(T)=, ,; Follow(T) = ) ;产生式的两个候选的First集合:Fist((T))=(,First(aS)=a不相交,满足条件。产生式,First(S) Follow(S)=;产生式,First(T) Follow(T)=;所以,改造后的文法是LL(1)的,.我们构造不带回溯的递归子程序如下:S( T ) | a SP

16、ROCEDURE S;DEGIN IF SYM=( THEN BEGIN ADVANCE T; IF SYM= ) THEN ADVANCE ELSE ERROR END ELSE IF SYM=a THEN BEGIN ADVANCE; END ELSE ERROREND;S + S | PROCEDURE S;BEGIN IF SYM= + THEN BEGIN ADVANCE;S ENDEND;T S TPROCEDURE T;BEGIIN S; T END;T, S T | PROCEDURE T;BEGIN IF SYM= , THEN BEGIN ADVANCE; S; T END

17、END;3. 已知文法GS:S uBDzB Br | wD EFE y | F x | (a) 求每个非终结符的FIRST和Follow集。(b) 构造这个文法的LL(1)分析表(c) 说明这个文法不是LL(1)的;(d) 尽可能少地修改此文法,使其成为能产生相同语言的LL(1)文法.3. 答案: (a) FIRST(S) = u FOLLOW(S) = # FIRST(B) = w FOLLOW(B) = r, z FIRST(D) = x, y, FOLLOW(D) = z FIRST(E) = y, FOLLOW(E) = x, z FIRST(F) = x, FOLLOW(F) = z

18、 (b) 该文法的LL(1)分析表为:非终结符uzrwxy#SSuBDzBBBrBwDDEFDEFDEFDEFEEEyEFFFx(c) 因为MB, w有两个产生式 BBv, Bw 且FIRST(Bv)=FIRST(w) = w 所以不是LL(1)的。(d) 消除左递归即可。 SuBDz BwB BrB | D EF E = y | F = x | 4. 已知文法如下:ET | E+T TF | T*F Fi | (E) 构造预测分析表,并给出对输入串i*i+i的分析过程。4.答案:首先消除左递归,得到新文法如下:ETEE+TE|TFTT*FT|F(E)|i对每个非终结符构造First和Foll

19、ow集合:FIRST(E) = FIRST(T) = FIRST(F) = ( , i ;FIRST(E) = + , ;FIRST(T) = * , FOLLOW(E) = FOLLOW(E) = ) , # ;FOLLOW(T) = FOLLOW(T) = + ,) ,# FOLLOW(F) = * , + , ) , # 再通过对文法的每个非终结符的任意候选都构造出First集合:FIRST(TE)= (,i; FIRST(+TE)=+ ;FIRST(FT)=(,i;FIRST(*FT)=*; FIRST((E))=(得到预测分析表如下: i + * ( ) #EETEETEEE+TEE

20、 E TTFTTFTTT T*FTT T FFiF(E)对输入串的分析过程如下:5. 文法G1:Sa|(T)TT,S|S(1) 证明文法G是LL(1)文法。(2) 构造LL(1)分析表。(3) 写出句子(a,a)#的分析过程。5. 答案:(1)先消除左递归,得到文法G2: 0) Sa 1) S 2) S( T ) 3) TS N2 4) N2, S N2 5) N2求非终结符的First和Follow集合:FIRSTFOLLOWS a,( #,,,) T a,( ) N2 ,, ) 对左部为N2的产生式可知:FIRST (, S N2)=,FIRST ()=FIRST(, S N2) FIRS

21、T()=;且:FIRST(N2) FOLLOW(N2)= 所以文法是LL(1)的。得到预测分析表 :a(),#SSaSS( T )TTSN2TSN2TSN2N2N2N2,SN2也可由预测分析表中无多重入口判定文法是LL(1)的。对输入串(a,a)#的分析过程为:分析栈输入串所用产生式#Sa,a)#)T(a,a)#S(T)#)T,a)#)N2S,a)#TSN2#)N2a,a)#Sa#)N2a)#)N2S,a)#N2,SN2#)N2S)#)N2a)#Sa#)N2#)#N2#可见输入串(a,a)#是文法的句子。6. 设文法G(S): S(L)|aS|a LL,S|S(1)消除左递归和提取左因子;(2

22、)计算每个非终结符的FIRST和FOLLOW;(3)构造预测分析表。(4)已知输入串(aa,a)a,该输入串是否文法的句子?给出分析过程。7. 对于文法 bexpr bexpr or bterm | bterm bterm bterm and bfactor | bfactor bfactor not bfactor | (bexpr) | true | false构造一个预测分析器(表)。答案:消除左递归和提取左因子bexpr bterm bexpr bexpr or bterm bexpr | bterm bfactor bterm bterm and bfactor bterm | bf

23、actor not bfactor | (bexpr) | true | falseFirst(bexpr)=First(bterm)=First(bfactor)= not, (, true,false First(bexpr)= or , First(bterm)= and, Follow(bexpr)=Follow(bexpr)= ) , $ Follow(bterm)=Follow(bterm)=or , ) , $Follow(bfactor)=and , or, ) , $8. 已知GR的产生式如下:R R | T | T T TF | F F F* | CC (R) | a |

24、b构造它的LL(1)分析表,并写出对输入串a|ba*的分析过程。答案:消除上面文法中的左递归R TRR | TR | T FTT FT | F CFF *F | C (R) | a | b计算FIRST()和FOLLOW(A)构造LL(1)分析表。9. 已知文法如下:SS*T | S/T | TTT+F | T-F | FF (S) | i | i e i 构造预测分析表,并给出对输入串i/i*i+i的分析过程。10. 已知文法:SAc|c ABb|b BSa|a构造预测分析表,给出对输入串cabc的分析过程。11. 已知文法G: S ( L | a L S , L | )(1)构造文法 G

25、的预测分析表。(2)若输入串为“(,)”,请给出语法分析过程。解() 1)求各非终结符的 FISRT 集和 FOLLOW 集: FIRST(S) = (, a ) FIRST(L) = a FIRST(S) = (, ), a FOLLOW(S) = , # FOLLOW(L) = FOLLOW(S) = , # 2)预测分析表:(a,#SS ( LS aLL S , LL S , LL )()对输入串 “(,)”的分析处理过程如表1所示。表1 对输入串 “(,)”的分析过程步骤分析栈输入串所用产生式(,)L((,)S ( LL,)L, S ,)L S , LL, a,)SaL, ,)L ) )L )12. 给定文法 ( i,d,(,) ,)其中 :E iAE EAA i A d A (E)(1)消除左递归;(2)计算改写后文法中各非

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1