如何跟踪通过ANTLR解析的行数



我正在通过ANTLR4解析一个文件。我正在为所有可能的关键词写语法。因此,我想记录输入文件中的总行数和成功解析的总行数,这样我就可以记录正在解析的文件的总百分比,还想记录我还没有准备语法的剩余关键字。我的问题是有可能做到吗如果可能的话,我想知道如何编程我相信我们必须登录访问者/侦听器,在我的情况下是访问者,但我无法想出任何逻辑。

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

也许你对第一个错误的行感兴趣。您可以通过在Parser类上使用Parser.setErrorHandler设置ErrorHandler来实现这一点。必须实现ANTLRErrorStrategy,它的方法reportError是用包含错误位置的RecognitionException调用的获取此错误的行并减去一以找到没有错误的行。

如果你只想跳过有错误的行,策略是一样的。不显示第一个错误,而是计算有错误的不同行,并从所有行的数量中减去它们,以获得可解析行的数量(这是一种启发式方法,有时错误会在启发式方法失败后恢复行)。

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

相关内容

  • 没有找到相关文章

最新更新