getType在antlr4中做什么?
这个问题与本书中的Cymbol代码有关(~第143页): 每个组件返回什么:“ctx.type()”、“start”、“getType()”?这本书没有对这些名字作任何解释 我可以“有点”理解“ctx.type()”指的是“type”规则,“getType()”返回与之关联的数字。但是“开始”到底是做什么的呢 另外,概括一下这个问题:获取规则返回的值/结构的机制是什么?特别是在侦听器中使用的上下文中 我可以看到,对于ID,它是:getType在antlr4中做什么?,antlr4,Antlr4,这个问题与本书中的Cymbol代码有关(~第143页): 每个组件返回什么:“ctx.type()”、“start”、“getType()”?这本书没有对这些名字作任何解释 我可以“有点”理解“ctx.type()”指的是“type”规则,“getType()”返回与之关联的数字。但是“开始”到底是做什么的呢 另外,概括一下这个问题:获取规则返回的值/结构的机制是什么?特别是在侦听器中使用的上下文中 我可以看到,对于ID,它是: String name = ctx.ID().getText();
String name = ctx.ID().getText();
如上所述,对于关键字枚举,它是通过“start.getType()”进行的。我应该知道的任何其他特殊类型的访问?让我们一步一步地分解问题。显然,
ctx
是CymbolParser.FunctionDeclContext
的实例。在第98-99页,您可以看到语法和语法树是如何实现的(至少是感觉-要真正实现,请参阅th.g4
文件)
查看第99页的AST图-您可以看到节点FunctionDeclContext
有几个子节点,其中一个标记为type
。直观地看,它以某种方式与函数返回类型对应。这是调用CymbolParser.FunctionDeclContext::type
时检索的节点。返回类型可能类似于TypeContext
请注意,开头没有“get”的方法通常是子getter-例如,您可以通过调用CymbolParser.FunctionDeclContext::block
来访问块
因此,您得到了传递的方法的类型上下文。您可以在任何上下文上调用begin
或end
,以获取定义上下文的最后一个标记中的第一个。只需start
即可获得“第一个单词”。在这种情况下,第一个标记
当然是函数返回类型itsef,例如int
最后一个调用-Token::getType
返回Token
的整数表示
有关更多信息,请访问API参考网页-。但是理解行为的最好方法是阅读生成的ANTLR类,如解析器
等。为了完整起见,我附加了
String name = ctx.ID().getText();