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

时间:2019-03-07 10:01:13

标签: parsing syntax-error antlr4

我目前正在尝试临时修改/修复别人创建的现有语法。

我们有自己的语言,我们为此创建了一个编辑器。我们正在使用Eclipse IDE。

一些语法示例,例如

calc : choice INTEGER INTEGER

choice : add|sub|div|mul

INTEGER :   ('0'..'9')+ 

因此在我的编辑器中,如果我输入

calc add 2 aaa

因此,antlr的错误解析器将其识别为错误,因为它需要一个整数,因此我们键入了字符串并抛出了错误消息,例如

  

extraneous input 'aaa' expecting {'{', INTEGER}"

(我的课程扩展了BaseErrorListener,在其中我为这些错误创建了标记)

类似地,我为我的编辑器定义了这样的语法。

现在的问题是:对于所有这一切,它可以识别出语法中的某些错误并引发错误,但是对于不属于语法的语法(如

),该怎么办呢?

如果我键入任何垃圾值,例如

abc add 2 3 

just_type_junk_in_editor

由于‘abc’‘just_type_junk_in_editor‘不在我的语法中,因此不会引发任何错误

对于不属于语法的关键字,有一种方法可以将antlr的错误解析器解析为错误。

1 个答案:

答案 0 :(得分:0)

在没有看完整语法的情况下,我认为您的问题是主规则中缺少EOF令牌。 ANTLR4会尽可能多地消耗输入,但是如果至少在主规则中不匹配任何内容,它将忽略其余部分,这说明了为什么看不到错误。通过添加EOF,您可以告诉ANTLR4所有输入必须匹配:

MID