Re-arrange the script/statements parse rules to allow empty statements.
We also move the EOL token out of the 'statement' definition, and use
it to separate 'statements'.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
parser->script->statements = $1;
}
parser->script->statements = $1;
}
+statements: /* empty */ {
$$ = create_statements(parser);
$$ = create_statements(parser);
- statement_append($$, $1);
- | statements statement {
+ | statements statement TOKEN_EOL {
statement_append($1, $2);
$$ = $1;
}
statement_append($1, $2);
$$ = $1;
}
-
-statement: TOKEN_EOL {
- $$ = NULL;
+ | statements TOKEN_EOL {
+ $$ = $1;
$$ = create_statement_simple(parser, $1);
}
| '{' statements '}' {
$$ = create_statement_simple(parser, $1);
}
| '{' statements '}' {
| "if" TOKEN_DELIM statement
"then" TOKEN_EOL
statements
| "if" TOKEN_DELIM statement
"then" TOKEN_EOL
statements
$$ = create_statement_if(parser, $3, $6, NULL);
}
| "if" TOKEN_DELIM statement
$$ = create_statement_if(parser, $3, $6, NULL);
}
| "if" TOKEN_DELIM statement
statements
"else" TOKEN_EOL
statements
statements
"else" TOKEN_EOL
statements
$$ = create_statement_if(parser, $3, $6, $9);
}
| "function" TOKEN_DELIM word TOKEN_DELIM '{' statements '}' {
$$ = create_statement_function(parser, $3, $6);
}
| "menuentry" TOKEN_DELIM words TOKEN_DELIM
$$ = create_statement_if(parser, $3, $6, $9);
}
| "function" TOKEN_DELIM word TOKEN_DELIM '{' statements '}' {
$$ = create_statement_function(parser, $3, $6);
}
| "menuentry" TOKEN_DELIM words TOKEN_DELIM
- '{' statements '}'
- TOKEN_EOL {
$$ = create_statement_menuentry(parser, $3, $6);
}
| "submenu" TOKEN_DELIM words TOKEN_DELIM
$$ = create_statement_menuentry(parser, $3, $6);
}
| "submenu" TOKEN_DELIM words TOKEN_DELIM
- '{' statements '}'
- TOKEN_EOL {
/* we just flatten everything */
$$ = create_statement_block(parser, $6);
}
/* we just flatten everything */
$$ = create_statement_block(parser, $6);
}