Antlr4 无关输入,即使它是必要的?

Antlr4 extraneous input even though it's necessary?

我是编写 Antlr 语法的新手,遇到了一些麻烦。我已将我的问题简化为以下内容:

这是我的语法:

grammar Test;

prog    :   stmt*       ;
stmt    :   INT NEWLINE ;

INT     :   [0-9]+      ;
NEWLINE :   '\r'? '\n'  ;

我的 input.txt 只是 0\r\n(不是文字 '\'、'r'、'\'、'n',而是 ASCII 代码 0x0D 0x0A

我收到以下错误:

line 1:1 extraneous input '\r\n' expecting {<EOF>, INT}

stmt 规则要求 INT 后跟 NEWLINE 时,为什么它期望另一个 INT 而不是首先匹配 NEWLINE

如果相关,我正在使用 PyCharm 和 Antlr4 插件来生成语法。

事实证明,当 运行 模块导入已更改的模块时,问题与 Python 的奇怪行为有关(提示:它们不会按应有的方式自动重新加载是)。解决方案是在更改语法时简单地重新启动解释器。

很抱歉,原始问题没有足够的信息让其他人找出答案。