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

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