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)语法。