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