source: trunk/src/ash/syntax.c@ 638

Last change on this file since 638 was 638, checked in by bird, 19 years ago

syntax tables for MSC.

  • Property svn:eol-style set to native
File size: 4.5 KB
Line 
1/* $NetBSD: syntax.c,v 1.1 2004/01/17 17:38:12 dsl Exp $ */
2
3#include "shell.h"
4#include "syntax.h"
5#include "parser.h"
6
7#ifdef _MSC_VER /* doesn't implement the fancy initializers I think... */
8
9char basesyntax[257] = {CEOF};
10char dqsyntax[257] = {CEOF};
11char sqsyntax[257] = {CEOF};
12char arisyntax[257] = {CEOF};
13char is_type[257] = {0};
14
15void init_syntax(void)
16{
17 char *tab;
18 int i;
19
20#define ndx(ch) (ch + 1 - CHAR_MIN)
21#define set(ch, val) tab[ndx(ch)] = val
22#define set_range(s, e, val) for (i = ndx(s); i <= ndx(e); i++) tab[i] = val
23
24 /*basesyntax*/
25 tab = basesyntax;
26 set_range(CTL_FIRST, CTL_LAST, CCTL);
27 set('\n', CNL);
28 set('\\', CBACK);
29 set('\'', CSQUOTE);
30 set('"', CDQUOTE);
31 set('`', CBQUOTE);
32 set('$', CVAR);
33 set('}', CENDVAR);
34 set('<', CSPCL);
35 set('>', CSPCL);
36 set('(', CSPCL);
37 set(')', CSPCL);
38 set(';', CSPCL);
39 set('&', CSPCL);
40 set('|', CSPCL);
41 set(' ', CSPCL);
42 set('\t', CSPCL);
43
44 tab = dqsyntax;
45 set_range(CTL_FIRST, CTL_LAST, CCTL);
46 set('\n', CNL);
47 set('\\', CBACK);
48 set('"', CDQUOTE);
49 set('`', CBQUOTE);
50 set('$', CVAR);
51 set('}', CENDVAR);
52 /* ':/' for tilde expansion, '-' for [a\-x] pattern ranges */
53 set('!', CCTL);
54 set('*', CCTL);
55 set('?', CCTL);
56 set('[', CCTL);
57 set('=', CCTL);
58 set('~', CCTL);
59 set(':', CCTL);
60 set('/', CCTL);
61 set('-', CCTL);
62
63 tab = sqsyntax;
64 set_range(CTL_FIRST, CTL_LAST, CCTL);
65 set('\n', CNL);
66 set('\'', CSQUOTE);
67 /* ':/' for tilde expansion, '-' for [a\-x] pattern ranges */
68 set('!', CCTL);
69 set('*', CCTL) ;
70 set('?', CCTL);
71 set('[', CCTL);
72 set('=', CCTL);
73 set('~', CCTL);
74 set(':', CCTL);
75 set('/', CCTL);
76 set('-', CCTL);
77
78 tab = arisyntax;
79 set_range(CTL_FIRST, CTL_LAST, CCTL);
80 set('\n', CNL);
81 set('\\', CBACK);
82 set('`', CBQUOTE);
83 set('\'', CSQUOTE);
84 set('"', CDQUOTE);
85 set('$', CVAR);
86 set('}', CENDVAR);
87 set('(', CLP);
88 set(')', CRP);
89
90 tab = is_type;
91 set_range('0', '9', ISDIGIT);
92 set_range('a', 'z', ISLOWER);
93 set_range('A', 'Z', ISUPPER);
94 set('_', ISUNDER);
95 set('#', ISSPECL);
96 set('?', ISSPECL);
97 set('$', ISSPECL);
98 set('!', ISSPECL);
99 set('-', ISSPECL);
100 set('*', ISSPECL);
101 set('@', ISSPECL);
102}
103
104#else /* !_MSC_VER */
105
106#if CWORD != 0
107#error initialisation assumes 'CWORD' is zero
108#endif
109
110#define ndx(ch) (ch + 1 - CHAR_MIN)
111#define set(ch, val) [ndx(ch)] = val,
112#define set_range(s, e, val) [ndx(s) ... ndx(e)] = val,
113
114/* syntax table used when not in quotes */
115const char basesyntax[257] = { CEOF,
116 set_range(CTL_FIRST, CTL_LAST, CCTL)
117 set('\n', CNL)
118 set('\\', CBACK)
119 set('\'', CSQUOTE)
120 set('"', CDQUOTE)
121 set('`', CBQUOTE)
122 set('$', CVAR)
123 set('}', CENDVAR)
124 set('<', CSPCL)
125 set('>', CSPCL)
126 set('(', CSPCL)
127 set(')', CSPCL)
128 set(';', CSPCL)
129 set('&', CSPCL)
130 set('|', CSPCL)
131 set(' ', CSPCL)
132 set('\t', CSPCL)
133};
134
135/* syntax table used when in double quotes */
136const char dqsyntax[257] = { CEOF,
137 set_range(CTL_FIRST, CTL_LAST, CCTL)
138 set('\n', CNL)
139 set('\\', CBACK)
140 set('"', CDQUOTE)
141 set('`', CBQUOTE)
142 set('$', CVAR)
143 set('}', CENDVAR)
144 /* ':/' for tilde expansion, '-' for [a\-x] pattern ranges */
145 set('!', CCTL)
146 set('*', CCTL)
147 set('?', CCTL)
148 set('[', CCTL)
149 set('=', CCTL)
150 set('~', CCTL)
151 set(':', CCTL)
152 set('/', CCTL)
153 set('-', CCTL)
154};
155
156/* syntax table used when in single quotes */
157const char sqsyntax[257] = { CEOF,
158 set_range(CTL_FIRST, CTL_LAST, CCTL)
159 set('\n', CNL)
160 set('\'', CSQUOTE)
161 /* ':/' for tilde expansion, '-' for [a\-x] pattern ranges */
162 set('!', CCTL)
163 set('*', CCTL)
164 set('?', CCTL)
165 set('[', CCTL)
166 set('=', CCTL)
167 set('~', CCTL)
168 set(':', CCTL)
169 set('/', CCTL)
170 set('-', CCTL)
171};
172
173/* syntax table used when in arithmetic */
174const char arisyntax[257] = { CEOF,
175 set_range(CTL_FIRST, CTL_LAST, CCTL)
176 set('\n', CNL)
177 set('\\', CBACK)
178 set('`', CBQUOTE)
179 set('\'', CSQUOTE)
180 set('"', CDQUOTE)
181 set('$', CVAR)
182 set('}', CENDVAR)
183 set('(', CLP)
184 set(')', CRP)
185};
186
187/* character classification table */
188const char is_type[257] = { 0,
189 set_range('0', '9', ISDIGIT)
190 set_range('a', 'z', ISLOWER)
191 set_range('A', 'Z', ISUPPER)
192 set('_', ISUNDER)
193 set('#', ISSPECL)
194 set('?', ISSPECL)
195 set('$', ISSPECL)
196 set('!', ISSPECL)
197 set('-', ISSPECL)
198 set('*', ISSPECL)
199 set('@', ISSPECL)
200};
201#endif /* !_MSC_VER */
Note: See TracBrowser for help on using the repository browser.