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