如何使用antlr捕获跳过的令牌?

时间:2019-03-21 11:53:47

标签: parsing compilation antlr grammar antlr4

我一直在与antlr一起做一种Excel公式验证。 Antlr看起来不错,但是,我对其工作方式有些怀疑。

想象一下,我有一个语法,它已经知道执行excel公式验证(规则引用,操作等)所需的所有种类的标记。在此语法中,没有货币符号(€,£等)的有效令牌,尽管我有一个匹配任何内容的'ERROR_CHAR'令牌:ERROR_CHAR: .;

以下是我想了解的示例输入:=€€€+SUM(1,2)

  1. 该公式无效
  2. €€€之后的所有令牌均有效,并且有相应的规则-> +SUM(1,2)

我的解析器仅知道是无效的,但是不知道ERROR_CHAR的序列,就像€€€一样,因此,所有输入都是错误的,并且所有后续标记都被捕获错误监听器。我认为这是因为根据我的解析器规则,我并不是说ERROR_CHAR可能出现在输入中的任何位置。 我不想跳过这些标记,因为我想突出显示错误的位置并且我已经跳过了空格。

您知道我该如何处理吗?

1 个答案:

答案 0 :(得分:0)

如果您只想突出显示错误的位置,请让ANTLR检测错误及其位置。它做得很好。不需要语法更改。

使用ErrorListener检测并处理错误。
您可以在这里找到更多信息:Handling errors in ANTLR4