discover/grub2: Allow empty statements
authorJeremy Kerr <jk@ozlabs.org>
Tue, 17 Sep 2013 03:29:27 +0000 (11:29 +0800)
committerJeremy Kerr <jk@ozlabs.org>
Tue, 24 Sep 2013 05:14:59 +0000 (13:14 +0800)
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>
discover/grub2/parser.y

index 859eba30479b93eeac8fa4a8c00d21d7916931d4..0540ff3c088b768f106d945d8f1e86ee7660d0e3 100644 (file)
@@ -60,23 +60,23 @@ static void yyerror(struct grub2_parser *, char const *s);
 
 %%
 
 
 %%
 
-script: statements {
+script:        statements {
                parser->script->statements = $1;
        }
 
                parser->script->statements = $1;
        }
 
-statements: statement {
+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;
        }
        }
-       | words TOKEN_EOL {
+
+statement:
+       words {
                   $$ = create_statement_simple(parser, $1);
        }
        | '{' statements '}' {
                   $$ = create_statement_simple(parser, $1);
        }
        | '{' statements '}' {
@@ -85,7 +85,7 @@ statement: TOKEN_EOL {
        | "if" TOKEN_DELIM statement
                "then" TOKEN_EOL
                statements
        | "if" TOKEN_DELIM statement
                "then" TOKEN_EOL
                statements
-               "fi" TOKEN_EOL {
+               "fi" {
                $$ = create_statement_if(parser, $3, $6, NULL);
        }
        | "if" TOKEN_DELIM statement
                $$ = create_statement_if(parser, $3, $6, NULL);
        }
        | "if" TOKEN_DELIM statement
@@ -93,20 +93,18 @@ statement: TOKEN_EOL {
                statements
                "else" TOKEN_EOL
                statements
                statements
                "else" TOKEN_EOL
                statements
-               "fi" TOKEN_EOL {
+               "fi" {
                $$ = 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 {
+               '{' statements '}' {
                $$ = 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 {
+               '{' statements '}' {
                /* we just flatten everything */
                $$ = create_statement_block(parser, $6);
        }
                /* we just flatten everything */
                $$ = create_statement_block(parser, $6);
        }