ANTLR3 的奇怪行为
Strange behaviour of ANTLR3
为什么此答案中出现的语法 接受这样的表达式:2(38) ??我知道为什么 12*(5-6) 被接受,为什么 12*(5-6 不被接受,但我无法解释这种行为。
它不接受整个输入。它在 2
之后停止解析,因为 eval
规则:
eval
: additionExp
;
将 2
作为 additionExp
匹配,然后停止,因为输入的其余部分无法匹配。
如果您 "anchor" eval
规则,它必须像这样消耗整个令牌流:
eval
: additionExp EOF
;
您将在控制台上看到一个错误。
为什么此答案中出现的语法 接受这样的表达式:2(38) ??我知道为什么 12*(5-6) 被接受,为什么 12*(5-6 不被接受,但我无法解释这种行为。
它不接受整个输入。它在 2
之后停止解析,因为 eval
规则:
eval
: additionExp
;
将 2
作为 additionExp
匹配,然后停止,因为输入的其余部分无法匹配。
如果您 "anchor" eval
规则,它必须像这样消耗整个令牌流:
eval
: additionExp EOF
;
您将在控制台上看到一个错误。