我一直在与antlr一起做一种Excel公式验证。 Antlr看起来不错,但是,我对其工作方式有些怀疑。
想象一下,我有一个语法,它已经知道执行excel公式验证(规则引用,操作等)所需的所有种类的标记。在此语法中,没有货币符号(€,£等)的有效令牌,尽管我有一个匹配任何内容的'ERROR_CHAR'令牌:ERROR_CHAR: .;
以下是我想了解的示例输入:=€€€+SUM(1,2)
€€€
之后的所有令牌均有效,并且有相应的规则-> +SUM(1,2)
我的解析器仅知道€
是无效的,但是不知道ERROR_CHAR的序列,就像€€€
一样,因此,所有输入都是错误的,并且所有后续标记都被捕获错误监听器。我认为这是因为根据我的解析器规则,我并不是说ERROR_CHAR可能出现在输入中的任何位置。
我不想跳过这些标记,因为我想突出显示错误的位置并且我已经跳过了空格。
您知道我该如何处理吗?
答案 0 :(得分:0)
如果您只想突出显示错误的位置,请让ANTLR检测错误及其位置。它做得很好。不需要语法更改。
使用ErrorListener
检测并处理错误。
您可以在这里找到更多信息:Handling errors in ANTLR4