Правило
parameters:
parameters SEMICOLON parameter { $$ = makePairNode("PARAMETERS", $1, $3); }
| parameters COMMA parameter { $$ = makePairNode("PARAMETERS", $1, $3); }
| parameter {$$ = $1;}
;
определяет, что parameters
- это последовательность чего-то, называемого parameter
, разделенная точкой с запятой или запятой.Сразу это не похоже на то, что вы ищете, так как оно примет a: int, b: string
.
Между тем, согласно следующему правилу, все в порядке, когда параметр, состоящий из *, равен просто ident_name
.Именно так и трактуется a,
: безымянный a
, отделенный от остальных запятой.
Если я правильно понимаю ваши намерения, рассмотрите что-то вроде
parameters
: parameters SEMICOLON typed_parameter group
| typed_parameter_group
;
typed_parameter_group
: parameter_list COLON ident_type
| parameter_list
;
parameter_list
: parameter_list COMMA iden_name
| iden_name
;