0
此ANTLR示例不解析輸入「1;」 。你能解釋爲什麼嗎?它解析「11」。此antlr示例不能正常工作
grammar TestGrammar;
options {
output=AST;
}
expr: mexpr (PLUS^ mexpr)* SEMI!;
mexpr: atom (STAR^ atom)*;
atom: INT;
LPAREN: '(';
RPAREN: ')';
STAR: '*';
PLUS: '+';
SEMI: ';';
protected
DIGIT: '0'..'9';
INT: (DIGIT)+;
WS: (' ' | '\t' | '\n' | '\r') {
$channel = HIDDEN;
};
確認,將保護更改爲片段。 – Pindatjuh 2010-05-03 13:17:34
我想通了。說明:受保護的關鍵字在早期版本的ANTLR中起作用。它在ANTLR 3中不起作用。現在必須使用受保護的片段。在ANTLR 3中可能會忽略受保護的。那麼會發生什麼? ANTLR將INT和DIGIT解釋爲令牌。由於它們非常相似,解析失敗。通過使用片段,DIGIT不再是一個令牌。片段說DIGIT是規則或其他標記的一部分。然後這個例子開始工作。 – Aftershock 2010-05-04 15:41:10