此antlr示例工作不正常
此ANTLR示例不解析输入“1;”。你能解释一下原因吗?它解析为“11;”此antlr示例工作不正常,antlr,antlr3,Antlr,Antlr3,此ANTLR示例不解析输入“1;”。你能解释一下原因吗?它解析为“11;” 对于java目标,如果您更改: 受保护的 数字 : '0'..'9' ; 到 碎片 数字 : '0'..'9' ; 它会起作用的 希望这对您有所帮助。确认,将“受保护”更改为“碎片”。我明白了。说明:受保护的关键字在早期版本的ANTLR中有效。它在ANTLR 3中不起作用。现在必须使用片段instrade of protected。在ANTLR 3中,受保护的可能被忽略。那么会发生什么呢?ANTLR将INT和DI
对于java目标,如果您更改: 受保护的 数字 : '0'..'9' ; 到 碎片 数字 : '0'..'9' ; 它会起作用的
希望这对您有所帮助。确认,将“受保护”更改为“碎片”。我明白了。说明:受保护的关键字在早期版本的ANTLR中有效。它在ANTLR 3中不起作用。现在必须使用片段instrade of protected。在ANTLR 3中,受保护的可能被忽略。那么会发生什么呢?ANTLR将INT和DIGIT都解释为标记。由于它们非常相似,解析失败。通过使用片段,数字不再是一个标记。片段表示该数字是规则或其他标记的一部分。然后,示例开始工作。
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;
};