LL(1)分析算法
从左( L) 向右读入程序,最左(L) 推导,采用一个(1) 前看符号
++ 优点:
– 算法运行高效
– 有现成的工具可用
++缺点:
– 能分析的文法类型受限
– 往往需要文法的改写
自底向上分析算法
研究其中最重要也是最广泛应用的一类
++ LR分析算法(移进-归约算法)
– 算法运行高效
– 有现成的工具可用
++ 这也是目前应该广泛的一类语法分析器的自动生成器中采用的算法
– YACC, bison, CUP, C#yacc, 等
自底向上分析的基本思想
最右推导的逆过程!
点记号
为了方便标记语法分析器已经读入了多少输入,我们可以引入一个点记号 •
自底向上分析
另外的写法
生成一个逆序的最右推导
需要两个步骤:
– 移进 一个记号到栈顶上,或者
– 归约 栈顶上的n个符号(某产生式的右部)到左部的非终结符
核心的问题:如何确定移进和归约的时机?
算法思想
LR——利用了有记忆能力的自动机
LR(0)分析表
LR(0)分析算法
LR(0)分析表构造算法
Q=enQueue(C0)
//enQueue——入队
//Q就是作为一个工作表,看哪些状态没有计算过
D=goto(C,x)
//给一个项集(项目集合)C,在读入了一个文法符合(终结符T或非终结符N),它能够到达哪些状态。