X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fgrub2%2Fparser.y;h=02ca7b2799f53f57bc9ef55f6dcfacbdae880a67;hp=3a5a142f57b106153c8915f011aa349b345d62e2;hb=9cf9430d5a1db0addd4788798fd7275d2c514f3c;hpb=d1052291224febe931fc95ed53d5008f66a72b96 diff --git a/discover/grub2/parser.y b/discover/grub2/parser.y index 3a5a142..02ca7b2 100644 --- a/discover/grub2/parser.y +++ b/discover/grub2/parser.y @@ -60,6 +60,7 @@ static void yyerror(struct grub2_parser *, char const *s); %token TOKEN_EOL %token TOKEN_DELIM %token TOKEN_WORD +%token TOKEN_EOF 0 %start script %debug @@ -70,10 +71,12 @@ script: statements { parser->script->statements = $1; } +eol: TOKEN_EOL | TOKEN_EOF; + statements: /* empty */ { $$ = create_statements(parser); } - | statements statement TOKEN_EOL { + | statements statement eol { statement_append($1, $2); $$ = $1; } @@ -81,7 +84,9 @@ statements: /* empty */ { $$ = $1; } -conditional: statement TOKEN_EOL "then" TOKEN_EOL statements { +sep: TOKEN_DELIM | TOKEN_EOL; + +conditional: statement TOKEN_EOL "then" sep statements { $$ = create_statement_conditional(parser, $1, $5); } @@ -109,7 +114,7 @@ statement: } | "if" TOKEN_DELIM conditional elifs - "else" TOKEN_EOL + "else" sep statements "fi" { $$ = create_statement_if(parser, $3, $4, $7); @@ -224,7 +229,7 @@ struct grub2_statement *create_statement_block(struct grub2_parser *parser, struct grub2_statement_block *stmt = talloc(parser, struct grub2_statement_block); stmt->st.type = STMT_TYPE_BLOCK; - stmt->st.exec = NULL; + stmt->st.exec = statement_block_execute; stmt->statements = stmts; return &stmt->st; }