如何判断一个文法是LL文法I.pptVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何判断一个文法是LL文法I

* * * * * * * 编 译 原 理 * LL的含义 -自左向右扫描分析输入符号串 -从识别符号开始生成句子的最左推导 LL(1):向前看一个输入符号,便能唯一确定当前应选择的规则 LL(k):向前看k个输入符号,才能唯一确定当前应选择的规则 4.2.3 LL(1)文法的判别 要构造确定的自顶向下分析程序要求描述文法必须是LL(1)文法 同一非终结符有多个候选式时 引起回溯的原因 【例4.1】 α=acb G[S]: S→aAb A→cd|c (1)候选式的终结首符号相同 (2)候选式的终结首符号相同 【例4.8】 S→Aa A→a|? 1. FIRST集 FIRST(α):从α可能推导出的所有开头终结符号或ε 对于文法G的所有非终结符的每个候选式?,其终结首符号集称为FIRST集,定义如下: ?,则规定?∈FIRST(?) 若? 【例】 S→aAb A→cd|c a …,a∈VT FIRST(?)={a|? FIRST(aAb) ={a} FIRST(cd) ={c} FIRST(c) ={c} 【例】 S→Aa A→a|? FIRST(a) ={a} FIRST(?) = {?} FIRST(Aa) ={a} FIRST(S) ={a} FIRST(A) ={c} FIRST(S) ={a} FIRST(A) ={a, ?} (1)若α=aα′,且a∈VT ,则a∈FIRST(α); 例: FIRST(i)={i} FIRST(+TE)={+} E→TE E→+TE|? T→FT T→*FT|? F→(E)|i 构造FIRST集的算法 (2)若α=Xα′,X∈VN,且有产生式X→b…,则把b加入到FIRST(α)中; 例: FIRST(FT)={(,i} ?? ① 将FIRST(X1)中的一切非ε的终结符加进FIRST(α); ② 若ε∈FIRST(X1),则将FIRST(X2)中的一切非ε的终结符加进FIRST(α); ③ 若ε∈FIRST(X1)且ε∈FIRST(X2),则将FIRST(X3)中的一切非ε的终结符加进FIRST(α); ④ 依此类推,若对于一切1≤i≤n,ε∈FIRST(Xi),则将ε加进FIRST(α)。 (3)若α=X1X2 … Xnα′,其中Xi∈VN , 1≤i≤n; E→TE E→+TE|? T→FT T→*FT|? F→(E)|i 例:FIRST(FT)= 注意:要顺序往下做,一旦不满足条件,过程就要中断进行 FIRST(F)-{ε}={(,i} FIRST(F)={(,i} FIRST(T’)={*,ε} FIRST(T)=FIRST(F)-{ε}={(,i} FIRST(E’)={+,ε} FIRST(E)= FIRST(T)-{ε}={(,i} FIRST(TE’)=FIRST(T)-{ε}={(,i} FIRST(+TE’)={+} FIRST(ε)={ε} FIRST(FT’)= FIRST(F)-{ε}={(,i} FIRST(*FT’) ={*} FIRST((E))={(} FIRST(i)={i} 【例4.9】 G[E] E→TE E→+TE|? T→FT T→*FT|? F→(E)|i 2. FOLLOW集 FOLLOW(A):是所有句型中紧接A之后的终结符号或# 对于文法G的非终结符的后继符号集称为FOLLOW集,定义如下: …A,则规定#∈FOLLOW(A) 若S …Aa…,a ∈VT} FOLLOW(A) ={a|S E→TE E→+TE|? T→FT T→*FT|? F→(E)|i T+TE ,则+∈FOLLOW(T) E 构造集合FOLLOW的算法 (1)若为开始符号,则把“#”加入FOLLOW(A)中; (2)若B→?A? (?≠?),则把FIRST(?)-{?}加入FOLLOW(A)中; 注:FOLLOW集合中不能有ε (3)若B→?A 或B→?A?,且? 则把FOLLOW(B)加入FOLLOW(A) 中。 ? , E→TE E→+TE|? T→FT T→*FT|? F→(E)|i #∈FOLLOW(E) 由F→(E)可知, )∈FOLLOW(E) 由E→TE,应把FOLLOW(E)加入∈FOLLOW(E) 由E →+ TE 且E ?ε,应把FOLLOW(E )加入FOLLOW(T) 【例4.10】 G[E] E→TE E→+TE|? T→FT T→*FT|? F→(E)|i 求FOLLOW FOLLOW(E)={#,)} ∵E是开始符号∴#∈FOLLOW(E)

文档评论(0)

wendan118 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档