我有一个语法,我可以检查是否是 LL(1)。但是,有什么方法可以检查语法生成的语言是否为 LL(1)?LL(1) 语法和 LL(1) 语言之间到底有什么区别?
问问题
6288 次
1 回答
16
任何 LL(1) 的文法都定义了 LL(1) 语言。根据定义,如果有某种语法生成语言是 LL(1),那么语言就是 LL(1),所以你有该语言的 LL(1) 语法这一事实自动意味着该语言是 LL(1) .
详细地说,一种语言是一组字符串,该语言的语法是描述该语言的一种手段。有些语言有 LL(1) 语法,而另一些则没有。然而,文法不是 LL(1) 的事实并不意味着它所描述的语言不是。例如,考虑以下语法:
A -> ab | ac
该文法不是 LL(1),因为当看到终端 a 时尝试预测 A 的产生式时,它包含 FIRST/FIRST 冲突。但是,它描述的是 LL(1) 语言,因为该语言也由文法描述
A -> aX
X -> b | c
所以这些文法(只包含ab和ac)生成的语言确实是LL(1)。
确定任意文法所描述的语言是否是 LL(1) 要困难得多,据我所知,唯一的方法是明确展示初始文法生成的语言的 LL(1) 文法(这很棘手)或在数学上证明不存在这样的语法。
希望这可以帮助!
于 2011-08-20T18:39:25.860 回答