2012-12-24 37 views
1

我努力學習的編譯器建設,我只是通過對SLR分析器龍書章閱讀。所以,我決定寫一個簡單的語法,並嘗試手動編寫解析器。語法如下:LR分析器GOTO功能和Epsilon

S -> A 
A -> (A)A 
A -> e, 

其中e是空字符串生成。

another question在計算器上,在啓動狀態的項目應該像

S -> .A 
A -> .(A)A 
A -> .e, 

,但會是什麼GOTO功能樣子。我知道GOTO('(') = *some state with A -> (.A)A*,但我不能真正包裹我的頭GOTO(e)。解析器看到一個空字符串並沒有什麼意義。可以?

謝謝大家提前!

Michael

回答

0

不,解析器看不到空字符串。它看到的是傳入的符號(下一個標記)。如果傳入的符號不會導致goto動作(轉到新的狀態),那麼解析器將被強制進行縮減(A - > e),然後基於A(非終端轉換)進行轉換。

In State: 

A -> '(' . A ')' A 
A -> . '(' A ')' A 
A -> e 

if the input symbol is not '(', then the parser will make the reduction: 

A -> e 

and go to the new state: 

A -> '(' A . ')' A