我当前正在尝试即兴创建/修复其他人创建的现有语法。
我们有自己的语言,我们为其创建了一个编辑器,我们正在使用Eclipse IDE。
一些语法示例,例如
calc : choice INTEGER INTEGER
choice : add|sub|div|mul
INTEGER : ('0'..'9')+
所以在我的编辑器中,如果我键入
calc add 2 aaa
因此,ANTLR的错误解析器将其识别为错误
extraneous input 'aaa' expecting {'{', INTEGER}"
(我的班级扩展了baseRerlistener,在其中为这些错误创建标记)
同样,我为编辑器定义了这样的语法。
现在的问题是:为此,它确定了语法中的某些问题,并且会引发错误,但是对于语法而不是语法的一部分,
如果我键入任何垃圾值,例如
abc add 2 3
或
just_type_junk_in_editor
它不会丢任何错误,因为‘abc’
或‘just_type_junk_in_editor‘
不在我的语法中
因此,对于不属于语法一部分的关键字,ANTLR的错误解析器应该将其作为错误解析。
没有看到完整的语法,我认为您的问题是您的主要规则中缺少的eof eof。Antlr4尽可能多地消耗输入,但是如果至少在主要规则中与任何内容不匹配,它会忽略其余的,这说明了为什么您看不到错误。通过添加EOF,您可以告诉您的antlr4所有输入必须匹配:
calc: choice INTEGER INTEGER EOF;