- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章语法分析——自上而下分析详解
第四章 语法分析 ——自上而下的分析 4.1 语法分析器的功能 1.语法分析器的任务: 在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。 2.语法分析器的工作: 按文法的产生式识别输入符号串是否为一个句子。 3.语法分析的方法: ?自上而下分析法 ?自下而上分析法 单词符号(文法的终结符)组成的有限序列 4.2 自上而下分析面临的问题 自上而下:从文法的开始符号出发向下推导,推出句子。 分析方法 带回溯 不带回溯 例:G: S→ xAy A→ ** | * 分析输入串x*y。 例:G: S→ xAy A→ ** | * 分析输入串x*y。 ② S(根) x A y * ① S(根) x A y * * 4.2 自上而下分析面临的问题 带回溯的自上而下分析方法的困难和缺点: 由于文法的左递归(P?Pα)使分析无限循环。 回溯 虚假匹配 不成功时难于知道出错位置 效率低,代价高 + 4.3 LL(1)分析法 消除左递归 不带回溯的分析法 4.3.1 左递归的消除 1. P→Pα|β (β不以P开头) 则可改写规则为: P→βP’ P’→αP’|ε 如:S→Sa|b 可改写为: 2. 一般方法: P→Pα1|Pα2|…|Pαm |β1 |β2|…|βn 其中每个α均不等于ε,每个β不以P开头,P?VN 改写为:P→β1P’|β2P’|…|βnP’ P’→α1P’|α2P’|…|αnP’|ε S→bS’ S’ →aS’| ε 4.3.1 左递归的消除 上述方法不一定能消除整个文法的左递归。 左递归: A→Aα|β A?VN ,α? (VN∪VT)* 直接左递归 A→Bβ B→Aα 间接左递归 消除文法中一切左递归算法 ①将文法中所有非终结符按某一顺序排列A1、A2…… ②从A1开始消除A1的直接左递归(如果存在的话),A1左部替换A2右部中的A1,若存在直接左递归则消除之。 ③消除无用产生式,即从开始符号出发永远无法到达的非终结符的产生规则。 消除文法中一切左递归算法 for(i=1;i=N;i++) { for(j=1;ji;j++) { 若Aj的所有产生式为Aj→δ1|δ2|…|δn 替换形如Ai→Ajγ } 消除Ai的直接左递归 } 例:消除下面文法的左递归 G:S→Qc | c Q→Rb | b R→Sa | a 法一: ① S,Q,R ② R→Qca | ca| a R→Rbca | bca| ca| a (此处有直接左递归) R→bcaR’ | caR’| aR’ R’→bcaR’ | ε 最终结果: S→Qc | c Q→Rb | b R→bcaR’ | caR’| aR’ R’→bcaR’ | ε 例:消除下面文法的左递归 G:S→Qc | c Q→Rb | b R→Sa | a 法二: ① R,Q,S ② Q→Sab | ab| b S→Sabc | abc| bc| c (此处有直接左递归) S→abcS’ | bcS’| cS’ S’→abcS’ | ε 最终结果: S→abcS’ | bcS’| cS’ S’→abcS’ | ε R→Sa | a Q→Sab | ab| b 无用产生式, 可删除 例:消除下面文法的左递归 G:S→Qc | c Q→Rb | b R→Sa | a 法二: ① R,Q,S ② Q→Sab | ab| b S→Sabc | abc| bc| c (此处有直接左递归) S→abcS’ | bcS’| cS’ S’→abcS’ | ε 最终结果: S→abcS’ | bcS’| cS’ S’→abcS’ | ε 4.3.2 消除回溯,提公因子 消除回溯须保证:候选获得成功匹配,则这种匹配不会是虚假的;若此候选无法完成任务,则其他候选也肯定无法完成。 终结首符集FIRST(α) FIRST(α)={ a | α
文档评论(0)