2015-06-29 71 views
0

我曾嘗試在hackingoff.com網站上使用非常簡單的語法,但我對結果有些困惑。這是語法LL(1)嗎? http://hackingoff.com/compilers/ll-1-parser-generator給出錯誤

我使用的語法如下:

1. E -> int T 
2. T -> + int 
3. T -> ε 

我做了一些人工計算,制定了下面的:

First(int) = {int} 
First(+) = {+} 
First(ε) = {ε} 
First(E) = {int} 
First(T) = {+,ε} 

Follow(E) ⊆ Follow(T) 
First(T) ⊆ Follow(int) 
Follow(E) ⊆ Follow(int) 
First(int) ⊆ Follow(+) 
Follow(E) ⊆ Follow(int) 

=> 

Follow(E) = {$} 
Follow(T) = {$} 
Follow(int) = {+,$} 
Follow(+) = {int} 

然後我構造的分析表:

int  +  $ 
    ------------------------ 
E | int T    | 
T |   +int  ε | 
    ------------------------ 

但是當我在hackingoff.com網站上使用這個語法時,它說 - 從我的rstand - 語法有一些錯誤。顯示了該網站上的表如下:

[0,"int","+","$"] 
[0,0,0,0] 
[0,1,5,4] 
[0,5,2,3] 

從我從網站上的描述理解有錯誤的時候 - 在我的情況 - 在表中的單元格的值大於3 很明顯,問題出在我的桌子上沒有任何產品的單元格中。當我手動構建解析表時,那裏爲什麼會出現錯誤?可能我錯過了一些根本性的東西?

回答

0

這些條目不會指出語法錯誤。相反,他們識別要解析的文本中的語法錯誤。當狀態機遇到錯誤值而不是新的狀態號時,它表示語法錯誤。

順便說一句,您的語法只接受兩個輸入:intint + int。你可能想讓T遞歸。

+0

感謝您的回答!我知道我的語法很基礎,但我只想用一些簡單的表達來嘗試這個工具。 –