2011-08-20 69 views
12

我有一个语法,我可以检查是否是LL(1)。但是,有什么方法可以检查语法生成的语言是否为LL(1)? LL(1)语法和LL(1)语言之间的区别究竟是什么?如何确定语言是否为LL(1)?

+0

你的问题语法和语言有什么不同? –

回答

14

LL(1)的任何语法都定义了LL(1)语言。根据定义,一种语言是LL(1),如果有一些语法产生LL(1),那么事实上你有一个语言的LL(1)语法就意味着语言是LL(1) 。

要详细说明,语言是一组字符串,该语言的语法是描述该语言的一种手段。有些语言具有LL(1)语法,而其他语言则不具备。然而,语法不是LL(1)的事实并不意味着它描述的语言不是。例如,考虑这个语法:

A -> ab | ac 

此语法不是LL(1),因为它包含了第一/前冲突试图看到终端时,预测产量为A,此时。但是,它描述了一个LL(1)语言,因为语言也被语法

A -> aX 
X -> b | c 

描述,这些语法生成(其中只包含AB和AC)的语言的确是LL(1)。

确定由任意语法描述的语言是否为LL(1)是非常困难的,据我所知,唯一的方法就是明确地展示生成的语言的LL(1)语法通过最初的语法(这是棘手的)或数学上证明没有这样的语法存在。

希望这会有所帮助!

+1

因此,LL(1)*语言*可以由许多不是LL(1)的其他*语法*定义(只要存在这样的LL(1)语法)? - 试图在我的脑海中确认。 – 2011-08-20 19:06:58

+3

@pst,是的,只有一个LL(1)语法就足够了。 –