- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
                        查看更多
                        
                    
                陈火旺 编译原理 chapter4
                    LL(1) 文法 五、实例 已知文法G:A→aABl|a                           B→Bb|d ①试给出与G等价的LL(1)文法G’ ②构造文法G’的预测分析表,并给出输入串aadl的分析过程 解: 对A→aABl|a 来说: First(aABl)      First(a)={a}≠φ.  对B→Bb|d 存在有左递归.   故文法G不是LL(1)文法.  提取公共左因子及消除左递归得                                   A→aT                                   T→ABl|ε                                  B→dB’                                  B’→bB’|ε 此时          First(A)={a}              Follow(A)={d,#}         First(T)={a,ε}          Follow(T)={d,#}              First(B)={d}               Follow(B)={l}             First(B’)={b,ε}         Follow(B’)={l}        G‘满足(1)不含左递归,(2)每个产生式的候选首符集两两不相交(First(ABl)={a}) ,和(3)如下 对于T→ABl|ε来说, First(T)      Follow(T)= φ          B’→bB’|ε             First(B’)     Follow(B’)= φ  故有文法G’为所求等价的LL(1)文法      复习题 1. 名词解释      自上而下分析     自下而上分析  2. 预测分析表的构造        (1) 消除文法左递归,消除回溯       (2) 求出FIRST和FOLLOW       (3) 判断是否为LL(1)文法       (4) 若是构造LL(1)分析表       (5) 给出一个句子,利用分析表进行预测分析 	假定要用非终结符A进行匹配,面临的输入符号为a,A的所有产生式为: 	A→ ? 1| ? 2|……| ? n      (1)  若a∈FIRST(? i),则指派? i去执行匹配任务;      (2)  若a不属于任何一个候选首符集,则: 	(a)  若ε属于某个FIRST(? i)且a∈FOLLOW(A),则让A与ε自动匹配; 	(b)  否则,a的出现是一种语法错误。        根据LL(1)文法的条件,每一步这样的工作都是确信无疑的。 4.4 递归下降分析程序的构造     递归下降分析器:当一个文法满足LL(1)条件时,可以为它构造一个不带回溯的自上而下分析程序,由一组递归过程组成,每一个过程对应文法的一个非终结符。     我们考虑以下文法G(4.2):       E→TE       E→+TE|ε 	T→FT       T→﹡FT|ε 	F→(E)|i 构造它的递归子程序。其中advance是指把输入串指示器IP调至指向下一个输入符号;sym是指IP当前所指向的那个输入符号;error( )为出错处理程序。 void E( ) { T( ); E( );} void E( ) { if(sym == +)   { advance;     T( );E( );}  } void T( ) { F( ); T( );} void T() { if(sym == *)   { advance;     F( );T( );}  } void F( ) { if(sym == i) advance;   else     if(sym == ( )        { advance;          E ( );          if(sym == ) ) advance;             else  error( );          }        else  error( );    } 如:i+i 其程序执行情况为?     前面的上下文无关文法产生式(BNF)中只用了两个元符号:→和|。下面扩充几个元语言符号: (1){?} 表示?*;  (2){?}0n表示?可任意重复0次至n次,{?}00=?0=ε; (3)[?]表示{?}01即表示?的出现可有可无即? |ε;  引入上述元符号后的文法称为扩充的巴克斯范式。   例如:实数可定义为:    decimal→[sign]integer.{digit}[exponent]    exp
                 原创力文档
原创力文档 
                        

文档评论(0)