繁体   English   中英

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

[英]Get column number information of multiple IDs in same line in antlr4 python target

我正在用 antlr4 在 python 中编写解析器。

简而言之,输入行是:

概念 foo 酒吧

解析以上输入行的语法规则是:

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 的列号?

enter您将没有准备好评估的整个(子)分析树。 而是使用exit变体或(更好)执行解析后阶段(通常称为语义阶段)来提取此类信息。

一旦您拥有完整的(子)树,您就可以访问identifier上下文中的ID成员,它是一个数组,如果特定规则或标记的出现不止一次。 迭代它以获取单个子元素。

要获取ID的列信息,请使用getChild()调用返回一个TerminalNode实例的词法分析器标记这一事实(您必须将结果转换为该实例)。 从那里调用getSymbol() ,它为您提供一个Token实例,该实例又包含特定标记的所有信息,如文本、通道、列、行、类型等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM