kconfig: switch to ASSIGN_VAL state in the second lexer
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Tue, 11 Dec 2018 11:01:08 +0000 (20:01 +0900)
committerMasahiro Yamada <yamada.masahiro@socionext.com>
Fri, 21 Dec 2018 15:25:55 +0000 (00:25 +0900)
To simplify the generated lexer, switch to the ASSIGN_VAL state in
the hand-made lexer.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
scripts/kconfig/zconf.l

index ed0d0a3b0d6246a0984a38dd50b2abd4e2167c55..05e2d95e3b220bad808b91f400fd9faf835d795b 100644 (file)
@@ -25,6 +25,7 @@ static struct {
        int lineno;
 } current_pos;
 
+static int prev_prev_token = T_EOL;
 static int prev_token = T_EOL;
 static char *text;
 static int text_size, text_asize;
@@ -117,9 +118,9 @@ n   [A-Za-z0-9_-]
                        return T_WORD;
                free(yylval.string);
        }
-       "="     { BEGIN(ASSIGN_VAL); return T_EQUAL; }
-       ":="    { BEGIN(ASSIGN_VAL); return T_COLON_EQUAL; }
-       "+="    { BEGIN(ASSIGN_VAL); return T_PLUS_EQUAL; }
+       "="     return T_EQUAL;
+       ":="    return T_COLON_EQUAL;
+       "+="    return T_PLUS_EQUAL;
        [[:blank:]]+
        .       warn_ignored_character(*yytext);
        \n      {
@@ -288,6 +289,11 @@ repeat:
        if ((prev_token == T_EOL || prev_token == T_HELPTEXT) && token == T_EOL)
                goto repeat;
 
+       if (prev_prev_token == T_EOL && prev_token == T_WORD &&
+           (token == T_EQUAL || token == T_COLON_EQUAL || token == T_PLUS_EQUAL))
+               BEGIN(ASSIGN_VAL);
+
+       prev_prev_token = prev_token;
        prev_token = token;
 
        return token;