自底向上优先分析法 (2).ppt





《自底向上优先分析法 (2).ppt》由会员分享,可在线阅读,更多相关《自底向上优先分析法 (2).ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第6 6章章 自底向上优先分析法自底向上优先分析法6.1概述概述原理原理:在采用在采用自左向右自左向右扫描,扫描,自底向上自底向上分析的前提下,该类分析的前提下,该类 分析方法是从输入符号串入手,通过反复查找当前句分析方法是从输入符号串入手,通过反复查找当前句 型的句柄(最左简单短语),并使用文法的产生式把型的句柄(最左简单短语),并使用文法的产生式把 句柄归约成相应的非终结符来一步步地进行分析的。句柄归约成相应的非终结符来一步步地进行分析的。最终把输入串归约成文法的开始符号,表明分析成功。最终把输入串归约成文法的开始符号,表明分析成功。所以,任何自底向上分析方法的关键就是要找出当前所以,任
2、何自底向上分析方法的关键就是要找出当前句型的句柄,然后根据产生式判别将它归约成什么样的非句型的句柄,然后根据产生式判别将它归约成什么样的非终结符号。终结符号。下面,我们结合具体的实现方法,介绍在分析过程中下面,我们结合具体的实现方法,介绍在分析过程中如何来识别句柄的。我们首先介绍自底向上分析的一般过如何来识别句柄的。我们首先介绍自底向上分析的一般过程,再介绍两种常用的分析技术:简单优先分析法和程,再介绍两种常用的分析技术:简单优先分析法和LRLR分分析方法。析方法。一、自底向上分析的一般过程:一、自底向上分析的一般过程:先设置一个寄存符号的栈,称为分析栈。其作用是用来记先设置一个寄存符号的栈,
3、称为分析栈。其作用是用来记录分析的历史和指示分析的下一步动作。分析进行时,把输入录分析的历史和指示分析的下一步动作。分析进行时,把输入符号一个一个地按扫描顺序移进栈中,当栈顶符号形成一个句符号一个一个地按扫描顺序移进栈中,当栈顶符号形成一个句柄(即为某产生式的右部)时,就进行一次归约,即把栈顶构柄(即为某产生式的右部)时,就进行一次归约,即把栈顶构成句柄的那个符号串用相应的产生式左部符号来替换成句柄的那个符号串用相应的产生式左部符号来替换。接着再检查在栈顶是否又出现了新的句柄,则再进行归约,接着再检查在栈顶是否又出现了新的句柄,则再进行归约,直至整个输入符号串处理完。最终如果栈顶为文法的开始符
4、号,直至整个输入符号串处理完。最终如果栈顶为文法的开始符号,则所分析的输入符号串为合法的符号串,报告分析成功则所分析的输入符号串为合法的符号串,报告分析成功,否则,否则,是不合格的符号串,报告错误。是不合格的符号串,报告错误。例:考虑文法例:考虑文法G(E):EE+T|TTT*F|FFi|(E)并假定输入串为(并假定输入串为(i+i)*ii+i)*i,考察考察自底向上的分析过程。自底向上的分析过程。例:考虑文法例:考虑文法G(E):EE+T|TTT*F|FFi|(E)并假定输入串为(并假定输入串为(i+i)*ii+i)*i,考察考察自底向上的分析过程。自底向上的分析过程。二、分析过程图表:二、
5、分析过程图表:为了具体实现上的方便,我们仍统一约定以为了具体实现上的方便,我们仍统一约定以“#”#”作为输入串的左右分界作为输入串的左右分界符(开始和结束标志)。作为初始状态,先将符号串的开始标志符(开始和结束标志)。作为初始状态,先将符号串的开始标志“#”#”压入分压入分析栈中,作为栈底符号,则分析过程为:析栈中,作为栈底符号,则分析过程为:步骤步骤 分析栈分析栈 输入串输入串 动作动作1 1#(i+i)*i#(i+i)*i#移进移进2 2#(i+i)*i#(i+i)*i#移进移进3 3#(i +i)*i#(i +i)*i#归约归约4 4#(F +i)*i#(F +i)*i#归约归约5 5#
6、(T +i)*i#(T +i)*i#归约归约6 6#(E +i)*i#(E +i)*i#移进移进7 7#(E+i)*i#(E+i)*i#移进移进8 8#(E+i )*i#(E+i )*i#归约归约9 9#(E+F )*i#(E+F )*i#归约归约 步骤步骤 分析栈分析栈 输入串输入串 动作动作10#(E+T )*i#10#(E+T )*i#归约归约11#(E )*i#11#(E )*i#移进移进12#(E)*i#12#(E)*i#归约归约13#F *i#13#F *i#归约归约14#T *i#14#T *i#移进移进15#T*i#15#T*i#移进移进16#T*i#16#T*i#归约归约17
7、#T*F#17#T*F#归约归约18#T#18#T#归约归约19#E#19#E#接受接受分析过程图表:分析过程图表:步骤步骤 分析栈分析栈 输入串输入串 动作动作1 1#(i+i)*i#(i+i)*i#移进移进2 2#(i+i)*i#(i+i)*i#移进移进3 3#(i +i)*i#(i +i)*i#归约归约4 4#(F +i)*i#(F +i)*i#归约归约5 5#(T +i)*i#(T +i)*i#归约归约6 6#(E +i)*i#(E +i)*i#移进移进7 7#(E+i)*i#(E+i)*i#移进移进8 8#(E+i )*i#(E+i )*i#归约归约9 9#(E+F )*i#(E+F
8、 )*i#归约归约 步骤步骤 分析栈分析栈 输入串输入串 动作动作10#(E+T )*i#10#(E+T )*i#归约归约11#(E )*i#11#(E )*i#移进移进12#(E)*i#12#(E)*i#归约归约13#F *i#13#F *i#归约归约14#T *i#14#T *i#移进移进15#T*i#15#T*i#移进移进16#T*i#16#T*i#归约归约17#T*F#17#T*F#归约归约18#T#18#T#归约归约19#E#19#E#接受接受 需要说明的是分析栈顶形成的候选式不一定是句柄。例如,在第需要说明的是分析栈顶形成的候选式不一定是句柄。例如,在第1414步对栈顶为步对栈顶为
9、T T,它是,它是E E的一候选式,但它不是句柄,不能归约成的一候选式,但它不是句柄,不能归约成E E。判定候选式是极为简单的事判定候选式是极为简单的事情,但判定句柄就不那么容易。而不同的自底向上方法给出不同的判定方法。情,但判定句柄就不那么容易。而不同的自底向上方法给出不同的判定方法。从从上述例子可知,自底向上方法主要包括以下四个动作:上述例子可知,自底向上方法主要包括以下四个动作:移进:把输入流的头符读到分析栈中。移进:把输入流的头符读到分析栈中。归约:把分析栈顶的句柄归约为一非终极符。归约:把分析栈顶的句柄归约为一非终极符。接受:分析成功。接受:分析成功。报错:处理错误。报错:处理错误。
10、6.2 6.2 简单优先方法简单优先方法一、概述一、概述 简单优先方法是一种简单直观,广为使用的自底向上的分析简单优先方法是一种简单直观,广为使用的自底向上的分析方法,它是经由算符优先方法变化而来的。这种方法特别有利于方法,它是经由算符优先方法变化而来的。这种方法特别有利于分析表达式。分析表达式。大家知道,在做算术式的四则运算时,为了保证计算过程和大家知道,在做算术式的四则运算时,为了保证计算过程和结果的唯一性,人们作了统一的四则运算规则的规定。这个法则结果的唯一性,人们作了统一的四则运算规则的规定。这个法则的主要方面就是规定运算符之间的优先顺序。即先乘除后加减,的主要方面就是规定运算符之间的
11、优先顺序。即先乘除后加减,同优先级的运算符先左后右(左结合律)。还有先括号内后括号同优先级的运算符先左后右(左结合律)。还有先括号内后括号外的规定。外的规定。而简单优先方法就是根据上述算术运算的计算原理而设计的而简单优先方法就是根据上述算术运算的计算原理而设计的一种语法分析方法。一种语法分析方法。这种方法的基本思想为:这种方法的基本思想为:首先规定文法符号之间的优先关系,然后再利用这种关系,首先规定文法符号之间的优先关系,然后再利用这种关系,通过比较句型中两个相邻的符号之间的优先关系来确定句型的通过比较句型中两个相邻的符号之间的优先关系来确定句型的“句柄句柄”并进行归约。并进行归约。二、相邻关
12、系:二、相邻关系:设设Si和和Sj是文法是文法G G的任意两个符号,那么它们在句型中可相的任意两个符号,那么它们在句型中可相邻出现的充要条件是必须满足下列条件之一:邻出现的充要条件是必须满足下列条件之一:1 1、有形如、有形如 U U SiSj的产生式的产生式2 2、有形如、有形如 U USiWW的产生式,且有的产生式,且有 W W Sj+3 3、有形如、有形如 U UV VSj的产生式,且有的产生式,且有 V V Si+4 4、有形如、有形如 U UVWVW的产生式,且有的产生式,且有 V V Si和和W W Sj+1 1、有形如、有形如 U U SiSj的产生式的产生式U U SiSj S
13、USiSj图图6.1采用采用U US Si iS Sj j的推导的推导+SjU U SiW 图图6.2采用采用U US Si iW W的推导的推导2 2、有形如、有形如 U USiWW的产生式,且有的产生式,且有 W W Sj+SUSiWSiSj+SiU U VSj 图图6.3采用采用U UV VS Sj j的推导的推导3 3、有形如、有形如 U UV VSj的产生式,且有的产生式,且有 V V Si+SUV VSjSiSj+SiU U VW Sj图图6.4采用采用U UVVW W的推导的推导4 4、有形如、有形如 U UVWVW的产生式,且有的产生式,且有V V Si和和W W Sj+SUV
14、 VWjSiSj+三、优先关系:三、优先关系:为了把上述条件加以形式化,引进三种优先关系。其定义如下:为了把上述条件加以形式化,引进三种优先关系。其定义如下:当且仅当当且仅当存在形如下面的产生式存在形如下面的产生式U U SiSj SiSiSjSj当且仅当当且仅当存在形如下面的产生式存在形如下面的产生式U USiW W的生产式,的生产式,且且有有 W W SjSiSiSjSj+当且仅当存在形如下面的产生式当且仅当存在形如下面的产生式U UVWVW的生产式的生产式,且有且有 V V Si和和W W SjSiSiSjSj+*在实际使用这些优先关系去识别句子时,我们希望采用一种在实际使用这些优先关系
15、去识别句子时,我们希望采用一种简洁的方法去表示这些关系,优先关系矩阵是一种常用的方式。简洁的方法去表示这些关系,优先关系矩阵是一种常用的方式。其其定义为:定义为:例:设有文法例:设有文法G Gz:Z Z bMbbMb M Ma a(L(L L LMa)Ma)则可则可根据定义求出其优先矩阵来(如下根据定义求出其优先矩阵来(如下)M MSiSi,SjSj=空空当当 SiSi与与SjSj无关系无关系(不相邻出现不相邻出现)时时当当 SiSiSjSj当当 SiSiSjSj当当 SiSiSjSj优先关系矩阵优先关系矩阵:Z Z bMbbMb M Ma a(L (L L LMa)Ma)Z Zb b M M
16、 b ba aZ Zb b M M b b(L LZ Zb b M M b b(L LM M a a)=a(=bL=MZZMLb(a).=.?构造优先矩阵的一种简便方法:构造优先矩阵的一种简便方法:STEP1对每个非终极符对每个非终极符W求下面两种集合:求下面两种集合:STEP2对每个符号对对每个符号对Si,Sj填写优先关系矩阵元素填写优先关系矩阵元素(其中其中W,VVN):ZMLHEADb(,aM,(,aLASTb),L,a)如对如对Ga我们有:我们有:Z Z bMbbMb M Ma a(L (L L LMa)Ma)MSi,Sj=,如果有如果有U USiW且且SjHEAD(W)MSi,Sj=
17、,如果有,如果有U UVW ,且有且有SiLAST(V)和和SjHEAD(W)WMSi,Sj=,如果有如果有U U SiSj HEAD(W)=SW S,S(VNUVT)LAST(W)=SWS,S(VNUVT)+四、简单优先文法的分析方法:四、简单优先文法的分析方法:1 1、简单优先文法的定义:、简单优先文法的定义:定义:满足下面两个条件的文法称为简单优先文法:定义:满足下面两个条件的文法称为简单优先文法:(1)(1)任意两个符号至多成立一种优先关系。任意两个符号至多成立一种优先关系。(2)(2)任意两个产生式具有不同右部。任意两个产生式具有不同右部。为了处理方便,引进特殊符号为了处理方便,引进
18、特殊符号#,并定义,并定义#S,S#(SVNUVT)2 2、简单优先文法的句柄、简单优先文法的句柄这个定理给我们提供确定句柄的一种方法。这个定理给我们提供确定句柄的一种方法。简单优先文法分析算法的主要思想是找出句柄并归纳之。简单优先文法分析算法的主要思想是找出句柄并归纳之。而给定一个句型而给定一个句型X,寻找它的句柄是这样进行的:从左向右进寻找它的句柄是这样进行的:从左向右进行扫描,每次只查看两个相邻的文法符号,并由此得知什么时候行扫描,每次只查看两个相邻的文法符号,并由此得知什么时候查到句柄的尾查到句柄的尾Sj,然后再返过头来向句型左端进行加工,仍然只然后再返过头来向句型左端进行加工,仍然只
19、查看相邻的两个运算符,找出句柄的头查看相邻的两个运算符,找出句柄的头Si。此时就可以进行归约此时就可以进行归约了。了。定理:设定理:设S1S2Sn是简单优先文法的规范句型,其子串是简单优先文法的规范句型,其子串SiSi+1Sj是满足下列条件的最左子串:是满足下列条件的最左子串:则则SiSi+1Sj定是定是S1S2Sn的句柄的句柄。证明:略证明:略。Si-1SiSiSi+1Si+2=SjSjSj+13 3、分析算法的要点:、分析算法的要点:STEP3:用用SiSi+1Sj去查产生式表的右部,并用相应的左去查产生式表的右部,并用相应的左部符号代替部符号代替(归约归约)句柄句柄SiSj,若查不到,则
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自底向上优先分析法 2 向上 优先 分析

限制150内