+script: statements {
+ parser->script->statements = $1;
+ }
+
+statements: statement {
+ $$ = create_statements(parser);
+ statement_append($$, $1);
+ }
+ | statements statement {
+ statement_append($1, $2);
+ $$ = $1;
+ }
+
+statement: TOKEN_EOL {
+ $$ = NULL;
+ }
+ | words TOKEN_EOL {
+ $$ = create_statement_simple(parser, $1);
+ }
+ | '{' statements '}' {
+ $$ = create_statement_block(parser, $2);
+ }
+ | "if" TOKEN_DELIM statement
+ "then" TOKEN_EOL
+ statements
+ "fi" TOKEN_EOL {
+ $$ = create_statement_if(parser, $3, $6, NULL);
+ }
+ | "menuentry" TOKEN_DELIM words TOKEN_DELIM
+ '{' statements '}'
+ TOKEN_EOL {
+ $$ = create_statement_menuentry(parser, $3, $6);
+ }
+
+words: word {
+ $$ = create_argv(parser);
+ argv_append($$, $1);
+ }
+ | words TOKEN_DELIM word {
+ argv_append($1, $3);
+ $$ = $1;
+ }
+
+word: TOKEN_WORD
+ | word TOKEN_WORD {
+ word_append($1, $2);
+ $$ = $1;
+ }