如何追踪没有。通过ANTLR解析的行?

时间:2015-04-08 11:34:23

标签: log4j antlr4

我通过ANTLR4解析文件。我正在为所有可能的关键词编写语法。所以,我想记录总数。输入文件中存在的行数和总数。成功解析的行,以便我能够记录正在解析的文件的整体百分比,并且我还想记录我还没准备好语法的剩余关键字。我的问题是是否可以这样做?如果可能,我想知道如何以编程方式执行此操作? 我相信我们必须在我的案例访问者中记录访问者/听众,但我无法提出任何逻辑。

1 个答案:

答案 0 :(得分:0)

ANTLR4尝试解析整个文件,如果发生错误则恢复。因此,在大多数情况下,每行都会被解析 - 即使在解析过程中发生错误。问题是:您想要显示的是什么号码?

您可能对第一个错误的行感兴趣。您可以通过在Parser类上使用Parser.setErrorHandler设置ErrorHandler来完成此操作。必须实现ANTLRErrorStrategy,使用包含错误位置的reportError调用方法RecognitionException获取此错误的行并减去一行以查找没有错误的行。

如果您只想跳过有错误的行,则策略是相同的。而不是显示第一个错误,计算具有错误的不同行,并从所有行的数量中减去它们以获得可解析行的数量(这是启发式的,有时错误是稍后恢复的行,比这个启发式失败了。)

最好不要尝试与访客/听众一起做。错误恢复有时可能导致修剪的解析树而不是包含错误节点的解析树。如果你想快速失败,则不需要遍历解析树。