ANTLR3 的奇怪行为

Strange behaviour of ANTLR3

为什么此答案中出现的语法 接受这样的表达式:2(38) ??我知道为什么 12*(5-6) 被接受,为什么 12*(5-6 不被接受,但我无法解释这种行为。

它不接受整个输入。它在 2 之后停止解析,因为 eval 规则:

eval
    :    additionExp
    ;

2 作为 additionExp 匹配,然后停止,因为输入的其余部分无法匹配。

如果您 "anchor" eval 规则,它必须像这样消耗整个令牌流:

eval
    :    additionExp EOF
    ;

您将在控制台上看到一个错误。