2013-03-20 55 views
2

我有以下ANTLR规则:AST重写规则表达式

procedure 
: ('int' | 'char') IDENT '(' args ')' body -> ^(PROCEDURE IDENT (args)* body) 
; 

我想捕捉的AST的('int' | 'char')部分。您可以看到,在右侧没有出现,但我不确定如何在AST中显示所选的'int''char'。我希望'int'或'char'部分位于PROCEDURE根目录下的树中,但,IDENT之前。

+0

注意,你有'ARGS *'你重写规则里面,但'args'在解析器规则。你可能想要删除'*'。 – 2013-03-20 21:06:26

回答

3

您可以标记对,然后引用标签在改写:

procedure 
    : primType=('int' | 'char') IDENT '(' args ')' body 
     -> ^(PROCEDURE $primType IDENT args body) 
    ;