kconfig: refactor pattern matching in STRING state
[carl9170fw.git] / config / zconf.l
index 62a0973bee034f4c4fd23bd16f2f1c131665fe3c..323fb5524fe54f4c48839d7e238262b31a0a22b9 100644 (file)
@@ -73,7 +73,7 @@ static void warn_ignored_character(char chr)
 {
        fprintf(stderr,
                "%s:%d:warning: ignoring unsupported character '%c'\n",
-               zconf_curname(), zconf_lineno(), chr);
+               current_file->name, yylineno, chr);
 }
 %}
 
@@ -88,12 +88,6 @@ n    [A-Za-z0-9_-]
        return T_EOL;
 }
 [ \t]*#.*
-
-
-[ \t]+ {
-       BEGIN(COMMAND);
-}
-
 .      {
        unput(yytext[0]);
        BEGIN(COMMAND);
@@ -114,6 +108,13 @@ n  [A-Za-z0-9_-]
                yylval.string = text;
                return T_VARIABLE;
        }
+       ({n}|$)+        {
+               /* this token includes at least one '$' */
+               yylval.string = expand_token(yytext, yyleng);
+               if (strlen(yylval.string))
+                       return T_VARIABLE;
+               free(yylval.string);
+       }
        "="     { BEGIN(ASSIGN_VAL); yylval.flavor = VAR_RECURSIVE; return T_ASSIGN; }
        ":="    { BEGIN(ASSIGN_VAL); yylval.flavor = VAR_SIMPLE; return T_ASSIGN; }
        "+="    { BEGIN(ASSIGN_VAL); yylval.flavor = VAR_APPEND; return T_ASSIGN; }
@@ -181,19 +182,9 @@ n  [A-Za-z0-9_-]
 
 <STRING>{
        "$".*   append_expanded_string(yytext);
-       [^$'"\\\n]+/\n  {
-               append_string(yytext, yyleng);
-               yylval.string = text;
-               return T_WORD_QUOTE;
-       }
        [^$'"\\\n]+     {
                append_string(yytext, yyleng);
        }
-       \\.?/\n {
-               append_string(yytext + 1, yyleng - 1);
-               yylval.string = text;
-               return T_WORD_QUOTE;
-       }
        \\.?    {
                append_string(yytext + 1, yyleng - 1);
        }
@@ -209,11 +200,15 @@ n [A-Za-z0-9_-]
                fprintf(stderr,
                        "%s:%d:warning: multi-line strings not supported\n",
                        zconf_curname(), zconf_lineno());
+               unput('\n');
                BEGIN(INITIAL);
-               return T_EOL;
+               yylval.string = text;
+               return T_WORD_QUOTE;
        }
        <<EOF>> {
                BEGIN(INITIAL);
+               yylval.string = text;
+               return T_WORD_QUOTE;
        }
 }