我是编写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}
如果INT
规则要求NEWLINE
后跟stmt
,那么为什么没有首先匹配INT
的其他NEWLINE
?
如果它是相关的,我正在使用PyCharm和Antlr4插件来进行语法生成。
答案 0 :(得分:0)
事实证明,这个问题与Python在运行导入已更改模块的模块时的奇怪行为有关(提示:它们不会按原样自动重新加载)。解决方案是在更改语法时简单地重新启动解释器。
对不起,原来的问题没有足够的信息让其他人知道答案。