1.對于典型的if-else二義性文法,存在移進-接受(移進-歸約)沖突,在我的LALR分析器中采用了和YACC相同的方法,首先處理移進操作.這樣就可消除if-else的二義性.
if-else文法:
S->iEStS
S->iES
S->s
E->e
說明:
i代表if
s代表stmt
e代表exp
t代表else
對于以上文法生成的LALR(1)分析表為:

對于if exp stmt語句分析結果為:

對于if exp stmt else stmt語句分析結果為:

對于if exp if exp stmt語句分析結果為:

對于if exp if exp stmt else stmt語句分析結果為:

2.眾所周知LALR文法同樣存在歸約-歸約沖突,在我的LALR分析器中使用先書寫的產生式進行歸約.
對于給定的存在歸約-歸約沖突的文法:
S->T
S->i
T->i
生成LALR(1)分析表為:

分析輸入串i的過程為:

以上就是我的LALR(1)分析器處理沖突的方法了.
下面逐步對這個分析器進行擴充,以實現一個能自由輸入文法的分析器.
posted on 2010-07-22 15:04
lwch 閱讀(2068)
評論(0) 編輯 收藏 引用 所屬分類:
NScript