2011-08-20 64 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)語法就足夠了。 –