我正在創建一個語法,我不得不擺脫左遞歸,並且它似乎適用於除添加運算符之外的所有內容。爲什麼我的語法適用於*, - ,/等運算符,而不是+?
這裏是我的語法的相關部分:
SUBTRACT: '-';
PLUS: '+';
DIVIDE: '/';
MULTIPLY: '*';
expr:
(
IDENTIFIER
| INTEGER
| STRING
| TRUE
| FALSE
)
(
PLUS expr
| SUBTRACT expr
| MULTIPLY expr
| DIVIDE expr
| LESS_THAN expr
| LESS_THAN_OR_EQUAL expr
| EQUALS expr
)*
;
INTEGER: ('0'..'9')*;
IDENTIFIER: ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '0'..'9' | '_')*;
然後,當我嘗試做一些像
x*1
它工作的很好。然而,當我嘗試做一些像
x+1
我得到一個錯誤說:
MismatchedTokenException異常:不匹配的輸入 '+' 期待 '\ u001C'
我一直在這一段時間,但不明白爲什麼它與*, - 和/,但不是+。我擁有完全相同的代碼。
編輯:如果我重新排序並將SUBTRACT放在PLUS之上,+符號現在可以工作,但是 - 符號不會。爲什麼antlr會關心這樣的東西的順序?
什麼是IDENTIFIER,INTEGER等定義爲? – dappawit 2011-03-04 02:05:18
你的INTEGER表達式是否包含一個'+'? – SingleNegationElimination 2011-03-04 02:08:51
哎呀,我剛剛添加了INTEGER和IDENTIFIER的問題。我相信我現在有所有相關的東西。 INTEGER規則中沒有+。 – guy 2011-03-04 02:12:59