LR方法
LR parsing是一种相对于LL更通用的方法,LR parser是高效的、自底向上的用于上下文无关文法的语法分析技术。
LR(k)方法中的L、R、K分别代表:
- L: left-to-right scan从左向右扫描
- R:construct a rightmost derivation in reverse最右推导
- k:the number of input symbols of look ahead每次扫描的字符数
LR方法分为三种:
- SLR: simple LR 简单LR方法,本文介绍的就是简单LR(1)方法
- LR(1): canonical LR 规范LR方法
- LALR: look ahead LR
更多关于LL语法的分析方法,如预测分析法,可以查看这里。
本文例:
E => E + T
E => T
T => T * F
T => F
F => ( E )
F => i
构造自动机
首先为每个产生式构造自己的状态机。
首先,我们需要理解这些状态机的含义。每个状态机都描述了每个产生式推导过程需要的状态转换。这样的转换是分层的。比如T=>T+F这个状态转换,当进行到最后F那一步时,可以直接通过i来转换,也可以通过(E)来转换,就是最后的那两个表达式,每个以非终结符为发出边的状态转换,如E、F等,都意味这样的转换需要分解为更细化的转换,而这些“更细化的转换”,都在后面定义了,如对于F有F=>(E)和F=>i。
因此,我们连出具体的分解状态。
(注:空白边都是指 ϵ