LL(1),LR(1),LR(0),LALR(1)语法的例子?

对于一些主要的语法分析algorithm(LL(1),LR(1),LR(0),LALR(1)),是否有一个很好的在线资源? 我发现了许多属于这些家庭的个人语法,但是我知道没有很好的资源,在那里有人写了大量的例子语法。

有谁知道这样的资源?

parsing技巧 – 实用指南中几乎每种types的语法都有几个例子(每种types可能大概有六种左右)。 您可以购买第二版书籍,尽pipe第一版可以在作者的网站上以PDF格式(链接的底部附近)免费获得。

作者还有一些testing语法,他把他的代码示例从第二版中捆绑出来,可以在这里find它。

注意:所有这些语法都很小(less于几十条规则),因为这显然是一本已出版的书。

来自维基百科的例子

LL(1)

语法

S -> F S -> ( S + F ) F -> a 

input

 ( a + a ) 

parsing步骤

 S -> "(" S "+" F ")" -> ( "F" + F ) -> ( "a" + F ) -> ( a + "a" ) 

LR(0)

语法

 (1) E → E * B (2) E → E + B (3) E → B (4) B → 0 (5) B → 1 

input

 1 + 1 

parsing步骤

 need to build a parser table and traverse through states. 

LR(1)

语法

 S' -> SSS -> CCC -> c C | d 

input

 cd 

parsing步骤

 large table 

LALR

语法

 A -> C x A | ε B -> x C y | x C C -> x B x | z 

input

 xxzxx 

parsing步骤

 traverse large parser table 

你可能也想看看

  • parsing模拟器工具
  • antlr作品 – >下载<
  • 来自ocw mit的parsing器表生成
  • 从parsing到代码生成ocw mit
  • 另外的例子

我不希望你有意识地find一大堆这样组织的语法。 组织者将获得什么回报?

你可能有一个机会做的是find与每个家族对应的parsing器生成器(例如,LL(1)),并去查找该parsing器生成器的input实例,所有这些将是LL(1)定义。 例如,ANTLR的语法都是LL(k)的各种版本,具体取决于你select的ANTLR版本(ANTLR版本的描述将告诉它接受什么样的版本)。 野牛语法都是LALR(1)[忽略最近的GLR选项]。 如果你去我的网站(见生物),你会看到一个几乎没有上下文的语法列表(也就是说,不在你描述的任何类中)。

编辑:注意@Bart基尔的澄清,ANTLR可以明确标记为特定k的LL(k)语法。