我寫了一個非常簡單的語法定義爲一個計算公式:ANTLR:爲什麼無效的輸入可以匹配的語法定義
grammar SimpleCalc;
options {
output=AST;
}
tokens {
PLUS = '+' ;
MINUS = '-' ;
MULT = '*' ;
DIV = '/' ;
}
/*------------------------------------------------------------------
* LEXER RULES
*------------------------------------------------------------------*/
ID : ('a'..'z' | 'A' .. 'Z' | '0' .. '9')+ ;
WHITESPACE : ('\t' | ' ' | '\r' | '\n'| '\u000C')+ { Skip(); } ;
/*------------------------------------------------------------------
* PARSER RULES
*------------------------------------------------------------------*/
start: expr EOF;
expr : multExpr ((PLUS | MINUS)^ multExpr)*;
multExpr : atom ((MULT | DIV)^ atom)*;
atom : ID
| '(' expr ')' -> expr;
我已經試過start
無效表達ABC &* DEF
但它傳遞。它看起來像&
字符被忽略。這裏有什麼問題?
你是怎麼檢查這個語法的?你有沒有試過在AntlrWorks中用這個語法解析表達式? – Andremoniy
我嘗試了生成的代碼,它得到'ABC * DEF'的結果'ABC * DEF'。 –
嗯...請爲我們提供代碼,您可以使用它來調用* start *規則以及用於確定輸出AST結構。 – Andremoniy