1da2e3ebdSchin /***********************************************************************
2da2e3ebdSchin *                                                                      *
3da2e3ebdSchin *               This software is part of the ast package               *
4b30d1939SAndy Fiddaman *          Copyright (c) 1982-2011 AT&T Intellectual Property          *
5da2e3ebdSchin *                      and is licensed under the                       *
6b30d1939SAndy Fiddaman *                 Eclipse Public License, Version 1.0                  *
77c2fbfb3SApril Chin *                    by AT&T Intellectual Property                     *
8da2e3ebdSchin *                                                                      *
9da2e3ebdSchin *                A copy of the License is available at                 *
10b30d1939SAndy Fiddaman *          http://www.eclipse.org/org/documents/epl-v10.html           *
11b30d1939SAndy Fiddaman *         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
12da2e3ebdSchin *                                                                      *
13da2e3ebdSchin *              Information and Software Systems Research               *
14da2e3ebdSchin *                            AT&T Research                             *
15da2e3ebdSchin *                           Florham Park NJ                            *
16da2e3ebdSchin *                                                                      *
17da2e3ebdSchin *                  David Korn <dgk@research.att.com>                   *
18da2e3ebdSchin *                                                                      *
19da2e3ebdSchin ***********************************************************************/
20da2e3ebdSchin #pragma prototyped
21da2e3ebdSchin 
22da2e3ebdSchin #include	<ast.h>
23da2e3ebdSchin 
24da2e3ebdSchin #include	"FEATURE/options"
25da2e3ebdSchin #include	"lexstates.h"
26da2e3ebdSchin 
27da2e3ebdSchin 
28da2e3ebdSchin /*
29da2e3ebdSchin  * This is the initial state for tokens
30da2e3ebdSchin  */
31da2e3ebdSchin static const char sh_lexstate0[256] =
32da2e3ebdSchin {
33da2e3ebdSchin 	S_EOF,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
34da2e3ebdSchin #if SHOPT_CRNL
35da2e3ebdSchin 	S_REG,	0,	S_NLTOK,S_REG,	S_REG,	0,	S_REG,	S_REG,
36da2e3ebdSchin #else
37da2e3ebdSchin 	S_REG,	0,	S_NLTOK,S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
38da2e3ebdSchin #endif /* SHOPT_CRNL */
39da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
40da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
41da2e3ebdSchin 
42da2e3ebdSchin 	0,	S_REG,	S_REG,	S_COM,	S_REG,	S_REG,	S_OP,	S_REG,
43da2e3ebdSchin 	S_OP,	S_OP,	S_REG,	S_REG,	S_REG,	S_REG,	S_NAME,	S_REG,
44da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
45da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_OP,	S_OP,	S_REG,	S_OP,	S_REG,
46da2e3ebdSchin 
47da2e3ebdSchin 	S_REG,	S_NAME,	S_NAME,	S_NAME,	S_NAME,	S_NAME,	S_NAME,	S_NAME,
48da2e3ebdSchin 	S_NAME,	S_NAME,	S_NAME,	S_NAME,	S_NAME,	S_NAME,	S_NAME,	S_NAME,
49da2e3ebdSchin 	S_NAME,	S_NAME,	S_NAME,	S_NAME,	S_NAME,	S_NAME,	S_NAME,	S_NAME,
50da2e3ebdSchin 	S_NAME,	S_NAME,	S_NAME,	S_REG,	S_REG,	S_REG,	S_REG,	S_NAME,
51da2e3ebdSchin 
52da2e3ebdSchin 	S_REG,	S_NAME,	S_NAME,	S_RES,	S_RES,	S_RES,	S_RES,	S_NAME,
53da2e3ebdSchin #if SHOPT_NAMESPACE
54da2e3ebdSchin 	S_NAME,	S_RES,	S_NAME,	S_NAME,	S_NAME,	S_NAME,	S_RES,	S_NAME,
55da2e3ebdSchin #else
56da2e3ebdSchin 	S_NAME,	S_RES,	S_NAME,	S_NAME,	S_NAME,	S_NAME,	S_NAME,	S_NAME,
57da2e3ebdSchin #endif /* SHOPT_NAMESPACE */
58da2e3ebdSchin 	S_NAME,	S_NAME,	S_NAME,	S_RES,	S_RES,	S_RES,	S_NAME,	S_RES,
597c2fbfb3SApril Chin 	S_NAME,	S_NAME,	S_NAME,	S_BRACE,S_OP,	S_BRACE,S_TILDE,S_REG,
60da2e3ebdSchin 
61da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
62da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
63da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
64da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
65da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
66da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
67da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
68da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
69da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
70da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
71da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
72da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
73da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
74da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
75da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
76da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
77da2e3ebdSchin };
78da2e3ebdSchin 
79da2e3ebdSchin /*
80da2e3ebdSchin  * This state is for identifiers
81da2e3ebdSchin  */
82da2e3ebdSchin static const char sh_lexstate1[256] =
83da2e3ebdSchin {
84da2e3ebdSchin 	S_EOF,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
85da2e3ebdSchin #if SHOPT_CRNL
86da2e3ebdSchin 	S_REG,	S_BREAK,S_BREAK,S_REG,	S_REG,	S_BREAK,S_REG,	S_REG,
87da2e3ebdSchin #else
88da2e3ebdSchin 	S_REG,	S_BREAK,S_BREAK,S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
89da2e3ebdSchin #endif /* SHOPT_CRNL */
90da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
91da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
92da2e3ebdSchin 
93da2e3ebdSchin 	S_BREAK,S_EPAT,	S_QUOTE,S_REG,	S_DOL,	S_EPAT,	S_BREAK,S_LIT,
94da2e3ebdSchin 	S_BREAK,S_BREAK,S_PAT,	S_EPAT,	S_REG,	S_EPAT,	S_DOT,	S_REG,
95da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
96da2e3ebdSchin 	0,	0,	S_LABEL,S_BREAK,S_BREAK,S_EQ,	S_BREAK,S_PAT,
97da2e3ebdSchin 
98da2e3ebdSchin 	S_EPAT,	0,	0,	0,	0,	0,	0,	0,
99da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
100da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
101da2e3ebdSchin 	0,	0,	0,	S_BRACT,S_ESC,	S_REG,	S_REG,	0,
102da2e3ebdSchin 
103da2e3ebdSchin 	S_GRAVE,0,	0,	0,	0,	0,	0,	0,
104da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
105da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
106da2e3ebdSchin 	0,	0,	0,	S_BRACE,S_BREAK,S_BRACE,S_EPAT,	S_REG,
107da2e3ebdSchin 
108da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
109da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
110da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
111da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
112da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
113da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
114da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
115da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
116da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
117da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
118da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
119da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
120da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
121da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
122da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
123da2e3ebdSchin 	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,	S_REG,
124da2e3ebdSchin };
125da2e3ebdSchin 
126da2e3ebdSchin static const char sh_lexstate2[256] =
127da2e3ebdSchin {
128da2e3ebdSchin 	S_EOF,	0,	0,	0,	0,	0,	0,	0,
129da2e3ebdSchin #if SHOPT_CRNL
130da2e3ebdSchin 	0,	S_BREAK,S_BREAK,0,	0,	S_BREAK,0,	0,
131da2e3ebdSchin #else
132da2e3ebdSchin 	0,	S_BREAK,S_BREAK,0,	0,	0,	0,	0,
133da2e3ebdSchin #endif /* SHOPT_CRNL */
134da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
135da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
136da2e3ebdSchin 
137da2e3ebdSchin 	S_BREAK,S_EPAT,	S_QUOTE,0,	S_DOL,	S_EPAT,	S_BREAK,S_LIT,
138da2e3ebdSchin 	S_BREAK,S_BREAK,S_PAT,	S_EPAT,	0,	S_EPAT,	0,	0,
139da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
140da2e3ebdSchin 	0,	0,	S_COLON,S_BREAK,S_BREAK,0,	S_BREAK,S_PAT,
141da2e3ebdSchin 
142da2e3ebdSchin 	S_EPAT,	0,	0,	0,	0,	0,	0,	0,
143da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
144da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
145da2e3ebdSchin 	0,	0,	0,	S_PAT,	S_ESC,	0,	0,	0,
146da2e3ebdSchin 
147da2e3ebdSchin 	S_GRAVE,0,	0,	0,	0,	0,	0,	0,
148da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
149da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
150da2e3ebdSchin 	0,	0,	0,	S_BRACE,S_BREAK,S_BRACE,S_EPAT,	0,
151da2e3ebdSchin };
152da2e3ebdSchin 
153da2e3ebdSchin /*
154da2e3ebdSchin  * for skipping over  '...'
155da2e3ebdSchin  */
156da2e3ebdSchin static const char sh_lexstate3[256] =
157da2e3ebdSchin {
158da2e3ebdSchin 	S_EOF,	0,	0,	0,	0,	0,	0,	0,
159da2e3ebdSchin 	0,	0,	S_NL,	0,	0,	0,	0,	0,
160da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
161da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
162da2e3ebdSchin 
163da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	S_LIT,
164da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
165da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
166da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
167da2e3ebdSchin 
168da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
169da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
170da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
171da2e3ebdSchin 	0,	0,	0,	0,	S_ESC2,	0,	0,	0
172da2e3ebdSchin };
173da2e3ebdSchin 
174da2e3ebdSchin /*
175da2e3ebdSchin  * for skipping over  "..." and `...`
176da2e3ebdSchin  */
177da2e3ebdSchin static const char sh_lexstate4[256] =
178da2e3ebdSchin {
179da2e3ebdSchin 	S_EOF,	0,	0,	0,	0,	0,	0,	0,
180da2e3ebdSchin 	0,	0,	S_NL,	0,	0,	0,	0,	0,
181da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
182da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
183da2e3ebdSchin 	0,	0,	S_QUOTE,0,	S_DOL,	0,	0,	0,
184da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
185da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
186da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
187da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
188da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
189da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
190da2e3ebdSchin 	0,	0,	0,	0,	S_ESC,	0,	0,	0,
191da2e3ebdSchin 	S_GRAVE,0,	0,	0,	0,	0,	0,	0,
192da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
193da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
194da2e3ebdSchin 	0,	0,	0,	0,	0,	S_RBRA,	0,	0
195da2e3ebdSchin };
196da2e3ebdSchin 
197da2e3ebdSchin /*
198da2e3ebdSchin  * for skipping over ?(...), [...]
199da2e3ebdSchin  */
200da2e3ebdSchin static const char sh_lexstate5[256] =
201da2e3ebdSchin {
202da2e3ebdSchin 	S_EOF,	0,	0,	0,	0,	0,	0,	0,
203da2e3ebdSchin 	0,	S_BLNK,	S_NL,	0,	0,	0,	0,	0,
204da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
205da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
206da2e3ebdSchin 	S_BLNK,	0,	S_QUOTE,0,	S_DOL,	0,	S_META,	S_LIT,
207da2e3ebdSchin 	S_PUSH,	S_POP,	0,	0,	0,	0,	0,	0,
208da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
209da2e3ebdSchin 	0,	0,	0,	S_POP,	S_META,	0,	S_META,	0,
210da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
211da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
212da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
213da2e3ebdSchin 	0,	0,	0,	S_BRACT,S_ESC,	S_POP,	0,	0,
214da2e3ebdSchin 	S_GRAVE,0,	0,	0,	0,	0,	0,	0,
215da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
216da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
217b30d1939SAndy Fiddaman 	0,	0,	0,	S_BRACE,S_META,	S_POP,	S_TILDE,0
218da2e3ebdSchin };
219da2e3ebdSchin 
220da2e3ebdSchin /*
221da2e3ebdSchin  * Defines valid expansion characters
222da2e3ebdSchin  */
223da2e3ebdSchin static const char sh_lexstate6[256] =
224da2e3ebdSchin {
225da2e3ebdSchin 	S_EOF,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
226da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
227da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
228da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
229da2e3ebdSchin 
230da2e3ebdSchin 	S_ERR,	S_SPC1,	S_ERR,	S_SPC1,	S_SPC2,	S_ERR,	S_ERR,	S_LIT,
231da2e3ebdSchin 	S_PAR,	S_ERR,	S_SPC2,	S_ERR,	S_ERR,	S_SPC2,	S_ALP,	S_ERR,
232da2e3ebdSchin 	S_DIG,	S_DIG,	S_DIG,	S_DIG,	S_DIG,	S_DIG,	S_DIG,	S_DIG,
233da2e3ebdSchin 	S_DIG,	S_DIG,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_SPC2,
234da2e3ebdSchin 
235da2e3ebdSchin #if SHOPT_TYPEDEF
236da2e3ebdSchin 	S_SPC1,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,
237da2e3ebdSchin #else
238da2e3ebdSchin 	S_SPC2,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,
239da2e3ebdSchin #endif
240da2e3ebdSchin 	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,
241da2e3ebdSchin 	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,
242da2e3ebdSchin 	S_ALP,	S_ALP,	S_ALP,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ALP,
243da2e3ebdSchin 
244da2e3ebdSchin 	S_ERR,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,
245da2e3ebdSchin 	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,
246da2e3ebdSchin 	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,	S_ALP,
247da2e3ebdSchin 	S_ALP,	S_ALP,	S_ALP,	S_LBRA,	S_ERR,	S_RBRA,	S_ERR,	S_ERR,
248da2e3ebdSchin 
249da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
250da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
251da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
252da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
253da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
254da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
255da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
256da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
257da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
258da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
259da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
260da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
261da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
262da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
263da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
264da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
265da2e3ebdSchin };
266da2e3ebdSchin 
267da2e3ebdSchin /*
268da2e3ebdSchin  * for skipping over ${...} until modifier
269da2e3ebdSchin  */
270da2e3ebdSchin static const char sh_lexstate7[256] =
271da2e3ebdSchin {
272da2e3ebdSchin 	S_EOF,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
273da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
274da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
275da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
276da2e3ebdSchin 
277b30d1939SAndy Fiddaman 	S_ERR,	0,	S_ERR,	S_MOD2,	0,	S_MOD2,	S_ERR,	S_ERR,
278da2e3ebdSchin 	S_ERR,	S_ERR,	S_MOD1,	S_MOD1,	S_ERR,	S_MOD1,	S_DOT,	S_MOD2,
279da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
280da2e3ebdSchin 	0,	0,	S_MOD1,	S_ERR,	S_ERR,	S_MOD1,	S_ERR,	S_MOD1,
281da2e3ebdSchin 
282da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
283da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
284da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
285da2e3ebdSchin 	0,	0,	0,	S_BRACT,S_ESC,	S_ERR,	S_ERR,	0,
286da2e3ebdSchin 
287da2e3ebdSchin 	S_ERR,	0,	0,	0,	0,	0,	0,	0,
288da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
289da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
290da2e3ebdSchin 	0,	0,	0,	S_ERR,	S_ERR,	S_POP,	S_ERR,	S_ERR,
291da2e3ebdSchin 
292da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
293da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
294da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
295da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
296da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
297da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
298da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
299da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
300da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
301da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
302da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
303da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
304da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
305da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
306da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
307da2e3ebdSchin 	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,	S_ERR,
308da2e3ebdSchin };
309da2e3ebdSchin 
310da2e3ebdSchin /*
311da2e3ebdSchin  * This state is for $name
312da2e3ebdSchin  */
313da2e3ebdSchin static const char sh_lexstate8[256] =
314da2e3ebdSchin {
315da2e3ebdSchin 	S_EOF,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
316da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
317da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
318da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
319da2e3ebdSchin 
320da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
321da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
322da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
323da2e3ebdSchin 	0,	0,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
324da2e3ebdSchin 
325da2e3ebdSchin 	S_EDOL,	0,	0,	0,	0,	0,	0,	0,
326da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
327da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
328da2e3ebdSchin 	0,	0,	0,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	0,
329da2e3ebdSchin 
330da2e3ebdSchin 	S_EDOL,0,	0,	0,	0,	0,	0,	0,
331da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
332da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
333da2e3ebdSchin 	0,	0,	0,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
334da2e3ebdSchin 
335da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
336da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
337da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
338da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
339da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
340da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
341da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
342da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
343da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
344da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
345da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
346da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
347da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
348da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
349da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
350da2e3ebdSchin 	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,	S_EDOL,
351da2e3ebdSchin };
352da2e3ebdSchin 
353da2e3ebdSchin /*
354da2e3ebdSchin  * This is used for macro expansion
355da2e3ebdSchin  */
356da2e3ebdSchin static const char sh_lexstate9[256] =
357da2e3ebdSchin {
358da2e3ebdSchin 	S_EOF,	0,	0,	0,	0,	0,	0,	0,
359da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
360da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
361da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
362da2e3ebdSchin 	0,	0,	S_QUOTE,0,	S_DOL,	0,	S_PAT,	S_LIT,
3637c2fbfb3SApril Chin 	S_PAT,	S_PAT,	S_PAT,	0,	S_COM,	0,	S_DOT,	S_SLASH,
3647c2fbfb3SApril Chin 	S_DIG,	S_DIG,	S_DIG,	S_DIG,	S_DIG,	S_DIG,	S_DIG,	S_DIG,
365da2e3ebdSchin 	S_DIG,	S_DIG,	S_COLON,0,	0,	S_EQ,	0,	S_PAT,
366da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
367da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
368da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
369da2e3ebdSchin 	0,	0,	0,	S_BRACT,S_ESC,	S_ENDCH,0,	0,
370da2e3ebdSchin 	S_GRAVE,0,	0,	0,	0,	0,	0,	0,
371da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
372da2e3ebdSchin 	0,	0,	0,	0,	0,	0,	0,	0,
373da2e3ebdSchin #if SHOPT_BRACEPAT
374da2e3ebdSchin 	0,	0,	0,	S_BRACE,S_PAT,	S_ENDCH,0,	0
375da2e3ebdSchin #else
376da2e3ebdSchin 	0,	0,	0,	0,	S_PAT,	S_ENDCH,0,	0
377da2e3ebdSchin #endif /* SHOPT_BRACEPAT */
378da2e3ebdSchin };
379da2e3ebdSchin 
380da2e3ebdSchin const char *sh_lexrstates[ST_NONE] =
381da2e3ebdSchin {
382da2e3ebdSchin 	sh_lexstate0, sh_lexstate1, sh_lexstate2, sh_lexstate3,
383da2e3ebdSchin 	sh_lexstate4, sh_lexstate5, sh_lexstate6, sh_lexstate7,
384da2e3ebdSchin 	sh_lexstate8, sh_lexstate9, sh_lexstate5
385da2e3ebdSchin };
386da2e3ebdSchin 
387da2e3ebdSchin 
388da2e3ebdSchin const char e_lexversion[]	= "%d: invalid binary script version";
389da2e3ebdSchin const char e_lexspace[]		= "line %d: use space or tab to separate operators %c and %c";
3903e14f97fSRoger A. Faulkner const char e_lexslash[]		= "line %d: $ not preceded by \\";
391da2e3ebdSchin const char e_lexsyntax1[]	= "syntax error at line %d: `%s' %s";
392da2e3ebdSchin const char e_lexsyntax2[]	= "syntax error: `%s' %s";
393da2e3ebdSchin const char e_lexsyntax3[]	= "syntax error at line %d: duplicate label %s";
394b30d1939SAndy Fiddaman const char e_lexsyntax4[]	= "syntax error at line %d: invalid reference list";
395b30d1939SAndy Fiddaman const char e_lexsyntax5[]	= "syntax error at line %d: `<<%s' here-document not contained within command substitution";
396*be548e87SAndy Fiddaman const char e_lexwarnvar[]	= "line %d: in '((%s))', using '$' as in '$%.*s' is slower and can introduce rounding errors";
397da2e3ebdSchin const char e_lexlabignore[]	= "line %d: label %s ignored";
398da2e3ebdSchin const char e_lexlabunknown[]	= "line %d: %s unknown label";
399da2e3ebdSchin const char e_lexobsolete1[]	= "line %d: `...` obsolete, use $(...)";
400da2e3ebdSchin const char e_lexobsolete2[]	= "line %d: -a obsolete, use -e";
401da2e3ebdSchin const char e_lexobsolete3[]	= "line %d: '=' obsolete, use '=='";
402*be548e87SAndy Fiddaman const char e_lexobsolete4[]	= "line %d: [[... %s ...]] obsolete, use ((... %s ...))";
403da2e3ebdSchin const char e_lexobsolete5[]	= "line %d: set %s obsolete";
404da2e3ebdSchin const char e_lexobsolete6[]	= "line %d: `{' instead of `in' is obsolete";
40534f9b3eeSRoland Mainz const char e_lexnonstandard[]	= "line %d: `&>file' is nonstandard -- interpreted as `>file 2>&1' for profile input only";
406da2e3ebdSchin const char e_lexusebrace[]	= "line %d: use braces to avoid ambiguities with $id[...]";
407da2e3ebdSchin const char e_lexusequote[]	= "line %d: %c within ${} should be quoted";
408da2e3ebdSchin const char e_lexescape[]	= "line %d: escape %c to avoid ambiguities";
409da2e3ebdSchin const char e_lexquote[]		= "line %d: quote %c to avoid ambiguities";
410da2e3ebdSchin const char e_lexnested[]	= "line %d: spaces required for nested subshell";
411da2e3ebdSchin const char e_lexbadchar[]	= "%c: invalid character in expression - %s";
412da2e3ebdSchin const char e_lexfuture[]	= "line %d: \\ in front of %c reserved for future use";
413da2e3ebdSchin const char e_lexlongquote[]	= "line %d: %c quote may be missing";
414da2e3ebdSchin const char e_lexzerobyte[]	= "zero byte";
415da2e3ebdSchin const char e_lexemptyfor[]	= "line %d: empty for list";
4167c2fbfb3SApril Chin const char e_lextypeset[]	= "line %d: %s invalid typeset option order";
417b30d1939SAndy Fiddaman const char e_lexcharclass[]	= "line %d: '^' as first character in character class not portable";
418