- 1、本文档共43页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[高等教育]第4章 语法分析——自上而下分析
第4章 语法分析 ——自下而上分析 4.1 语法分析器的功能 4.2 自上而下分析面临的问题 4.3 LL(1)分析法 4.4 递归下降分析程序构造 4.5 预测分析程序 本章要求 语法分析器的功能,自上而下的基本概念 自顶向下语法分析面临的问题有哪些, 如何解决这些问题 掌握求FIRST集和FOLLOW集的方法 掌握LL(1)文法的判定方法 掌握递归下降和预测分析方法,如何用它们对一个文法进行分析 本章重难点 1.语法分析器的功能,自上而下的基本概念 2.LL(1)文法的条件及其判别,计算first集和follow集 3.递归下降分析方法、预测分析表的构造及其预测过程。 高级语言的语法结构适合用上下文无关文法来描述,上下文无关文法是语法分析的基础。 语法分析是编译过程的核心,其任务是在词法分析识别出正确的单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。 语法分析器 语法分析器的输入 Token序列:词法分析产生的输出,是各个单词都正确的源程序,是一个有限序列 语法分析器的功能 按照语言的语法构成规则, 识别输入的符号串能否构成一个句子。规则是用文法的产生式来定义的。 对给定一个输入串,如何判定它是不是一个句子? 根据文法的产生式规则,从开始符号出发,看能否推导出这个输入串匹配的句子。这就需要建立与输入串匹配的语法分析树。 语法分析器的输出 分析树:如何表示? P89 错误处理信息:定位、继续编译 自顶向下分析 自上而下分析的主旨是:对任何输入串,试图用一切可能的办法,从文法的开始符号出发,自上而下地为输入串建立一个语法树。 从推导的角度看,从开始符号出发,使用最左推导,试图推导出与输入符号串相同的句子。 从语法树的角度看,从根节点出发,反复使用所有可能的产生式,谋求输入串的匹配,试图向下构造一棵语法树,其末端结点正好与输入符号串相同。 这是一个反复试探的过程。 自顶向下分析面临的问题 问题1:回溯 问题2:左递归 左递归:是左递归的,如果一个文法中存在某个非终结符号A,使A A?。 如果是A ? A?,则称为直接左递归,否则称为间接左递归。 结论 左递归和回溯问题的产生直接与描述语言的文法有关 因此,要对文法进行确定的自顶向下分析应该改造文法,使其不含左递归和回溯 左递归的消除 一般而言,产生式为:A→Aα1|Aα2|…|Aαn|β1|β2|…|βm 将其替换为: 回 溯 回溯产生的真正原因是:某非终结符对应多个侯选式,它们右部的第一个终结符相同,从而导致语法分析器选择了错误的侯选式。 如果希望没有回溯,对文法有什么要求? 定义:对G的所有非终结符的每个侯选式α定义首终结符集: First(α) = {a| α a…,a∈VT} 若α ε ,则ε∈ First(α) 消除回溯的方法 反复使用“提取公共左因子”的方法来改造文法,使得文法的每个非终结符号的各个候选式的首终结符两两不相交,来避免回溯。 例: 例3:有如下两个产生式: IF语句 ? if E then S1 else S2; IF语句 ? if E then S1; 提取左因子后: IF语句 ? if E then S1 B; B ? else S2 |ε ; 是否满足:没有左递归,每个侯选式的首终结符集不相交这两个条件,就一定能进行有效的自顶向下分析呢? 例:使用下述文法对 i + i 进行分析: 并不是在任何情况下,A面对输入符号a, a不属于A的任何侯选式,但A中含ε产生式时都可以使用ε自动匹配。 LL(1) 文法:(对文法进行不带回溯的确定的自顶向下分析的条件),据此判别是否为LL(1)文法。 (1) 文法不含左递归 (2) 对文法中的任一个非终结符A的各个产生式的侯选首终结符集两两不相交,即:若 A?α1|α2|…|αn ,则 First(ai)∩ First(aj) = φ ( i ≠ j ) (3) 对文法中的每个非终结符A,若它存在某个首选符集含有ε ,则 First(A)∩ Follow(A) = φ LL(1)文法的分析过程 (P73)假设要用非终结符A进行匹配,面临输入符号a,A的所有侯选式为: A?α1|α2|…|αn 分析过程为: 若a ∈First(A?αi),则使用αi去执行匹配任务。 若a不属于任何一个产生式的首选符集, (1)若ε不属于任何一个 First(A?αi),则出错。 (2)若ε属于某个First(A?αi),同时a ∈Follow(A), 则让A 与ε自动匹配;否则,a的出现是一种语法错误。 两个集合的
文档评论(0)