语法是LALR吗?

时间:2010-04-21 10:23:42

标签: grammar

让我们说同一个语法不是LR(1),我们可以安全地说语法也不是LALR吗?

如果没有,语法成为LALR的条件是什么? (或者使语法不是LALR的条件是什么)

感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

LALR(1)⊂LR(1),是的,我们可以假设。两个语法以类似的方式表达语言,但LR(1)跟踪比LALR(1)更多的左状态。参看These lecture notes,讨论两种表述之间的状态差异。

通常,解析器生成器将处理为您创建shift-reduce步骤的所有细节;不同之处在于,基于较大语法的生成器更有可能找到无冲突的解析策略。

答案 1 :(得分:1)

This document比较两者。

答案 2 :(得分:0)

这是一个简单的语法,即LR(1)但不是LALR(1):

G -> S 
S -> c X t 
  -> c Y n
  -> r Y t
  -> r X n 
X -> a
Y -> a

LALR(1)解析器生成器为您提供LR(0)状态机。 LR(1)解析器生成器为您提供LR(1)状态机。 使用这种语法,LR(1)状态机还有一个状态 比LR(0)状态机。

LR(0)状态机包含以下状态:

X -> a . 
Y -> a .

LR(1)状态机包含这两个状态而不是 如上所示:

X -> a . { t }
Y -> a . { n }

X -> a . { n }
Y -> a . { t }

LALR的问题在于首先制造州 没有任何关于头脑的知识。然后看一下头 在制定国家后进行审查或创建。然后是LALR 有这个状态和头脑,通常后来添加, 会是这样的:

X -> a . { t, n }
Y -> a . { n, t }

有人可以在这看到问题吗?如果前瞻是't', 你选择哪种减少?这是暧昧的!所以 LALR(1)解析器生成器为您提供reduce-reduce冲突 报告可能会混淆无经验的语法 作家。

这就是我将LRSTAR作为LR(1)解析器生成器的原因。它 可以处理上面的语法。