编译原理第四章.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
北京交通大学于双元 第四章 语法分析 语法分析的方法 4.1 自顶向下分析法 --最左推导过程 二、问题解决方法 (1)直接左递归的消除: 用扩充的BNF表示{ },[ ], 引入新的非终结符号(提取公因子) (2) 间接左递归的消除 消除左递归的算法(直接和间接均消除) (1)直接左递归的消除 例:U→Uα|β 例1:T→T*F|T/F|F 变成:T→T(*F|/F) |F 消除左递归后得:T→F{*F|/F} 或: T’→(*F|/F)T’|ε T→FT’ 即: T→FT’ T’→*FT’|/FT’|ε (2)间接左递归的消除 ——消除左递归的算法(直接和间接均消除) 要求:文法不含A → A和A→ε 原理:S→Aβ| γ A→Sα 转换成 S→Sαβ| γ 间接左递归替换成直接左递归再消除 消除左递归的算法 ①把G的非终结符号排序A1 ,A2,…, An; ② for (i=1;i=n;i++) { for (j=1;j=i-1;j++) { 把每个形如Ai → Ajγ的规则替换成 Ai→δ1γ|δ2γ|…|δmγ, 其中 Aj →δ1|δ2|…|δm是当前Aj的全部规则; } 消除Ai规则中的直接递归 ; } ③化简由②得的文法,即去掉多余规则; 例:G[S]: S→Qc|c Q→Rb|b R→Sa|a ③ i=3,Ai=A3=S j=1,Aj=A1=R 无S→Rc规则 j=2,Aj=A2=Q 含S→Qc规则 S→Sabc|abc|bc G[S]中:S→Sabc|abc|bc|c 原规则中的 消除直接递归:S→(abc|bc|c){abc} G[S]:S→(abc|bc|c){abc} Q→Sab|ab|b 多余 R→Sa|a 多余 G[S]:S→abcS’|bcS’|cS’ S’ →abcS’| ε 或 S→S’{abc} S’→abc|bc|c 说明:非终结符号的排序不同,所得文法形式就不同,但语言等价。 消除左递归的矩阵表示方法 设VN中有n个非终结符号X1,X2,…,Xn 将Xi→γ1|γ2|...|γm表示成 Xi =γ1+γ2+...+γm 将γi分成两类 首符号∈VN 首符号∈VT Xi=X1α1i+X2α2i+...+Xnαni+βi αji可能为? βi是以终结符号开头的候选式的“和” 求解Xi (X1,X2,...,Xn)= (X1,X2,...,Xn) . α11 α12 ... α1n α21 α22 ... α2n : : αn1 αn2 ... αnn +(β1,,β2, ... βn) ? 表示:X=XA+B其解为X=BA* 解出A*很复杂,但我们的目的只是消除左递归,可绕开该问题。 举 例 上例:S=Qc+c Q=Rb+b R=Sa+a 矩阵展开 等价文法 Z11 → aZ31|ε Z21 → cZ11 Z31 → bZ21 Z12 → aZ32 Z22 →cZ12 |ε Z32 → bZ22 Z13 → aZ33 Z23→cZ13

文档评论(0)

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

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

1亿VIP精品文档

相关文档