73 |
%x STR LIT ML |
%x STR LIT ML |
74 |
|
|
75 |
WS [ \t][ \t]* |
WS [ \t][ \t]* |
76 |
IDENT [a-zA-Z_][a-zA-Z_0-9-]+ |
IDENT [a-zA-Z_][a-zA-Z0-9_-]* |
77 |
LDASHES ---[ \t]* |
LDASHES ---[ \t]* |
78 |
RDASHES [ \t]*--- |
RDASHES [ \t]*--- |
79 |
%% |
%% |
80 |
/* End-of-line comments */ |
/* End-of-line comments */ |
81 |
#.*\n { cfg_line_num++; } |
#.*\n { cfg_line_num++; return EOL; } |
82 |
#.* /* end-of-file comment */; |
#.* /* end-of-file comment */; |
83 |
/* Keywords */ |
/* Keywords */ |
84 |
BEGIN return T_BEGIN; |
BEGIN return T_BEGIN; |
116 |
[rR][eE][mM][oO][vV][eE] return REMOVE; |
[rR][eE][mM][oO][vV][eE] return REMOVE; |
117 |
[mM][oO][dD][iI][fF][yY] return MODIFY; |
[mM][oO][dD][iI][fF][yY] return MODIFY; |
118 |
|
|
|
/* Literal */ |
|
|
<LIT>[^\n]*/\n { BEGIN(INITIAL); |
|
|
yylval.string = trimcpy(); |
|
|
DBG("<LIT>STRING", yylval.string); |
|
|
return STRING; } |
|
119 |
/* Identifiers */ |
/* Identifiers */ |
120 |
{IDENT} { yylval.string = strdup(yytext); |
{IDENT} { yylval.string = strdup(yytext); |
121 |
DBG("IDENT", yytext); |
DBG("IDENT", yytext); |
122 |
return IDENT; } |
return IDENT; } |
123 |
/* Quoted strings */ |
/* Quoted strings */ |
124 |
\"[^\\"\n]*\" { return simple_string(); } |
<INITIAL,LIT>\"[^\\"\n]*\" { return simple_string(); } |
125 |
\"[^\\"\n]*\\[0-9] {BEGIN(STR); |
<INITIAL,LIT>\"[^\\"\n]*\\[0-9] {BEGIN(STR); |
126 |
string_begin(); |
string_begin(); |
127 |
string_add(yytext+1, yyleng-1); |
string_add(yytext+1, yyleng-1); |
128 |
} |
} |
129 |
\"[^\\"\n]*\\. { BEGIN(STR); |
<INITIAL,LIT>\"[^\\"\n]*\\. { BEGIN(STR); |
130 |
string_begin(); |
string_begin(); |
131 |
string_add(yytext+1, yyleng-3); |
string_add(yytext+1, yyleng-3); |
132 |
string_add_char(escape(yytext[yyleng-1])); } |
string_add_char(escape(yytext[yyleng-1])); } |
138 |
string_finish(); |
string_finish(); |
139 |
return STRING; } |
return STRING; } |
140 |
/* "Here document" (multiline strings) */ |
/* "Here document" (multiline strings) */ |
141 |
"<<"-?{IDENT}[ \t]*\n | |
<INITIAL,LIT>"<<"-?{IDENT}[ \t]*\n | |
142 |
"<<"-?{IDENT}[ \t]*#.*\n { BEGIN(ML); |
<INITIAL,LIT>"<<"-?{IDENT}[ \t]*#.*\n { BEGIN(ML); |
143 |
multiline_begin(); |
multiline_begin(); |
144 |
cfg_line_num++; } |
cfg_line_num++; } |
145 |
<ML>.*\n { char *p = multiline_strip_tabs(yytext); |
<ML>.*\n { char *p = multiline_strip_tabs(yytext); |
146 |
cfg_line_num++; |
cfg_line_num++; |
147 |
|
|
151 |
BEGIN(INITIAL); |
BEGIN(INITIAL); |
152 |
multiline_finish(); |
multiline_finish(); |
153 |
unput('\n'); |
unput('\n'); |
154 |
|
DBG("<ML>STRING", yylval.string); |
155 |
return STRING; |
return STRING; |
156 |
} |
} |
157 |
multiline_add(p); |
multiline_add(p); |
158 |
} |
} |
159 |
|
/* Literal */ |
160 |
|
<LIT>\\\n { cfg_line_num++; } |
161 |
|
<LIT>[^ \t\n]+\\\n { yylval.string = malloc(yyleng-1); |
162 |
|
memcpy(yylval.string, yytext, yyleng-2); |
163 |
|
yylval.string[yyleng-2] = 0; |
164 |
|
DBG("<LIT>STRING", yylval.string); |
165 |
|
cfg_line_num++; |
166 |
|
return STRING; } |
167 |
|
<LIT>[^ \t\n]+ { yylval.string = trimcpy(); |
168 |
|
DBG("<LIT>STRING", yylval.string); |
169 |
|
return STRING; } |
170 |
|
<LIT>{WS} ; |
171 |
|
<LIT>\n { BEGIN(INITIAL); cfg_line_num++; return EOL; } |
172 |
/* Other tokens */ |
/* Other tokens */ |
173 |
{WS} ; |
{WS} ; |
174 |
\n { cfg_line_num++; return EOL; } |
\n { cfg_line_num++; return EOL; } |
198 |
yylval.string = xmalloc(yyleng - 1); |
yylval.string = xmalloc(yyleng - 1); |
199 |
memcpy(yylval.string, yytext + 1, yyleng - 2); |
memcpy(yylval.string, yytext + 1, yyleng - 2); |
200 |
yylval.string[yyleng - 2] = 0; |
yylval.string[yyleng - 2] = 0; |
201 |
|
DBG("STRING",yylval.string); |
202 |
return STRING; |
return STRING; |
203 |
} |
} |
204 |
|
|