- 1、本文档共71页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
自下而上语法分析方法;本节要求;G = ({E}, {i, +, *, (, ) } , P , E) P: E ? E + E
E ? E * E
E ? ( E )
E ? i ;自下而上的语法分析;最左推导(Left-most Derive)
每一步推导都替换当前句型的最左边的非终结符。
——其逆过程称为最右归约
最右推导(Right-most Derive)
每一步推导都替换当前句型的最右边的非终结符。
——其逆过程称为最左归约(规范归约),得规范句型;;语法分析树的生成演示;规范归约分析过程具有如下特点:
从输入串的开始依次读入单词(移进栈中) 。
一旦发现可归约串(某个产生式的右端)就立即归约。
归约就是将栈顶的一串符号用文法产生式的左部代替,归约可能重复多次。
若最终能归约成文法的开始符号,则分析成功。
由于总是将句型的最左边的可归约串替换成非终结符,该方法与最右推导对应。
关键是如何判断可归约串?;问题的??出:
① 在构造语法树的过程中,何时归约?
当可归约串出现在栈顶时就进行归约。
② 如何知道在栈顶符号串中已经形成可归约串?
如何进行归约?
不同的自下而上的分析方法对可归约串的定义是不同的,但分析过程的一个共同特点是:边移进边归约。;规范归约的概念;例:考虑如下文法:;从语法分析树来识别:
一棵子树是由树的某个结点连同它的所有子孙组成的。
子树的所有端末结点自左至右排列成一个相对子树根的短语。
直接短语:只有父子两代结点形成的短语。
句柄:最左子树的直接短语。;对下述文法,求句型 E+T * F + i的短语、直接短语、句柄;给定右边的文法,用句柄对符号串abbcde进行归约;规范归约的定义:;句型;练 习;;规范归约分析中栈的使用;例2:有文法:
E ? E+T|T
T ? T*F|F
F ? (E)|i
对输入串 id1+id2*id3 的规范归约过程:; 动作 栈 输入缓冲区
1) 准备 # id1+id2*id3#
2) 移进 #id1 +id2*id3#
3) 归约 F→id #F +id2*id3#
4) 归约 T→F #T +id2*id3#
5) 归约 E→T #E +id2*id3#
6) 移进 #E+ id2*id3#
7) 移进 #E+id2 *id3#
8) 归约 F→id #E+F *id3#
9) 归约 T→F #E+T *id3#
10) 移进 #E+T* id3#
11) 移进 #E+T*id3 #
12) 归约 F→id #E+T*F #
13) 归约 T→T*F #E+T #
14) 归约 E→E+T #E #
15) 接受;练习; do
do
将输入串最左边的符号移入栈内; while(栈顶没有出现可归约串 );
do 归约可归约串;
while(栈顶还有可归约串);
while(文法开始符号没有出现在栈顶或者没有发现错误);;分析器的四种动作;移进归约分析中的问题;语法分析树的表示;优先分析法有两种:
①简单优先分析法(规范归约)——文法按一定规则规定文法符号的优先关系
②算符优先分析法(不规范归约)——规定算符之间的优先关系;算符优先分析;优先关系的定义:;1.算符文法:如果文法G没有P?...QR...(P,Q,R属于非终结符)的产生式,(主要是看产生式中是否包含两个非终结符相邻的情况)
2.算符优先关系的定义:文法G是一个不含?-产生式的算符文法,定义终结符a、b之间的优先关系
①a b,G中有P?...ab...或P?...aQb... (在同一产生式中)②a b,G中有P?...aR...的产生式,且R=b...或R=Qb... (注意ab相邻)③a b,G中有P?...Rb...的产生式,且R=...a或R=...aQ (注意ab相邻);例:E→E+E | E*E | (E) | i 证明不是算符优先文法。
因 为:E→E+E ,E?
文档评论(0)