LR(Left-to-Right, Rightmost Derivation)算法是一种自底向上的语法分析方法,用于解析上下文无关文法。与 LL 分析器的自顶向下分析方式不同,LR 分析器从输入的最左侧开始读取符号,但通过“最右推导”来构建语法树。这意味着它试图在推导过程中生成输入串的最右侧符号。
LR 分析器的基本概念
LR 分析器依赖一个状态栈和一个输入缓冲区,通过状态转移表来指导分析过程。它的主要任务是判断当前输入符号和栈中的内容是否符合某个文法规则,并据此进行规约(reduce)或移进(shift)。
文法示例
考虑以下文法:
S -> E
E -> E + T | T
T -> T * F | F
F -> ( E ) | id
在这段文法中:
S
是起始符号。E
,T
,F
是非终结符号。+
,*
,(
,)
,id
是终结符号。
LR 分析器的核心步骤
-
移进(Shift):将当前输入符号从输入缓冲区移到栈中,并转换状态。移进操作通常意味着还没有找到一个可以匹配的规则,需要继续阅读更多的输入符号。
-
规约(Reduce):当栈顶