我正在使用ANTLR构建AST。我想写一个与此字符串匹配的作品:
${identifier}
在我的语法文件中,我有:
reference
: DOLLAR LBRACE IDENT RBRACE -> ^(NODE_VAR_REFERENCE IDENT)
;
这很好用。我正在使用自己的适配器来发出树节点。
使用的重写规则为我创建了两个节点:一个用于NODE_VAR_REFERENCE
,另一个用于IDENT
。
我想要做的只是创建一个节点(对于NODE_VAR_REFERENCE
令牌),并且此节点必须在其“令牌”字段中包含IDENT
令牌。
这是否可以使用重写规则?感谢。
答案 0 :(得分:2)
好吧,让IDENT
成为节点NODE_VAR_REFERENCE
的标记意味着根本没有NODE_VAR_REFERENCE
。令牌由类型(NODE_VAR_REFERENCE
或IDENT
)和此令牌匹配的一些文本组成。让树节点的标记变为IDENT
意味着和类型的文本都是IDENT
的文本(丢失NODE_VAR_REFERENCE
标记或输入)。< / p>
您可能的意思是让单个节点的类型为NODE_VAR_REFERENCE
,文本为IDENT
,在这种情况下,您可以执行以下操作:
reference
: DOLLAR LBRACE IDENT RBRACE -> NODE_VAR_REFERENCE[$IDENT.text]
;