projects
/
carl9170fw.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
kconfig: switch to ASSIGN_VAL state in the second lexer
[carl9170fw.git]
/
config
/
zconf.l
diff --git
a/config/zconf.l
b/config/zconf.l
index bbbef0c9072c7ff185a6146c83a60b3bff5e489f..5341e5431f3b22024865989a0bf565adb3b95ea9 100644
(file)
--- a/
config/zconf.l
+++ b/
config/zconf.l
@@
-25,6
+25,7
@@
static struct {
int lineno;
} current_pos;
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;
static int prev_token = T_EOL;
static char *text;
static int text_size, text_asize;
@@
-104,23
+105,22
@@
n [A-Za-z0-9_-]
current_pos.lineno = yylineno;
if (id && id->flags & TF_COMMAND) {
BEGIN(PARAM);
current_pos.lineno = yylineno;
if (id && id->flags & TF_COMMAND) {
BEGIN(PARAM);
- yylval.id = id;
return id->token;
}
alloc_string(yytext, yyleng);
yylval.string = text;
return id->token;
}
alloc_string(yytext, yyleng);
yylval.string = text;
- return T_
VARIABLE
;
+ return T_
WORD
;
}
({n}|$)+ {
/* this token includes at least one '$' */
yylval.string = expand_token(yytext, yyleng);
if (strlen(yylval.string))
}
({n}|$)+ {
/* this token includes at least one '$' */
yylval.string = expand_token(yytext, yyleng);
if (strlen(yylval.string))
- return T_
VARIABLE
;
+ return T_
WORD
;
free(yylval.string);
}
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; }
+ "="
return T_EQUAL;
+ ":="
return T_COLON_EQUAL;
+ "+="
return T_PLUS_EQUAL;
[[:blank:]]+
. warn_ignored_character(*yytext);
\n {
[[:blank:]]+
. warn_ignored_character(*yytext);
\n {
@@
-140,6
+140,9
@@
n [A-Za-z0-9_-]
}
<PARAM>{
}
<PARAM>{
+ "modules" return T_MODULES;
+ "defconfig_list" return T_DEFCONFIG_LIST;
+ "allnoconfig_y" return T_ALLNOCONFIG_Y;
"&&" return T_AND;
"||" return T_OR;
"(" return T_OPEN_PAREN;
"&&" return T_AND;
"||" return T_OR;
"(" return T_OPEN_PAREN;
@@
-157,17
+160,16
@@
n [A-Za-z0-9_-]
BEGIN(STRING);
}
\n BEGIN(INITIAL); return T_EOL;
BEGIN(STRING);
}
\n BEGIN(INITIAL); return T_EOL;
-
({n}|[/.])+
{
+
{n}+
{
const struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
if (id && id->flags & TF_PARAM) {
const struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
if (id && id->flags & TF_PARAM) {
- yylval.id = id;
return id->token;
}
alloc_string(yytext, yyleng);
yylval.string = text;
return T_WORD;
}
return id->token;
}
alloc_string(yytext, yyleng);
yylval.string = text;
return T_WORD;
}
- ({n}|
[/.$])+
{
+ ({n}|
$)+
{
/* this token includes at least one '$' */
yylval.string = expand_token(yytext, yyleng);
if (strlen(yylval.string))
/* this token includes at least one '$' */
yylval.string = expand_token(yytext, yyleng);
if (strlen(yylval.string))
@@
-178,9
+180,6
@@
n [A-Za-z0-9_-]
\\\n ;
[[:blank:]]+
. warn_ignored_character(*yytext);
\\\n ;
[[:blank:]]+
. warn_ignored_character(*yytext);
- <<EOF>> {
- BEGIN(INITIAL);
- }
}
<STRING>{
}
<STRING>{
@@
-262,6
+261,12
@@
n [A-Za-z0-9_-]
}
<<EOF>> {
}
<<EOF>> {
+ BEGIN(INITIAL);
+
+ if (prev_token != T_EOL && prev_token != T_HELPTEXT)
+ fprintf(stderr, "%s:%d:warning: no new line at end of file\n",
+ current_file->name, yylineno);
+
if (current_file) {
zconf_endfile();
return T_EOL;
if (current_file) {
zconf_endfile();
return T_EOL;
@@
-284,6
+289,11
@@
repeat:
if ((prev_token == T_EOL || prev_token == T_HELPTEXT) && token == T_EOL)
goto 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;
prev_token = token;
return token;