1
2 /* Common stuff */
3
4 /*!re2c
5 re2c:define:YYCTYPE = "unsigned char";
6 re2c:define:YYCURSOR = p;
7 re2c:yyfill:enable = 0; // generated code doesn't ask for more input
8 */
9
10 static inline void MatchOshToken(int lex_mode, const unsigned char* line, int line_len,
11 int start_pos, int* id, int* end_pos) {
12 assert(start_pos <= line_len); /* caller should have checked */
13
14 const unsigned char* p = line + start_pos; /* modified by re2c */
15 //printf("p: %p q: %p\n", p, q);
16
17 __attribute__((unused)) const unsigned char* YYMARKER; /* why do we need this? */
18 switch (lex_mode) {
19
20 case lex_mode__Comment:
21 for (;;) {
22 /*!re2c
23 [^\n\x00]* { *id = id__Ignored_Comment; break; }
24 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
25 */
26 }
27 break;
28
29 case lex_mode__ShCommand:
30 for (;;) {
31 /*!re2c
32 [a-zA-Z_][a-zA-Z0-9_]* "+" ? "=" { *id = id__Lit_VarLike; break; }
33 [a-zA-Z_][a-zA-Z0-9_]* "[" { *id = id__Lit_ArrayLhsOpen; break; }
34 "]" "+" ? "=" { *id = id__Lit_ArrayLhsClose; break; }
35 "((" { *id = id__Op_DLeftParen; break; }
36 "[" { *id = id__Lit_LBracket; break; }
37 "]" { *id = id__Lit_RBracket; break; }
38 "*" { *id = id__Lit_Star; break; }
39 "?" { *id = id__Lit_QMark; break; }
40 "###" { *id = id__Lit_TPound; break; }
41 "..." { *id = id__Lit_TDot; break; }
42 "{" { *id = id__Lit_LBrace; break; }
43 "}" { *id = id__Lit_RBrace; break; }
44 "," { *id = id__Lit_Comma; break; }
45 "=" { *id = id__Lit_Equals; break; }
46 "_" { *id = id__Lit_Underscore; break; }
47 "@" { *id = id__Lit_At; break; }
48 "@" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__Lit_Splice; break; }
49 "@[" { *id = id__Lit_AtLBracket; break; }
50 "@{." { *id = id__Lit_AtLBraceDot; break; }
51 [0-9]? [0-9]? "<" { *id = id__Redir_Less; break; }
52 [0-9]? [0-9]? ">" { *id = id__Redir_Great; break; }
53 [0-9]? [0-9]? "<" "<" { *id = id__Redir_DLess; break; }
54 [0-9]? [0-9]? "<" "<" "<" { *id = id__Redir_TLess; break; }
55 [0-9]? [0-9]? ">" ">" { *id = id__Redir_DGreat; break; }
56 [0-9]? [0-9]? "<" "<" "-" { *id = id__Redir_DLessDash; break; }
57 [0-9]? [0-9]? ">" "&" { *id = id__Redir_GreatAnd; break; }
58 [0-9]? [0-9]? "<" "&" { *id = id__Redir_LessAnd; break; }
59 [0-9]? [0-9]? "<" ">" { *id = id__Redir_LessGreat; break; }
60 [0-9]? [0-9]? ">" "|" { *id = id__Redir_Clobber; break; }
61 "{" [a-zA-Z_][a-zA-Z0-9_]* "}" "<" { *id = id__Redir_Less; break; }
62 "{" [a-zA-Z_][a-zA-Z0-9_]* "}" ">" { *id = id__Redir_Great; break; }
63 "{" [a-zA-Z_][a-zA-Z0-9_]* "}" "<" "<" { *id = id__Redir_DLess; break; }
64 "{" [a-zA-Z_][a-zA-Z0-9_]* "}" "<" "<" "<" { *id = id__Redir_TLess; break; }
65 "{" [a-zA-Z_][a-zA-Z0-9_]* "}" ">" ">" { *id = id__Redir_DGreat; break; }
66 "{" [a-zA-Z_][a-zA-Z0-9_]* "}" "<" "<" "-" { *id = id__Redir_DLessDash; break; }
67 "{" [a-zA-Z_][a-zA-Z0-9_]* "}" ">" "&" { *id = id__Redir_GreatAnd; break; }
68 "{" [a-zA-Z_][a-zA-Z0-9_]* "}" "<" "&" { *id = id__Redir_LessAnd; break; }
69 "{" [a-zA-Z_][a-zA-Z0-9_]* "}" "<" ">" { *id = id__Redir_LessGreat; break; }
70 "{" [a-zA-Z_][a-zA-Z0-9_]* "}" ">" "|" { *id = id__Redir_Clobber; break; }
71 "&>" { *id = id__Redir_AndGreat; break; }
72 "&>>" { *id = id__Redir_AndDGreat; break; }
73 "[[" { *id = id__KW_DLeftBracket; break; }
74 "!" { *id = id__KW_Bang; break; }
75 "for" { *id = id__KW_For; break; }
76 "while" { *id = id__KW_While; break; }
77 "until" { *id = id__KW_Until; break; }
78 "do" { *id = id__KW_Do; break; }
79 "done" { *id = id__KW_Done; break; }
80 "in" { *id = id__KW_In; break; }
81 "case" { *id = id__KW_Case; break; }
82 "esac" { *id = id__KW_Esac; break; }
83 "if" { *id = id__KW_If; break; }
84 "fi" { *id = id__KW_Fi; break; }
85 "then" { *id = id__KW_Then; break; }
86 "else" { *id = id__KW_Else; break; }
87 "elif" { *id = id__KW_Elif; break; }
88 "function" { *id = id__KW_Function; break; }
89 "time" { *id = id__KW_Time; break; }
90 "const" { *id = id__KW_Const; break; }
91 "var" { *id = id__KW_Var; break; }
92 "setvar" { *id = id__KW_SetVar; break; }
93 "setref" { *id = id__KW_SetRef; break; }
94 "setglobal" { *id = id__KW_SetGlobal; break; }
95 "proc" { *id = id__KW_Proc; break; }
96 "func" { *id = id__KW_Func; break; }
97 "data" { *id = id__KW_Data; break; }
98 "enum" { *id = id__KW_Enum; break; }
99 "class" { *id = id__KW_Class; break; }
100 "import" { *id = id__KW_Import; break; }
101 "break" { *id = id__ControlFlow_Break; break; }
102 "continue" { *id = id__ControlFlow_Continue; break; }
103 "return" { *id = id__ControlFlow_Return; break; }
104 "exit" { *id = id__ControlFlow_Exit; break; }
105 "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; }
106 "\\\n" { *id = id__Ignored_LineCont; break; }
107 "`" { *id = id__Left_Backtick; break; }
108 "$(" { *id = id__Left_DollarParen; break; }
109 "${" { *id = id__Left_DollarBrace; break; }
110 "$((" { *id = id__Left_DollarDParen; break; }
111 "$[" { *id = id__Left_DollarBracket; break; }
112 "\"" { *id = id__Left_DoubleQuote; break; }
113 "'" { *id = id__Left_SingleQuote; break; }
114 "$\"" { *id = id__Left_DollarDoubleQuote; break; }
115 "$'" { *id = id__Left_DollarSingleQuote; break; }
116 "<(" { *id = id__Left_ProcSubIn; break; }
117 ">(" { *id = id__Left_ProcSubOut; break; }
118 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
119 "$" [0-9] { *id = id__VSub_Number; break; }
120 "$!" { *id = id__VSub_Bang; break; }
121 "$@" { *id = id__VSub_At; break; }
122 "$#" { *id = id__VSub_Pound; break; }
123 "$$" { *id = id__VSub_Dollar; break; }
124 "$*" { *id = id__VSub_Star; break; }
125 "$-" { *id = id__VSub_Hyphen; break; }
126 "$?" { *id = id__VSub_QMark; break; }
127 [\x80-\xffa-zA-Z0-9_/.\-]+ { *id = id__Lit_Chars; break; }
128 "~" [a-zA-Z0-9_.\-]* { *id = id__Lit_TildeLike; break; }
129 ":" { *id = id__Lit_Colon; break; }
130 "$" { *id = id__Lit_Dollar; break; }
131 "#" { *id = id__Lit_Pound; break; }
132 [ \t]+ { *id = id__WS_Space; break; }
133 "\n" { *id = id__Op_Newline; break; }
134 "&" { *id = id__Op_Amp; break; }
135 "|" { *id = id__Op_Pipe; break; }
136 "|&" { *id = id__Op_PipeAmp; break; }
137 "&&" { *id = id__Op_DAmp; break; }
138 "||" { *id = id__Op_DPipe; break; }
139 ";" { *id = id__Op_Semi; break; }
140 ";;" { *id = id__Op_DSemi; break; }
141 "(" { *id = id__Op_LParen; break; }
142 ")" { *id = id__Op_RParen; break; }
143 [^\x00] { *id = id__Lit_Other; break; }
144 ",(" { *id = id__ExtGlob_Comma; break; }
145 "@(" { *id = id__ExtGlob_At; break; }
146 "*(" { *id = id__ExtGlob_Star; break; }
147 "+(" { *id = id__ExtGlob_Plus; break; }
148 "?(" { *id = id__ExtGlob_QMark; break; }
149 "!(" { *id = id__ExtGlob_Bang; break; }
150 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
151 */
152 }
153 break;
154
155 case lex_mode__Backtick:
156 for (;;) {
157 /*!re2c
158 "`" { *id = id__Backtick_Right; break; }
159 "\\" [$`\\] { *id = id__Backtick_Quoted; break; }
160 "\\" "\"" { *id = id__Backtick_DoubleQuote; break; }
161 [^`\\\x00]+ { *id = id__Backtick_Other; break; }
162 [^\x00] { *id = id__Backtick_Other; break; }
163 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
164 */
165 }
166 break;
167
168 case lex_mode__DBracket:
169 for (;;) {
170 /*!re2c
171 "]]" { *id = id__Lit_DRightBracket; break; }
172 "!" { *id = id__KW_Bang; break; }
173 "<" { *id = id__Op_Less; break; }
174 ">" { *id = id__Op_Great; break; }
175 "-z" { *id = id__BoolUnary_z; break; }
176 "-n" { *id = id__BoolUnary_n; break; }
177 "-o" { *id = id__BoolUnary_o; break; }
178 "-t" { *id = id__BoolUnary_t; break; }
179 "-v" { *id = id__BoolUnary_v; break; }
180 "-R" { *id = id__BoolUnary_R; break; }
181 "-a" { *id = id__BoolUnary_a; break; }
182 "-b" { *id = id__BoolUnary_b; break; }
183 "-c" { *id = id__BoolUnary_c; break; }
184 "-d" { *id = id__BoolUnary_d; break; }
185 "-e" { *id = id__BoolUnary_e; break; }
186 "-f" { *id = id__BoolUnary_f; break; }
187 "-g" { *id = id__BoolUnary_g; break; }
188 "-h" { *id = id__BoolUnary_h; break; }
189 "-k" { *id = id__BoolUnary_k; break; }
190 "-L" { *id = id__BoolUnary_L; break; }
191 "-p" { *id = id__BoolUnary_p; break; }
192 "-r" { *id = id__BoolUnary_r; break; }
193 "-s" { *id = id__BoolUnary_s; break; }
194 "-S" { *id = id__BoolUnary_S; break; }
195 "-u" { *id = id__BoolUnary_u; break; }
196 "-w" { *id = id__BoolUnary_w; break; }
197 "-x" { *id = id__BoolUnary_x; break; }
198 "-O" { *id = id__BoolUnary_O; break; }
199 "-G" { *id = id__BoolUnary_G; break; }
200 "-N" { *id = id__BoolUnary_N; break; }
201 "=" { *id = id__BoolBinary_GlobEqual; break; }
202 "==" { *id = id__BoolBinary_GlobDEqual; break; }
203 "!=" { *id = id__BoolBinary_GlobNEqual; break; }
204 "=~" { *id = id__BoolBinary_EqualTilde; break; }
205 "-ef" { *id = id__BoolBinary_ef; break; }
206 "-nt" { *id = id__BoolBinary_nt; break; }
207 "-ot" { *id = id__BoolBinary_ot; break; }
208 "-eq" { *id = id__BoolBinary_eq; break; }
209 "-ne" { *id = id__BoolBinary_ne; break; }
210 "-gt" { *id = id__BoolBinary_gt; break; }
211 "-ge" { *id = id__BoolBinary_ge; break; }
212 "-lt" { *id = id__BoolBinary_lt; break; }
213 "-le" { *id = id__BoolBinary_le; break; }
214 "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; }
215 "\\\n" { *id = id__Ignored_LineCont; break; }
216 "`" { *id = id__Left_Backtick; break; }
217 "$(" { *id = id__Left_DollarParen; break; }
218 "${" { *id = id__Left_DollarBrace; break; }
219 "$((" { *id = id__Left_DollarDParen; break; }
220 "$[" { *id = id__Left_DollarBracket; break; }
221 "\"" { *id = id__Left_DoubleQuote; break; }
222 "'" { *id = id__Left_SingleQuote; break; }
223 "$\"" { *id = id__Left_DollarDoubleQuote; break; }
224 "$'" { *id = id__Left_DollarSingleQuote; break; }
225 "<(" { *id = id__Left_ProcSubIn; break; }
226 ">(" { *id = id__Left_ProcSubOut; break; }
227 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
228 "$" [0-9] { *id = id__VSub_Number; break; }
229 "$!" { *id = id__VSub_Bang; break; }
230 "$@" { *id = id__VSub_At; break; }
231 "$#" { *id = id__VSub_Pound; break; }
232 "$$" { *id = id__VSub_Dollar; break; }
233 "$*" { *id = id__VSub_Star; break; }
234 "$-" { *id = id__VSub_Hyphen; break; }
235 "$?" { *id = id__VSub_QMark; break; }
236 [\x80-\xffa-zA-Z0-9_/.\-]+ { *id = id__Lit_Chars; break; }
237 "~" [a-zA-Z0-9_.\-]* { *id = id__Lit_TildeLike; break; }
238 ":" { *id = id__Lit_Colon; break; }
239 "$" { *id = id__Lit_Dollar; break; }
240 "#" { *id = id__Lit_Pound; break; }
241 [ \t]+ { *id = id__WS_Space; break; }
242 "\n" { *id = id__Op_Newline; break; }
243 "&" { *id = id__Op_Amp; break; }
244 "|" { *id = id__Op_Pipe; break; }
245 "|&" { *id = id__Op_PipeAmp; break; }
246 "&&" { *id = id__Op_DAmp; break; }
247 "||" { *id = id__Op_DPipe; break; }
248 ";" { *id = id__Op_Semi; break; }
249 ";;" { *id = id__Op_DSemi; break; }
250 "(" { *id = id__Op_LParen; break; }
251 ")" { *id = id__Op_RParen; break; }
252 [^\x00] { *id = id__Lit_Other; break; }
253 ",(" { *id = id__ExtGlob_Comma; break; }
254 "@(" { *id = id__ExtGlob_At; break; }
255 "*(" { *id = id__ExtGlob_Star; break; }
256 "+(" { *id = id__ExtGlob_Plus; break; }
257 "?(" { *id = id__ExtGlob_QMark; break; }
258 "!(" { *id = id__ExtGlob_Bang; break; }
259 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
260 */
261 }
262 break;
263
264 case lex_mode__SQ_Raw:
265 for (;;) {
266 /*!re2c
267 [^'\x00]+ { *id = id__Lit_Chars; break; }
268 "'" { *id = id__Right_SingleQuote; break; }
269 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
270 */
271 }
272 break;
273
274 case lex_mode__DQ:
275 for (;;) {
276 /*!re2c
277 "\\" [$`"\\] { *id = id__Lit_EscapedChar; break; }
278 "\\" { *id = id__Lit_BadBackslash; break; }
279 "\\\n" { *id = id__Ignored_LineCont; break; }
280 "`" { *id = id__Left_Backtick; break; }
281 "$(" { *id = id__Left_DollarParen; break; }
282 "${" { *id = id__Left_DollarBrace; break; }
283 "$((" { *id = id__Left_DollarDParen; break; }
284 "$[" { *id = id__Left_DollarBracket; break; }
285 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
286 "$" [0-9] { *id = id__VSub_Number; break; }
287 "$!" { *id = id__VSub_Bang; break; }
288 "$@" { *id = id__VSub_At; break; }
289 "$#" { *id = id__VSub_Pound; break; }
290 "$$" { *id = id__VSub_Dollar; break; }
291 "$*" { *id = id__VSub_Star; break; }
292 "$-" { *id = id__VSub_Hyphen; break; }
293 "$?" { *id = id__VSub_QMark; break; }
294 [^$`"\x00\\]+ { *id = id__Lit_Chars; break; }
295 "$" { *id = id__Lit_Dollar; break; }
296 "\"" { *id = id__Right_DoubleQuote; break; }
297 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
298 */
299 }
300 break;
301
302 case lex_mode__SQ_C:
303 for (;;) {
304 /*!re2c
305 "\\" "x" [0-9a-fA-F]{1,2} { *id = id__Char_Hex; break; }
306 "\\" "u" [0-9a-fA-F]{1,4} { *id = id__Char_Unicode4; break; }
307 "\\" "U" [0-9a-fA-F]{1,8} { *id = id__Char_Unicode8; break; }
308 "\\" [0abeEfrtnv\\] { *id = id__Char_OneChar; break; }
309 "\\\n" { *id = id__Char_Literals; break; }
310 "\\" { *id = id__Unknown_Backslash; break; }
311 "\\" [0-7]{1,3} { *id = id__Char_Octal3; break; }
312 "\\'" { *id = id__Char_OneChar; break; }
313 "\\\"" { *id = id__Char_OneChar; break; }
314 [^\\'\x00]+ { *id = id__Char_Literals; break; }
315 "'" { *id = id__Right_SingleQuote; break; }
316 "\\\x00" { *id = id__Unknown_Tok; break; }
317 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
318 */
319 }
320 break;
321
322 case lex_mode__Arith:
323 for (;;) {
324 /*!re2c
325 "`" { *id = id__Left_Backtick; break; }
326 "$(" { *id = id__Left_DollarParen; break; }
327 "${" { *id = id__Left_DollarBrace; break; }
328 "$((" { *id = id__Left_DollarDParen; break; }
329 "$[" { *id = id__Left_DollarBracket; break; }
330 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
331 "$" [0-9] { *id = id__VSub_Number; break; }
332 "$!" { *id = id__VSub_Bang; break; }
333 "$@" { *id = id__VSub_At; break; }
334 "$#" { *id = id__VSub_Pound; break; }
335 "$$" { *id = id__VSub_Dollar; break; }
336 "$*" { *id = id__VSub_Star; break; }
337 "$-" { *id = id__VSub_Hyphen; break; }
338 "$?" { *id = id__VSub_QMark; break; }
339 "\"" { *id = id__Left_DoubleQuote; break; }
340 "'" { *id = id__Left_SingleQuote; break; }
341 "$\"" { *id = id__Left_DollarDoubleQuote; break; }
342 "$'" { *id = id__Left_DollarSingleQuote; break; }
343 [ \t\r\n]+ { *id = id__Ignored_Space; break; }
344 [a-zA-Z_][a-zA-Z0-9_]* { *id = id__Lit_ArithVarLike; break; }
345 [0-9]+ { *id = id__Lit_Digits; break; }
346 "@" { *id = id__Lit_At; break; }
347 "#" { *id = id__Lit_Pound; break; }
348 ";" { *id = id__Arith_Semi; break; }
349 "," { *id = id__Arith_Comma; break; }
350 "+" { *id = id__Arith_Plus; break; }
351 "-" { *id = id__Arith_Minus; break; }
352 "*" { *id = id__Arith_Star; break; }
353 "/" { *id = id__Arith_Slash; break; }
354 "%" { *id = id__Arith_Percent; break; }
355 "++" { *id = id__Arith_DPlus; break; }
356 "--" { *id = id__Arith_DMinus; break; }
357 "**" { *id = id__Arith_DStar; break; }
358 "(" { *id = id__Arith_LParen; break; }
359 ")" { *id = id__Arith_RParen; break; }
360 "[" { *id = id__Arith_LBracket; break; }
361 "]" { *id = id__Arith_RBracket; break; }
362 "}" { *id = id__Arith_RBrace; break; }
363 "?" { *id = id__Arith_QMark; break; }
364 ":" { *id = id__Arith_Colon; break; }
365 "<=" { *id = id__Arith_LessEqual; break; }
366 "<" { *id = id__Arith_Less; break; }
367 ">=" { *id = id__Arith_GreatEqual; break; }
368 ">" { *id = id__Arith_Great; break; }
369 "==" { *id = id__Arith_DEqual; break; }
370 "!=" { *id = id__Arith_NEqual; break; }
371 "&&" { *id = id__Arith_DAmp; break; }
372 "||" { *id = id__Arith_DPipe; break; }
373 "!" { *id = id__Arith_Bang; break; }
374 ">>" { *id = id__Arith_DGreat; break; }
375 "<<" { *id = id__Arith_DLess; break; }
376 "&" { *id = id__Arith_Amp; break; }
377 "|" { *id = id__Arith_Pipe; break; }
378 "^" { *id = id__Arith_Caret; break; }
379 "~" { *id = id__Arith_Tilde; break; }
380 "=" { *id = id__Arith_Equal; break; }
381 "+=" { *id = id__Arith_PlusEqual; break; }
382 "-=" { *id = id__Arith_MinusEqual; break; }
383 "*=" { *id = id__Arith_StarEqual; break; }
384 "/=" { *id = id__Arith_SlashEqual; break; }
385 "%=" { *id = id__Arith_PercentEqual; break; }
386 ">>=" { *id = id__Arith_DGreatEqual; break; }
387 "<<=" { *id = id__Arith_DLessEqual; break; }
388 "&=" { *id = id__Arith_AmpEqual; break; }
389 "|=" { *id = id__Arith_PipeEqual; break; }
390 "^=" { *id = id__Arith_CaretEqual; break; }
391 "\\\n" { *id = id__Ignored_LineCont; break; }
392 [^\x00] { *id = id__Unknown_Tok; break; }
393 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
394 */
395 }
396 break;
397
398 case lex_mode__ExtGlob:
399 for (;;) {
400 /*!re2c
401 "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; }
402 "\\\n" { *id = id__Ignored_LineCont; break; }
403 "`" { *id = id__Left_Backtick; break; }
404 "$(" { *id = id__Left_DollarParen; break; }
405 "${" { *id = id__Left_DollarBrace; break; }
406 "$((" { *id = id__Left_DollarDParen; break; }
407 "$[" { *id = id__Left_DollarBracket; break; }
408 "\"" { *id = id__Left_DoubleQuote; break; }
409 "'" { *id = id__Left_SingleQuote; break; }
410 "$\"" { *id = id__Left_DollarDoubleQuote; break; }
411 "$'" { *id = id__Left_DollarSingleQuote; break; }
412 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
413 "$" [0-9] { *id = id__VSub_Number; break; }
414 "$!" { *id = id__VSub_Bang; break; }
415 "$@" { *id = id__VSub_At; break; }
416 "$#" { *id = id__VSub_Pound; break; }
417 "$$" { *id = id__VSub_Dollar; break; }
418 "$*" { *id = id__VSub_Star; break; }
419 "$-" { *id = id__VSub_Hyphen; break; }
420 "$?" { *id = id__VSub_QMark; break; }
421 ",(" { *id = id__ExtGlob_Comma; break; }
422 "@(" { *id = id__ExtGlob_At; break; }
423 "*(" { *id = id__ExtGlob_Star; break; }
424 "+(" { *id = id__ExtGlob_Plus; break; }
425 "?(" { *id = id__ExtGlob_QMark; break; }
426 "!(" { *id = id__ExtGlob_Bang; break; }
427 [^\\$`"'|)@*+!?\x00]+ { *id = id__Lit_Chars; break; }
428 "|" { *id = id__Op_Pipe; break; }
429 ")" { *id = id__Op_RParen; break; }
430 [^\x00] { *id = id__Lit_Other; break; }
431 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
432 */
433 }
434 break;
435
436 case lex_mode__VSub_1:
437 for (;;) {
438 /*!re2c
439 [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_Name; break; }
440 [0-9]+ { *id = id__VSub_Number; break; }
441 "!" { *id = id__VSub_Bang; break; }
442 "@" { *id = id__VSub_At; break; }
443 "#" { *id = id__VSub_Pound; break; }
444 "$" { *id = id__VSub_Dollar; break; }
445 "*" { *id = id__VSub_Star; break; }
446 "-" { *id = id__VSub_Hyphen; break; }
447 "?" { *id = id__VSub_QMark; break; }
448 "." { *id = id__VSub_Dot; break; }
449 "}" { *id = id__Right_DollarBrace; break; }
450 "\\\n" { *id = id__Ignored_LineCont; break; }
451 "\n" { *id = id__Unknown_Tok; break; }
452 [^\x00] { *id = id__Unknown_Tok; break; }
453 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
454 */
455 }
456 break;
457
458 case lex_mode__VSub_2:
459 for (;;) {
460 /*!re2c
461 ":-" { *id = id__VTest_ColonHyphen; break; }
462 "-" { *id = id__VTest_Hyphen; break; }
463 ":=" { *id = id__VTest_ColonEquals; break; }
464 "=" { *id = id__VTest_Equals; break; }
465 ":?" { *id = id__VTest_ColonQMark; break; }
466 "?" { *id = id__VTest_QMark; break; }
467 ":+" { *id = id__VTest_ColonPlus; break; }
468 "+" { *id = id__VTest_Plus; break; }
469 "@Q" { *id = id__VOp0_Q; break; }
470 "@E" { *id = id__VOp0_E; break; }
471 "@P" { *id = id__VOp0_P; break; }
472 "@A" { *id = id__VOp0_A; break; }
473 "@a" { *id = id__VOp0_a; break; }
474 "|" { *id = id__VOpOil_Pipe; break; }
475 " " { *id = id__VOpOil_Space; break; }
476 "%" { *id = id__VOp1_Percent; break; }
477 "%%" { *id = id__VOp1_DPercent; break; }
478 "#" { *id = id__VOp1_Pound; break; }
479 "##" { *id = id__VOp1_DPound; break; }
480 "^" { *id = id__VOp1_Caret; break; }
481 "^^" { *id = id__VOp1_DCaret; break; }
482 "," { *id = id__VOp1_Comma; break; }
483 ",," { *id = id__VOp1_DComma; break; }
484 "/" { *id = id__VOp2_Slash; break; }
485 ":" { *id = id__VOp2_Colon; break; }
486 "[" { *id = id__VOp2_LBracket; break; }
487 "]" { *id = id__VOp2_RBracket; break; }
488 "@" { *id = id__VOp3_At; break; }
489 "*" { *id = id__VOp3_Star; break; }
490 "}" { *id = id__Right_DollarBrace; break; }
491 "\\\n" { *id = id__Ignored_LineCont; break; }
492 "\n" { *id = id__Unknown_Tok; break; }
493 [^\x00] { *id = id__Unknown_Tok; break; }
494 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
495 */
496 }
497 break;
498
499 case lex_mode__VSub_ArgUnquoted:
500 for (;;) {
501 /*!re2c
502 "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; }
503 "\\\n" { *id = id__Ignored_LineCont; break; }
504 "/" { *id = id__Lit_Slash; break; }
505 "#" { *id = id__Lit_Pound; break; }
506 "%" { *id = id__Lit_Percent; break; }
507 "}" { *id = id__Right_DollarBrace; break; }
508 "$" { *id = id__Lit_Dollar; break; }
509 "`" { *id = id__Left_Backtick; break; }
510 "$(" { *id = id__Left_DollarParen; break; }
511 "${" { *id = id__Left_DollarBrace; break; }
512 "$((" { *id = id__Left_DollarDParen; break; }
513 "$[" { *id = id__Left_DollarBracket; break; }
514 "\"" { *id = id__Left_DoubleQuote; break; }
515 "'" { *id = id__Left_SingleQuote; break; }
516 "$\"" { *id = id__Left_DollarDoubleQuote; break; }
517 "$'" { *id = id__Left_DollarSingleQuote; break; }
518 "<(" { *id = id__Left_ProcSubIn; break; }
519 ">(" { *id = id__Left_ProcSubOut; break; }
520 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
521 "$" [0-9] { *id = id__VSub_Number; break; }
522 "$!" { *id = id__VSub_Bang; break; }
523 "$@" { *id = id__VSub_At; break; }
524 "$#" { *id = id__VSub_Pound; break; }
525 "$$" { *id = id__VSub_Dollar; break; }
526 "$*" { *id = id__VSub_Star; break; }
527 "$-" { *id = id__VSub_Hyphen; break; }
528 "$?" { *id = id__VSub_QMark; break; }
529 ",(" { *id = id__ExtGlob_Comma; break; }
530 "@(" { *id = id__ExtGlob_At; break; }
531 "*(" { *id = id__ExtGlob_Star; break; }
532 "+(" { *id = id__ExtGlob_Plus; break; }
533 "?(" { *id = id__ExtGlob_QMark; break; }
534 "!(" { *id = id__ExtGlob_Bang; break; }
535 "~" [a-zA-Z0-9_.\-]* { *id = id__Lit_TildeLike; break; }
536 [^$`/}"'\x00\\#%<>@!?+*]+ { *id = id__Lit_Chars; break; }
537 [^\x00] { *id = id__Lit_Other; break; }
538 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
539 */
540 }
541 break;
542
543 case lex_mode__VSub_ArgDQ:
544 for (;;) {
545 /*!re2c
546 "\\" [$`"\\] { *id = id__Lit_EscapedChar; break; }
547 "\\" { *id = id__Lit_BadBackslash; break; }
548 "/" { *id = id__Lit_Slash; break; }
549 "#" { *id = id__Lit_Pound; break; }
550 "%" { *id = id__Lit_Percent; break; }
551 "}" { *id = id__Right_DollarBrace; break; }
552 "$" { *id = id__Lit_Dollar; break; }
553 "`" { *id = id__Left_Backtick; break; }
554 "$(" { *id = id__Left_DollarParen; break; }
555 "${" { *id = id__Left_DollarBrace; break; }
556 "$((" { *id = id__Left_DollarDParen; break; }
557 "$[" { *id = id__Left_DollarBracket; break; }
558 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
559 "$" [0-9] { *id = id__VSub_Number; break; }
560 "$!" { *id = id__VSub_Bang; break; }
561 "$@" { *id = id__VSub_At; break; }
562 "$#" { *id = id__VSub_Pound; break; }
563 "$$" { *id = id__VSub_Dollar; break; }
564 "$*" { *id = id__VSub_Star; break; }
565 "$-" { *id = id__VSub_Hyphen; break; }
566 "$?" { *id = id__VSub_QMark; break; }
567 "\\}" { *id = id__Lit_EscapedChar; break; }
568 [^$`/}"\x00\\#%]+ { *id = id__Lit_Chars; break; }
569 "\"" { *id = id__Left_DoubleQuote; break; }
570 "$'" { *id = id__Left_DollarSingleQuote; break; }
571 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
572 */
573 }
574 break;
575
576 case lex_mode__BashRegex:
577 for (;;) {
578 /*!re2c
579 "`" { *id = id__Left_Backtick; break; }
580 "$(" { *id = id__Left_DollarParen; break; }
581 "${" { *id = id__Left_DollarBrace; break; }
582 "$((" { *id = id__Left_DollarDParen; break; }
583 "$[" { *id = id__Left_DollarBracket; break; }
584 "\"" { *id = id__Left_DoubleQuote; break; }
585 "'" { *id = id__Left_SingleQuote; break; }
586 "$\"" { *id = id__Left_DollarDoubleQuote; break; }
587 "$'" { *id = id__Left_DollarSingleQuote; break; }
588 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
589 "$" [0-9] { *id = id__VSub_Number; break; }
590 "$!" { *id = id__VSub_Bang; break; }
591 "$@" { *id = id__VSub_At; break; }
592 "$#" { *id = id__VSub_Pound; break; }
593 "$$" { *id = id__VSub_Dollar; break; }
594 "$*" { *id = id__VSub_Star; break; }
595 "$-" { *id = id__VSub_Hyphen; break; }
596 "$?" { *id = id__VSub_QMark; break; }
597 [a-zA-Z0-9_/\-]+ { *id = id__Lit_Chars; break; }
598 "~" [a-zA-Z0-9_.\-]* { *id = id__Lit_TildeLike; break; }
599 [ \t]+ { *id = id__WS_Space; break; }
600 "\\" [*+?.^$[\]] { *id = id__Lit_RegexMeta; break; }
601 [^\x00] { *id = id__Lit_Other; break; }
602 "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; }
603 "\\\n" { *id = id__Ignored_LineCont; break; }
604 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
605 */
606 }
607 break;
608
609 case lex_mode__FuncParens:
610 for (;;) {
611 /*!re2c
612 [ \t]* "(" [ \t]* ")" { *id = id__LookAhead_FuncParens; break; }
613 [^\x00] { *id = id__Unknown_Tok; break; }
614 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
615 */
616 }
617 break;
618
619 case lex_mode__PrintfOuter:
620 for (;;) {
621 /*!re2c
622 "\\" "x" [0-9a-fA-F]{1,2} { *id = id__Char_Hex; break; }
623 "\\" "u" [0-9a-fA-F]{1,4} { *id = id__Char_Unicode4; break; }
624 "\\" "U" [0-9a-fA-F]{1,8} { *id = id__Char_Unicode8; break; }
625 "\\" [0abeEfrtnv\\] { *id = id__Char_OneChar; break; }
626 "\\\n" { *id = id__Char_Literals; break; }
627 "\\" { *id = id__Unknown_Backslash; break; }
628 "\\" [0-7]{1,3} { *id = id__Char_Octal3; break; }
629 [^%\\\x00]+ { *id = id__Char_Literals; break; }
630 "%%" { *id = id__Format_EscapedPercent; break; }
631 "%" { *id = id__Format_Percent; break; }
632 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
633 */
634 }
635 break;
636
637 case lex_mode__PrintfPercent:
638 for (;;) {
639 /*!re2c
640 [\- +#] { *id = id__Format_Flag; break; }
641 "0" { *id = id__Format_Zero; break; }
642 [1-9][0-9]* { *id = id__Format_Num; break; }
643 "*" { *id = id__Format_Star; break; }
644 "." { *id = id__Format_Dot; break; }
645 [disqbcouxXeEfFgG] { *id = id__Format_Type; break; }
646 "(" [^()\x00]* ")" "T" { *id = id__Format_Time; break; }
647 [^\x00] { *id = id__Unknown_Tok; break; }
648 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
649 */
650 }
651 break;
652
653 case lex_mode__Expr:
654 for (;;) {
655 /*!re2c
656 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
657 "$" [0-9] { *id = id__VSub_Number; break; }
658 "$!" { *id = id__VSub_Bang; break; }
659 "$@" { *id = id__VSub_At; break; }
660 "$#" { *id = id__VSub_Pound; break; }
661 "$$" { *id = id__VSub_Dollar; break; }
662 "$*" { *id = id__VSub_Star; break; }
663 "$-" { *id = id__VSub_Hyphen; break; }
664 "$?" { *id = id__VSub_QMark; break; }
665 "$(" { *id = id__Left_DollarParen; break; }
666 "${" { *id = id__Left_DollarBrace; break; }
667 "$[" { *id = id__Left_DollarBracket; break; }
668 "\"" { *id = id__Left_DoubleQuote; break; }
669 "'" { *id = id__Left_SingleQuote; break; }
670 "r'" { *id = id__Left_RSingleQuote; break; }
671 "$'" { *id = id__Left_DollarSingleQuote; break; }
672 "\"\"\"" { *id = id__Left_TDoubleQuote; break; }
673 "'''" { *id = id__Left_TSingleQuote; break; }
674 "r'''" { *id = id__Left_RTSingleQuote; break; }
675 "$'''" { *id = id__Left_DollarTSingleQuote; break; }
676 "@(" { *id = id__Left_AtParen; break; }
677 "^(" { *id = id__Left_CaretParen; break; }
678 "^[" { *id = id__Left_CaretBracket; break; }
679 "^{" { *id = id__Left_CaretBrace; break; }
680 ":|" { *id = id__Left_ColonPipe; break; }
681 "%(" { *id = id__Left_PercentParen; break; }
682 "%[" { *id = id__Expr_Reserved; break; }
683 "%{" { *id = id__Expr_Reserved; break; }
684 "@{" { *id = id__Expr_Reserved; break; }
685 "@[" { *id = id__Expr_Reserved; break; }
686 ";" { *id = id__Op_Semi; break; }
687 "(" { *id = id__Op_LParen; break; }
688 ")" { *id = id__Op_RParen; break; }
689 "[" { *id = id__Op_LBracket; break; }
690 "]" { *id = id__Op_RBracket; break; }
691 "{" { *id = id__Op_LBrace; break; }
692 "}" { *id = id__Op_RBrace; break; }
693 "null" { *id = id__Expr_Null; break; }
694 "true" { *id = id__Expr_True; break; }
695 "false" { *id = id__Expr_False; break; }
696 "and" { *id = id__Expr_And; break; }
697 "or" { *id = id__Expr_Or; break; }
698 "not" { *id = id__Expr_Not; break; }
699 "for" { *id = id__Expr_For; break; }
700 "while" { *id = id__Expr_While; break; }
701 "is" { *id = id__Expr_Is; break; }
702 "in" { *id = id__Expr_In; break; }
703 "if" { *id = id__Expr_If; break; }
704 "else" { *id = id__Expr_Else; break; }
705 "func" { *id = id__Expr_Func; break; }
706 "virtual" { *id = id__Expr_Virtual; break; }
707 "override" { *id = id__Expr_Override; break; }
708 "abstract" { *id = id__Expr_Abstract; break; }
709 "as" { *id = id__Expr_As; break; }
710 "break" { *id = id__Expr_Break; break; }
711 "continue" { *id = id__Expr_Continue; break; }
712 "return" { *id = id__Expr_Return; break; }
713 "\\" [0rtn\\"'] { *id = id__Char_OneChar; break; }
714 "\\" "x" [0-9a-fA-F]{2,2} { *id = id__Char_Hex; break; }
715 "#" "'" [^'\x00]"'" { *id = id__Char_Pound; break; }
716 "\\" [uU]"{" [0-9a-fA-F]{1,6} "}" { *id = id__Char_UBraced; break; }
717 [0-9]("_" ? [0-9])* { *id = id__Expr_DecInt; break; }
718 "0" [bB]("_" ? [01])+ { *id = id__Expr_BinInt; break; }
719 "0" [oO]("_" ? [0-7])+ { *id = id__Expr_OctInt; break; }
720 "0" [xX]("_" ? [0-9a-fA-F])+ { *id = id__Expr_HexInt; break; }
721 [0-9]+ ("." [0-9]* )? ([eE][+\-]? [0-9]+ )? { *id = id__Expr_Float; break; }
722 [a-zA-Z_][a-zA-Z0-9_]* { *id = id__Expr_Name; break; }
723 "%" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__Expr_Symbol; break; }
724 "," { *id = id__Arith_Comma; break; }
725 ":" { *id = id__Arith_Colon; break; }
726 "?" { *id = id__Arith_QMark; break; }
727 "+" { *id = id__Arith_Plus; break; }
728 "-" { *id = id__Arith_Minus; break; }
729 "*" { *id = id__Arith_Star; break; }
730 "^" { *id = id__Arith_Caret; break; }
731 "/" { *id = id__Arith_Slash; break; }
732 "%" { *id = id__Arith_Percent; break; }
733 "**" { *id = id__Arith_DStar; break; }
734 "++" { *id = id__Arith_DPlus; break; }
735 "<" { *id = id__Arith_Less; break; }
736 ">" { *id = id__Arith_Great; break; }
737 "<=" { *id = id__Arith_LessEqual; break; }
738 ">=" { *id = id__Arith_GreatEqual; break; }
739 "===" { *id = id__Expr_TEqual; break; }
740 "!==" { *id = id__Expr_NotDEqual; break; }
741 "==" { *id = id__Unknown_DEqual; break; }
742 "&" { *id = id__Arith_Amp; break; }
743 "|" { *id = id__Arith_Pipe; break; }
744 ">>" { *id = id__Arith_DGreat; break; }
745 "<<" { *id = id__Arith_DLess; break; }
746 "~" { *id = id__Arith_Tilde; break; }
747 "!~" { *id = id__Expr_NotTilde; break; }
748 "~~" { *id = id__Expr_DTilde; break; }
749 "!~~" { *id = id__Expr_NotDTilde; break; }
750 "=" { *id = id__Arith_Equal; break; }
751 "+=" { *id = id__Arith_PlusEqual; break; }
752 "-=" { *id = id__Arith_MinusEqual; break; }
753 "*=" { *id = id__Arith_StarEqual; break; }
754 "/=" { *id = id__Arith_SlashEqual; break; }
755 "%=" { *id = id__Arith_PercentEqual; break; }
756 "&=" { *id = id__Arith_AmpEqual; break; }
757 "|=" { *id = id__Arith_PipeEqual; break; }
758 "^=" { *id = id__Arith_CaretEqual; break; }
759 ">>=" { *id = id__Arith_DGreatEqual; break; }
760 "<<=" { *id = id__Arith_DLessEqual; break; }
761 "!" { *id = id__Expr_Bang; break; }
762 "//" { *id = id__Expr_DSlash; break; }
763 "~==" { *id = id__Expr_TildeDEqual; break; }
764 "." { *id = id__Expr_Dot; break; }
765 "::" { *id = id__Expr_DColon; break; }
766 "->" { *id = id__Expr_RArrow; break; }
767 "$" { *id = id__Expr_Dollar; break; }
768 "<-" { *id = id__Expr_Reserved; break; }
769 "=>" { *id = id__Expr_RDArrow; break; }
770 "..." { *id = id__Expr_Ellipsis; break; }
771 "///" { *id = id__Expr_Reserved; break; }
772 "@" { *id = id__Expr_At; break; }
773 "@@" { *id = id__Expr_DoubleAt; break; }
774 "\n" { *id = id__Op_Newline; break; }
775 "#" [^\n\x00]* { *id = id__Ignored_Comment; break; }
776 [ \t\r]+ { *id = id__Ignored_Space; break; }
777 "\\\n" { *id = id__Ignored_LineCont; break; }
778 [^\x00] { *id = id__Unknown_Tok; break; }
779 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
780 */
781 }
782 break;
783
784 case lex_mode__QSN:
785 for (;;) {
786 /*!re2c
787 "\\" [nrt0'"\\] { *id = id__Char_OneChar; break; }
788 "\\" "x" [0-9a-fA-F]{2,2} { *id = id__Char_Hex; break; }
789 "\\" [uU]"{" [0-9a-fA-F]{1,6} "}" { *id = id__Char_UBraced; break; }
790 [^\\'\x00\t\n]+ { *id = id__Char_Literals; break; }
791 "'" { *id = id__Right_SingleQuote; break; }
792 [^\x00] { *id = id__Unknown_Tok; break; }
793 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
794 */
795 }
796 break;
797
798 default:
799 assert(0);
800
801 }
802 *end_pos = p - line; /* relative */
803 }
804
805
806 static inline void MatchEchoToken(const unsigned char* line, int line_len,
807 int start_pos, int* id, int* end_pos) {
808 assert(start_pos <= line_len); /* caller should have checked */
809
810 const unsigned char* p = line + start_pos; /* modified by re2c */
811
812 /* Echo and History lexer apparently need this, but others don't */
813 __attribute__((unused)) const unsigned char* YYMARKER;
814
815 for (;;) {
816 /*!re2c
817
818 "\\" "x" [0-9a-fA-F]{1,2} { *id = id__Char_Hex; break; }
819 "\\" "u" [0-9a-fA-F]{1,4} { *id = id__Char_Unicode4; break; }
820 "\\" "U" [0-9a-fA-F]{1,8} { *id = id__Char_Unicode8; break; }
821 "\\" [0abeEfrtnv\\] { *id = id__Char_OneChar; break; }
822 "\\\n" { *id = id__Char_Literals; break; }
823 "\\" { *id = id__Unknown_Backslash; break; }
824 "\\" "0" [0-7]{1,3} { *id = id__Char_Octal4; break; }
825 "\\c" { *id = id__Char_Stop; break; }
826 [^\\\x00]+ { *id = id__Char_Literals; break; }
827 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
828
829 */
830 }
831 *end_pos = p - line; /* relative */
832 }
833
834
835 static inline void MatchGlobToken(const unsigned char* line, int line_len,
836 int start_pos, int* id, int* end_pos) {
837 assert(start_pos <= line_len); /* caller should have checked */
838
839 const unsigned char* p = line + start_pos; /* modified by re2c */
840
841 /* Echo and History lexer apparently need this, but others don't */
842 __attribute__((unused)) const unsigned char* YYMARKER;
843
844 for (;;) {
845 /*!re2c
846
847 "*" { *id = id__Glob_Star; break; }
848 "?" { *id = id__Glob_QMark; break; }
849 "!" { *id = id__Glob_Bang; break; }
850 "^" { *id = id__Glob_Caret; break; }
851 "[" { *id = id__Glob_LBracket; break; }
852 "]" { *id = id__Glob_RBracket; break; }
853 "\\" [^\x00] { *id = id__Glob_EscapedChar; break; }
854 "\\" { *id = id__Glob_BadBackslash; break; }
855 [a-zA-Z0-9_]+ { *id = id__Glob_CleanLiterals; break; }
856 [^\x00] { *id = id__Glob_OtherLiteral; break; }
857 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
858
859 */
860 }
861 *end_pos = p - line; /* relative */
862 }
863
864
865 static inline void MatchPS1Token(const unsigned char* line, int line_len,
866 int start_pos, int* id, int* end_pos) {
867 assert(start_pos <= line_len); /* caller should have checked */
868
869 const unsigned char* p = line + start_pos; /* modified by re2c */
870
871 /* Echo and History lexer apparently need this, but others don't */
872 __attribute__((unused)) const unsigned char* YYMARKER;
873
874 for (;;) {
875 /*!re2c
876
877 "\\" [0-7]{1,3} { *id = id__PS_Octal3; break; }
878 "\\" [adehHjlnrstT@AuvVwW!#$\\] { *id = id__PS_Subst; break; }
879 "\\" "D" "{" [^}\x00]* "}" { *id = id__PS_Subst; break; }
880 "\\[" { *id = id__PS_LBrace; break; }
881 "\\]" { *id = id__PS_RBrace; break; }
882 [^\\\x00]+ { *id = id__PS_Literals; break; }
883 "\\" { *id = id__PS_BadBackslash; break; }
884 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
885
886 */
887 }
888 *end_pos = p - line; /* relative */
889 }
890
891
892 static inline void MatchHistoryToken(const unsigned char* line, int line_len,
893 int start_pos, int* id, int* end_pos) {
894 assert(start_pos <= line_len); /* caller should have checked */
895
896 const unsigned char* p = line + start_pos; /* modified by re2c */
897
898 /* Echo and History lexer apparently need this, but others don't */
899 __attribute__((unused)) const unsigned char* YYMARKER;
900
901 for (;;) {
902 /*!re2c
903
904 "!" [!*^$] { *id = id__History_Op; break; }
905 "!" "-" ? [0-9]+ { *id = id__History_Num; break; }
906 "!" "?" ? [a-zA-Z_/.][0-9a-zA-Z_/.]+ [ \t\r\n] { *id = id__History_Search; break; }
907 "#" [^\x00]* { *id = id__History_Other; break; }
908 "'" [^'\x00]* "'" ? { *id = id__History_Other; break; }
909 [^!\\'#\x00]+ { *id = id__History_Other; break; }
910 "\\" [^\x00] { *id = id__History_Other; break; }
911 [^\x00] { *id = id__History_Other; break; }
912 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
913
914 */
915 }
916 *end_pos = p - line; /* relative */
917 }
918
919
920 static inline void MatchBraceRangeToken(const unsigned char* line, int line_len,
921 int start_pos, int* id, int* end_pos) {
922 assert(start_pos <= line_len); /* caller should have checked */
923
924 const unsigned char* p = line + start_pos; /* modified by re2c */
925
926 /* Echo and History lexer apparently need this, but others don't */
927 __attribute__((unused)) const unsigned char* YYMARKER;
928
929 for (;;) {
930 /*!re2c
931
932 "-" ? [0-9]+ { *id = id__Range_Int; break; }
933 [a-zA-Z] { *id = id__Range_Char; break; }
934 "." "." { *id = id__Range_Dots; break; }
935 [^\x00] { *id = id__Range_Other; break; }
936 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
937
938 */
939 }
940 *end_pos = p - line; /* relative */
941 }
942
943
944 static inline int IsValidVarName(const unsigned char* s, int len) {
945 const unsigned char* p = s; /* modified by re2c */
946 const unsigned char* end = s + len;
947
948 /* MatchBraceRangeToken needs this, but others don't */
949 __attribute__((unused)) const unsigned char* YYMARKER;
950
951 /*!re2c
952 re2c:define:YYCTYPE = "unsigned char";
953 re2c:define:YYCURSOR = p;
954 [a-zA-Z_][a-zA-Z0-9_]* { return p == end; } // Match must be anchored right, like $
955 * { return 0; }
956 */
957 }
958
959
960 static inline int ShouldHijack(const unsigned char* s, int len) {
961 const unsigned char* p = s; /* modified by re2c */
962 const unsigned char* end = s + len;
963
964 /* MatchBraceRangeToken needs this, but others don't */
965 __attribute__((unused)) const unsigned char* YYMARKER;
966
967 /*!re2c
968 re2c:define:YYCTYPE = "unsigned char";
969 re2c:define:YYCURSOR = p;
970 "#" "!" [^\x00]* "s" "h" [ \t\r\n][^\x00]* { return p == end; } // Match must be anchored right, like $
971 * { return 0; }
972 */
973 }
974
975
976 static inline int LooksLikeInteger(const unsigned char* s, int len) {
977 const unsigned char* p = s; /* modified by re2c */
978 const unsigned char* end = s + len;
979
980 /* MatchBraceRangeToken needs this, but others don't */
981 __attribute__((unused)) const unsigned char* YYMARKER;
982
983 /*!re2c
984 re2c:define:YYCTYPE = "unsigned char";
985 re2c:define:YYCURSOR = p;
986 [ \t\r\n]* "-" ? [0-9]("_" ? [0-9])* [ \t\r\n]* { return p == end; } // Match must be anchored right, like $
987 * { return 0; }
988 */
989 }
990
991
992 static inline int LooksLikeFloat(const unsigned char* s, int len) {
993 const unsigned char* p = s; /* modified by re2c */
994 const unsigned char* end = s + len;
995
996 /* MatchBraceRangeToken needs this, but others don't */
997 __attribute__((unused)) const unsigned char* YYMARKER;
998
999 /*!re2c
1000 re2c:define:YYCTYPE = "unsigned char";
1001 re2c:define:YYCURSOR = p;
1002 [ \t\r\n]* "-" ? [0-9]+ ("." [0-9]* )? ([eE][+\-]? [0-9]+ )? [ \t\r\n]* { return p == end; } // Match must be anchored right, like $
1003 * { return 0; }
1004 */
1005 }
1006
1007
1008 static inline int BracketUnary(const unsigned char* s, int len) {
1009 const unsigned char* p = s; /* modified by re2c */
1010 const unsigned char* end = s + len;
1011
1012 __attribute__((unused)) const unsigned char* YYMARKER;
1013 int id;
1014
1015 for (;;) {
1016 /*!re2c
1017
1018 "-G" { id = id__BoolUnary_G; break; }
1019 "-L" { id = id__BoolUnary_L; break; }
1020 "-N" { id = id__BoolUnary_N; break; }
1021 "-O" { id = id__BoolUnary_O; break; }
1022 "-R" { id = id__BoolUnary_R; break; }
1023 "-S" { id = id__BoolUnary_S; break; }
1024 "-a" { id = id__BoolUnary_a; break; }
1025 "-b" { id = id__BoolUnary_b; break; }
1026 "-c" { id = id__BoolUnary_c; break; }
1027 "-d" { id = id__BoolUnary_d; break; }
1028 "-e" { id = id__BoolUnary_e; break; }
1029 "-f" { id = id__BoolUnary_f; break; }
1030 "-g" { id = id__BoolUnary_g; break; }
1031 "-h" { id = id__BoolUnary_h; break; }
1032 "-k" { id = id__BoolUnary_k; break; }
1033 "-n" { id = id__BoolUnary_n; break; }
1034 "-o" { id = id__BoolUnary_o; break; }
1035 "-p" { id = id__BoolUnary_p; break; }
1036 "-r" { id = id__BoolUnary_r; break; }
1037 "-s" { id = id__BoolUnary_s; break; }
1038 "-t" { id = id__BoolUnary_t; break; }
1039 "-u" { id = id__BoolUnary_u; break; }
1040 "-v" { id = id__BoolUnary_v; break; }
1041 "-w" { id = id__BoolUnary_w; break; }
1042 "-x" { id = id__BoolUnary_x; break; }
1043 "-z" { id = id__BoolUnary_z; break; }
1044 * { return id__Undefined_Tok; }
1045
1046 */
1047 }
1048 // must be an exact match
1049 return (p == end) ? id : id__Undefined_Tok;
1050 }
1051
1052
1053 static inline int BracketBinary(const unsigned char* s, int len) {
1054 const unsigned char* p = s; /* modified by re2c */
1055 const unsigned char* end = s + len;
1056
1057 __attribute__((unused)) const unsigned char* YYMARKER;
1058 int id;
1059
1060 for (;;) {
1061 /*!re2c
1062
1063 "!=" { id = id__BoolBinary_NEqual; break; }
1064 "-ef" { id = id__BoolBinary_ef; break; }
1065 "-eq" { id = id__BoolBinary_eq; break; }
1066 "-ge" { id = id__BoolBinary_ge; break; }
1067 "-gt" { id = id__BoolBinary_gt; break; }
1068 "-le" { id = id__BoolBinary_le; break; }
1069 "-lt" { id = id__BoolBinary_lt; break; }
1070 "-ne" { id = id__BoolBinary_ne; break; }
1071 "-nt" { id = id__BoolBinary_nt; break; }
1072 "-ot" { id = id__BoolBinary_ot; break; }
1073 "<" { id = id__Op_Less; break; }
1074 "=" { id = id__BoolBinary_Equal; break; }
1075 "==" { id = id__BoolBinary_DEqual; break; }
1076 ">" { id = id__Op_Great; break; }
1077 * { return id__Undefined_Tok; }
1078
1079 */
1080 }
1081 // must be an exact match
1082 return (p == end) ? id : id__Undefined_Tok;
1083 }
1084
1085
1086 static inline int BracketOther(const unsigned char* s, int len) {
1087 const unsigned char* p = s; /* modified by re2c */
1088 const unsigned char* end = s + len;
1089
1090 __attribute__((unused)) const unsigned char* YYMARKER;
1091 int id;
1092
1093 for (;;) {
1094 /*!re2c
1095
1096 "!" { id = id__KW_Bang; break; }
1097 "(" { id = id__Op_LParen; break; }
1098 ")" { id = id__Op_RParen; break; }
1099 "]" { id = id__Arith_RBracket; break; }
1100 * { return id__Undefined_Tok; }
1101
1102 */
1103 }
1104 // must be an exact match
1105 return (p == end) ? id : id__Undefined_Tok;
1106 }
1107