- 1、本文档共110页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理;四元式;第四章 语法分析—自上而下分析;上下文无关文法的定义:
一个上下文无关文法G是一个四元式
G=(VT,VN,S,P),其中
VT:终结符集合(非空)
VN:非终结符集合(非空),且VT ? VN=?
S:文法的开始符号,S?VN
P:产生式集合(有限),每个产生式形式为
P??, P?VN, ? ? (VT ? VN)*
开始符S至少必须在某个产生式的左部出现一次。;例,定义只含+,*的算术表达式的文法
G={i,+,*,(,)},{E},E, P, 其中,P由下列产生式组成:
E ? i
E ? E+E
E ? E*E
E ? (E)
;定义:称?A?直接推出???,即
?A?????
仅当A ? ?是一个产生式,
且?, ?? (VT ? VN)* 。
如果?1 ? ?2 ? ? ??n,则我们称这个序列是从?1到?n的一个推导。若存在一个从?1到?n的推导,则称?1可以推导出?n 。
例:对文法(1)
E ? (E) ? (E+E)? (i+E)? (i+i); 用 表示:从?1出发,经过0步或若干步,可以推出?n。;4.1 语法分析器的功能;源程序;语法分析的方法:
自下而上分析法(Bottom-up)
基本思想:从输入串开始,逐步进行“归约”,直到文法的开始符号。即从树末端开始,构造语法树。所谓归约,是指根据文法的产生式规则,把产生式的右部替换成左部符号。
算符优先分析法:按照算符的优先关系和结合性质进行语法分析。适合分析表达式。
LR分析法:规范归约
;G(E): E ? i| E+E | E-E | E*E | E/E | (E)
i*i+i
E*i+i
E*E+i
E+i
E+E
E;语法分析的方法:
自下而上分析法(Bottom-up)
自上而下分析法(Top-down)
基本思想:它从文法的开始符号出发,反复使用各种产生式,寻找匹配的推导。
递归下降分析法:对每一语法变量(非终结符)构造一个相应的子程序,每个子程序识别一定的语法单位,通过子程序间的信息反馈和联合作用实现对输入串的识别。
预测分析程序
优点:直观、简单和宜于手工实现。
;4.2 自上而下分析面临的问题;例3.4.1 假定有文法G(S):
(1) S→xAy
(2) A→**|*
分析输入串x*y(记为?)。;当某个非终结符有多个产生式候选时,可能带来如下问题:
1. 分析过程中,当一个非终结符用某一个候选匹配成功时,这种匹配可能是暂时的。出错时,不得不“回溯”。
2. 文法左递归问题。一个文法是含有左递归的,如果存在非终结符P;4.3 LL(1)分析法;4.3.1 左递归的消除;一般而言,假定P关于的全部产生式是
P→P?1 | P?2 | … | P?m | ?1 | ?2|…|?n
其中,每个?都不等于?,每个?都不以P开头
那么,消除P的直接左递归性就是把这些规则改写成:
P→?1P? | ?2P? | … | ?nP?
P?→?1P? | ?2P? |… | ?mP? | ?
;例 文法G(E):
E→E+T | T
T→T*F | F
F→(E) | i
经消去直接左递归后变成:
E→TE?
E?→+TE? | ?
T→FT?
T?→*FT? | ?
F→(E) | i ;例如文法G(S):
S→Qc|c
Q→Rb|b
R→Sa|a (4.3)
虽没有直接左递归,但S、Q、R都是左递归的
S?Qc?Rbc?Sabc;消除左递归的算法:
1. 把文法G的所有非终结符按任一种顺序排列成P1,P2,…,Pn;按此顺序执行;
2. FOR i:=1 TO n DO
BEGIN
FOR j:=1 TO i-1 DO
把形如Pi→Pj?的规则改写成
Pi→?1?|?2?|…|?k? ;
(其中Pj→?1|?2|…|?k是关于Pj的所有规则)
消除关于Pi规则的直接左递归性
END
3. 化简由2所得的文法。去除那些从开始符号出发永远无法到达的非终结符的产生规则。;例 考虑文法G(S)
S→Qc|c
Q→Rb|b
R→Sa|a
令它的非终结符的排序为R、Q、S。
对于R,不存在直接左递归。
把R代入到Q的有关候选后,把Q的规则变为
Q→Sab | ab | b
;例 考虑文法G(S)
S→Qc|c
Q→Rb|b
R→Sa|a
令它
文档评论(0)