2

我有以下 ANTLR 规则:

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

我想捕获('int' | 'char')AST 中的部分。如您所见,在右侧它没有出现,但我不确定如何选择'int''char'出现在 AST 中。我希望'int'or 'char'部分位于根下的树中,PROCEDUREIDENT.

4

1 回答 1

3

您可以标记该对,然后在重写中引用该标签:

procedure
    : primType=('int' | 'char') IDENT '(' args ')' body
      -> ^(PROCEDURE $primType IDENT args body)
    ;
于 2013-03-20T20:47:38.673 回答