/* * JzBoot: an USB bootloader for JZ series of Ingenic(R) microprocessors. * Copyright (C) 2010 Sergey Gridassov * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ %{ #include "shell_internal.h" #include #include static char *str_append(char *str, const char *src) { if(str) { size_t newlen = strlen(str) + strlen(src) + 1; char *newstr = malloc(newlen); strcpy(newstr, str); strcat(newstr, src); free(str); return newstr; } else return strdup(src); } %} %option noyywrap nounput noinput batch reentrant %x STR %% ["] { yyextra->strval = NULL; BEGIN(STR); } ; return TOK_SEPARATOR; [[:space:]]+ return TOK_SPACE; [#] return TOK_COMMENT; [^[:space:];"#]+ { yyextra->strval = strdup(yytext); return TOK_STRING; } [^\\"]+ yyextra->strval = str_append(yyextra->strval, yytext); \\["] yyextra->strval = str_append(yyextra->strval, "\""); \\ yyextra->strval = str_append(yyextra->strval, "\\"); ["] { BEGIN(INITIAL); return TOK_STRING; }