如何报告使用ANLTR定义的未定义语法错误



我当前正在尝试即兴创建/修复其他人创建的现有语法。

我们有自己的语言,我们为其创建了一个编辑器,我们正在使用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;

相关内容

  • 没有找到相关文章

最新更新