编译原理手记07-LR分析法

来源:互联网 发布:英文翻译最好的软件 编辑:程序博客网 时间:2024/06/01 09:41

自上而上的语法分析是根据语法树的叶子节点来推回到树根的语法分析技术。这种由叶子到树根的推导叫做归约

做个更进一步的解释,比如有一个最右推导E -> i1+i2,如果我们依次读入到i1、+、i2的话,就可以"推出"他们所组成的产生式的开始符E,这种最右推导的逆向过程就叫做归约


理解了归约就明白了自下而上分析法的核心思想。



下面来讲解LR分析法,LR的意思是从左到右扫描输入,反向构造最右推导序列

LR分析相比自上而下的语法分析,最重要的数据结构不是树,而是。我们用栈的栈顶元素来表示语法分析当前所处的状态,然后根据对输入串的扫描,不断改变栈顶存储的状态。下面给出了LR语法分析的模型:


LR分析器的工作流程就是:用栈顶标记的状态和当前输入串作为参数去查找分析表,然后根据查询的结果决定下一步的操作。


分析表由两部组成,分别是ACTION和GOTO:

ACTION决定分析器接下来执行的操作,查询ACTION可以得到4种结果

1. 移入      2. 归约      3. 确认      4. 报错

GOTO用来跳转到下一个状态,它接受两个参数,即GOTO(当前栈顶状态,当前输入串) -> 下一个状态



1 0