2013-03-20 71 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) 
    ;