In the cases where we allow preceding newlines (Statementlist Open Close)
we current use one parse-stack from for each newline. While there are
unlikely to be many, this is inelegant.
Change the right-recursive form to use a left-recursive Newlines rule
that absorbs one or more NEWLINEs using at most 2 stack frames.
Signed-off-by: NeilBrown <neil@brown.name>
Program -> Statementlist ${ print_statement($1, 0); }$
$*statement
+ Newlines -> NEWLINE
+ | Newlines NEWLINE
Statementlist -> Statements ${ $0 = $<1; }$
- | NEWLINE Statementlist ${ $0 = $<2; }$
+ | Newlines Statements ${ $0 = $<2; }$
Statements -> Statements Statement ${
{
| ERROR ${ printf("statement ERROR\n"); $0 = NULL; }$
Open -> {
- | NEWLINE Open
+ | Newlines {
Close -> }
- | NEWLINE Close
+ | Newlines }
Block -> Open Statementlist Close ${ $0 = $<2; }$
| Open SimpleStatements } ${ $0 = $<2; }$
| : SimpleStatements ${ $0 = $<2; }$