编译 第三章 语法分析.ppt

  1. 1、本文档共65页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
以上文法的分析表 非终 输 入 符 号 结符 id + * ( ) $ E E’→TE’ E’ →TE’ E’ E’ →+TE’ E’ →ε E’ →ε T T →FT’ T →FT’ T’ T’ →ε T’ →*FT’ T’ →ε T’ →ε F F →id F →(E) 输入字符串: id+id*id 6. LL(1)文法 例如 文法: S→iEtSS’|a S’→es| ε E→b 求它的分析表。 非终结符 S S’ E S→a E→b S’→ ε S’→eS S→iEtSS’ S’→ε 输 入 符 号 a b e i t $ M(S’,e)的条目包括S’→ ε和S’→eS,因为FOLLOW(S’)= {e, $}。这个文法是二义的,即:看见e不知道选用那一条产生式。也就是说,M含有多重定义的条目。 课堂练习 1、试构造生成语言L= 的文法。 2、构造一文法,产生任意长的a,b串,式的|a|≤|b| ≤ 2|a|,其中“|a|”表式a字符的个数。 3、有如下文法 G1[S]: S →AB A →aAb|ab B →Bc| ε G2[S]: S →SAS|b|c A →aaA|a 他们分别描述什么样的语言? * 采用引进新的非终结符号的方法,将文法改为: S → PS’ S’ → aPS’|fS’| ε P → QbP|Q Q → cSd|e 采用扩充的BNF范式描述的方法,可得无直接左递归文法如下: S → P{f}|P{aP} P → QbP|Q Q → cSd|e 6. 提左因子 提左因子也是一种文法变换,它用于产生适合预测分析的文法。当我们不清楚应该用两个选择的哪一个来替换非终结符A时,可以重写A产生式来推迟这种决定,直到看见足够多的输入,能正确决定所需选择为止。 例如,有两个产生式 stml →if expr then stml else stml|if expr then expr 看见输入记号if的时候,不能马上决定用哪个产生式来扩展stml,一般地,如果A →aβ1| aβ2是A的两个产生式,输入串是由从a推导出的非空串开始的,我们不知道是用aβ1扩展A还是用aβ2去扩展它。然而,可以通过先扩展A到aA’来推迟这个决定.然后,看完了从a推出的输入后,再扩展A’到β1或β2,这就是提左因子,原来的产生式成为: A →aA’ A’ → β1|β2 例如:下面的文法是从悬空else问题中抽象出来的: S →iEtS|iEtSeS|a E →b 这里的i,t和e分别代表if,then和else,E和S是表达式和语句.提左因子后语法成为: S →iEtSS’|a S’ →eS| ε E →b 这样,如果输入是i,扩展S到iEtSS’,等到iEtS都看见后,再决定扩展S’到eS还是ε .当然,由于文法是二义的,对于输入e,为S’取哪个选择是不清楚的.以后讨论解决这个困难的办法. 例

文档评论(0)

绿风 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档