| /*	$NetBSD: syntax.c,v 1.1 2004/01/17 17:38:12 dsl Exp $	*/ | 
 |  | 
 | #include "shell.h" | 
 | #include "syntax.h" | 
 | #include "parser.h" | 
 | #include <limits.h> | 
 |  | 
 | #if CWORD != 0 | 
 | #error initialisation assumes 'CWORD' is zero | 
 | #endif | 
 |  | 
 | #define ndx(ch) (ch + 1 - CHAR_MIN) | 
 | #define set(ch, val) [ndx(ch)] = val, | 
 | #define set_range(s, e, val) [ndx(s) ... ndx(e)] = val, | 
 |  | 
 | /* syntax table used when not in quotes */ | 
 | const char basesyntax[257] = { CEOF, | 
 |     set_range(CTL_FIRST, CTL_LAST, CCTL) | 
 |     set('\n', CNL) | 
 |     set('\\', CBACK) | 
 |     set('\'', CSQUOTE) | 
 |     set('"', CDQUOTE) | 
 |     set('`', CBQUOTE) | 
 |     set('$', CVAR) | 
 |     set('}', CENDVAR) | 
 |     set('<', CSPCL) | 
 |     set('>', CSPCL) | 
 |     set('(', CSPCL) | 
 |     set(')', CSPCL) | 
 |     set(';', CSPCL) | 
 |     set('&', CSPCL) | 
 |     set('|', CSPCL) | 
 |     set(' ', CSPCL) | 
 |     set('\t', CSPCL) | 
 | }; | 
 |  | 
 | /* syntax table used when in double quotes */ | 
 | const char dqsyntax[257] = { CEOF, | 
 |     set_range(CTL_FIRST, CTL_LAST, CCTL) | 
 |     set('\n', CNL) | 
 |     set('\\', CBACK) | 
 |     set('"', CDQUOTE) | 
 |     set('`', CBQUOTE) | 
 |     set('$', CVAR) | 
 |     set('}', CENDVAR) | 
 |     /* ':/' for tilde expansion, '-' for [a\-x] pattern ranges */ | 
 |     set('!', CCTL) | 
 |     set('*', CCTL) | 
 |     set('?', CCTL) | 
 |     set('[', CCTL) | 
 |     set('=', CCTL) | 
 |     set('~', CCTL) | 
 |     set(':', CCTL) | 
 |     set('/', CCTL) | 
 |     set('-', CCTL) | 
 | }; | 
 |  | 
 | /* syntax table used when in single quotes */ | 
 | const char sqsyntax[257] = { CEOF, | 
 |     set_range(CTL_FIRST, CTL_LAST, CCTL) | 
 |     set('\n', CNL) | 
 |     set('\'', CSQUOTE) | 
 |     /* ':/' for tilde expansion, '-' for [a\-x] pattern ranges */ | 
 |     set('!', CCTL) | 
 |     set('*', CCTL) | 
 |     set('?', CCTL) | 
 |     set('[', CCTL) | 
 |     set('=', CCTL) | 
 |     set('~', CCTL) | 
 |     set(':', CCTL) | 
 |     set('/', CCTL) | 
 |     set('-', CCTL) | 
 | }; | 
 |  | 
 | /* syntax table used when in arithmetic */ | 
 | const char arisyntax[257] = { CEOF, | 
 |     set_range(CTL_FIRST, CTL_LAST, CCTL) | 
 |     set('\n', CNL) | 
 |     set('\\', CBACK) | 
 |     set('`', CBQUOTE) | 
 |     set('\'', CSQUOTE) | 
 |     set('"', CDQUOTE) | 
 |     set('$', CVAR) | 
 |     set('}', CENDVAR) | 
 |     set('(', CLP) | 
 |     set(')', CRP) | 
 | }; | 
 |  | 
 | /* character classification table */ | 
 | const char is_type[257] = { 0, | 
 |     set_range('0', '9', ISDIGIT) | 
 |     set_range('a', 'z', ISLOWER) | 
 |     set_range('A', 'Z', ISUPPER) | 
 |     set('_', ISUNDER) | 
 |     set('#', ISSPECL) | 
 |     set('?', ISSPECL) | 
 |     set('$', ISSPECL) | 
 |     set('!', ISSPECL) | 
 |     set('-', ISSPECL) | 
 |     set('*', ISSPECL) | 
 |     set('@', ISSPECL) | 
 | }; |