X-Git-Url: https://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fgrub2%2Flexer.l;fp=discover%2Fgrub2%2Flexer.l;h=0000000000000000000000000000000000000000;hp=e557146c24c51fa50892de9dca7c3d89cdd30068;hb=76591d5e727b35295ea238322f73515c8cc93945;hpb=d1f814a1e310b5c1e6b32d5bdbf7b7450c221325 diff --git a/discover/grub2/lexer.l b/discover/grub2/lexer.l deleted file mode 100644 index e557146..0000000 --- a/discover/grub2/lexer.l +++ /dev/null @@ -1,145 +0,0 @@ - -%{ -#include "grub2.h" -#include "parser.h" -#include - -void yyerror(struct grub2_parser *parser, const char *fmt, ...); -%} - -%option nounput noinput -%option batch never-interactive -%option warn -%option noyywrap -%option stack noyy_top_state -%option reentrant -%option bison-bridge -%option yylineno -%option noyyalloc noyyfree noyyrealloc -%option extra-type="struct grub2_parser *" - -%x sqstring -%x dqstring - -WORD [^{}|&$;<> \t\n'"#]+ -VARNAME ([[:alpha:]][_[:alnum:]]*|[0-9]|[\?@\*#]) - -%% - - /* discard leading & trailing whitespace, but keep inter-word delimeters */ -^[ \t]+ ; -[ \t]+$ ; -[ \t]+ return TOKEN_DELIM; - - /* reserved words */ -"[[" return TOKEN_LDSQBRACKET; -"]]" return TOKEN_RDSQBRACKET; -"case" return TOKEN_CASE; -"do" return TOKEN_DO; -"done" return TOKEN_DONE; -"elif" return TOKEN_ELIF; -"else" return TOKEN_ELSE; -"esac" return TOKEN_ESAC; -"fi" return TOKEN_FI; -"for" return TOKEN_FOR; -"function" return TOKEN_FUNCTION; -"if" return TOKEN_IF; -"in" return TOKEN_IN; -"menuentry" return TOKEN_MENUENTRY; -"select" return TOKEN_SELECT; -"submenu" return TOKEN_SUBMENU; -"then" return TOKEN_THEN; -"time" return TOKEN_TIME; -"until" return TOKEN_UTIL; -"while" return TOKEN_WHILE; - - /* anything that's not a metachar: return as a plain word */ -{WORD} { - yylval->word = create_word_text(yyget_extra(yyscanner), yytext); - return TOKEN_WORD; - } - -\${VARNAME} | -\$\{{VARNAME}\} { - if (yytext[1] == '{') { - yytext[yyleng-1] = '\0'; - yytext++; - } - yytext++; - yylval->word = create_word_var(yyget_extra(yyscanner), yytext, - true); - return TOKEN_WORD; - } - - /* single-quoted strings: return a single, non-expanded word token */ -\' { - yy_push_state(sqstring, yyscanner); - } -\' { - yy_pop_state(yyscanner); - } -[^']+ { - yylval->word = create_word_text(yyget_extra(yyscanner), yytext); - return TOKEN_WORD; - } - - /* double-quoted strings: return a single, expanded word token */ -\" { - yy_push_state(dqstring, yyscanner); - } -\" { - yy_pop_state(yyscanner); - } -([^"\$]|\\\")+ { - yylval->word = create_word_text(yyget_extra(yyscanner), yytext); - return TOKEN_WORD; - } -\${VARNAME} | -\$\{{VARNAME}\} { - if (yytext[1] == '{') { - yytext[yyleng-1] = '\0'; - yytext++; - } - yytext++; - yylval->word = create_word_var(yyget_extra(yyscanner), yytext, - false); - return TOKEN_WORD; - } - - - - /* blocks */ -"{" return '{'; -"}" return '}'; - - /* end-of-line */ -[ \t]*(;|\n)[ \t]* return TOKEN_EOL; - - /* strip comments */ -#.* ; - -. { - yyerror(yyget_extra(yyscanner), "unknown token '%s'\n", yytext); - yyterminate(); - } - -%% - -struct grub2_parser; - -void *yyalloc(size_t bytes, void *yyscanner) -{ - struct grub2_parser *parser = yyget_extra(yyscanner); - return talloc_size(parser, bytes); -} - -void *yyrealloc(void *ptr, size_t bytes, void *yyscanner) -{ - struct grub2_parser *parser = yyget_extra(yyscanner); - return talloc_realloc_size(parser, ptr, bytes); -} - -void yyfree(void *ptr, void *yyscanner __attribute__((unused))) -{ - talloc_free(ptr); -}