projects
/
carl9170fw.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
kconfig: fix ambiguous grammar in terms of new lines
[carl9170fw.git]
/
config
/
zconf.l
diff --git
a/config/zconf.l
b/config/zconf.l
index fde86ba2d0372c3e91713db262adff7b9fa705f1..bbbef0c9072c7ff185a6146c83a60b3bff5e489f 100644
(file)
--- a/
config/zconf.l
+++ b/
config/zconf.l
@@
-1,12
+1,13
@@
%option nostdinit noyywrap never-interactive full ecs
%option 8bit nodefault yylineno
%option nostdinit noyywrap never-interactive full ecs
%option 8bit nodefault yylineno
-%x COMMAND HELP STRING PARAM
+%x COMMAND HELP STRING PARAM
ASSIGN_VAL
%{
/*
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
* Released under the terms of the GNU GPL v2.0.
*/
%{
/*
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
* Released under the terms of the GNU GPL v2.0.
*/
+#include <assert.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
@@
-15,6
+16,8
@@
#include "lkc.h"
#include "lkc.h"
+#define YY_DECL static int yylex1(void)
+
#define START_STRSIZE 16
static struct {
#define START_STRSIZE 16
static struct {
@@
-22,6
+25,7
@@
static struct {
int lineno;
} current_pos;
int lineno;
} current_pos;
+static int prev_token = T_EOL;
static char *text;
static int text_size, text_asize;
static char *text;
static int text_size, text_asize;
@@
-72,7
+76,7
@@
static void warn_ignored_character(char chr)
{
fprintf(stderr,
"%s:%d:warning: ignoring unsupported character '%c'\n",
{
fprintf(stderr,
"%s:%d:warning: ignoring unsupported character '%c'\n",
-
zconf_curname(), zconf_lineno()
, chr);
+
current_file->name, yylineno
, chr);
}
%}
}
%}
@@
-87,12
+91,6
@@
n [A-Za-z0-9_-]
return T_EOL;
}
[ \t]*#.*
return T_EOL;
}
[ \t]*#.*
-
-
-[ \t]+ {
- BEGIN(COMMAND);
-}
-
. {
unput(yytext[0]);
BEGIN(COMMAND);
. {
unput(yytext[0]);
BEGIN(COMMAND);
@@
-111,8
+109,19
@@
n [A-Za-z0-9_-]
}
alloc_string(yytext, yyleng);
yylval.string = text;
}
alloc_string(yytext, yyleng);
yylval.string = text;
- return T_WORD;
+ 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; }
+ [[:blank:]]+
. warn_ignored_character(*yytext);
\n {
BEGIN(INITIAL);
. warn_ignored_character(*yytext);
\n {
BEGIN(INITIAL);
@@
-120,6
+129,16
@@
n [A-Za-z0-9_-]
}
}
}
}
+<ASSIGN_VAL>{
+ [^[:blank:]\n]+.* {
+ alloc_string(yytext, yyleng);
+ yylval.string = text;
+ return T_ASSIGN_VAL;
+ }
+ \n { BEGIN(INITIAL); return T_EOL; }
+ .
+}
+
<PARAM>{
"&&" return T_AND;
"||" return T_OR;
<PARAM>{
"&&" return T_AND;
"||" return T_OR;
@@
-166,19
+185,9
@@
n [A-Za-z0-9_-]
<STRING>{
"$".* append_expanded_string(yytext);
<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, yyleng);
}
- \\.?/\n {
- append_string(yytext + 1, yyleng - 1);
- yylval.string = text;
- return T_WORD_QUOTE;
- }
\\.? {
append_string(yytext + 1, yyleng - 1);
}
\\.? {
append_string(yytext + 1, yyleng - 1);
}
@@
-194,11
+203,15
@@
n [A-Za-z0-9_-]
fprintf(stderr,
"%s:%d:warning: multi-line strings not supported\n",
zconf_curname(), zconf_lineno());
fprintf(stderr,
"%s:%d:warning: multi-line strings not supported\n",
zconf_curname(), zconf_lineno());
+ unput('\n');
BEGIN(INITIAL);
BEGIN(INITIAL);
- return T_EOL;
+ yylval.string = text;
+ return T_WORD_QUOTE;
}
<<EOF>> {
BEGIN(INITIAL);
}
<<EOF>> {
BEGIN(INITIAL);
+ yylval.string = text;
+ return T_WORD_QUOTE;
}
}
}
}
@@
-258,6
+271,24
@@
n [A-Za-z0-9_-]
}
%%
}
%%
+
+/* second stage lexer */
+int yylex(void)
+{
+ int token;
+
+repeat:
+ token = yylex1();
+
+ /* Do not pass unneeded T_EOL to the parser. */
+ if ((prev_token == T_EOL || prev_token == T_HELPTEXT) && token == T_EOL)
+ goto repeat;
+
+ prev_token = token;
+
+ return token;
+}
+
static char *expand_token(const char *in, size_t n)
{
char *out;
static char *expand_token(const char *in, size_t n)
{
char *out;