- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
为了这种回溯,我们一方面应把A的第一候选所发展的子树注销掉,另一方面应把IP恢复为进入A时的原值,也就是让它重新指向第二个输入符号。现在我们试探A的第二个候选,即考虑如下的语法树: 由于子树A只有一个子结,而且它和IP所指的符号相一致,于是,A完成了匹配任务。在A获得匹配后,指示器IP应指向下一个未被触及符号y。 在S的第二子结A完成匹配后,接着就轮到第三个子结y进行工作。 由于这个子结和最后一个输入符号相符,于是,我们完成了为α构造语法树的任务,证明了α是一个句子。 自上而下分析法存在的困难 左递归的消除 直接消除产生式中的左递归是比较容易的。假定关于非终结符P的规则为:P→Pα|β 其中,β不以P开头。那么,我们可以把P的规则改写为如下的非直接左递归形式: P→βP′ P→αP|ε 【例】消除文法中左递归 E→E+T|T T→T*F|F F→(E)|i 假定P关于的全部产生式是 P→Pα1|Pα2|...|Pαm|β1| β2|...| βn 其中,每个?都不等于?,而每个?都不以P开头 那末,消除P的直接左递归性就是把这些规则改 写成: P→ β1P| β2P|...| βnP P→ α1 P| α2 P|...|αm P| ε 间接左递归 例如文法 : S →Qc|c Q →Rb|b R →Sa|a 虽不具有直接左递归,但S,Q,R都是左递归的,例如有S=Qc=Rbc=Sabc 消除间接左递归算法 (1)把文法G的所有非终结符按任一顺序排列成P1,P2,...Pn;按此顺序执行 (2)FOR i:=1 TO n DO BEGIN FOR j:=1 TO i-1 DO 把形如Pi →Pjγ的规则改写成 Pi →δ1γ| δ2γ|...| δkγ,其中Pj →δ1|δ2|...|δk是关于Pj的所有规则 消除关于Pi规则的直接左递归性 END 【 例】考虑文法:S?Qc|c Q ?Rb|b R ?Sa|a 消除左递归。 例:[1] A → B ?1 | a [2] B → C ?2 | b [3] C → A ?3 | c 首字符集(FIRST) 计算FIRST集 令G是一个不含左递归的文法,对G的所有非终结符的每个候选α定义它的终结首符集FIRST(α)为: FIRST(α)={a| α=a...,a ? VT} 若α ? ? ,则ε ? FIRST(α) 【例】Stm→ while Con do Stm 则对应产生式右部的语法分析程序部分如下: procedure Stm( ) begin Match(while); Con; Match(do); Stm; end 预测分析程序(predictive parser) 预测分析表的构造算法 对于每一产生式A→α,作 (2)和(3) (2) 对于FIRST(α)中的每一终结符a, 将 A→α 填入M[A,a] ?(3) 如果ε属于FIRST(α),则将 A→α填入FOLLOW(A)中任一元素 b 的M[A,b]; ?(4) 将所有无定义的M[A,b]标上错误标志。 【例】:文法G的规则集为; P ?begin d : X end X ?d : X | sY Y ?: sY | ? 构造该文法LL(1)分析表。 【例】 设有文法:G[S]: S?aBc | bAB A?aAb | b B?b | ? 构造其LL(1)分析表,并分析符号串baabbb是否 是该文法的句子。 步骤 符号栈S 输入串 规则 #S baabbb# S?bAB #BAb baabbb# 匹配,弹出 #BA aa
文档评论(0)