1

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

${identifier}

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

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

这工作正常。我正在使用自己的适配器来发出树节点。使用的重写规则为我创建了两个节点:一个 forNODE_VAR_REFERENCE和一个 for IDENT

我要做的是只创建一个节点(用于NODE_VAR_REFERENCE令牌),并且该节点必须IDENT在其“令牌”字段中具有令牌。

这可能使用重写规则吗?谢谢。

4

1 回答 1

2

好吧,让IDENT成为节点的令牌NODE_VAR_REFERENCE意味着根本没有任何令牌NODE_VAR_REFERENCE。标记由类型 (NODE_VAR_REFERENCEIDENT) 和该标记匹配的一些文本组成。让树节点的标记成为IDENT意味着类型文本都将是IDENT(丢失NODE_VAR_REFERENCE标记或类型)。

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

reference
 : DOLLAR LBRACE IDENT RBRACE -> NODE_VAR_REFERENCE[$IDENT.text]
 ;
于 2012-11-20T18:34:05.047 回答