【发布时间】:2012-05-17 10:42:09
【问题描述】:
为了加深我对解析器和语法的理解,我正在寻找一个(希望是简单的)语言 的示例,它是 LL(2) 但不是 LL(1)。也就是说,一种语言可以由 LL(2) 文法生成,但不能由任何 LL(1) 文法生成。
该课程中是否有有用的语言?即我们可以想象一种计算机语言是 LL(2) 但不是 LL(1) 吗?
【问题讨论】:
-
谢谢,但这不是我问的。我知道存在这样的语言。我只想以其中一个为例。
为了加深我对解析器和语法的理解,我正在寻找一个(希望是简单的)语言 的示例,它是 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 页。
【讨论】: