自下而上语法分析方法:

自下而上语法分析方法,就是从输入串开始,逐步归约,直至归约到文法的开始符号。

各种不同的自下而上分析法的共同特点是,边输入单词符号,边归约。核心问题是,识别可归约串。

对于规范归约,要清楚短语,直接短语,最左直接短语的含义。对于一个从开始符号推导出来的句型,短语由非终结符推导来,直接短语由非终结符一步推导出来的,最左直接短语是语法树中最左分支。一个句型的最左直接短语称为该句型的句柄。

  算符优先法思想:定义算符之间优先关系,借助这种关系来寻找可归约串和进行归约。

编译原理第五章课程总结

一、移进-归约法

这种方法的大致意思是:用一个寄存符号的先进先出后进栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的候选

式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。

例如:设文法G(S)

      (1) S —> aAcBe

      (2) A —> b

      (3) A —> Ab

      (4) B —> d

分析:首先让a进栈,然后把b进栈,根据第二条规则,把b归约A,再让第二个b进栈,此时栈顶有Ab,根据第三条规则,将

Ab归约A,让c进栈,d进栈,根据第四条规则,将d归约B,最后让e进栈,此时栈里的符号为aAcBe,最后根据第一条规则

将其归约S

二、规范归约

定义:G是一个文法,S是文法的开始符号,假定αβ△是文法G的一个句型

         其中α,β,△∈(VN∪VT)*A∈VN ,如果有



则称β是句型αβ△相对于非终结符A短语

     特别是,如果有A=>β则称β是句型αβ△相对于规则A—>β直接短语,一个句型的最左直接短语称为该句型的句柄

:因为句型是由开始符号推出来的,而短语是由非终结符号推出来的。所以,短语是句型的一部份或全部符号串。

活前缀

 活前缀是指规范句型的一个前缀。文法G每一个产生式的右部添加一个圆点称为G的一个LR(0)项目。能够把识别活前缀的NFA确定化,使之成为一个以项目集合为状态的DFA,这个DFA就是建立LR分析算法的基础。构成识别一个文法活前缀的DFA的项目集的全体称为这个文法的LR(0)项目集规范族。

构造识别该文法所有活前缀的NFA

(1)求出该文法的LR(0)项目

(2)构造识别文法的NFA

        M= (S, ∑, f, S0, Z)

其中

S={s|s是文法G18LR(0)项目}

∑={S’,E, A, B,a, b, c, d}

S0= S¢→·E

Z:规定每个状态都是识别活前缀的终态(18)
课后习题:
编译原理第五章课程总结

 

 总结:
   学过本章后,对LR分析法的理解也更加深刻,但是对FIRST集FELLOW集运用的还不是很熟练,还是要多做练习争取熟练掌握 。



相关文章: