1*cbb07febSzrj #define TEOF 0 2*cbb07febSzrj #define TNL 1 3*cbb07febSzrj #define TSEMI 2 4*cbb07febSzrj #define TBACKGND 3 5*cbb07febSzrj #define TAND 4 6*cbb07febSzrj #define TOR 5 7*cbb07febSzrj #define TPIPE 6 8*cbb07febSzrj #define TLP 7 9*cbb07febSzrj #define TRP 8 10*cbb07febSzrj #define TENDCASE 9 11*cbb07febSzrj #define TFALLTHRU 10 12*cbb07febSzrj #define TREDIR 11 13*cbb07febSzrj #define TWORD 12 14*cbb07febSzrj #define TIF 13 15*cbb07febSzrj #define TTHEN 14 16*cbb07febSzrj #define TELSE 15 17*cbb07febSzrj #define TELIF 16 18*cbb07febSzrj #define TFI 17 19*cbb07febSzrj #define TWHILE 18 20*cbb07febSzrj #define TUNTIL 19 21*cbb07febSzrj #define TFOR 20 22*cbb07febSzrj #define TDO 21 23*cbb07febSzrj #define TDONE 22 24*cbb07febSzrj #define TBEGIN 23 25*cbb07febSzrj #define TEND 24 26*cbb07febSzrj #define TCASE 25 27*cbb07febSzrj #define TESAC 26 28*cbb07febSzrj #define TNOT 27 29*cbb07febSzrj 30*cbb07febSzrj /* Array indicating which tokens mark the end of a list */ 31*cbb07febSzrj static const char tokendlist[] = { 32*cbb07febSzrj 1, 33*cbb07febSzrj 0, 34*cbb07febSzrj 0, 35*cbb07febSzrj 0, 36*cbb07febSzrj 0, 37*cbb07febSzrj 0, 38*cbb07febSzrj 0, 39*cbb07febSzrj 0, 40*cbb07febSzrj 1, 41*cbb07febSzrj 1, 42*cbb07febSzrj 1, 43*cbb07febSzrj 0, 44*cbb07febSzrj 0, 45*cbb07febSzrj 0, 46*cbb07febSzrj 1, 47*cbb07febSzrj 1, 48*cbb07febSzrj 1, 49*cbb07febSzrj 1, 50*cbb07febSzrj 0, 51*cbb07febSzrj 0, 52*cbb07febSzrj 0, 53*cbb07febSzrj 1, 54*cbb07febSzrj 1, 55*cbb07febSzrj 0, 56*cbb07febSzrj 1, 57*cbb07febSzrj 0, 58*cbb07febSzrj 1, 59*cbb07febSzrj 0, 60*cbb07febSzrj }; 61*cbb07febSzrj 62*cbb07febSzrj static const char *const tokname[] = { 63*cbb07febSzrj "end of file", 64*cbb07febSzrj "newline", 65*cbb07febSzrj "\";\"", 66*cbb07febSzrj "\"&\"", 67*cbb07febSzrj "\"&&\"", 68*cbb07febSzrj "\"||\"", 69*cbb07febSzrj "\"|\"", 70*cbb07febSzrj "\"(\"", 71*cbb07febSzrj "\")\"", 72*cbb07febSzrj "\";;\"", 73*cbb07febSzrj "\";&\"", 74*cbb07febSzrj "redirection", 75*cbb07febSzrj "word", 76*cbb07febSzrj "\"if\"", 77*cbb07febSzrj "\"then\"", 78*cbb07febSzrj "\"else\"", 79*cbb07febSzrj "\"elif\"", 80*cbb07febSzrj "\"fi\"", 81*cbb07febSzrj "\"while\"", 82*cbb07febSzrj "\"until\"", 83*cbb07febSzrj "\"for\"", 84*cbb07febSzrj "\"do\"", 85*cbb07febSzrj "\"done\"", 86*cbb07febSzrj "\"{\"", 87*cbb07febSzrj "\"}\"", 88*cbb07febSzrj "\"case\"", 89*cbb07febSzrj "\"esac\"", 90*cbb07febSzrj "\"!\"", 91*cbb07febSzrj }; 92*cbb07febSzrj 93*cbb07febSzrj #define KWDOFFSET 13 94*cbb07febSzrj 95*cbb07febSzrj const char *const parsekwd[] = { 96*cbb07febSzrj "if", 97*cbb07febSzrj "then", 98*cbb07febSzrj "else", 99*cbb07febSzrj "elif", 100*cbb07febSzrj "fi", 101*cbb07febSzrj "while", 102*cbb07febSzrj "until", 103*cbb07febSzrj "for", 104*cbb07febSzrj "do", 105*cbb07febSzrj "done", 106*cbb07febSzrj "{", 107*cbb07febSzrj "}", 108*cbb07febSzrj "case", 109*cbb07febSzrj "esac", 110*cbb07febSzrj "!", 111*cbb07febSzrj 0 112*cbb07febSzrj }; 113