OILS / _gen / _tmp / match.re2c-input.h View on Github | oils.pub

1363 lines, 1166 significant
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
10static 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_At; break; }
47 "{" [a-zA-Z_][a-zA-Z0-9_]* "}" { *id = id__Lit_RedirVarName; break; }
48 [0-9]? [0-9]? { *id = id__Lit_Number; break; }
49 "@" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__Lit_Splice; break; }
50 "@[" { *id = id__Lit_AtLBracket; break; }
51 "@{." { *id = id__Lit_AtLBraceDot; break; }
52 "<" { *id = id__Redir_Less; break; }
53 ">" { *id = id__Redir_Great; break; }
54 "<" "<" { *id = id__Redir_DLess; break; }
55 "<" "<" "<" { *id = id__Redir_TLess; break; }
56 ">" ">" { *id = id__Redir_DGreat; break; }
57 "<" "<" "-" { *id = id__Redir_DLessDash; break; }
58 ">" "&" { *id = id__Redir_GreatAnd; break; }
59 "<" "&" { *id = id__Redir_LessAnd; break; }
60 "<" ">" { *id = id__Redir_LessGreat; break; }
61 ">" "|" { *id = id__Redir_Clobber; break; }
62 "&>" { *id = id__Redir_AndGreat; break; }
63 "&>>" { *id = id__Redir_AndDGreat; break; }
64 "[[" { *id = id__KW_DLeftBracket; break; }
65 "!" { *id = id__KW_Bang; break; }
66 "for" { *id = id__KW_For; break; }
67 "while" { *id = id__KW_While; break; }
68 "until" { *id = id__KW_Until; break; }
69 "do" { *id = id__KW_Do; break; }
70 "done" { *id = id__KW_Done; break; }
71 "in" { *id = id__KW_In; break; }
72 "case" { *id = id__KW_Case; break; }
73 "esac" { *id = id__KW_Esac; break; }
74 "if" { *id = id__KW_If; break; }
75 "fi" { *id = id__KW_Fi; break; }
76 "then" { *id = id__KW_Then; break; }
77 "else" { *id = id__KW_Else; break; }
78 "elif" { *id = id__KW_Elif; break; }
79 "function" { *id = id__KW_Function; break; }
80 "time" { *id = id__KW_Time; break; }
81 "const" { *id = id__KW_Const; break; }
82 "var" { *id = id__KW_Var; break; }
83 "setvar" { *id = id__KW_SetVar; break; }
84 "setglobal" { *id = id__KW_SetGlobal; break; }
85 "call" { *id = id__KW_Call; break; }
86 "proc" { *id = id__KW_Proc; break; }
87 "typed" { *id = id__KW_Typed; break; }
88 "func" { *id = id__KW_Func; break; }
89 "break" { *id = id__ControlFlow_Break; break; }
90 "continue" { *id = id__ControlFlow_Continue; break; }
91 "return" { *id = id__ControlFlow_Return; break; }
92 "exit" { *id = id__ControlFlow_Exit; break; }
93 "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; }
94 "\\\n" { *id = id__Ignored_LineCont; break; }
95 "`" { *id = id__Left_Backtick; break; }
96 "$(" { *id = id__Left_DollarParen; break; }
97 "${" { *id = id__Left_DollarBrace; break; }
98 "$" "{" "(" [^)\x00]+ ")" { *id = id__Left_DollarBraceZsh; break; }
99 "$((" { *id = id__Left_DollarDParen; break; }
100 "$[" { *id = id__Left_DollarBracket; break; }
101 "\"" { *id = id__Left_DoubleQuote; break; }
102 "'" { *id = id__Left_SingleQuote; break; }
103 "$\"" { *id = id__Left_DollarDoubleQuote; break; }
104 "$'" { *id = id__Left_DollarSingleQuote; break; }
105 "<(" { *id = id__Left_ProcSubIn; break; }
106 ">(" { *id = id__Left_ProcSubOut; break; }
107 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
108 "$" [0-9] { *id = id__VSub_Number; break; }
109 "$!" { *id = id__VSub_Bang; break; }
110 "$@" { *id = id__VSub_At; break; }
111 "$#" { *id = id__VSub_Pound; break; }
112 "$$" { *id = id__VSub_Dollar; break; }
113 "$*" { *id = id__VSub_Star; break; }
114 "$-" { *id = id__VSub_Hyphen; break; }
115 "$?" { *id = id__VSub_QMark; break; }
116 [\x80-\xffa-zA-Z0-9_.\-]+ { *id = id__Lit_Chars; break; }
117 "~" { *id = id__Lit_Tilde; break; }
118 "/" { *id = id__Lit_Slash; break; }
119 ":" { *id = id__Lit_Colon; break; }
120 "$" { *id = id__Lit_Dollar; break; }
121 "#" { *id = id__Lit_Pound; break; }
122 [ \t]+ { *id = id__WS_Space; break; }
123 "\n" { *id = id__Op_Newline; break; }
124 "&" { *id = id__Op_Amp; break; }
125 "|" { *id = id__Op_Pipe; break; }
126 "|&" { *id = id__Op_PipeAmp; break; }
127 "&&" { *id = id__Op_DAmp; break; }
128 "||" { *id = id__Op_DPipe; break; }
129 ";" { *id = id__Op_Semi; break; }
130 ";;" { *id = id__Op_DSemi; break; }
131 ";&" { *id = id__Op_SemiAmp; break; }
132 ";;&" { *id = id__Op_DSemiAmp; break; }
133 "(" { *id = id__Op_LParen; break; }
134 ")" { *id = id__Op_RParen; break; }
135 [^\x00] { *id = id__Lit_Other; break; }
136 ",(" { *id = id__ExtGlob_Comma; break; }
137 "@(" { *id = id__ExtGlob_At; break; }
138 "*(" { *id = id__ExtGlob_Star; break; }
139 "+(" { *id = id__ExtGlob_Plus; break; }
140 "?(" { *id = id__ExtGlob_QMark; break; }
141 "!(" { *id = id__ExtGlob_Bang; break; }
142 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
143 */
144 }
145 break;
146
147 case lex_mode__Backtick:
148 for (;;) {
149 /*!re2c
150 "`" { *id = id__Backtick_Right; break; }
151 "\\" [$`\\] { *id = id__Backtick_Quoted; break; }
152 "\\" "\"" { *id = id__Backtick_DoubleQuote; break; }
153 [^`\\\x00]+ { *id = id__Backtick_Other; break; }
154 [^\x00] { *id = id__Backtick_Other; break; }
155 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
156 */
157 }
158 break;
159
160 case lex_mode__DBracket:
161 for (;;) {
162 /*!re2c
163 "]]" { *id = id__Lit_DRightBracket; break; }
164 "!" { *id = id__KW_Bang; break; }
165 "<" { *id = id__Op_Less; break; }
166 ">" { *id = id__Op_Great; break; }
167 "-z" { *id = id__BoolUnary_z; break; }
168 "-n" { *id = id__BoolUnary_n; break; }
169 "-o" { *id = id__BoolUnary_o; break; }
170 "-t" { *id = id__BoolUnary_t; break; }
171 "-v" { *id = id__BoolUnary_v; break; }
172 "-R" { *id = id__BoolUnary_R; break; }
173 "-a" { *id = id__BoolUnary_a; break; }
174 "-b" { *id = id__BoolUnary_b; break; }
175 "-c" { *id = id__BoolUnary_c; break; }
176 "-d" { *id = id__BoolUnary_d; break; }
177 "-e" { *id = id__BoolUnary_e; break; }
178 "-f" { *id = id__BoolUnary_f; break; }
179 "-g" { *id = id__BoolUnary_g; break; }
180 "-h" { *id = id__BoolUnary_h; break; }
181 "-k" { *id = id__BoolUnary_k; break; }
182 "-L" { *id = id__BoolUnary_L; break; }
183 "-p" { *id = id__BoolUnary_p; break; }
184 "-r" { *id = id__BoolUnary_r; break; }
185 "-s" { *id = id__BoolUnary_s; break; }
186 "-S" { *id = id__BoolUnary_S; break; }
187 "-u" { *id = id__BoolUnary_u; break; }
188 "-w" { *id = id__BoolUnary_w; break; }
189 "-x" { *id = id__BoolUnary_x; break; }
190 "-O" { *id = id__BoolUnary_O; break; }
191 "-G" { *id = id__BoolUnary_G; break; }
192 "-N" { *id = id__BoolUnary_N; break; }
193 "=" { *id = id__BoolBinary_GlobEqual; break; }
194 "==" { *id = id__BoolBinary_GlobDEqual; break; }
195 "!=" { *id = id__BoolBinary_GlobNEqual; break; }
196 "=~" { *id = id__BoolBinary_EqualTilde; break; }
197 "-ef" { *id = id__BoolBinary_ef; break; }
198 "-nt" { *id = id__BoolBinary_nt; break; }
199 "-ot" { *id = id__BoolBinary_ot; break; }
200 "-eq" { *id = id__BoolBinary_eq; break; }
201 "-ne" { *id = id__BoolBinary_ne; break; }
202 "-gt" { *id = id__BoolBinary_gt; break; }
203 "-ge" { *id = id__BoolBinary_ge; break; }
204 "-lt" { *id = id__BoolBinary_lt; break; }
205 "-le" { *id = id__BoolBinary_le; break; }
206 "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; }
207 "\\\n" { *id = id__Ignored_LineCont; break; }
208 "`" { *id = id__Left_Backtick; break; }
209 "$(" { *id = id__Left_DollarParen; break; }
210 "${" { *id = id__Left_DollarBrace; break; }
211 "$" "{" "(" [^)\x00]+ ")" { *id = id__Left_DollarBraceZsh; break; }
212 "$((" { *id = id__Left_DollarDParen; break; }
213 "$[" { *id = id__Left_DollarBracket; break; }
214 "\"" { *id = id__Left_DoubleQuote; break; }
215 "'" { *id = id__Left_SingleQuote; break; }
216 "$\"" { *id = id__Left_DollarDoubleQuote; break; }
217 "$'" { *id = id__Left_DollarSingleQuote; break; }
218 "<(" { *id = id__Left_ProcSubIn; break; }
219 ">(" { *id = id__Left_ProcSubOut; break; }
220 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
221 "$" [0-9] { *id = id__VSub_Number; break; }
222 "$!" { *id = id__VSub_Bang; break; }
223 "$@" { *id = id__VSub_At; break; }
224 "$#" { *id = id__VSub_Pound; break; }
225 "$$" { *id = id__VSub_Dollar; break; }
226 "$*" { *id = id__VSub_Star; break; }
227 "$-" { *id = id__VSub_Hyphen; break; }
228 "$?" { *id = id__VSub_QMark; break; }
229 [\x80-\xffa-zA-Z0-9_.\-]+ { *id = id__Lit_Chars; break; }
230 "~" { *id = id__Lit_Tilde; break; }
231 "/" { *id = id__Lit_Slash; break; }
232 ":" { *id = id__Lit_Colon; break; }
233 "$" { *id = id__Lit_Dollar; break; }
234 "#" { *id = id__Lit_Pound; break; }
235 [ \t]+ { *id = id__WS_Space; break; }
236 "\n" { *id = id__Op_Newline; break; }
237 "&" { *id = id__Op_Amp; break; }
238 "|" { *id = id__Op_Pipe; break; }
239 "|&" { *id = id__Op_PipeAmp; break; }
240 "&&" { *id = id__Op_DAmp; break; }
241 "||" { *id = id__Op_DPipe; break; }
242 ";" { *id = id__Op_Semi; break; }
243 ";;" { *id = id__Op_DSemi; break; }
244 ";&" { *id = id__Op_SemiAmp; break; }
245 ";;&" { *id = id__Op_DSemiAmp; break; }
246 "(" { *id = id__Op_LParen; break; }
247 ")" { *id = id__Op_RParen; break; }
248 [^\x00] { *id = id__Lit_Other; break; }
249 ",(" { *id = id__ExtGlob_Comma; break; }
250 "@(" { *id = id__ExtGlob_At; break; }
251 "*(" { *id = id__ExtGlob_Star; break; }
252 "+(" { *id = id__ExtGlob_Plus; break; }
253 "?(" { *id = id__ExtGlob_QMark; break; }
254 "!(" { *id = id__ExtGlob_Bang; break; }
255 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
256 */
257 }
258 break;
259
260 case lex_mode__SQ_Raw:
261 for (;;) {
262 /*!re2c
263 [^'\x00]+ { *id = id__Lit_Chars; break; }
264 "'" { *id = id__Right_SingleQuote; break; }
265 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
266 */
267 }
268 break;
269
270 case lex_mode__DQ:
271 for (;;) {
272 /*!re2c
273 "\\" [$`\\] { *id = id__Lit_EscapedChar; break; }
274 "\\\"" { *id = id__Lit_BackslashDoubleQuote; break; }
275 "\\\n" { *id = id__Ignored_LineCont; break; }
276 "\\" { *id = id__Lit_BadBackslash; break; }
277 "`" { *id = id__Left_Backtick; break; }
278 "$(" { *id = id__Left_DollarParen; break; }
279 "${" { *id = id__Left_DollarBrace; break; }
280 "$" "{" "(" [^)\x00]+ ")" { *id = id__Left_DollarBraceZsh; break; }
281 "$((" { *id = id__Left_DollarDParen; break; }
282 "$[" { *id = id__Left_DollarBracket; break; }
283 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
284 "$" [0-9] { *id = id__VSub_Number; break; }
285 "$!" { *id = id__VSub_Bang; break; }
286 "$@" { *id = id__VSub_At; break; }
287 "$#" { *id = id__VSub_Pound; break; }
288 "$$" { *id = id__VSub_Dollar; break; }
289 "$*" { *id = id__VSub_Star; break; }
290 "$-" { *id = id__VSub_Hyphen; break; }
291 "$?" { *id = id__VSub_QMark; break; }
292 [^$`"\x00\\]+ { *id = id__Lit_Chars; break; }
293 "$" { *id = id__Lit_Dollar; break; }
294 "\"" { *id = id__Right_DoubleQuote; break; }
295 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
296 */
297 }
298 break;
299
300 case lex_mode__SQ_C:
301 for (;;) {
302 /*!re2c
303 "\\" "x" [0-9a-fA-F]{1,2} { *id = id__Char_Hex; break; }
304 "\\" "u" [0-9a-fA-F]{1,4} { *id = id__Char_Unicode4; break; }
305 "\\" "U" [0-9a-fA-F]{1,8} { *id = id__Char_Unicode8; break; }
306 "\\" [0abeEfrtnv\\] { *id = id__Char_OneChar; break; }
307 "\\" { *id = id__Unknown_Backslash; break; }
308 "\\\n" { *id = id__Unknown_Backslash; break; }
309 "\\" [0-7]{1,3} { *id = id__Char_Octal3; break; }
310 "\\'" { *id = id__Char_OneChar; break; }
311 "\\\"" { *id = id__Char_OneChar; break; }
312 [^\\'\x00]+ { *id = id__Lit_Chars; break; }
313 "'" { *id = id__Right_SingleQuote; break; }
314 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
315 */
316 }
317 break;
318
319 case lex_mode__J8_Str:
320 for (;;) {
321 /*!re2c
322 "'" { *id = id__Right_SingleQuote; break; }
323 "\\" [\\"/bfnrt] { *id = id__Char_OneChar; break; }
324 "\\'" { *id = id__Char_OneChar; break; }
325 "\\" "y" [0-9a-fA-F]{2,2} { *id = id__Char_YHex; break; }
326 "\\" [uU]"{" [0-9a-fA-F]{1,6} "}" { *id = id__Char_UBraced; break; }
327 "\\" { *id = id__Unknown_Backslash; break; }
328 [^\\'\x00]+ { *id = id__Lit_Chars; break; }
329 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
330 */
331 }
332 break;
333
334 case lex_mode__Arith:
335 for (;;) {
336 /*!re2c
337 "`" { *id = id__Left_Backtick; break; }
338 "$(" { *id = id__Left_DollarParen; break; }
339 "${" { *id = id__Left_DollarBrace; break; }
340 "$" "{" "(" [^)\x00]+ ")" { *id = id__Left_DollarBraceZsh; break; }
341 "$((" { *id = id__Left_DollarDParen; break; }
342 "$[" { *id = id__Left_DollarBracket; break; }
343 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
344 "$" [0-9] { *id = id__VSub_Number; break; }
345 "$!" { *id = id__VSub_Bang; break; }
346 "$@" { *id = id__VSub_At; break; }
347 "$#" { *id = id__VSub_Pound; break; }
348 "$$" { *id = id__VSub_Dollar; break; }
349 "$*" { *id = id__VSub_Star; break; }
350 "$-" { *id = id__VSub_Hyphen; break; }
351 "$?" { *id = id__VSub_QMark; break; }
352 "\"" { *id = id__Left_DoubleQuote; break; }
353 "'" { *id = id__Left_SingleQuote; break; }
354 "$\"" { *id = id__Left_DollarDoubleQuote; break; }
355 "$'" { *id = id__Left_DollarSingleQuote; break; }
356 [ \t\r\n]+ { *id = id__Ignored_Space; break; }
357 [a-zA-Z_][a-zA-Z0-9_]* { *id = id__Lit_ArithVarLike; break; }
358 [0-9]+ { *id = id__Lit_Digits; break; }
359 "@" { *id = id__Lit_At; break; }
360 "#" { *id = id__Lit_Pound; break; }
361 ";" { *id = id__Arith_Semi; break; }
362 "," { *id = id__Arith_Comma; break; }
363 "+" { *id = id__Arith_Plus; break; }
364 "-" { *id = id__Arith_Minus; break; }
365 "*" { *id = id__Arith_Star; break; }
366 "/" { *id = id__Arith_Slash; break; }
367 "%" { *id = id__Arith_Percent; break; }
368 "++" { *id = id__Arith_DPlus; break; }
369 "--" { *id = id__Arith_DMinus; break; }
370 "**" { *id = id__Arith_DStar; break; }
371 "(" { *id = id__Arith_LParen; break; }
372 ")" { *id = id__Arith_RParen; break; }
373 "[" { *id = id__Arith_LBracket; break; }
374 "]" { *id = id__Arith_RBracket; break; }
375 "}" { *id = id__Arith_RBrace; break; }
376 "?" { *id = id__Arith_QMark; break; }
377 ":" { *id = id__Arith_Colon; break; }
378 "<=" { *id = id__Arith_LessEqual; break; }
379 "<" { *id = id__Arith_Less; break; }
380 ">=" { *id = id__Arith_GreatEqual; break; }
381 ">" { *id = id__Arith_Great; break; }
382 "==" { *id = id__Arith_DEqual; break; }
383 "!=" { *id = id__Arith_NEqual; break; }
384 "&&" { *id = id__Arith_DAmp; break; }
385 "||" { *id = id__Arith_DPipe; break; }
386 "!" { *id = id__Arith_Bang; break; }
387 ">>" { *id = id__Arith_DGreat; break; }
388 "<<" { *id = id__Arith_DLess; break; }
389 "&" { *id = id__Arith_Amp; break; }
390 "|" { *id = id__Arith_Pipe; break; }
391 "^" { *id = id__Arith_Caret; break; }
392 "~" { *id = id__Arith_Tilde; break; }
393 "=" { *id = id__Arith_Equal; break; }
394 "+=" { *id = id__Arith_PlusEqual; break; }
395 "-=" { *id = id__Arith_MinusEqual; break; }
396 "*=" { *id = id__Arith_StarEqual; break; }
397 "/=" { *id = id__Arith_SlashEqual; break; }
398 "%=" { *id = id__Arith_PercentEqual; break; }
399 ">>=" { *id = id__Arith_DGreatEqual; break; }
400 "<<=" { *id = id__Arith_DLessEqual; break; }
401 "&=" { *id = id__Arith_AmpEqual; break; }
402 "^=" { *id = id__Arith_CaretEqual; break; }
403 "|=" { *id = id__Arith_PipeEqual; break; }
404 "\\\n" { *id = id__Ignored_LineCont; break; }
405 [^\x00] { *id = id__Unknown_Tok; break; }
406 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
407 */
408 }
409 break;
410
411 case lex_mode__ExtGlob:
412 for (;;) {
413 /*!re2c
414 "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; }
415 "\\\n" { *id = id__Ignored_LineCont; break; }
416 "`" { *id = id__Left_Backtick; break; }
417 "$(" { *id = id__Left_DollarParen; break; }
418 "${" { *id = id__Left_DollarBrace; break; }
419 "$" "{" "(" [^)\x00]+ ")" { *id = id__Left_DollarBraceZsh; break; }
420 "$((" { *id = id__Left_DollarDParen; break; }
421 "$[" { *id = id__Left_DollarBracket; break; }
422 "\"" { *id = id__Left_DoubleQuote; break; }
423 "'" { *id = id__Left_SingleQuote; break; }
424 "$\"" { *id = id__Left_DollarDoubleQuote; break; }
425 "$'" { *id = id__Left_DollarSingleQuote; break; }
426 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
427 "$" [0-9] { *id = id__VSub_Number; break; }
428 "$!" { *id = id__VSub_Bang; break; }
429 "$@" { *id = id__VSub_At; break; }
430 "$#" { *id = id__VSub_Pound; break; }
431 "$$" { *id = id__VSub_Dollar; break; }
432 "$*" { *id = id__VSub_Star; break; }
433 "$-" { *id = id__VSub_Hyphen; break; }
434 "$?" { *id = id__VSub_QMark; break; }
435 ",(" { *id = id__ExtGlob_Comma; break; }
436 "@(" { *id = id__ExtGlob_At; break; }
437 "*(" { *id = id__ExtGlob_Star; break; }
438 "+(" { *id = id__ExtGlob_Plus; break; }
439 "?(" { *id = id__ExtGlob_QMark; break; }
440 "!(" { *id = id__ExtGlob_Bang; break; }
441 [^\\$`"'|)@*+!?\x00]+ { *id = id__Lit_Chars; break; }
442 "|" { *id = id__Op_Pipe; break; }
443 ")" { *id = id__Op_RParen; break; }
444 [^\x00] { *id = id__Lit_Other; break; }
445 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
446 */
447 }
448 break;
449
450 case lex_mode__VSub_1:
451 for (;;) {
452 /*!re2c
453 [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_Name; break; }
454 [0-9]+ { *id = id__VSub_Number; break; }
455 "!" { *id = id__VSub_Bang; break; }
456 "@" { *id = id__VSub_At; break; }
457 "#" { *id = id__VSub_Pound; break; }
458 "$" { *id = id__VSub_Dollar; break; }
459 "*" { *id = id__VSub_Star; break; }
460 "-" { *id = id__VSub_Hyphen; break; }
461 "?" { *id = id__VSub_QMark; break; }
462 "." { *id = id__VSub_Dot; break; }
463 "}" { *id = id__Right_DollarBrace; break; }
464 "\\\n" { *id = id__Ignored_LineCont; break; }
465 "\n" { *id = id__Unknown_Tok; break; }
466 [^\x00] { *id = id__Unknown_Tok; break; }
467 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
468 */
469 }
470 break;
471
472 case lex_mode__VSub_2:
473 for (;;) {
474 /*!re2c
475 ":-" { *id = id__VTest_ColonHyphen; break; }
476 "-" { *id = id__VTest_Hyphen; break; }
477 ":=" { *id = id__VTest_ColonEquals; break; }
478 "=" { *id = id__VTest_Equals; break; }
479 ":?" { *id = id__VTest_ColonQMark; break; }
480 "?" { *id = id__VTest_QMark; break; }
481 ":+" { *id = id__VTest_ColonPlus; break; }
482 "+" { *id = id__VTest_Plus; break; }
483 "@Q" { *id = id__VOp0_Q; break; }
484 "@E" { *id = id__VOp0_E; break; }
485 "@P" { *id = id__VOp0_P; break; }
486 "@A" { *id = id__VOp0_A; break; }
487 "@a" { *id = id__VOp0_a; break; }
488 "|" { *id = id__VOpYsh_Pipe; break; }
489 " " { *id = id__VOpYsh_Space; break; }
490 "%" { *id = id__VOp1_Percent; break; }
491 "%%" { *id = id__VOp1_DPercent; break; }
492 "#" { *id = id__VOp1_Pound; break; }
493 "##" { *id = id__VOp1_DPound; break; }
494 "^" { *id = id__VOp1_Caret; break; }
495 "^^" { *id = id__VOp1_DCaret; break; }
496 "," { *id = id__VOp1_Comma; break; }
497 ",," { *id = id__VOp1_DComma; break; }
498 "/" { *id = id__VOp2_Slash; break; }
499 ":" { *id = id__VOp2_Colon; break; }
500 "[" { *id = id__VOp2_LBracket; break; }
501 "]" { *id = id__VOp2_RBracket; break; }
502 "@" { *id = id__VOp3_At; break; }
503 "*" { *id = id__VOp3_Star; break; }
504 "}" { *id = id__Right_DollarBrace; break; }
505 "\\\n" { *id = id__Ignored_LineCont; break; }
506 "\n" { *id = id__Unknown_Tok; break; }
507 [^\x00] { *id = id__Unknown_Tok; break; }
508 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
509 */
510 }
511 break;
512
513 case lex_mode__VSub_ArgUnquoted:
514 for (;;) {
515 /*!re2c
516 "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; }
517 "\\\n" { *id = id__Ignored_LineCont; break; }
518 "/" { *id = id__Lit_Slash; break; }
519 "#" { *id = id__Lit_Pound; break; }
520 "%" { *id = id__Lit_Percent; break; }
521 "}" { *id = id__Right_DollarBrace; break; }
522 "$" { *id = id__Lit_Dollar; break; }
523 "`" { *id = id__Left_Backtick; break; }
524 "$(" { *id = id__Left_DollarParen; break; }
525 "${" { *id = id__Left_DollarBrace; break; }
526 "$" "{" "(" [^)\x00]+ ")" { *id = id__Left_DollarBraceZsh; break; }
527 "$((" { *id = id__Left_DollarDParen; break; }
528 "$[" { *id = id__Left_DollarBracket; break; }
529 "\"" { *id = id__Left_DoubleQuote; break; }
530 "'" { *id = id__Left_SingleQuote; break; }
531 "$\"" { *id = id__Left_DollarDoubleQuote; break; }
532 "$'" { *id = id__Left_DollarSingleQuote; break; }
533 "<(" { *id = id__Left_ProcSubIn; break; }
534 ">(" { *id = id__Left_ProcSubOut; break; }
535 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
536 "$" [0-9] { *id = id__VSub_Number; break; }
537 "$!" { *id = id__VSub_Bang; break; }
538 "$@" { *id = id__VSub_At; break; }
539 "$#" { *id = id__VSub_Pound; break; }
540 "$$" { *id = id__VSub_Dollar; break; }
541 "$*" { *id = id__VSub_Star; break; }
542 "$-" { *id = id__VSub_Hyphen; break; }
543 "$?" { *id = id__VSub_QMark; break; }
544 ",(" { *id = id__ExtGlob_Comma; break; }
545 "@(" { *id = id__ExtGlob_At; break; }
546 "*(" { *id = id__ExtGlob_Star; break; }
547 "+(" { *id = id__ExtGlob_Plus; break; }
548 "?(" { *id = id__ExtGlob_QMark; break; }
549 "!(" { *id = id__ExtGlob_Bang; break; }
550 "~" { *id = id__Lit_Tilde; break; }
551 [^$`~/}"'\x00\\#%<>@!?+*]+ { *id = id__Lit_Chars; break; }
552 [^\x00] { *id = id__Lit_Other; break; }
553 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
554 */
555 }
556 break;
557
558 case lex_mode__VSub_ArgDQ:
559 for (;;) {
560 /*!re2c
561 "\\" [$`"\\] { *id = id__Lit_EscapedChar; break; }
562 "\\}" { *id = id__Lit_EscapedChar; break; }
563 "\\\n" { *id = id__Ignored_LineCont; break; }
564 "\\" { *id = id__Lit_BadBackslash; break; }
565 "/" { *id = id__Lit_Slash; break; }
566 "#" { *id = id__Lit_Pound; break; }
567 "%" { *id = id__Lit_Percent; break; }
568 "}" { *id = id__Right_DollarBrace; break; }
569 "$" { *id = id__Lit_Dollar; break; }
570 "`" { *id = id__Left_Backtick; break; }
571 "$(" { *id = id__Left_DollarParen; break; }
572 "${" { *id = id__Left_DollarBrace; break; }
573 "$" "{" "(" [^)\x00]+ ")" { *id = id__Left_DollarBraceZsh; break; }
574 "$((" { *id = id__Left_DollarDParen; break; }
575 "$[" { *id = id__Left_DollarBracket; break; }
576 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
577 "$" [0-9] { *id = id__VSub_Number; break; }
578 "$!" { *id = id__VSub_Bang; break; }
579 "$@" { *id = id__VSub_At; break; }
580 "$#" { *id = id__VSub_Pound; break; }
581 "$$" { *id = id__VSub_Dollar; break; }
582 "$*" { *id = id__VSub_Star; break; }
583 "$-" { *id = id__VSub_Hyphen; break; }
584 "$?" { *id = id__VSub_QMark; break; }
585 [^$`/}"\x00\\#%]+ { *id = id__Lit_Chars; break; }
586 "\"" { *id = id__Left_DoubleQuote; break; }
587 "$'" { *id = id__Left_DollarSingleQuote; break; }
588 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
589 */
590 }
591 break;
592
593 case lex_mode__VSub_Zsh:
594 for (;;) {
595 /*!re2c
596 "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; }
597 "\\\n" { *id = id__Ignored_LineCont; break; }
598 "`" { *id = id__Left_Backtick; break; }
599 "$(" { *id = id__Left_DollarParen; break; }
600 "${" { *id = id__Left_DollarBrace; break; }
601 "$" "{" "(" [^)\x00]+ ")" { *id = id__Left_DollarBraceZsh; break; }
602 "$((" { *id = id__Left_DollarDParen; break; }
603 "$[" { *id = id__Left_DollarBracket; break; }
604 "\"" { *id = id__Left_DoubleQuote; break; }
605 "'" { *id = id__Left_SingleQuote; break; }
606 "$\"" { *id = id__Left_DollarDoubleQuote; break; }
607 "$'" { *id = id__Left_DollarSingleQuote; break; }
608 "<(" { *id = id__Left_ProcSubIn; break; }
609 ">(" { *id = id__Left_ProcSubOut; break; }
610 "}" { *id = id__Right_DollarBrace; break; }
611 [^\x00] { *id = id__Lit_Other; break; }
612 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
613 */
614 }
615 break;
616
617 case lex_mode__BashRegex:
618 for (;;) {
619 /*!re2c
620 "`" { *id = id__Left_Backtick; break; }
621 "$(" { *id = id__Left_DollarParen; break; }
622 "${" { *id = id__Left_DollarBrace; break; }
623 "$" "{" "(" [^)\x00]+ ")" { *id = id__Left_DollarBraceZsh; break; }
624 "$((" { *id = id__Left_DollarDParen; break; }
625 "$[" { *id = id__Left_DollarBracket; break; }
626 "\"" { *id = id__Left_DoubleQuote; break; }
627 "'" { *id = id__Left_SingleQuote; break; }
628 "$\"" { *id = id__Left_DollarDoubleQuote; break; }
629 "$'" { *id = id__Left_DollarSingleQuote; break; }
630 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
631 "$" [0-9] { *id = id__VSub_Number; break; }
632 "$!" { *id = id__VSub_Bang; break; }
633 "$@" { *id = id__VSub_At; break; }
634 "$#" { *id = id__VSub_Pound; break; }
635 "$$" { *id = id__VSub_Dollar; break; }
636 "$*" { *id = id__VSub_Star; break; }
637 "$-" { *id = id__VSub_Hyphen; break; }
638 "$?" { *id = id__VSub_QMark; break; }
639 [\x80-\xffa-zA-Z0-9_.\-]+ { *id = id__Lit_Chars; break; }
640 "~" { *id = id__Lit_Tilde; break; }
641 "/" { *id = id__Lit_Slash; break; }
642 [ \t]+ { *id = id__WS_Space; break; }
643 "(" { *id = id__BashRegex_LParen; break; }
644 ")" { *id = id__Op_RParen; break; }
645 "\n" { *id = id__BashRegex_AllowedInParens; break; }
646 "&" { *id = id__BashRegex_AllowedInParens; break; }
647 ";" { *id = id__BashRegex_AllowedInParens; break; }
648 ">" { *id = id__BashRegex_AllowedInParens; break; }
649 "<" { *id = id__BashRegex_AllowedInParens; break; }
650 [^\x00] { *id = id__Lit_Other; break; }
651 "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; }
652 "\\\n" { *id = id__Ignored_LineCont; break; }
653 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
654 */
655 }
656 break;
657
658 case lex_mode__FuncParens:
659 for (;;) {
660 /*!re2c
661 [ \t]* "(" [ \t]* ")" { *id = id__LookAhead_FuncParens; break; }
662 [^\x00] { *id = id__Unknown_Tok; break; }
663 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
664 */
665 }
666 break;
667
668 case lex_mode__PrintfOuter:
669 for (;;) {
670 /*!re2c
671 "\\" "x" [0-9a-fA-F]{1,2} { *id = id__Char_Hex; break; }
672 "\\" "u" [0-9a-fA-F]{1,4} { *id = id__Char_Unicode4; break; }
673 "\\" "U" [0-9a-fA-F]{1,8} { *id = id__Char_Unicode8; break; }
674 "\\" [0abeEfrtnv\\] { *id = id__Char_OneChar; break; }
675 "\\" { *id = id__Unknown_Backslash; break; }
676 "\\" [0-7]{1,3} { *id = id__Char_Octal3; break; }
677 [^%\\\x00]+ { *id = id__Lit_Chars; break; }
678 "%%" { *id = id__Format_EscapedPercent; break; }
679 "%" { *id = id__Format_Percent; break; }
680 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
681 */
682 }
683 break;
684
685 case lex_mode__PrintfPercent:
686 for (;;) {
687 /*!re2c
688 [\- +#] { *id = id__Format_Flag; break; }
689 "0" { *id = id__Format_Zero; break; }
690 [1-9][0-9]* { *id = id__Format_Num; break; }
691 "*" { *id = id__Format_Star; break; }
692 "." { *id = id__Format_Dot; break; }
693 [disqbcouxXeEfFgG] { *id = id__Format_Type; break; }
694 "(" [^()\x00]* ")" "T" { *id = id__Format_Time; break; }
695 [^\x00] { *id = id__Unknown_Tok; break; }
696 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
697 */
698 }
699 break;
700
701 case lex_mode__Expr:
702 for (;;) {
703 /*!re2c
704 "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_DollarName; break; }
705 "$" [0-9] { *id = id__VSub_Number; break; }
706 "$!" { *id = id__VSub_Bang; break; }
707 "$@" { *id = id__VSub_At; break; }
708 "$#" { *id = id__VSub_Pound; break; }
709 "$$" { *id = id__VSub_Dollar; break; }
710 "$*" { *id = id__VSub_Star; break; }
711 "$-" { *id = id__VSub_Hyphen; break; }
712 "$?" { *id = id__VSub_QMark; break; }
713 "$(" { *id = id__Left_DollarParen; break; }
714 "${" { *id = id__Left_DollarBrace; break; }
715 "$[" { *id = id__Left_DollarBracket; break; }
716 "\"" { *id = id__Left_DoubleQuote; break; }
717 "$\"" { *id = id__Left_DollarDoubleQuote; break; }
718 "j\"" { *id = id__Left_JDoubleQuote; break; }
719 "'" { *id = id__Left_SingleQuote; break; }
720 "r'" { *id = id__Left_RSingleQuote; break; }
721 "u'" { *id = id__Left_USingleQuote; break; }
722 "b'" { *id = id__Left_BSingleQuote; break; }
723 "$'" { *id = id__Left_DollarSingleQuote; break; }
724 "^\"" { *id = id__Left_CaretDoubleQuote; break; }
725 "\"\"\"" { *id = id__Left_TDoubleQuote; break; }
726 "$\"\"\"" { *id = id__Left_DollarTDoubleQuote; break; }
727 "'''" { *id = id__Left_TSingleQuote; break; }
728 "r'''" { *id = id__Left_RTSingleQuote; break; }
729 "u'''" { *id = id__Left_UTSingleQuote; break; }
730 "b'''" { *id = id__Left_BTSingleQuote; break; }
731 "@(" { *id = id__Left_AtParen; break; }
732 "@[" { *id = id__Left_AtBracket; break; }
733 "^(" { *id = id__Left_CaretParen; break; }
734 "^[" { *id = id__Left_CaretBracket; break; }
735 "^{" { *id = id__Left_CaretBrace; break; }
736 ":|" { *id = id__Left_ColonPipe; break; }
737 "%(" { *id = id__Left_PercentParen; break; }
738 "%[" { *id = id__Expr_Reserved; break; }
739 "%{" { *id = id__Expr_Reserved; break; }
740 "@{" { *id = id__Expr_Reserved; break; }
741 ";" { *id = id__Op_Semi; break; }
742 "(" { *id = id__Op_LParen; break; }
743 ")" { *id = id__Op_RParen; break; }
744 "[" { *id = id__Op_LBracket; break; }
745 "]" { *id = id__Op_RBracket; break; }
746 "{" { *id = id__Op_LBrace; break; }
747 "}" { *id = id__Op_RBrace; break; }
748 "null" { *id = id__Expr_Null; break; }
749 "true" { *id = id__Expr_True; break; }
750 "false" { *id = id__Expr_False; break; }
751 "and" { *id = id__Expr_And; break; }
752 "or" { *id = id__Expr_Or; break; }
753 "not" { *id = id__Expr_Not; break; }
754 "for" { *id = id__Expr_For; break; }
755 "is" { *id = id__Expr_Is; break; }
756 "in" { *id = id__Expr_In; break; }
757 "if" { *id = id__Expr_If; break; }
758 "else" { *id = id__Expr_Else; break; }
759 "func" { *id = id__Expr_Func; break; }
760 "proc" { *id = id__Expr_Proc; break; }
761 "capture" { *id = id__Expr_Capture; break; }
762 "as" { *id = id__Expr_As; break; }
763 "\\" [\\"'nrt] { *id = id__Char_OneChar; break; }
764 "\\" "y" [0-9a-fA-F]{2,2} { *id = id__Char_YHex; break; }
765 "\\" "x" [0-9a-fA-F]{2,2} { *id = id__Char_Hex; break; }
766 "\\" [uU]"{" [0-9a-fA-F]{1,6} "}" { *id = id__Char_UBraced; break; }
767 [0-9]("_" ? [0-9])* { *id = id__Expr_DecInt; break; }
768 "0" [bB]("_" ? [01])+ { *id = id__Expr_BinInt; break; }
769 "0" [oO]("_" ? [0-7])+ { *id = id__Expr_OctInt; break; }
770 "0" [xX]("_" ? [0-9a-fA-F])+ { *id = id__Expr_HexInt; break; }
771 [0-9]("_" ? [0-9])* ("." [0-9]("_" ? [0-9])* )? ([eE][+\-]? [0-9]+ )? { *id = id__Expr_Float; break; }
772 [a-zA-Z_][a-zA-Z0-9_]* { *id = id__Expr_Name; break; }
773 "%" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__Expr_Symbol; break; }
774 "," { *id = id__Arith_Comma; break; }
775 ":" { *id = id__Arith_Colon; break; }
776 "?" { *id = id__Arith_QMark; break; }
777 "+" { *id = id__Arith_Plus; break; }
778 "-" { *id = id__Arith_Minus; break; }
779 "*" { *id = id__Arith_Star; break; }
780 "^" { *id = id__Arith_Caret; break; }
781 "/" { *id = id__Arith_Slash; break; }
782 "%" { *id = id__Arith_Percent; break; }
783 "**" { *id = id__Arith_DStar; break; }
784 "++" { *id = id__Arith_DPlus; break; }
785 "<" { *id = id__Arith_Less; break; }
786 ">" { *id = id__Arith_Great; break; }
787 "<=" { *id = id__Arith_LessEqual; break; }
788 ">=" { *id = id__Arith_GreatEqual; break; }
789 "===" { *id = id__Expr_TEqual; break; }
790 "!==" { *id = id__Expr_NotDEqual; break; }
791 "==" { *id = id__Unknown_DEqual; break; }
792 "&&" { *id = id__Unknown_DAmp; break; }
793 "||" { *id = id__Unknown_DPipe; break; }
794 "&" { *id = id__Arith_Amp; break; }
795 "|" { *id = id__Arith_Pipe; break; }
796 ">>" { *id = id__Arith_DGreat; break; }
797 "<<" { *id = id__Arith_DLess; break; }
798 "~" { *id = id__Arith_Tilde; break; }
799 "!~" { *id = id__Expr_NotTilde; break; }
800 "~~" { *id = id__Expr_DTilde; break; }
801 "!~~" { *id = id__Expr_NotDTilde; break; }
802 "=" { *id = id__Arith_Equal; break; }
803 "+=" { *id = id__Arith_PlusEqual; break; }
804 "-=" { *id = id__Arith_MinusEqual; break; }
805 "*=" { *id = id__Arith_StarEqual; break; }
806 "/=" { *id = id__Arith_SlashEqual; break; }
807 "%=" { *id = id__Arith_PercentEqual; break; }
808 ">>=" { *id = id__Arith_DGreatEqual; break; }
809 "<<=" { *id = id__Arith_DLessEqual; break; }
810 "&=" { *id = id__Arith_AmpEqual; break; }
811 "|=" { *id = id__Arith_PipeEqual; break; }
812 "^=" { *id = id__Arith_CaretEqual; break; }
813 "**=" { *id = id__Expr_DStarEqual; break; }
814 "//=" { *id = id__Expr_DSlashEqual; break; }
815 "!" { *id = id__Expr_Bang; break; }
816 "//" { *id = id__Expr_DSlash; break; }
817 "~==" { *id = id__Expr_TildeDEqual; break; }
818 "." { *id = id__Expr_Dot; break; }
819 ".." { *id = id__Unknown_DDot; break; }
820 "..<" { *id = id__Expr_DDotLessThan; break; }
821 "..=" { *id = id__Expr_DDotEqual; break; }
822 "->" { *id = id__Expr_RArrow; break; }
823 "$" { *id = id__Expr_Dollar; break; }
824 "<-" { *id = id__Expr_Reserved; break; }
825 "=>" { *id = id__Expr_RDArrow; break; }
826 "..." { *id = id__Expr_Ellipsis; break; }
827 "///" { *id = id__Expr_Reserved; break; }
828 "@" { *id = id__Expr_At; break; }
829 "@@" { *id = id__Expr_DoubleAt; break; }
830 "\n" { *id = id__Op_Newline; break; }
831 "#" [^\n\x00]* { *id = id__Ignored_Comment; break; }
832 [ \t\r]+ { *id = id__Ignored_Space; break; }
833 "\\\n" { *id = id__Ignored_LineCont; break; }
834 [^\x00] { *id = id__Unknown_Tok; break; }
835 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
836 */
837 }
838 break;
839
840 default:
841 assert(0);
842
843 }
844 *end_pos = p - line; /* relative */
845}
846
847
848static inline void MatchEchoToken(const unsigned char* line, int line_len,
849 int start_pos, int* id, int* end_pos) {
850 assert(start_pos <= line_len); /* caller should have checked */
851
852 const unsigned char* p = line + start_pos; /* modified by re2c */
853
854 /* Echo and History lexer apparently need this, but others don't */
855 __attribute__((unused)) const unsigned char* YYMARKER;
856
857 for (;;) {
858 /*!re2c
859
860 "\\" "x" [0-9a-fA-F]{1,2} { *id = id__Char_Hex; break; }
861 "\\" "u" [0-9a-fA-F]{1,4} { *id = id__Char_Unicode4; break; }
862 "\\" "U" [0-9a-fA-F]{1,8} { *id = id__Char_Unicode8; break; }
863 "\\" [0abeEfrtnv\\] { *id = id__Char_OneChar; break; }
864 "\\" { *id = id__Unknown_Backslash; break; }
865 "\\" "0" [0-7]{1,3} { *id = id__Char_Octal4; break; }
866 "\\c" { *id = id__Char_Stop; break; }
867 [^\\\x00]+ { *id = id__Lit_Chars; break; }
868 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
869
870 */
871 }
872 *end_pos = p - line; /* relative */
873}
874
875
876static inline void MatchPrintfBToken(const unsigned char* line, int line_len,
877 int start_pos, int* id, int* end_pos) {
878 assert(start_pos <= line_len); /* caller should have checked */
879
880 const unsigned char* p = line + start_pos; /* modified by re2c */
881
882 /* Echo and History lexer apparently need this, but others don't */
883 __attribute__((unused)) const unsigned char* YYMARKER;
884
885 for (;;) {
886 /*!re2c
887
888 "\\" "x" [0-9a-fA-F]{1,2} { *id = id__Char_Hex; break; }
889 "\\" "u" [0-9a-fA-F]{1,4} { *id = id__Char_Unicode4; break; }
890 "\\" "U" [0-9a-fA-F]{1,8} { *id = id__Char_Unicode8; break; }
891 "\\" [0abeEfrtnv\\] { *id = id__Char_OneChar; break; }
892 "\\" { *id = id__Unknown_Backslash; break; }
893 "\\" "0" [0-7]{1,3} { *id = id__Char_Octal4; break; }
894 "\\c" { *id = id__Char_Stop; break; }
895 [^\\\x00]+ { *id = id__Lit_Chars; break; }
896 "\\" [0-7]{1,3} { *id = id__Char_Octal3; break; }
897 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
898
899 */
900 }
901 *end_pos = p - line; /* relative */
902}
903
904
905static inline void MatchGlobToken(const unsigned char* line, int line_len,
906 int start_pos, int* id, int* end_pos) {
907 assert(start_pos <= line_len); /* caller should have checked */
908
909 const unsigned char* p = line + start_pos; /* modified by re2c */
910
911 /* Echo and History lexer apparently need this, but others don't */
912 __attribute__((unused)) const unsigned char* YYMARKER;
913
914 for (;;) {
915 /*!re2c
916
917 "*" { *id = id__Glob_Star; break; }
918 "?" { *id = id__Glob_QMark; break; }
919 "!" { *id = id__Glob_Bang; break; }
920 "^" { *id = id__Glob_Caret; break; }
921 "[" { *id = id__Glob_LBracket; break; }
922 "]" { *id = id__Glob_RBracket; break; }
923 "\\" [^\x00] { *id = id__Glob_EscapedChar; break; }
924 "\\" { *id = id__Glob_BadBackslash; break; }
925 [a-zA-Z0-9_]+ { *id = id__Glob_CleanLiterals; break; }
926 [^\x00] { *id = id__Glob_OtherLiteral; break; }
927 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
928
929 */
930 }
931 *end_pos = p - line; /* relative */
932}
933
934
935static inline void MatchPS1Token(const unsigned char* line, int line_len,
936 int start_pos, int* id, int* end_pos) {
937 assert(start_pos <= line_len); /* caller should have checked */
938
939 const unsigned char* p = line + start_pos; /* modified by re2c */
940
941 /* Echo and History lexer apparently need this, but others don't */
942 __attribute__((unused)) const unsigned char* YYMARKER;
943
944 for (;;) {
945 /*!re2c
946
947 "\\" [0-7]{1,3} { *id = id__PS_Octal3; break; }
948 "\\" [adehHjlnrstT@AuvVwW!#$\\] { *id = id__PS_Subst; break; }
949 "\\" "D" "{" [^}\x00]* "}" { *id = id__PS_Subst; break; }
950 "\\[" { *id = id__PS_LBrace; break; }
951 "\\]" { *id = id__PS_RBrace; break; }
952 [^\\\x00]+ { *id = id__PS_Literals; break; }
953 "\\" { *id = id__PS_BadBackslash; break; }
954 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
955
956 */
957 }
958 *end_pos = p - line; /* relative */
959}
960
961
962static inline void MatchHistoryToken(const unsigned char* line, int line_len,
963 int start_pos, int* id, int* end_pos) {
964 assert(start_pos <= line_len); /* caller should have checked */
965
966 const unsigned char* p = line + start_pos; /* modified by re2c */
967
968 /* Echo and History lexer apparently need this, but others don't */
969 __attribute__((unused)) const unsigned char* YYMARKER;
970
971 for (;;) {
972 /*!re2c
973
974 "!" [!*^$] { *id = id__History_Op; break; }
975 "!" "-" ? [0-9]+ { *id = id__History_Num; break; }
976 "!" "?" ? [a-zA-Z_/.][0-9a-zA-Z_/.]+ [ \t\r\n] { *id = id__History_Search; break; }
977 "#" [^\x00]* { *id = id__History_Other; break; }
978 "'" [^'\x00]* "'" ? { *id = id__History_Other; break; }
979 [^!\\'#\x00]+ { *id = id__History_Other; break; }
980 "\\" [^\x00] { *id = id__History_Other; break; }
981 [^\x00] { *id = id__History_Other; break; }
982 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
983
984 */
985 }
986 *end_pos = p - line; /* relative */
987}
988
989
990static inline void MatchBraceRangeToken(const unsigned char* line, int line_len,
991 int start_pos, int* id, int* end_pos) {
992 assert(start_pos <= line_len); /* caller should have checked */
993
994 const unsigned char* p = line + start_pos; /* modified by re2c */
995
996 /* Echo and History lexer apparently need this, but others don't */
997 __attribute__((unused)) const unsigned char* YYMARKER;
998
999 for (;;) {
1000 /*!re2c
1001
1002 "-" ? [0-9]+ { *id = id__Range_Int; break; }
1003 [a-zA-Z] { *id = id__Range_Char; break; }
1004 "." "." { *id = id__Range_Dots; break; }
1005 [^\x00] { *id = id__Range_Other; break; }
1006 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
1007
1008 */
1009 }
1010 *end_pos = p - line; /* relative */
1011}
1012
1013
1014static inline void MatchJ8Token(const unsigned char* line, int line_len,
1015 int start_pos, int* id, int* end_pos) {
1016 assert(start_pos <= line_len); /* caller should have checked */
1017
1018 const unsigned char* p = line + start_pos; /* modified by re2c */
1019
1020 /* Echo and History lexer apparently need this, but others don't */
1021 __attribute__((unused)) const unsigned char* YYMARKER;
1022
1023 for (;;) {
1024 /*!re2c
1025
1026 "\"" { *id = id__Left_DoubleQuote; break; }
1027 "j\"" { *id = id__Left_JDoubleQuote; break; }
1028 "u'" { *id = id__Left_USingleQuote; break; }
1029 "'" { *id = id__Left_USingleQuote; break; }
1030 "b'" { *id = id__Left_BSingleQuote; break; }
1031 "[" { *id = id__J8_LBracket; break; }
1032 "]" { *id = id__J8_RBracket; break; }
1033 "{" { *id = id__J8_LBrace; break; }
1034 "}" { *id = id__J8_RBrace; break; }
1035 "(" { *id = id__J8_LParen; break; }
1036 ")" { *id = id__J8_RParen; break; }
1037 "," { *id = id__J8_Comma; break; }
1038 ":" { *id = id__J8_Colon; break; }
1039 "null" { *id = id__J8_Null; break; }
1040 "true" { *id = id__J8_Bool; break; }
1041 "false" { *id = id__J8_Bool; break; }
1042 "-" ? ([1-9][0-9]* | [0-9]) { *id = id__J8_Int; break; }
1043 "-" ? ([1-9][0-9]* | [0-9])("." [0-9]+ )? ([eE][\-+]? [0-9]+ )? { *id = id__J8_Float; break; }
1044 [a-zA-Z_][a-zA-Z0-9_]* { *id = id__J8_Identifier; break; }
1045 [~!@$%^&*+=|;./<>?\-]+ { *id = id__J8_Operator; break; }
1046 [ \r\t]+ { *id = id__Ignored_Space; break; }
1047 "\n" { *id = id__Ignored_Newline; break; }
1048 "#" [^\n\x00]* { *id = id__Ignored_Comment; break; }
1049 [^\x00] { *id = id__Unknown_Tok; break; }
1050 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
1051
1052 */
1053 }
1054 *end_pos = p - line; /* relative */
1055}
1056
1057
1058static inline void MatchJ8LinesToken(const unsigned char* line, int line_len,
1059 int start_pos, int* id, int* end_pos) {
1060 assert(start_pos <= line_len); /* caller should have checked */
1061
1062 const unsigned char* p = line + start_pos; /* modified by re2c */
1063
1064 /* Echo and History lexer apparently need this, but others don't */
1065 __attribute__((unused)) const unsigned char* YYMARKER;
1066
1067 for (;;) {
1068 /*!re2c
1069
1070 "\"" { *id = id__Left_DoubleQuote; break; }
1071 "j\"" { *id = id__Left_JDoubleQuote; break; }
1072 "u'" { *id = id__Left_USingleQuote; break; }
1073 "'" { *id = id__Left_USingleQuote; break; }
1074 "b'" { *id = id__Left_BSingleQuote; break; }
1075 [ \r\t]+ { *id = id__WS_Space; break; }
1076 "\n" { *id = id__J8_Newline; break; }
1077 [\x01-\x1f] { *id = id__Char_AsciiControl; break; }
1078 [^ \t\r\n'"\x00-\x1f]+ { *id = id__Lit_Chars; break; }
1079 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
1080
1081 */
1082 }
1083 *end_pos = p - line; /* relative */
1084}
1085
1086
1087static inline void MatchJ8StrToken(const unsigned char* line, int line_len,
1088 int start_pos, int* id, int* end_pos) {
1089 assert(start_pos <= line_len); /* caller should have checked */
1090
1091 const unsigned char* p = line + start_pos; /* modified by re2c */
1092
1093 /* Echo and History lexer apparently need this, but others don't */
1094 __attribute__((unused)) const unsigned char* YYMARKER;
1095
1096 for (;;) {
1097 /*!re2c
1098
1099 "'" { *id = id__Right_SingleQuote; break; }
1100 "\\" [\\"/bfnrt] { *id = id__Char_OneChar; break; }
1101 "\\'" { *id = id__Char_OneChar; break; }
1102 "\\" "y" [0-9a-fA-F]{2,2} { *id = id__Char_YHex; break; }
1103 "\\" [uU]"{" [0-9a-fA-F]{1,6} "}" { *id = id__Char_UBraced; break; }
1104 "\\" { *id = id__Unknown_Backslash; break; }
1105 [\x01-\x1f] { *id = id__Char_AsciiControl; break; }
1106 [^\\'\x00-\x1f]+ { *id = id__Lit_Chars; break; }
1107 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
1108
1109 */
1110 }
1111 *end_pos = p - line; /* relative */
1112}
1113
1114
1115static inline void MatchJsonStrToken(const unsigned char* line, int line_len,
1116 int start_pos, int* id, int* end_pos) {
1117 assert(start_pos <= line_len); /* caller should have checked */
1118
1119 const unsigned char* p = line + start_pos; /* modified by re2c */
1120
1121 /* Echo and History lexer apparently need this, but others don't */
1122 __attribute__((unused)) const unsigned char* YYMARKER;
1123
1124 for (;;) {
1125 /*!re2c
1126
1127 "\"" { *id = id__Right_DoubleQuote; break; }
1128 "\\" [\\"/bfnrt] { *id = id__Char_OneChar; break; }
1129 "\\" "u" [0-9a-fA-F]{4,4} { *id = id__Char_Unicode4; break; }
1130 "\\" "u" [dD][89aAbB][0-9a-fA-F][0-9a-fA-F]"\\" "u" [dD][cCdDeEfF][0-9a-fA-F][0-9a-fA-F] { *id = id__Char_SurrogatePair; break; }
1131 "\\" { *id = id__Unknown_Backslash; break; }
1132 [\x01-\x1f] { *id = id__Char_AsciiControl; break; }
1133 [^\\"\x00-\x1f]+ { *id = id__Lit_Chars; break; }
1134 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
1135
1136 */
1137 }
1138 *end_pos = p - line; /* relative */
1139}
1140
1141
1142static inline void MatchShNumberToken(const unsigned char* line, int line_len,
1143 int start_pos, int* id, int* end_pos) {
1144 assert(start_pos <= line_len); /* caller should have checked */
1145
1146 const unsigned char* p = line + start_pos; /* modified by re2c */
1147
1148 /* Echo and History lexer apparently need this, but others don't */
1149 __attribute__((unused)) const unsigned char* YYMARKER;
1150
1151 for (;;) {
1152 /*!re2c
1153
1154 "0" { *id = id__ShNumber_Dec; break; }
1155 [1-9][0-9]* { *id = id__ShNumber_Dec; break; }
1156 "0" [0-7]+ { *id = id__ShNumber_Oct; break; }
1157 "0" [xX][0-9A-Fa-f]+ { *id = id__ShNumber_Hex; break; }
1158 [1-9][0-9]* "#" [0-9a-zA-Z@_]+ { *id = id__ShNumber_BaseN; break; }
1159 [^\x00] { *id = id__Unknown_Tok; break; }
1160 "\x00" { *id = id__Eol_Tok; *end_pos = start_pos; return; }
1161
1162 */
1163 }
1164 *end_pos = p - line; /* relative */
1165}
1166
1167
1168static inline int IsUtf8Codeset(const unsigned char* s, int len) {
1169 const unsigned char* p = s; /* modified by re2c */
1170 const unsigned char* end = s + len;
1171
1172 /* MatchBraceRangeToken needs this, but others don't */
1173 __attribute__((unused)) const unsigned char* YYMARKER;
1174
1175 /*!re2c
1176 re2c:define:YYCTYPE = "unsigned char";
1177 re2c:define:YYCURSOR = p;
1178 [uU][tT][fF]"-" ? "8" { return p == end; } // Match must be anchored right, like $
1179 * { return 0; }
1180 */
1181}
1182
1183
1184static inline int IsValidVarName(const unsigned char* s, int len) {
1185 const unsigned char* p = s; /* modified by re2c */
1186 const unsigned char* end = s + len;
1187
1188 /* MatchBraceRangeToken needs this, but others don't */
1189 __attribute__((unused)) const unsigned char* YYMARKER;
1190
1191 /*!re2c
1192 re2c:define:YYCTYPE = "unsigned char";
1193 re2c:define:YYCURSOR = p;
1194 [a-zA-Z_][a-zA-Z0-9_]* { return p == end; } // Match must be anchored right, like $
1195 * { return 0; }
1196 */
1197}
1198
1199
1200static inline int ShouldHijack(const unsigned char* s, int len) {
1201 const unsigned char* p = s; /* modified by re2c */
1202 const unsigned char* end = s + len;
1203
1204 /* MatchBraceRangeToken needs this, but others don't */
1205 __attribute__((unused)) const unsigned char* YYMARKER;
1206
1207 /*!re2c
1208 re2c:define:YYCTYPE = "unsigned char";
1209 re2c:define:YYCURSOR = p;
1210 "#" "!" [^\x00]* "s" "h" [ \t\r\n][^\x00]* { return p == end; } // Match must be anchored right, like $
1211 * { return 0; }
1212 */
1213}
1214
1215
1216static inline int LooksLikeInteger(const unsigned char* s, int len) {
1217 const unsigned char* p = s; /* modified by re2c */
1218 const unsigned char* end = s + len;
1219
1220 /* MatchBraceRangeToken needs this, but others don't */
1221 __attribute__((unused)) const unsigned char* YYMARKER;
1222
1223 /*!re2c
1224 re2c:define:YYCTYPE = "unsigned char";
1225 re2c:define:YYCURSOR = p;
1226 [ \t\r\n]* "-" ? [0-9]+ [ \t\r\n]* { return p == end; } // Match must be anchored right, like $
1227 * { return 0; }
1228 */
1229}
1230
1231
1232static inline int LooksLikeYshInt(const unsigned char* s, int len) {
1233 const unsigned char* p = s; /* modified by re2c */
1234 const unsigned char* end = s + len;
1235
1236 /* MatchBraceRangeToken needs this, but others don't */
1237 __attribute__((unused)) const unsigned char* YYMARKER;
1238
1239 /*!re2c
1240 re2c:define:YYCTYPE = "unsigned char";
1241 re2c:define:YYCURSOR = p;
1242 [ \t\r\n]* "-" ? [0-9]("_" ? [0-9])* [ \t\r\n]* { return p == end; } // Match must be anchored right, like $
1243 * { return 0; }
1244 */
1245}
1246
1247
1248static inline int LooksLikeYshFloat(const unsigned char* s, int len) {
1249 const unsigned char* p = s; /* modified by re2c */
1250 const unsigned char* end = s + len;
1251
1252 /* MatchBraceRangeToken needs this, but others don't */
1253 __attribute__((unused)) const unsigned char* YYMARKER;
1254
1255 /*!re2c
1256 re2c:define:YYCTYPE = "unsigned char";
1257 re2c:define:YYCURSOR = p;
1258 [ \t\r\n]* "-" ? [0-9]("_" ? [0-9])* ("." [0-9]("_" ? [0-9])* )? ([eE][+\-]? [0-9]+ )? [ \t\r\n]* { return p == end; } // Match must be anchored right, like $
1259 * { return 0; }
1260 */
1261}
1262
1263
1264static inline int BracketUnary(const unsigned char* s, int len) {
1265 const unsigned char* p = s; /* modified by re2c */
1266 const unsigned char* end = s + len;
1267
1268 __attribute__((unused)) const unsigned char* YYMARKER;
1269 int id;
1270
1271 for (;;) {
1272 /*!re2c
1273
1274 "-G" { id = id__BoolUnary_G; break; }
1275 "-L" { id = id__BoolUnary_L; break; }
1276 "-N" { id = id__BoolUnary_N; break; }
1277 "-O" { id = id__BoolUnary_O; break; }
1278 "-R" { id = id__BoolUnary_R; break; }
1279 "-S" { id = id__BoolUnary_S; break; }
1280 "-a" { id = id__BoolUnary_a; break; }
1281 "-b" { id = id__BoolUnary_b; break; }
1282 "-c" { id = id__BoolUnary_c; break; }
1283 "-d" { id = id__BoolUnary_d; break; }
1284 "-e" { id = id__BoolUnary_e; break; }
1285 "-f" { id = id__BoolUnary_f; break; }
1286 "-g" { id = id__BoolUnary_g; break; }
1287 "-h" { id = id__BoolUnary_h; break; }
1288 "-k" { id = id__BoolUnary_k; break; }
1289 "-n" { id = id__BoolUnary_n; break; }
1290 "-o" { id = id__BoolUnary_o; break; }
1291 "-p" { id = id__BoolUnary_p; break; }
1292 "-r" { id = id__BoolUnary_r; break; }
1293 "-s" { id = id__BoolUnary_s; break; }
1294 "-t" { id = id__BoolUnary_t; break; }
1295 "-u" { id = id__BoolUnary_u; break; }
1296 "-v" { id = id__BoolUnary_v; break; }
1297 "-w" { id = id__BoolUnary_w; break; }
1298 "-x" { id = id__BoolUnary_x; break; }
1299 "-z" { id = id__BoolUnary_z; break; }
1300 * { return id__Undefined_Tok; }
1301
1302 */
1303 }
1304 // must be an exact match
1305 return (p == end) ? id : id__Undefined_Tok;
1306}
1307
1308
1309static inline int BracketBinary(const unsigned char* s, int len) {
1310 const unsigned char* p = s; /* modified by re2c */
1311 const unsigned char* end = s + len;
1312
1313 __attribute__((unused)) const unsigned char* YYMARKER;
1314 int id;
1315
1316 for (;;) {
1317 /*!re2c
1318
1319 "!=" { id = id__BoolBinary_NEqual; break; }
1320 "-ef" { id = id__BoolBinary_ef; break; }
1321 "-eq" { id = id__BoolBinary_eq; break; }
1322 "-ge" { id = id__BoolBinary_ge; break; }
1323 "-gt" { id = id__BoolBinary_gt; break; }
1324 "-le" { id = id__BoolBinary_le; break; }
1325 "-lt" { id = id__BoolBinary_lt; break; }
1326 "-ne" { id = id__BoolBinary_ne; break; }
1327 "-nt" { id = id__BoolBinary_nt; break; }
1328 "-ot" { id = id__BoolBinary_ot; break; }
1329 "<" { id = id__Op_Less; break; }
1330 "=" { id = id__BoolBinary_Equal; break; }
1331 "==" { id = id__BoolBinary_DEqual; break; }
1332 ">" { id = id__Op_Great; break; }
1333 * { return id__Undefined_Tok; }
1334
1335 */
1336 }
1337 // must be an exact match
1338 return (p == end) ? id : id__Undefined_Tok;
1339}
1340
1341
1342static inline int BracketOther(const unsigned char* s, int len) {
1343 const unsigned char* p = s; /* modified by re2c */
1344 const unsigned char* end = s + len;
1345
1346 __attribute__((unused)) const unsigned char* YYMARKER;
1347 int id;
1348
1349 for (;;) {
1350 /*!re2c
1351
1352 "!" { id = id__KW_Bang; break; }
1353 "(" { id = id__Op_LParen; break; }
1354 ")" { id = id__Op_RParen; break; }
1355 "]" { id = id__Arith_RBracket; break; }
1356 * { return id__Undefined_Tok; }
1357
1358 */
1359 }
1360 // must be an exact match
1361 return (p == end) ? id : id__Undefined_Tok;
1362}
1363