Reputation: 4269
What is the correct way to solve this problem in ANTLR:
I have a simple grammar rule, say for a list with an arbitrary number of elements.
list
: '[]'
| '[' value (COMMA value)* ']'
If I wanted to assign a return value for list, and have that value be the actual list of returned values from the production, what is the proper way to do it? The alternatives I'm entertaining are:
I guess the question is: How do the cool kids do it?
(FYI I'm using the python API for ANTLR, but if you hit me with another language, I can handle that)
Upvotes: 6
Views: 5663
Reputation: 8552
I guess a more straightforward way could be
list returns [ List values ]
: '[]'
| '[' vs+=value (COMMA vs+=value)* ']' {
$values = $vs;
}
Upvotes: 1
Reputation: 14031
In C# it might look like this:
list returns [ List<string> ValueList ]
@init
{
$ValueList = new List<string>();
}
: '[]'
| '[' value {$ValueList.Add(value);} (COMMA value {$ValueList.Add(value);})* ']'
;
Upvotes: 5