是否有一个在线资源,包含一些主要解析算法(LL(1), LR(1), LR(0), LALR(1))的语法集合?我找到了很多属于这些族群的单个语法,但是我不知道是否有一个好的资源,其中有人编写了一大批示例语法。
有没有人知道这样的资源?
是否有一个在线资源,包含一些主要解析算法(LL(1), LR(1), LR(0), LALR(1))的语法集合?我找到了很多属于这些族群的单个语法,但是我不知道是否有一个好的资源,其中有人编写了一大批示例语法。
有没有人知道这样的资源?
维基百科上的例子:
文法
S -> F
S -> ( S + F )
F -> a
输入
( a + a )
解析步骤
S -> "(" S "+" F ")"
-> ( "F" + F )
-> ( "a" + F )
-> ( a + "a" )
文法
(1) E → E * B
(2) E → E + B
(3) E → B
(4) B → 0
(5) B → 1
输入
1 + 1
解析步骤
need to build a parser table and traverse through states.
语法
S’ -> S S
S -> C C
C -> c C | d
输入
cd
解析步骤
large table
语法
A -> C x A | ε
B -> x C y | x C
C -> x B x | z
输入
xxzxx
解析步骤
traverse large parser table
您可能还想看看
《解析技术 - 实用指南》中有几个例子(即每种类型大约半打左右)涉及几乎每种类型的语法。您可以购买第二版书籍,尽管第一版可在作者的网站上以PDF形式免费获取(链接底部附近)。
作者还提供了一些测试语法,这些语法与第二版的代码示例一起打包,可以在此处找到。
注意:由于这是一本已出版的书,因此所有这些语法都很小(不到几十条规则)。
options { k=1; }
表示LL(1),或者默认的options { k=*; }
表示LL(k)。 - Bart Kiersk=*
。ANTLR v2.x 始终有一个固定的 k
。这只是我随口说出的,稍后我会查看我的 ANTLR 参考资料,如果我错了,我会进行更正。但我非常肯定这是正确的。 - Bart Kiers