0
我們使用GPPG(本質上是Bison的bison)來爲編程語言生成解析器。除了一個真正討厭的位,一切都很好。我們解析的語言有一種「隱式比較」規則,其中「表達式表達式」應該被解釋爲「表達式==表達式」。GPPG(野牛) - 如何實現「表達式」概念
例如,這是一個完全有效的語句:
If SomeValue False Then
EndIf
這顯然介紹解析器生成過程中的種種矛盾。我第一次嘗試解決這些問題是沿着這些方向發展的(爲簡潔起見)。我試圖對規則進行一些重構,而且似乎不再模棱兩可,但我必須忽略一些明顯的東西。
這裏是一個非常小的語法,顯示我有衝突,以及如何我試圖解決這個問題,不能正常工作,雖然
%start program
%token <Token> Plus
%token <Token> Times
%token <Constant> Constant
%left Plus
%left Times
%left IMPLICIT_COMPARISON
%%
program: expression;
expressionBase: Constant
| expression Plus expression
| expression Times expression;
expression: expressionBase
| expression expressionBase %prec IMPLICIT_COMPARISON;
%%
任何幫助,將不勝感激
除了你的解決方案的優先順序是錯誤的(不知道在我的例子中是否錯誤,沒有檢查,sry)。某些二元運算符的綁定比隱式比較低。例如,2 3 == True可以作爲(2 == 3)== True,而不是2 ==(3 == True) – LorenVS 2011-05-31 05:51:54
hm ...如果我真的可以使它工作,在3個級別做...一秒鐘,去嘗試 – LorenVS 2011-05-31 05:54:24
嘿謝謝你,只是有事情的工作。只需要將事物分成三個層次,即高綁定二元運算符,隱式比較,然後是低綁定二元運算符......謝謝,只是需要考慮更好:) – LorenVS 2011-05-31 06:00:13