为了进一步了解解析器和语法,我正在寻找一个(希望是简单的)LL(2) 但不是 LL(1)的语言示例。也就是说,一种可以由 LL(2) 文法生成但不能由任何 LL(1) 文法生成的语言。
那门课有有用的语言吗?即我们能想象一种计算机语言是 LL(2) 但不是 LL(1) 吗?
Gunther的回答中链接的书中提到的示例:
S -> a S A | epsilon
A -> a^k b S | c
是描述不是 LL(k) 的 LL(k+1) 语言的语法。尤其,
S -> a S A | epsilon
A -> a b S | c
是描述不是 LL(1) 的 LL(2) 语言的语法。
Grune 和 Jacobs 的Parsing Techniques提供了一个示例。这本书的旧版本可在网上获得
http://dickgrune.com/Books/PTAPG_1st_Edition/BookBody.pdf
示例在第 181 页。