在ANTLR4中调用规则侦听器时解析器所在位置的引用



我用Python生成监听器,但任何语言都可以用于回答或注释

我需要知道在解析树中是否有对where的引用,或者更好的是,在令牌流源文件中,解析器在调用特定侦听器方法时位于
我得到了一个上下文对象,它引用了解析器本身,我查找了它,但似乎没有找到
这仅用于调试。

def enterData_stmt(self, ctx:fassParser.Data_stmtContext):

我知道解析器不遍历源文件,而是遍历抽象语法树,我可以查看它并了解解析器的位置,但我想知道是否可以在不必遍历树的情况下获得一个快速调试的上下文

每个ParseRuleContext对象都有字段startstop,分别包含规则匹配的第一个和最后一个令牌。令牌对象有方法getLinegetCharPositionInLine来找出每个令牌分别开始的行号和列号(没有方法告诉您令牌的结束位置(除了绝对索引,而不是行号和列数),所以如果需要,您需要使用开始位置和长度自己计算它)。

我知道pareser不是遍历源文件,而是遍历抽象语法树

当然,解析器会遍历源文件——否则它怎么能解析它?解析器遍历源文件以生成(不是很抽象的)解析树。如果您将访问者或ParseTreeWalker与侦听器一起使用,那么访问者/侦听器将遍历生成的解析树。如果您使用的是addParseListener,那么当解析器仍在解析文件时,监听器将被部分构建的树调用。

最新更新