/* Common stuff */ /*!re2c re2c:define:YYCTYPE = "unsigned char"; re2c:define:YYCURSOR = p; re2c:yyfill:enable = 0; // generated code doesn't ask for more input */ static inline void MatchToken(int lex_mode, unsigned char* line, int line_len, int start_pos, int* id, int* end_pos) { // bounds checking if (start_pos >= line_len) { fprintf(stderr, "start_pos %d line_len %d\n", start_pos, line_len); assert(0); } //assert(start_pos < line_len); unsigned char* p = line + start_pos; /* modified by re2c */ //printf("p: %p q: %p\n", p, q); unsigned char* YYMARKER; /* why do we need this? */ switch (lex_mode) { case lex_mode__OUTER: for (;;) { /*!re2c "((" { *id = id__Op_DLeftParen; break; } "[[" { *id = id__KW_DLeftBracket; break; } "!" { *id = id__KW_Bang; break; } "for" { *id = id__KW_For; break; } "while" { *id = id__KW_While; break; } "until" { *id = id__KW_Until; break; } "do" { *id = id__KW_Do; break; } "done" { *id = id__KW_Done; break; } "in" { *id = id__KW_In; break; } "case" { *id = id__KW_Case; break; } "esac" { *id = id__KW_Esac; break; } "if" { *id = id__KW_If; break; } "fi" { *id = id__KW_Fi; break; } "then" { *id = id__KW_Then; break; } "else" { *id = id__KW_Else; break; } "elif" { *id = id__KW_Elif; break; } "function" { *id = id__KW_Function; break; } "time" { *id = id__KW_Time; break; } "declare" { *id = id__Assign_Declare; break; } "typeset" { *id = id__Assign_Typeset; break; } "local" { *id = id__Assign_Local; break; } "readonly" { *id = id__Assign_Readonly; break; } "break" { *id = id__ControlFlow_Break; break; } "continue" { *id = id__ControlFlow_Continue; break; } "return" { *id = id__ControlFlow_Return; break; } "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; } "\\\n" { *id = id__Ignored_LineCont; break; } "`" { *id = id__Left_Backtick; break; } "$(" { *id = id__Left_CommandSub; break; } "${" { *id = id__Left_VarSub; break; } "$((" { *id = id__Left_ArithSub; break; } "$[" { *id = id__Left_ArithSub2; break; } "\"" { *id = id__Left_DoubleQuote; break; } "'" { *id = id__Left_SingleQuote; break; } "$\"" { *id = id__Left_DollarDoubleQuote; break; } "$'" { *id = id__Left_DollarSingleQuote; break; } "<(" { *id = id__Left_ProcSubIn; break; } ">(" { *id = id__Left_ProcSubOut; break; } "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_Name; break; } "$" [0-9] { *id = id__VSub_Number; break; } "$!" { *id = id__VSub_Bang; break; } "$@" { *id = id__VSub_At; break; } "$#" { *id = id__VSub_Pound; break; } "$$" { *id = id__VSub_Dollar; break; } "$*" { *id = id__VSub_Star; break; } "$-" { *id = id__VSub_Hyphen; break; } "$?" { *id = id__VSub_QMark; break; } [a-zA-Z0-9_/.\-]+ { *id = id__Lit_Chars; break; } [a-zA-Z_][a-zA-Z0-9_]* "+" ? "=" { *id = id__Lit_VarLike; break; } "#" { *id = id__Lit_Pound; break; } "{" { *id = id__Lit_LBrace; break; } "}" { *id = id__Lit_RBrace; break; } "," { *id = id__Lit_Comma; break; } "~" { *id = id__Lit_Tilde; break; } [ \t\r]+ { *id = id__WS_Space; break; } "\n" { *id = id__Op_Newline; break; } "&" { *id = id__Op_Amp; break; } "|" { *id = id__Op_Pipe; break; } "|&" { *id = id__Op_PipeAmp; break; } "&&" { *id = id__Op_DAmp; break; } "||" { *id = id__Op_DPipe; break; } ";" { *id = id__Op_Semi; break; } ";;" { *id = id__Op_DSemi; break; } "(" { *id = id__Op_LParen; break; } ")" { *id = id__Op_RParen; break; } [0-9]* "<" { *id = id__Redir_Less; break; } [0-9]* ">" { *id = id__Redir_Great; break; } [0-9]* "<" "<" { *id = id__Redir_DLess; break; } [0-9]* "<" "<" "<" { *id = id__Redir_TLess; break; } [0-9]* ">" ">" { *id = id__Redir_DGreat; break; } [0-9]* "<" "<" "-" { *id = id__Redir_DLessDash; break; } [0-9]* ">" "&" { *id = id__Redir_GreatAnd; break; } [0-9]* "<" "&" { *id = id__Redir_LessAnd; break; } [0-9]* "<" ">" { *id = id__Redir_LessGreat; break; } [0-9]* ">" "|" { *id = id__Redir_Clobber; break; } [^\x00] { *id = id__Lit_Other; break; } "@(" { *id = id__ExtGlob_At; break; } "*(" { *id = id__ExtGlob_Star; break; } "+(" { *id = id__ExtGlob_Plus; break; } "?(" { *id = id__ExtGlob_QMark; break; } "!(" { *id = id__ExtGlob_Bang; break; } "\x00" { *id = id__Eol_Tok; break; } */ } break; case lex_mode__DBRACKET: for (;;) { /*!re2c "]]" { *id = id__Lit_DRightBracket; break; } "!" { *id = id__KW_Bang; break; } "-a" { *id = id__BoolUnary_a; break; } "-b" { *id = id__BoolUnary_b; break; } "-c" { *id = id__BoolUnary_c; break; } "-d" { *id = id__BoolUnary_d; break; } "-e" { *id = id__BoolUnary_e; break; } "-f" { *id = id__BoolUnary_f; break; } "-g" { *id = id__BoolUnary_g; break; } "-h" { *id = id__BoolUnary_h; break; } "-L" { *id = id__BoolUnary_L; break; } "-p" { *id = id__BoolUnary_p; break; } "-r" { *id = id__BoolUnary_r; break; } "-s" { *id = id__BoolUnary_s; break; } "-S" { *id = id__BoolUnary_S; break; } "-t" { *id = id__BoolUnary_t; break; } "-u" { *id = id__BoolUnary_u; break; } "-w" { *id = id__BoolUnary_w; break; } "-x" { *id = id__BoolUnary_x; break; } "-O" { *id = id__BoolUnary_O; break; } "-G" { *id = id__BoolUnary_G; break; } "-N" { *id = id__BoolUnary_N; break; } "-o" { *id = id__BoolUnary_o; break; } "-v" { *id = id__BoolUnary_v; break; } "-R" { *id = id__BoolUnary_R; break; } "-z" { *id = id__BoolUnary_z; break; } "-n" { *id = id__BoolUnary_n; break; } "-eq" { *id = id__BoolBinary_eq; break; } "-ne" { *id = id__BoolBinary_ne; break; } "-gt" { *id = id__BoolBinary_gt; break; } "-ge" { *id = id__BoolBinary_ge; break; } "-lt" { *id = id__BoolBinary_lt; break; } "-le" { *id = id__BoolBinary_le; break; } "-ef" { *id = id__BoolBinary_ef; break; } "-nt" { *id = id__BoolBinary_nt; break; } "-ot" { *id = id__BoolBinary_ot; break; } "=" { *id = id__BoolBinary_GlobEqual; break; } "==" { *id = id__BoolBinary_GlobDEqual; break; } "!=" { *id = id__BoolBinary_GlobNEqual; break; } "=~" { *id = id__BoolBinary_EqualTilde; break; } "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; } "\\\n" { *id = id__Ignored_LineCont; break; } "`" { *id = id__Left_Backtick; break; } "$(" { *id = id__Left_CommandSub; break; } "${" { *id = id__Left_VarSub; break; } "$((" { *id = id__Left_ArithSub; break; } "$[" { *id = id__Left_ArithSub2; break; } "\"" { *id = id__Left_DoubleQuote; break; } "'" { *id = id__Left_SingleQuote; break; } "$\"" { *id = id__Left_DollarDoubleQuote; break; } "$'" { *id = id__Left_DollarSingleQuote; break; } "<(" { *id = id__Left_ProcSubIn; break; } ">(" { *id = id__Left_ProcSubOut; break; } "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_Name; break; } "$" [0-9] { *id = id__VSub_Number; break; } "$!" { *id = id__VSub_Bang; break; } "$@" { *id = id__VSub_At; break; } "$#" { *id = id__VSub_Pound; break; } "$$" { *id = id__VSub_Dollar; break; } "$*" { *id = id__VSub_Star; break; } "$-" { *id = id__VSub_Hyphen; break; } "$?" { *id = id__VSub_QMark; break; } [a-zA-Z0-9_/.\-]+ { *id = id__Lit_Chars; break; } [a-zA-Z_][a-zA-Z0-9_]* "+" ? "=" { *id = id__Lit_VarLike; break; } "#" { *id = id__Lit_Pound; break; } "{" { *id = id__Lit_LBrace; break; } "}" { *id = id__Lit_RBrace; break; } "," { *id = id__Lit_Comma; break; } "~" { *id = id__Lit_Tilde; break; } [ \t\r]+ { *id = id__WS_Space; break; } "\n" { *id = id__Op_Newline; break; } "&" { *id = id__Op_Amp; break; } "|" { *id = id__Op_Pipe; break; } "|&" { *id = id__Op_PipeAmp; break; } "&&" { *id = id__Op_DAmp; break; } "||" { *id = id__Op_DPipe; break; } ";" { *id = id__Op_Semi; break; } ";;" { *id = id__Op_DSemi; break; } "(" { *id = id__Op_LParen; break; } ")" { *id = id__Op_RParen; break; } [0-9]* "<" { *id = id__Redir_Less; break; } [0-9]* ">" { *id = id__Redir_Great; break; } [0-9]* "<" "<" { *id = id__Redir_DLess; break; } [0-9]* "<" "<" "<" { *id = id__Redir_TLess; break; } [0-9]* ">" ">" { *id = id__Redir_DGreat; break; } [0-9]* "<" "<" "-" { *id = id__Redir_DLessDash; break; } [0-9]* ">" "&" { *id = id__Redir_GreatAnd; break; } [0-9]* "<" "&" { *id = id__Redir_LessAnd; break; } [0-9]* "<" ">" { *id = id__Redir_LessGreat; break; } [0-9]* ">" "|" { *id = id__Redir_Clobber; break; } [^\x00] { *id = id__Lit_Other; break; } "@(" { *id = id__ExtGlob_At; break; } "*(" { *id = id__ExtGlob_Star; break; } "+(" { *id = id__ExtGlob_Plus; break; } "?(" { *id = id__ExtGlob_QMark; break; } "!(" { *id = id__ExtGlob_Bang; break; } "\x00" { *id = id__Eol_Tok; break; } */ } break; case lex_mode__VS_2: for (;;) { /*!re2c ":-" { *id = id__VTest_ColonHyphen; break; } "-" { *id = id__VTest_Hyphen; break; } ":=" { *id = id__VTest_ColonEquals; break; } "=" { *id = id__VTest_Equals; break; } ":?" { *id = id__VTest_ColonQMark; break; } "?" { *id = id__VTest_QMark; break; } ":+" { *id = id__VTest_ColonPlus; break; } "+" { *id = id__VTest_Plus; break; } "%" { *id = id__VOp1_Percent; break; } "%%" { *id = id__VOp1_DPercent; break; } "#" { *id = id__VOp1_Pound; break; } "##" { *id = id__VOp1_DPound; break; } "^" { *id = id__VOp1_Caret; break; } "^^" { *id = id__VOp1_DCaret; break; } "," { *id = id__VOp1_Comma; break; } ",," { *id = id__VOp1_DComma; break; } "/" { *id = id__VOp2_Slash; break; } ":" { *id = id__VOp2_Colon; break; } "[" { *id = id__VOp2_LBracket; break; } "]" { *id = id__VOp2_RBracket; break; } "}" { *id = id__Right_VarSub; break; } "\\\n" { *id = id__Ignored_LineCont; break; } "\n" { *id = id__Unknown_Tok; break; } [^\x00] { *id = id__Unknown_Tok; break; } "\x00" { *id = id__Eol_Tok; break; } */ } break; case lex_mode__VS_ARG_DQ: for (;;) { /*!re2c "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; } "\\\n" { *id = id__Ignored_LineCont; break; } "/" { *id = id__Lit_Slash; break; } "#" { *id = id__Lit_Pound; break; } "%" { *id = id__Lit_Percent; break; } "}" { *id = id__Right_VarSub; break; } "`" { *id = id__Left_Backtick; break; } "$(" { *id = id__Left_CommandSub; break; } "${" { *id = id__Left_VarSub; break; } "$((" { *id = id__Left_ArithSub; break; } "$[" { *id = id__Left_ArithSub2; break; } "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_Name; break; } "$" [0-9] { *id = id__VSub_Number; break; } "$!" { *id = id__VSub_Bang; break; } "$@" { *id = id__VSub_At; break; } "$#" { *id = id__VSub_Pound; break; } "$$" { *id = id__VSub_Dollar; break; } "$*" { *id = id__VSub_Star; break; } "$-" { *id = id__VSub_Hyphen; break; } "$?" { *id = id__VSub_QMark; break; } [^$`/}"\x00\\#%]+ { *id = id__Lit_Chars; break; } "\"" { *id = id__Left_DoubleQuote; break; } [^\x00] { *id = id__Lit_Other; break; } "\x00" { *id = id__Eol_Tok; break; } */ } break; case lex_mode__DQ: for (;;) { /*!re2c "\\" [$`"\\] { *id = id__Lit_EscapedChar; break; } "\\\n" { *id = id__Ignored_LineCont; break; } "`" { *id = id__Left_Backtick; break; } "$(" { *id = id__Left_CommandSub; break; } "${" { *id = id__Left_VarSub; break; } "$((" { *id = id__Left_ArithSub; break; } "$[" { *id = id__Left_ArithSub2; break; } "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_Name; break; } "$" [0-9] { *id = id__VSub_Number; break; } "$!" { *id = id__VSub_Bang; break; } "$@" { *id = id__VSub_At; break; } "$#" { *id = id__VSub_Pound; break; } "$$" { *id = id__VSub_Dollar; break; } "$*" { *id = id__VSub_Star; break; } "$-" { *id = id__VSub_Hyphen; break; } "$?" { *id = id__VSub_QMark; break; } [^$`"\x00\\]+ { *id = id__Lit_Chars; break; } "\"" { *id = id__Right_DoubleQuote; break; } [^\x00] { *id = id__Lit_Other; break; } "\x00" { *id = id__Eol_Tok; break; } */ } break; case lex_mode__BASH_REGEX: for (;;) { /*!re2c "(" { *id = id__Lit_Chars; break; } ")" { *id = id__Lit_Chars; break; } "|" { *id = id__Lit_Chars; break; } "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; } "\\\n" { *id = id__Ignored_LineCont; break; } "`" { *id = id__Left_Backtick; break; } "$(" { *id = id__Left_CommandSub; break; } "${" { *id = id__Left_VarSub; break; } "$((" { *id = id__Left_ArithSub; break; } "$[" { *id = id__Left_ArithSub2; break; } "\"" { *id = id__Left_DoubleQuote; break; } "'" { *id = id__Left_SingleQuote; break; } "$\"" { *id = id__Left_DollarDoubleQuote; break; } "$'" { *id = id__Left_DollarSingleQuote; break; } "<(" { *id = id__Left_ProcSubIn; break; } ">(" { *id = id__Left_ProcSubOut; break; } "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_Name; break; } "$" [0-9] { *id = id__VSub_Number; break; } "$!" { *id = id__VSub_Bang; break; } "$@" { *id = id__VSub_At; break; } "$#" { *id = id__VSub_Pound; break; } "$$" { *id = id__VSub_Dollar; break; } "$*" { *id = id__VSub_Star; break; } "$-" { *id = id__VSub_Hyphen; break; } "$?" { *id = id__VSub_QMark; break; } [a-zA-Z0-9_/.\-]+ { *id = id__Lit_Chars; break; } [a-zA-Z_][a-zA-Z0-9_]* "+" ? "=" { *id = id__Lit_VarLike; break; } "#" { *id = id__Lit_Pound; break; } "{" { *id = id__Lit_LBrace; break; } "}" { *id = id__Lit_RBrace; break; } "," { *id = id__Lit_Comma; break; } "~" { *id = id__Lit_Tilde; break; } [ \t\r]+ { *id = id__WS_Space; break; } "\n" { *id = id__Op_Newline; break; } "&" { *id = id__Op_Amp; break; } "|&" { *id = id__Op_PipeAmp; break; } "&&" { *id = id__Op_DAmp; break; } "||" { *id = id__Op_DPipe; break; } ";" { *id = id__Op_Semi; break; } ";;" { *id = id__Op_DSemi; break; } [0-9]* "<" { *id = id__Redir_Less; break; } [0-9]* ">" { *id = id__Redir_Great; break; } [0-9]* "<" "<" { *id = id__Redir_DLess; break; } [0-9]* "<" "<" "<" { *id = id__Redir_TLess; break; } [0-9]* ">" ">" { *id = id__Redir_DGreat; break; } [0-9]* "<" "<" "-" { *id = id__Redir_DLessDash; break; } [0-9]* ">" "&" { *id = id__Redir_GreatAnd; break; } [0-9]* "<" "&" { *id = id__Redir_LessAnd; break; } [0-9]* "<" ">" { *id = id__Redir_LessGreat; break; } [0-9]* ">" "|" { *id = id__Redir_Clobber; break; } [^\x00] { *id = id__Lit_Other; break; } "\x00" { *id = id__Eol_Tok; break; } */ } break; case lex_mode__DOLLAR_SQ: for (;;) { /*!re2c [^'\\\x00]+ { *id = id__Lit_Chars; break; } "'" { *id = id__Right_SingleQuote; break; } "\\" [^\x00] { *id = id__Lit_EscapedChar; break; } "\\\x00" { *id = id__Unknown_Tok; break; } "\x00" { *id = id__Eol_Tok; break; } */ } break; case lex_mode__ARITH: for (;;) { /*!re2c "`" { *id = id__Left_Backtick; break; } "$(" { *id = id__Left_CommandSub; break; } "${" { *id = id__Left_VarSub; break; } "$((" { *id = id__Left_ArithSub; break; } "$[" { *id = id__Left_ArithSub2; break; } "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_Name; break; } "$" [0-9] { *id = id__VSub_Number; break; } "$!" { *id = id__VSub_Bang; break; } "$@" { *id = id__VSub_At; break; } "$#" { *id = id__VSub_Pound; break; } "$$" { *id = id__VSub_Dollar; break; } "$*" { *id = id__VSub_Star; break; } "$-" { *id = id__VSub_Hyphen; break; } "$?" { *id = id__VSub_QMark; break; } "\"" { *id = id__Left_DoubleQuote; break; } "'" { *id = id__Left_SingleQuote; break; } "$\"" { *id = id__Left_DollarDoubleQuote; break; } "$'" { *id = id__Left_DollarSingleQuote; break; } "<(" { *id = id__Left_ProcSubIn; break; } ">(" { *id = id__Left_ProcSubOut; break; } [ \t\r\n]+ { *id = id__Ignored_Space; break; } [a-zA-Z_][a-zA-Z0-9_]* { *id = id__Lit_ArithVarLike; break; } [0-9]+ { *id = id__Lit_Digits; break; } "@" { *id = id__Lit_At; break; } "#" { *id = id__Lit_Pound; break; } ";" { *id = id__Arith_Semi; break; } "," { *id = id__Arith_Comma; break; } "+" { *id = id__Arith_Plus; break; } "-" { *id = id__Arith_Minus; break; } "*" { *id = id__Arith_Star; break; } "/" { *id = id__Arith_Slash; break; } "%" { *id = id__Arith_Percent; break; } "++" { *id = id__Arith_DPlus; break; } "--" { *id = id__Arith_DMinus; break; } "**" { *id = id__Arith_DStar; break; } "(" { *id = id__Arith_LParen; break; } ")" { *id = id__Arith_RParen; break; } "[" { *id = id__Arith_LBracket; break; } "]" { *id = id__Arith_RBracket; break; } "}" { *id = id__Arith_RBrace; break; } "?" { *id = id__Arith_QMark; break; } ":" { *id = id__Arith_Colon; break; } "<=" { *id = id__Arith_LessEqual; break; } "<" { *id = id__Arith_Less; break; } ">=" { *id = id__Arith_GreatEqual; break; } ">" { *id = id__Arith_Great; break; } "==" { *id = id__Arith_DEqual; break; } "!=" { *id = id__Arith_NEqual; break; } "&&" { *id = id__Arith_DAmp; break; } "||" { *id = id__Arith_DPipe; break; } "!" { *id = id__Arith_Bang; break; } ">>" { *id = id__Arith_DGreat; break; } "<<" { *id = id__Arith_DLess; break; } "&" { *id = id__Arith_Amp; break; } "|" { *id = id__Arith_Pipe; break; } "^" { *id = id__Arith_Caret; break; } "~" { *id = id__Arith_Tilde; break; } "=" { *id = id__Arith_Equal; break; } "+=" { *id = id__Arith_PlusEqual; break; } "-=" { *id = id__Arith_MinusEqual; break; } "*=" { *id = id__Arith_StarEqual; break; } "/=" { *id = id__Arith_SlashEqual; break; } "%=" { *id = id__Arith_PercentEqual; break; } ">>=" { *id = id__Arith_DGreatEqual; break; } "<<=" { *id = id__Arith_DLessEqual; break; } "&=" { *id = id__Arith_AmpEqual; break; } "|=" { *id = id__Arith_PipeEqual; break; } "^=" { *id = id__Arith_CaretEqual; break; } "\\\n" { *id = id__Ignored_LineCont; break; } [^\x00] { *id = id__Unknown_Tok; break; } "\x00" { *id = id__Eol_Tok; break; } */ } break; case lex_mode__SQ: for (;;) { /*!re2c [^'\x00]+ { *id = id__Lit_Chars; break; } "'" { *id = id__Right_SingleQuote; break; } "\x00" { *id = id__Eol_Tok; break; } */ } break; case lex_mode__VS_1: for (;;) { /*!re2c [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_Name; break; } [0-9]+ { *id = id__VSub_Number; break; } "!" { *id = id__VSub_Bang; break; } "@" { *id = id__VSub_At; break; } "#" { *id = id__VSub_Pound; break; } "$" { *id = id__VSub_Dollar; break; } "*" { *id = id__VSub_Star; break; } "-" { *id = id__VSub_Hyphen; break; } "?" { *id = id__VSub_QMark; break; } "}" { *id = id__Right_VarSub; break; } "\\\n" { *id = id__Ignored_LineCont; break; } "\n" { *id = id__Unknown_Tok; break; } [^\x00] { *id = id__Unknown_Tok; break; } "\x00" { *id = id__Eol_Tok; break; } */ } break; case lex_mode__EXTGLOB: for (;;) { /*!re2c "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; } "\\\n" { *id = id__Ignored_LineCont; break; } "`" { *id = id__Left_Backtick; break; } "$(" { *id = id__Left_CommandSub; break; } "${" { *id = id__Left_VarSub; break; } "$((" { *id = id__Left_ArithSub; break; } "$[" { *id = id__Left_ArithSub2; break; } "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_Name; break; } "$" [0-9] { *id = id__VSub_Number; break; } "$!" { *id = id__VSub_Bang; break; } "$@" { *id = id__VSub_At; break; } "$#" { *id = id__VSub_Pound; break; } "$$" { *id = id__VSub_Dollar; break; } "$*" { *id = id__VSub_Star; break; } "$-" { *id = id__VSub_Hyphen; break; } "$?" { *id = id__VSub_QMark; break; } "@(" { *id = id__ExtGlob_At; break; } "*(" { *id = id__ExtGlob_Star; break; } "+(" { *id = id__ExtGlob_Plus; break; } "?(" { *id = id__ExtGlob_QMark; break; } "!(" { *id = id__ExtGlob_Bang; break; } [^\\$`"'|)@*+!?\x00]+ { *id = id__Lit_Chars; break; } "|" { *id = id__Op_Pipe; break; } ")" { *id = id__Op_RParen; break; } [^\x00] { *id = id__Lit_Other; break; } "\x00" { *id = id__Eol_Tok; break; } */ } break; case lex_mode__COMMENT: for (;;) { /*!re2c [^\n\x00]* { *id = id__Ignored_Comment; break; } "\x00" { *id = id__Eol_Tok; break; } */ } break; case lex_mode__VS_ARG_UNQ: for (;;) { /*!re2c "\\" [^\n\x00] { *id = id__Lit_EscapedChar; break; } "\\\n" { *id = id__Ignored_LineCont; break; } "/" { *id = id__Lit_Slash; break; } "#" { *id = id__Lit_Pound; break; } "%" { *id = id__Lit_Percent; break; } "}" { *id = id__Right_VarSub; break; } "`" { *id = id__Left_Backtick; break; } "$(" { *id = id__Left_CommandSub; break; } "${" { *id = id__Left_VarSub; break; } "$((" { *id = id__Left_ArithSub; break; } "$[" { *id = id__Left_ArithSub2; break; } "\"" { *id = id__Left_DoubleQuote; break; } "'" { *id = id__Left_SingleQuote; break; } "$\"" { *id = id__Left_DollarDoubleQuote; break; } "$'" { *id = id__Left_DollarSingleQuote; break; } "<(" { *id = id__Left_ProcSubIn; break; } ">(" { *id = id__Left_ProcSubOut; break; } "$" [a-zA-Z_][a-zA-Z0-9_]* { *id = id__VSub_Name; break; } "$" [0-9] { *id = id__VSub_Number; break; } "$!" { *id = id__VSub_Bang; break; } "$@" { *id = id__VSub_At; break; } "$#" { *id = id__VSub_Pound; break; } "$$" { *id = id__VSub_Dollar; break; } "$*" { *id = id__VSub_Star; break; } "$-" { *id = id__VSub_Hyphen; break; } "$?" { *id = id__VSub_QMark; break; } [^$`/}"'\x00\\#%<>]+ { *id = id__Lit_Chars; break; } [^\x00] { *id = id__Lit_Other; break; } "\x00" { *id = id__Eol_Tok; break; } */ } break; default: assert(0); } *end_pos = p - line; /* relative */ }