1.基本概念
(1)LR分析器结构
(2)LR分析表
大家重点关注一下这个LR分析表,我们后续的分析都将围绕这个LR分析表展开
这其中有三种操作:
操作 | 具体过程 |
---|---|
移进(shift) | 把(s ,a)的下一状态s’和输入符号a推进栈,下一输入符号变成现行输入符号 |
归约(reduce) | 用某产生式A→β进行归约。假若β的长度为r,去除栈顶个项,使状态sm_变成栈顶状态,然后把下一状态s'=GOTO[sm-[,A]和文法符号A推进栈 |
接受(accept) | 宣布分析成功,停止分析器工作 |
后面我会用更加通俗易懂的语言来解释他们具体是怎么操作的。
2.LR分析过程
这里就具体介绍了他们是如何进行操作的,如果大家还不太清晰的话,可以对照我后面的例题讲解进行理解。
3.例题讲解
这是一道LR分析法的经典例题,我们现在来看看该如何去做。
刚开始我们列出三列,分别写上 状态,符号,输入串
(1)步骤一:
(2)步骤二:
(3)步骤三:
(4)步骤四:
此时的状态是3,输入串的栈顶是*,我们可以找到r4,和步骤三的操作过程是一样的,这里不做详细介绍。
(5)步骤五:
此时的状态是2,输入串是*,我们可以找到s7,和步骤二的操作过程是一样的,这里不做详细说明。
(6)步骤六:
直接上图
(7)步骤七
(8)步骤八:
中间有很多的步骤都被我省略了,我就把所有的过程都集成在一起了,便于同学们理解。
相信同学们对例题的理解,已经对LR分析有了一个基本的概念。
3.LR文法