- 1、本文档共48页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理 第6章自顶向下分析法11-7
第6章 自上而下语法分析 本章知识点: 是以词法分析器生成的单词符号序列作为输入,根据语言的语法规则(上下文无关文法),识别出各种语法成分(如表达式、语句、程序)。 并在分析过程中进行语法检查,检查所给单词符号序列是否是该语言文法的一个句子。 若是,以某种形式的语法树作为输出;否则指出错误的性质和位置。 语法分析方法分类 一. 自上二而下语法分析思想 自顶向下分析法也称面向目标的分析方法,也就是从文法的开始符号出发企图推导出与输入的单词串完全匹配的句子,若输入串是给定的句子,则必能推出,反之必然出错。 确定的自顶向下分析方法,首先要解决从文法的开始符号出发,如何根据当前的输入符号(单词符号)唯一地确定选用哪个产生式替换相应非终结符往下推导,或构造一棵相应的语法树。 二.举例说明 例1.若有文法G1[S]: S ? pA | qB A ? cAd | a B ? dB | b 若输入串W=pccadd。自顶向下推导过程为 S=pA=pcAd=pccAdd=pccadd 例2. 若有文法G2[S]为 S ? Ap S ? Bq A ? a A ? cA B ? b B ? db 例3. 若有文法G[S]: S?aA S?d A?bAS A?? 6.2 适合自上而下分析的文法 消除左递归 消除左公因子 LL(1)文法 一.提取左公共因子 将产生式A→αβ|αr 等价变换为: A→α(β|r), 将括号内用一新引入的非终结符A’表示,得 A→αA’,A’→β|r 一般形式:若A→αβ1|αβ2|…|αβn, 提取左公共因子后变为A→αA’, A’→ β1|β2|…|βn 若在βi中仍含有左公共因子,可再次提取. 举例 例1.文法G1:S→aSb|aS|ε 解:提左因子得:S→aS(b|ε)|ε 引进新的非终结符得: S→aSS’|ε S’→b|ε 例2 若文法G2的产生式为: A?ad A?Bc B?aA B?bB 对右部以非终结符开始的产生式,用其相同左部而右部以终结符开始的产生式进行相应替换(1)A ?ad(2)A ?aAc(3)A ?bBc(4)B ?aA(5)B ?bB 二.消除左递归 产生式 (1)A-Ab (2)A-Bb,B-Aa 形如(1)产生式文法包含 简单直接左递归 形如(2)产生式文法包含 间接左递归 改写规则: 文法: E-E+T|T T-T*F|F F-(E)|i 举例 消除间接左递归 先将间接左递归变为直接左递归,然后再消除直接左递归。 消除左递归后: B ? (aBc | d)B¢ B¢ ? bcB¢ | ? 习题 消除左递归 提取左公因子 1.文法:A→aABe|a B→Bb|d 2. 文法:S→Aa|b A→SB B→ab 3.文法:A→baB|ε B→Abb|a 1. 0) A→a N 1) N→A B e 2) N→ε 3) B→d N1 4) N1→b N1 5) N1→ε 6.3 LL(1)分析法 LL(1)分析过程 LL(1)文法 LL(1)文法相关三个集合求解 LL(1)分析法分析过程 一.LL(1)文法 LL(1)的含义是: 第一个L表示从左到右扫描输入串 第二个L表示分析过程用最左推导 1表明只需向前看一个符号便可以决定选哪个产生式进行推导, 类似地LL(k)文法需要向前看K个符号才可以确定选用哪个产生式。 二.LL(1)文法判定 1. 首符号集FIRST 2.后继符号集FOLLOW 3.选择集合SELECT 三.3个集合相关集合求解 1. 首符号集FIRST: 2. 后继符号集FOLLOW 3. 选择集合SELECT 1 .首符号集FIRST(α) 定义:另X为一个文法符号(包括终结符,非终结符和ε ),集合FIRST(x)由终结符组成(包括ε),定义如下 若X?V?,则FIRST(X)={X} 若X?VN,且有产生式X?a…,则a∈FIRST(X);若X??也是一条产生式,则?∈FIRST(X). 若X?Y…是文法规则且Y?VN,则把FIRST(Y)中的所有非?元素都加到FIRST(X)中; 若有规则X ? Y1Y2…Yn,Y1,Y2,…,Y(i-1) ?VN, 且对于任何j,1≤j ≤i-1,FIRST(Yj)都含有?(即Y1..Y(i-1) ? ),则FIRST(Y1)-{?}, FIRST(Y2)-{?},…, FIRST(Yi-1)-{?},FI
文档评论(0)