在antlr4 python目标中获取同一行中多个ID的列号信息

2024-10-02 06:33:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用antlr4编写python解析器

简而言之,输入行是:

concept foo bar

解析输入行上方的语法规则为:

start_rule: 'concept' identifier
identifier: ID {ID}

为了获得输入行中所有ID的列号和行号,我在enteridentifier(self,ctx)函数中添加了代码

enteridentifier(self, ctx):
    context = ctx.start
    line_number = context.line
    column_number = conext.column

上面的代码片段返回第一个ID的列号,即foo。如果同一行号(属于同一规则)中存在多个ID,即foo-bar,那么如何获取两个ID的列号


Tags: 代码selfidnumberfoo规则contextline
1条回答
网友
1楼 · 发布于 2024-10-02 06:33:03

enter上,您将无法准备好整个(子)解析树进行计算。取而代之的是使用exit变量或(更好的是)进行后解析阶段(通常称为语义阶段)来提取此类信息

一旦有了一个完整的(子)树,您就可以访问identifier上下文中的ID成员,这是一个数组,如果可以出现一个以上的特定规则或标记。对其进行迭代以获得单个子元素

要获取ID的列信息,请使用for lexer标记getChild()调用返回一个TerminalNode实例(您必须将结果强制转换为该实例)。从那里调用getSymbol(),它将为您提供一个Token实例,该实例依次包含特定标记的所有信息,如文本、频道、列、行、类型等

相关问题 更多 >

    热门问题