网站大量收购独家精品文档,联系QQ:2885784924

语法分析_编译原理.ppt

  1. 1、本文档共81页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
句型、句子、语言的定义 句型 有文法G,若S x,且x∈V*,则称x是文法G的句型。 句子 有文法G,若S x,且x∈VT*,则称x是文法G的句子。 例:G: S→0S1, S→01 S ?0S1 ?00S11 ?000S111 上下文无关文法的句型的推导 最左(最右)推导:在推导的任何一步α?β,其中α、β是句型,都是对α中的最左(右)非终结符进行替换 最右推导被称为规范推导。 由规范推导所得的句型称为规范句型 句型的分析 句型分析就是识别一个符号串是否为某文法的句型,是某个推导的构造过程。 在语言的编译实现中,把完成句型分析的程序称为分析程序或识别程序。分析算法又称识别算法。 从左到右的分析算法,即总是从左到右地识别输入符号串,首先识别符号串中的最左符号,进而依次识别右边的一个符号。 语法分析算法分类 分析算法分类: 自上而下分析法(自顶向下): 从文法的开始符号出发,反复使用各种产生式,寻找与输入符号匹配的最左推导。 自下而上分析法(自底向上): 从输入符号串开始,逐步进行归约(最右推导的逆过程),直至归约到文法的开始符号。 语法分析方法综述: 递归子程序 自顶向下 预测分析(LL(1)分析器) 算符优先 自底向上 LR(0)、SLR(1),LR(1)、LALR(1) 自上而下语法分析的一般过程 自顶向下语法分析要解决的关键问题 假定要被代换的最左非终结符号是B,且有n条规则:B→A1|A2|…|An,那么如何确定用哪个右部去替代B? 例:文法G为:S→xAy | z,A→**|* 输入串?=#x*y# 自上而下的分析过程: (1)S有两个侯选式“xAy”和“z”,侯选式“xAy”与输入串“x*y”相匹配,故推导:S?xAy。 (2)非终极符A也有两个侯选式“**”和“*”,若选第一个侯选式“**”对句型进行推导,则得:S?xAy?x**y,不相匹;推导回溯到句型“xAy”;再用非终极符A的第二个侯选式“*”进行推导,即:S?xAy?x*y。且都是终极符,输入串“x*y”是所给文法的句子。 过程调用示意图描述句型的推导过程 例4.1 文法G41=({P,U} , {a} , {P→aU, U→P|?}, P),L(G41)={an|n≥1} 例4.2 文法G42=({P,B} , {a}, {P→B|a, B→Pa}, P), L(G42)= L(G41) 例4.3 文法G43=({P}, {a}, {P→aP|a}, P), L(G43)= L(G41) 过程调用示意图描述句型的推导过程 例4.1 文法G41=({P,U} , {a} , { P→aU, U→P|? }, P), L(G41)={an|n≥1} 文法G42=({P,B} , {a}, {P→B|a, B→Pa}, P) 过程调用图--输入串为#aa# 首先,是文法的左递归问题。 一个文法是含有左递归的,如果存在非终结符P的产生式P ?Pα 含有左递归的文法将使上述的自上而下的分析过程陷入无限循环。即,当试图用P去匹配输入串时,我们会发现,在没有识别任何输入符号的情况下,又得重新要求P去进行新的匹配。因此,使用自上而下分析法必须消除文法的左递归性。 一般地,若文法的产生式为: P→P?1| P?2|……|P?n|?1|?2|……|?m 其中:?j 不以P打头,?i 非空 (1≤j≤m,1≤i≤n); 消除左递归后,为: P→?1P|?2 P|……|?m P P→?1P|?2 P|……|?n P| ? (2)消除隐含的左递归 要求文法中不含回路,即无A?A的推导 ①给文法VN中的符号一个排序:A1, A2, …, An; for (i=1; i=n; i++) { for (j=1; j= i-1; j++) { 把形如Ai→Aj?的规则改成 Ai→?1?|?2?|…|?k? 其中:Aj→?1|?2|…|?k是Aj的所有产生式; }/*替换为直接左递归*/ 消除关于Ai产生式的直接左递归; }; 化简所得到的文法(去掉无用产生式),结束。 例子G46: S→Qc|c

文档评论(0)

好文精选 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档