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 的奇怪行为有关(提示:它们不会按应有的方式自动重新加载是)。解决方案是在更改语法时简单地重新启动解释器。
很抱歉,原始问题没有足够的信息让其他人找出答案。
我是编写 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 的奇怪行为有关(提示:它们不会按应有的方式自动重新加载是)。解决方案是在更改语法时简单地重新启动解释器。
很抱歉,原始问题没有足够的信息让其他人找出答案。