syntax.c revision dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0
1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* $NetBSD: syntax.c,v 1.1 2004/01/17 17:38:12 dsl Exp $ */ 2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include "shell.h" 4dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include "syntax.h" 5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include "parser.h" 6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <limits.h> 7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#if CWORD != 0 9dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#error initialisation assumes 'CWORD' is zero 10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif 11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ndx(ch) (ch + 1 - CHAR_MIN) 13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define set(ch, val) [ndx(ch)] = val, 14dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define set_range(s, e, val) [ndx(s) ... ndx(e)] = val, 15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* syntax table used when not in quotes */ 17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst char basesyntax[257] = { CEOF, 18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set_range(CTL_FIRST, CTL_LAST, CCTL) 19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('\n', CNL) 20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('\\', CBACK) 21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('\'', CSQUOTE) 22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('"', CDQUOTE) 23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('`', CBQUOTE) 24dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('$', CVAR) 25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('}', CENDVAR) 26dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('<', CSPCL) 27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('>', CSPCL) 28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('(', CSPCL) 29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set(')', CSPCL) 30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set(';', CSPCL) 31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('&', CSPCL) 32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('|', CSPCL) 33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set(' ', CSPCL) 34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('\t', CSPCL) 35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}; 36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 37dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* syntax table used when in double quotes */ 38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst char dqsyntax[257] = { CEOF, 39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set_range(CTL_FIRST, CTL_LAST, CCTL) 40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('\n', CNL) 41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('\\', CBACK) 42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('"', CDQUOTE) 43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('`', CBQUOTE) 44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('$', CVAR) 45dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('}', CENDVAR) 46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /* ':/' for tilde expansion, '-' for [a\-x] pattern ranges */ 47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('!', CCTL) 48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('*', CCTL) 49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('?', CCTL) 50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('[', CCTL) 51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('=', CCTL) 52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('~', CCTL) 53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set(':', CCTL) 54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('/', CCTL) 55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('-', CCTL) 56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}; 57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 58dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* syntax table used when in single quotes */ 59dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst char sqsyntax[257] = { CEOF, 60dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set_range(CTL_FIRST, CTL_LAST, CCTL) 61dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('\n', CNL) 62dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('\'', CSQUOTE) 63dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /* ':/' for tilde expansion, '-' for [a\-x] pattern ranges */ 64dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('!', CCTL) 65dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('*', CCTL) 66dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('?', CCTL) 67dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('[', CCTL) 68dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('=', CCTL) 69dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('~', CCTL) 70dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set(':', CCTL) 71dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('/', CCTL) 72dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('-', CCTL) 73dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}; 74dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* syntax table used when in arithmetic */ 76dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst char arisyntax[257] = { CEOF, 77dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set_range(CTL_FIRST, CTL_LAST, CCTL) 78dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('\n', CNL) 79dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('\\', CBACK) 80dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('`', CBQUOTE) 81dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('\'', CSQUOTE) 82dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('"', CDQUOTE) 83dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('$', CVAR) 84dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('}', CENDVAR) 85dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('(', CLP) 86dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set(')', CRP) 87dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}; 88dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 89dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* character classification table */ 90dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst char is_type[257] = { 0, 91dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set_range('0', '9', ISDIGIT) 92dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set_range('a', 'z', ISLOWER) 93dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set_range('A', 'Z', ISUPPER) 94dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('_', ISUNDER) 95dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('#', ISSPECL) 96dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('?', ISSPECL) 97dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('$', ISSPECL) 98dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('!', ISSPECL) 99dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('-', ISSPECL) 100dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('*', ISSPECL) 101dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project set('@', ISSPECL) 102dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}; 103