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

问题描述 投票:0回答:1

我正在使用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。如果同一行号(属于同一规则)(即foo bar)中存在多个ID,那么如何获得两个ID的列号?

python compiler-construction antlr antlr4 antlrworks
1个回答
0
投票

enter上,您将没有完整的(子)分析树可供评估。而是使用exit变体或(最好)进行后解析阶段(通常称为语义阶段)以提取此类信息。

[拥有完整的(子)树后,如果特定规则或标记的出现不止一次,则可以在数组的ID上下文中访问identifier成员。对此进行迭代以获取各个子元素。

© www.soinside.com 2019 - 2024. All rights reserved.