Commit 21c5ecf6 authored by Masahiro Yamada's avatar Masahiro Yamada
Browse files

kconfig: refactor pattern matching in STRING state



Here, similar matching patters are duplicated in order to look ahead
the '\n' character. If the next character is '\n', the lexer returns
T_WORD_QUOTE because it must be prepared to return T_EOL at the next
match.

Use unput('\n') trick to reduce the code duplication.

Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
parent be3c8075
Loading
Loading
Loading
Loading
+3 −11
Original line number Diff line number Diff line
@@ -182,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);
	}
@@ -210,8 +200,10 @@ 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);