АСТ Правило переписывания
У меня есть следующее правило и переписывание правил для AST в antlr:
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
это также AST (в отличие от одного токена), вы можете попробовать что-то вроде этого:
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?)
;
...