所以我SQL表達式編輯器下面的語法規則(簡體)Antlr4語法歧義:兩個相同的前綴規則
FUNCTIONID: 'sum' | 'avg';
functionExpr: FUNCTIONID '(' expr ')'
AGGFUNCTIONID: 'sum' | 'avg'
aggFunctionExpr: AGGFUNCTIONID '(' expr ')' 'over' ...
的代碼適用於諸如「總和(1)在... 「但沒有時沒有over
。
我怎麼能讓這個語法適用於這兩種情況,仍然有這兩個規則?
ANTLR4的詞法分析器工作在許多方面一樣ANTLR3,這是在這裏解釋:http://stackoverflow.com/questions/9251048/antlr-v3-error-with-parser-lexer-rules – 2014-10-31 07:47:27
問題在於他們評論了第一條規則獲勝,這正是現在正在發生的事情。我希望解析器做的是預測一個'over'令牌,並根據是否有一個令牌來決定。那可能嗎? – escanda 2014-10-31 08:27:20
不,這就是我的意思:ANTLR4和ANTLR3在這方面的工作原理是一樣的。我會在一個答案中進一步解釋。 – 2014-10-31 08:39:39