如何确定某种语言是否为LL(1)?

时间:2011-08-20 18:28:49

标签: parsing ll

我有语法,我可以检查是否是LL(1)。但是,有没有办法检查语法生成的语言是否为LL(1)? LL(1)语法和LL(1)语言之间究竟有什么区别?

1 个答案:

答案 0 :(得分:15)

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)要困难得多,据我所知,唯一的方法就是明确表示由(> 1)生成的语言的LL(1)语法。初始语法(这很棘手)或数学证明不存在这样的语法。

希望这有帮助!