|  | #define TEOF 0 | 
|  | #define TNL 1 | 
|  | #define TSEMI 2 | 
|  | #define TBACKGND 3 | 
|  | #define TAND 4 | 
|  | #define TOR 5 | 
|  | #define TPIPE 6 | 
|  | #define TLP 7 | 
|  | #define TRP 8 | 
|  | #define TENDCASE 9 | 
|  | #define TENDBQUOTE 10 | 
|  | #define TREDIR 11 | 
|  | #define TWORD 12 | 
|  | #define TIF 13 | 
|  | #define TTHEN 14 | 
|  | #define TELSE 15 | 
|  | #define TELIF 16 | 
|  | #define TFI 17 | 
|  | #define TWHILE 18 | 
|  | #define TUNTIL 19 | 
|  | #define TFOR 20 | 
|  | #define TDO 21 | 
|  | #define TDONE 22 | 
|  | #define TBEGIN 23 | 
|  | #define TEND 24 | 
|  | #define TCASE 25 | 
|  | #define TESAC 26 | 
|  | #define TNOT 27 | 
|  |  | 
|  | /* Array indicating which tokens mark the end of a list */ | 
|  | const char tokendlist[] = { | 
|  | 1, | 
|  | 0, | 
|  | 0, | 
|  | 0, | 
|  | 0, | 
|  | 0, | 
|  | 0, | 
|  | 0, | 
|  | 1, | 
|  | 1, | 
|  | 1, | 
|  | 0, | 
|  | 0, | 
|  | 0, | 
|  | 1, | 
|  | 1, | 
|  | 1, | 
|  | 1, | 
|  | 0, | 
|  | 0, | 
|  | 0, | 
|  | 1, | 
|  | 1, | 
|  | 0, | 
|  | 1, | 
|  | 0, | 
|  | 1, | 
|  | 0, | 
|  | }; | 
|  |  | 
|  | const char *const tokname[] = { | 
|  | "end of file", | 
|  | "newline", | 
|  | "\";\"", | 
|  | "\"&\"", | 
|  | "\"&&\"", | 
|  | "\"||\"", | 
|  | "\"|\"", | 
|  | "\"(\"", | 
|  | "\")\"", | 
|  | "\";;\"", | 
|  | "\"`\"", | 
|  | "redirection", | 
|  | "word", | 
|  | "\"if\"", | 
|  | "\"then\"", | 
|  | "\"else\"", | 
|  | "\"elif\"", | 
|  | "\"fi\"", | 
|  | "\"while\"", | 
|  | "\"until\"", | 
|  | "\"for\"", | 
|  | "\"do\"", | 
|  | "\"done\"", | 
|  | "\"{\"", | 
|  | "\"}\"", | 
|  | "\"case\"", | 
|  | "\"esac\"", | 
|  | "\"!\"", | 
|  | }; | 
|  |  | 
|  | #define KWDOFFSET 13 | 
|  |  | 
|  | const char *const parsekwd[] = { | 
|  | "if", | 
|  | "then", | 
|  | "else", | 
|  | "elif", | 
|  | "fi", | 
|  | "while", | 
|  | "until", | 
|  | "for", | 
|  | "do", | 
|  | "done", | 
|  | "{", | 
|  | "}", | 
|  | "case", | 
|  | "esac", | 
|  | "!", | 
|  | 0 | 
|  | }; |