3 %lex-param { yyscan_t scanner }
4 %parse-param { struct grub2_parser *parser }
11 #define YYLEX_PARAM parser->scanner
13 static void yyerror(struct grub2_parser *, char const *s);
17 struct grub2_word *word;
18 struct grub2_argv *argv;
19 struct grub2_statement *statement;
20 struct grub2_statements *statements;
24 %token TOKEN_LDSQBRACKET "[["
25 %token TOKEN_RDSQBRACKET "]]"
26 %token TOKEN_CASE "case"
28 %token TOKEN_DONE "done"
29 %token TOKEN_ELIF "elif"
30 %token TOKEN_ESAC "esac"
32 %token TOKEN_FOR "for"
33 %token TOKEN_FUNCTION "function"
36 %token TOKEN_MENUENTRY "menuentry"
37 %token TOKEN_SELECT "select"
38 %token TOKEN_THEN "then"
39 %token TOKEN_TIME "time"
40 %token TOKEN_UTIL "until"
41 %token TOKEN_WHILE "while"
43 %type <statement> statement
44 %type <statements> statements
51 %token <word> TOKEN_WORD
59 parser->statements = $1;
62 statements: statement {
63 $$ = create_statements(parser);
64 statement_append($$, $1);
66 | statements statement {
67 statement_append($1, $2);
70 statement: TOKEN_EOL {
74 $$ = create_statement_simple(parser, $1);
76 | '{' statements '}' {
77 $$ = create_statement_block(parser, $2);
79 | "if" TOKEN_DELIM statement
83 $$ = create_statement_if(parser, $3, $6, NULL);
85 | "menuentry" TOKEN_DELIM words TOKEN_DELIM
88 $$ = create_statement_menuentry(parser, $3, $6);
92 $$ = create_argv(parser);
95 | words TOKEN_DELIM word {
107 void yyerror(struct grub2_parser *parser, char const *s)
109 fprintf(stderr, "%d: error: %s '%s'\n",
110 yyget_lineno(parser->scanner),
111 s, yyget_text(parser->scanner));