让Antlr词法分析器将语法错误作为令牌处理



我使用Antlr 4.2.2和Java 1.7进行一些文本处理。我扩展了BaseErrorListener并覆盖了syntaxError()以报告语法错误,这工作得很好。但是,我希望它将不匹配的文本视为一个标记并返回它,而不是完全丢弃它。

在我的lexer中,我有这样的规则:

TEXT : ~[<{|]+ ;

当我尝试解析"foo{{"时,我得到了一个语法错误,如预期的那样:标记识别错误:'{{'。但是我希望'{{'也被报告为一个令牌,这样它就不会从输入流中丢失。

您可以在文件的末尾添加一个类似的通用词法分析器规则:

Error : . ;

这将产生Error令牌,它很可能在解析期间报告为extra "Error" token

你也可以这样做:

 SilentError : . -> channel(LexingErrorChannel); // you need to set the constant for this channel

它将静默地忽略词法错误(如果您想自己处理/报告它们)。

但是I如果可以规避的话就不会这样做了。

注意:这将为每个字符生成一个Error令牌。如果你"知道"可能的错误,你可以像这样添加其他规则:

Error : [<{|]'+
      | .
      ;

注意不要太贪心

相关内容

  • 没有找到相关文章

最新更新