Try something like this:
grammar T;
...
tokens {
PARAMS;
}
...
param_names
: param_name (',' param_name)* ';' -> ^(PARAMS param_name+)
;
param_name
: name subscript? initial_value? -> ^(name subscript? initial_value?)
;
...
If name
is an AST as well (opposed to being a single token), you might want to try something like this:
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?)
;
...