2013-11-20 3 views
1

У меня есть следующее правило и правила перезаписи для AST в ANTLR:AST Правило перезаписи


param_name 
    : name subscript? initial_value? (',' name subscript? initial_value?)* ';' -> ^(name subscript? initial_value?)* 
    ; 

Проблема заключается в том, что я узнал, что я не имею права ставить * в правило переписывания в том месте, где я его положил. Может ли кто-нибудь предложить другое решение? Я надеюсь, что из моего переписанного правила вы поймете, чего я пытаюсь достичь.

ответ

1

попробовать что-то вроде этого:

grammar T; 

... 

tokens { 
    PARAMS; 
} 

... 

param_names 
: param_name (',' param_name)* ';' -> ^(PARAMS param_name+) 
; 

param_name 
: name subscript? initial_value? -> ^(name subscript? initial_value?) 
; 

... 

Если name является АСТ, а также (в отличие от того один маркер), вы можете попробовать что-то вроде этого:

grammar T; 

... 

tokens { 
    PARAMS; 
    PARAM; 
} 

... 

param_names 
: param_name (',' param_name)* ';' -> ^(PARAMS param_name+) 
; 

param_name 
: name subscript? initial_value? -> ^(PARAM name subscript? initial_value?) 
; 

... 
+0

Спасибо за тонну !! .. Он отлично работает :) – user2904943

Смежные вопросы