[英]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.