- 1、本文档共95页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
语法分析的方法
1 1 用产生式(1)、(2)的右部置换产生式(3)中的A得 到左部为B的产生式: (1)B aBc (2)B Bbc (3)B d 消除左递归后得: (1)B (αBc|d)B` (2)B` bcB`| ε 再把原来其余的产生式(1)、(2)加入,最终文法为: (1)A αB (2)A Bb (3)B (αBc|d)B` (4)B` bcB`| ε 3)消除文法中一切左递归的算法: 对文法中一切递归的消除要求文法中不含回路即无A A 的推导 满足这个要求的充分条件是,文法中不包含形如A A 的有害规则和A ε的空产生式 算法步骤: (1)把文法的所有非终结符按某一顺序排序,如: A1| A2|… |An + (2)从A1开始消除左部为A1的产生式的直接左递归,然 后把左部为A1的所有规则的右部逐个替换左部为A2右部以 A1开始的产生式中的A1,并消除左部为A2的产生式中的直 接左递归。继而以同样方式把A1、A2的右部代入左部为A3 右部以A1或A2开始的产生式中,消除左部为A3的产生式之 直接左递归,直到把左部为A1,A2,…,An-1的右部代入 左部为An的产生式中,从An中消除直接左递归 把上述算法归结为:若非终结符的排序为: A1| A2|… |An FOR i:=1 TO N DO BEGIN FOR j:=1 TO i-1DO BEGIN 若Aj的所有产生式为: Aj δ 1| δ 2|… | δ k 替换形如Ai Ajr的产生式变为: Ai δ1r| δ2r|… | δkr END 消除Ai中的一切直接左递归 END (3)去掉无用产生式 例如 若文法的产生式为: (1)S Qc|c (2)Q Rb|b (3)R Sa|a 该文法的每个非终结符为间接左递归,消除方法: 非终结符排序为:S、Q、R 把(1)右部代入(3)得: (4)R Qca|ca|a 再将(2)的右部代入(4)得: (5)R` Rbca|bca|ca|a 对(5)消除直接左递归得: R (bca|ca|a)R` R` bcaR`|ε 最终文法变为: S Qc|c Q Rb|b R (bca|ca|a)R` R` bcaR`|ε 非终结符排序为:R、Q、S 把(3)右部代入(2)得: Q Sab|ab|b 再将此式代入(1)得: S Sabc|abc|bc|c 消除该产生式的左递归得: S (abc|bc|c|)S` S` abcS`| ε Q Rb|b R Sa|a 由于Q、R为不可到达的非终结符,所以删除得最终文法: S (abc|bc|c|)S` S` abcS`| ε 结论:当非终结符排序不同时,最后结果的产生式形式不 同,但它们是等价的 5.4 不确定的自顶向下分析思想 不确定的自顶向下分析(带回溯的自顶向下分析):在文 法中当关于某个非终结符的产生式有多个候选时,而面临 当前的输入符无法确定选用唯一的产生式,从而引起回溯 1.由于相同左部产生式的右部FIRST集交集不为空而引起回溯 例如,文法: S xAy A ab|a 若当前输入串为xay 2.由于相同左部非终结符的右部存在能 ε的产生式,且 该非终结符的FOLLOW集中含有其他产生式右部FIRST 集的元素 例如,文法G[S]为: S aAS S b A bAS A ε 对输入串ab#的试探推导, 如右图所示: * 3.由于文法含有左递归而引起回溯 例如,文法G[S]为: S Sa S b 对输入串baa#的试探推导,如下图所示: 由以上例子可知: 带回溯的自顶向下分析是是一个试探过程,当分析不成 功时则推翻分析退回到适当位置再重新试探其余候选可能的 推导,这样需要记录已选过的产生式,直到把所有可能的推 导序列都试完仍不成功才能确认输入串不是该文法的句子而 报错 由于在编译程序真正实现时往往是边分析边插入语义动作, 因而带回溯分析代价很高,效率很低,在实用编译程序中 几乎不用,因此对它实现的详细算法不做介绍 5.5 确定的自顶向下分析方法 1.递归子程序法: 实现思想:是对应文法中每个非终结符编写一个递归过 程,每个过程的功能是识别由该非终结符推出的串,当某非 终结符的产生式有多个候选时能够按LL(1)形式可唯一地确 定选择某个候选进行推导 缺点: 对文法要求高,必须满足LL(1)文法,个别LL(2)例外 速度慢占用空间多 2.预测分析方法: 预测分析器的组成
您可能关注的文档
最近下载
- 那一刻,我心中春暖花开中考高分作文进阶指导(范文+指引).doc
- AQ 1045-2007煤尘爆炸性鉴定规范.pdf
- 2024年围绕“六项纪律”(政治纪律组织纪律廉洁纪律群众纪律工作纪律生活纪律)交流研讨发言稿2篇.docx
- 2021-2022学年六年级下学期数学《正比例与反比例》单元分层作业(同步练习).docx
- 地下工程防水技术规范.docx
- 2024年湖北省中考地理+生物试题卷(含答案).docx
- 浙江省宁波市部分学校联考2023-2024学年新高一入学分班英语测试 Word版无答案.docx VIP
- 【审定稿】医疗器械进货检查验收制度10.doc
- 地质灾害精细化调查总体思路和要点-祝传兵.pdf
- 建筑电气施工规范.doc
文档评论(0)