getType在antlr4中做什么?

getType在antlr4中做什么?,antlr4,Antlr4,这个问题与本书中的Cymbol代码有关(~第143页): 每个组件返回什么:“ctx.type()”、“start”、“getType()”?这本书没有对这些名字作任何解释 我可以“有点”理解“ctx.type()”指的是“type”规则,“getType()”返回与之关联的数字。但是“开始”到底是做什么的呢 另外,概括一下这个问题:获取规则返回的值/结构的机制是什么?特别是在侦听器中使用的上下文中 我可以看到,对于ID,它是: String name = ctx.ID().getText();

这个问题与本书中的Cymbol代码有关(~第143页):

每个组件返回什么:“ctx.type()”、“start”、“getType()”?这本书没有对这些名字作任何解释

我可以“有点”理解“ctx.type()”指的是“type”规则,“getType()”返回与之关联的数字。但是“开始”到底是做什么的呢

另外,概括一下这个问题:获取规则返回的值/结构的机制是什么?特别是在侦听器中使用的上下文中

我可以看到,对于ID,它是:

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();