ANTLR:重写规则中的标记到文本

时间:2012-11-20 16:56:55

标签: parsing antlr antlr3 abstract-syntax-tree

我正在使用ANTLR构建AST。我想写一个与此字符串匹配的作品:

${identifier}

在我的语法文件中,我有:

reference
  : DOLLAR LBRACE IDENT RBRACE -> ^(NODE_VAR_REFERENCE IDENT)
;

这很好用。我正在使用自己的适配器来发出树节点。 使用的重写规则为我创建了两个节点:一个用于NODE_VAR_REFERENCE,另一个用于IDENT

我想要做的只是创建一个节点(对于NODE_VAR_REFERENCE令牌),并且此节点必须在其“令牌”字段中包含IDENT令牌。

这是否可以使用重写规则?感谢。

1 个答案:

答案 0 :(得分:2)

好吧,让IDENT成为节点NODE_VAR_REFERENCE的标记意味着根本没有NODE_VAR_REFERENCE。令牌由类型(NODE_VAR_REFERENCEIDENT)和此令牌匹配的一些文本组成。让树节点的标记变为IDENT意味着类型的文本都是IDENT的文本(丢失NODE_VAR_REFERENCE标记或输入)。< / p>

您可能的意思是让单个节点的类型为NODE_VAR_REFERENCE,文本为IDENT,在这种情况下,您可以执行以下操作:

reference
 : DOLLAR LBRACE IDENT RBRACE -> NODE_VAR_REFERENCE[$IDENT.text]
 ;