- 1、本文档共94页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 语法分析和语法分析程序 自上而下分析 自下而上分析 分析器的自动生成 前 言 §4.1.1 语法与语法分析作用 语法作用: 语言设计者:提供语言的精确构成,形式化规定语言语法单位组成部分间的关系。 语言使用者:使用语言,根据语法来构造合法句子。 编译程序设计者:语法是进行编译程序的依据,用来构造识别语言所有句子的语法分析器。 语法分析作用: 识别由词法分析给出的单词序列是否是给定文法的正确句子(程序)。即根据语言的语法规则分析源程序的语法结构(单词如何构成各种语法范畴)。 §4.1.2 语法分析的方法 句型分析就是识别一个符号串是否为某文法的句型,是某个推导(归约)的构造过程。 在语言的编译实现中,把完成句型分析的程序称为分析程序或识别程序。分析算法又称识别算法。 从左到右的分析算法,即总是从左到右地识别输入符号串,首先识别符号串中的最左符号,进而依次识别右边的一个符号,直到分析结束。 自上而下分析法: 从文法的开始符号出发,反复使用文法的产生式,为待识别句子建立一个最左推导,以寻找与输入符号串匹配的推导。 自下而上分析法: 从输入符号串开始,逐步进行归约,从叶子节点,由底上向上逐步建立一棵完整的语法树,直至归约到文法的开始符号(树根)。 §4.2 自上而下分析算法 一般方法要点: 由根向下构造语法树; 构造最左推导; 推导出的终结符是否与当前输入符匹配 ? 自顶向下分析一般方法特点: §4.2.1 一般方法面临问题及解决 1. 左递归文法 2. 回溯问题 §4.2.2 消除文法的左递归产生式 方法:改写产生式,使产生式不含左递归。 法一:P→Pα|β产生式的符号串为 βα. . . α引入一元语言符号{},{x}表示x可出现任意次。 则: P→Pα|β改写为P→β{α} 例1: S→Ac A→Aa|b 改为: S→Ac A→b{a} 法二:对左递归 A→Aα|β的非终结符A,引入一个新的非终结符A’,使得: A→Aα|β 2、消除间接左递归 间接左递归产生原因: 产生式右边首符号为非终结符; (存在回路)前面非终结符引用后面非终结符,后面非终结符引用前面非终结符。 例1:S→Ac|c (1) A→Bb|b (2) B→Sa|a (3) 对例1: B→Sa|a 带入(2),得 A→Sab|ab|b 带入S产生式,得 S→ Sabc|abc|bc|c 对S消除直接左递归得: S→(abc|bc|c)S’ S’→abcS’|ε 1 .以某种顺序将文法非终结符排列A1 ,A2 …An 2. for i:=1 to n do begin for j:=1 to i-1 do Aj-- ?1| ?2…| ?k是Aj全部产生式; 若文法中有形如Ai-- Ajr的规则; 则替换成Ai--?1| ?2r…| ? k r; 消除Ai规则的直接左递归 end; 3.化简由2得到的文法 §4.2.3 回溯的消除及LL(1)文法 无回溯指对文法的任何非终结符,当需要匹配某输入串时,能够根据所面临输入符号准确指派一个候选式执行推导,且匹配结果确信无疑。 例:S?aA|bB|cC A?d|de|f B?Ed|h C?e E?f|h|?|d 判定ade、bd是否为该文法句子 一般的,对于有公共左因子的文法A ?a?1 | a?2|… a?k|γ,其中γ不以a开头, a∈V。 提左因子: FIRST(X)={a|a∈VT且X ?*a?, X,?∈V*} 特别的:X?* ?,则??FIRST (X) 对文法G的所有非终结符的每个候选式X其终结首符号集为FIRST(X)。 对A的任何两个不同的选择?i 和?j,希望有 FIRST (?i ) ? FIRST (?j ) = ? 此时,当要求A匹配输入串时,A就可根据所面临第一个输入符号a,准确指派某个候选式推导,该候选式即为a∈FIRST(X)的X候选式。 3、FIRST(X)构造方法 1.若X?V?,则FIRST(X)={X}; 2.若X?VN,且有X?a…,则{a}∪FIRST(X);a可为?; 3.若有X ? Y1Y2…YK ,Yi?VN (1≤i ≤K),则 (FIRST(Y1)-{?}) ∪ FIRST(X); 若??FIRST
文档评论(0)