SCM Repository
Annotation of /sml/trunk/src/ml-burg/burg-lex.sml
Parent Directory
|
Revision Log
Revision 422 - (view) (download)
1 : | monnier | 422 | functor BurgLexFun(structure Tokens : Burg_TOKENS)= |
2 : | struct | ||
3 : | structure UserDeclarations = | ||
4 : | struct | ||
5 : | (* burg-lex | ||
6 : | * | ||
7 : | * COPYRIGHT (c) 1995 AT&T Bell Laboratories. | ||
8 : | * | ||
9 : | * ML-Lex specification for ML-burg. | ||
10 : | *) | ||
11 : | |||
12 : | structure T = Tokens | ||
13 : | structure E = ErrorMsg | ||
14 : | type pos = int | ||
15 : | type svalue = T.svalue | ||
16 : | type ('a,'b) token = ('a,'b) T.token | ||
17 : | type lexresult = (svalue,pos) token | ||
18 : | |||
19 : | val comLevel = ref 0 | ||
20 : | val lineNum = ref 0 | ||
21 : | val verbatimLevel = ref 0 | ||
22 : | val percentCount = ref 0 | ||
23 : | val rawLine = ref "" | ||
24 : | val rawNoNewLine = ref false | ||
25 : | val raw:string list ref = ref [] | ||
26 : | val reachedEop = ref false | ||
27 : | |||
28 : | fun resetState() = (comLevel := 0; | ||
29 : | lineNum := 0; | ||
30 : | verbatimLevel := 0; | ||
31 : | percentCount := 0; | ||
32 : | rawLine := ""; | ||
33 : | rawNoNewLine := false; | ||
34 : | raw := []; | ||
35 : | reachedEop := false) | ||
36 : | |||
37 : | fun inc (ri as ref i) = (ri := i+1) | ||
38 : | fun dec (ri as ref i) = (ri := i-1) | ||
39 : | |||
40 : | fun incVerbLvl() = if !verbatimLevel <> 0 | ||
41 : | then E.impossible "nested verbatim levels" | ||
42 : | else inc verbatimLevel | ||
43 : | |||
44 : | fun outputRaw (s:string) = (rawLine := !rawLine^s; rawNoNewLine := true) | ||
45 : | |||
46 : | fun rawNextLine () = (raw := !rawLine^"\n":: (!raw); | ||
47 : | rawLine := ""; rawNoNewLine := false) | ||
48 : | |||
49 : | fun rawStop () = if !rawNoNewLine then rawNextLine () else () | ||
50 : | |||
51 : | fun eof() = (if !comLevel > 0 then E.complain "unclosed comment" | ||
52 : | else if !verbatimLevel <> 0 then | ||
53 : | E.complain "unclosed user input" | ||
54 : | else (); | ||
55 : | if !reachedEop | ||
56 : | then T.K_EOF(!lineNum,!lineNum) | ||
57 : | else (rawStop (); | ||
58 : | T.PPERCENT(rev(!raw),!lineNum,!lineNum) | ||
59 : | before (raw := []; | ||
60 : | reachedEop := true))) | ||
61 : | |||
62 : | end (* end of user routines *) | ||
63 : | exception LexError (* raised if illegal leaf action tried *) | ||
64 : | structure Internal = | ||
65 : | struct | ||
66 : | |||
67 : | datatype yyfinstate = N of int | ||
68 : | type statedata = {fin : yyfinstate list, trans: string} | ||
69 : | (* transition & final state table *) | ||
70 : | val tab = let | ||
71 : | val s = [ | ||
72 : | (0, | ||
73 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
74 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
75 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
76 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
77 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
78 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
79 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
80 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
81 : | \\000" | ||
82 : | ), | ||
83 : | (1, | ||
84 : | "\000\000\000\000\000\000\000\000\000\049\050\000\000\000\000\000\ | ||
85 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
86 : | \\049\000\000\000\000\019\000\000\017\016\000\000\015\000\000\000\ | ||
87 : | \\014\014\014\014\014\014\014\014\014\014\013\012\000\011\000\000\ | ||
88 : | \\000\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ | ||
89 : | \\010\010\010\010\010\010\010\010\010\010\010\000\000\000\000\000\ | ||
90 : | \\000\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ | ||
91 : | \\010\010\010\010\010\010\010\010\010\010\010\000\009\000\000\000\ | ||
92 : | \\000" | ||
93 : | ), | ||
94 : | (3, | ||
95 : | "\051\051\051\051\051\051\051\051\051\051\056\051\051\051\051\051\ | ||
96 : | \\051\051\051\051\051\051\051\051\051\051\051\051\051\051\051\051\ | ||
97 : | \\051\051\051\051\051\051\051\051\054\051\052\051\051\051\051\051\ | ||
98 : | \\051\051\051\051\051\051\051\051\051\051\051\051\051\051\051\051\ | ||
99 : | \\051\051\051\051\051\051\051\051\051\051\051\051\051\051\051\051\ | ||
100 : | \\051\051\051\051\051\051\051\051\051\051\051\051\051\051\051\051\ | ||
101 : | \\051\051\051\051\051\051\051\051\051\051\051\051\051\051\051\051\ | ||
102 : | \\051\051\051\051\051\051\051\051\051\051\051\051\051\051\051\051\ | ||
103 : | \\051" | ||
104 : | ), | ||
105 : | (5, | ||
106 : | "\057\057\057\057\057\057\057\057\057\057\060\057\057\057\057\057\ | ||
107 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
108 : | \\057\057\057\057\057\058\057\057\057\057\057\057\057\057\057\057\ | ||
109 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
110 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
111 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
112 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
113 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
114 : | \\057" | ||
115 : | ), | ||
116 : | (7, | ||
117 : | "\061\061\061\061\061\061\061\061\061\061\062\061\061\061\061\061\ | ||
118 : | \\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\ | ||
119 : | \\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\ | ||
120 : | \\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\ | ||
121 : | \\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\ | ||
122 : | \\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\ | ||
123 : | \\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\ | ||
124 : | \\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\ | ||
125 : | \\061" | ||
126 : | ), | ||
127 : | (10, | ||
128 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
129 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
130 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
131 : | \\010\010\010\010\010\010\010\010\010\010\000\000\000\000\000\000\ | ||
132 : | \\000\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ | ||
133 : | \\010\010\010\010\010\010\010\010\010\010\010\000\000\000\000\010\ | ||
134 : | \\000\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ | ||
135 : | \\010\010\010\010\010\010\010\010\010\010\010\000\000\000\000\000\ | ||
136 : | \\000" | ||
137 : | ), | ||
138 : | (14, | ||
139 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
140 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
141 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
142 : | \\014\014\014\014\014\014\014\014\014\014\000\000\000\000\000\000\ | ||
143 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
144 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
145 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
146 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
147 : | \\000" | ||
148 : | ), | ||
149 : | (17, | ||
150 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
151 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
152 : | \\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\000\ | ||
153 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
154 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
155 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
156 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
157 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
158 : | \\000" | ||
159 : | ), | ||
160 : | (19, | ||
161 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
162 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
163 : | \\000\000\000\000\000\048\000\000\000\000\000\000\000\000\000\000\ | ||
164 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
165 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
166 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
167 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
168 : | \\000\000\038\031\021\000\000\000\000\000\000\020\000\000\000\000\ | ||
169 : | \\000" | ||
170 : | ), | ||
171 : | (21, | ||
172 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
173 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
174 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
175 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
176 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
177 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
178 : | \\000\000\000\000\000\022\000\000\000\000\000\000\000\000\000\000\ | ||
179 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
180 : | \\000" | ||
181 : | ), | ||
182 : | (22, | ||
183 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
184 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
185 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
186 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
187 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
188 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
189 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
190 : | \\000\000\023\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
191 : | \\000" | ||
192 : | ), | ||
193 : | (23, | ||
194 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
195 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
196 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
197 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
198 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
199 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
200 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\000\ | ||
201 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
202 : | \\000" | ||
203 : | ), | ||
204 : | (24, | ||
205 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
206 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
207 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
208 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
209 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
210 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
211 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
212 : | \\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
213 : | \\000" | ||
214 : | ), | ||
215 : | (25, | ||
216 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
217 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
218 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
219 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
220 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
221 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
222 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
223 : | \\000\000\026\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
224 : | \\000" | ||
225 : | ), | ||
226 : | (26, | ||
227 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
228 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
229 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
230 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
231 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
232 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
233 : | \\000\000\000\000\000\027\000\000\000\000\000\000\000\000\000\000\ | ||
234 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
235 : | \\000" | ||
236 : | ), | ||
237 : | (27, | ||
238 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
239 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
240 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
241 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
242 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
243 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
244 : | \\000\000\000\000\000\000\028\000\000\000\000\000\000\000\000\000\ | ||
245 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
246 : | \\000" | ||
247 : | ), | ||
248 : | (28, | ||
249 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
250 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
251 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
252 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
253 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
254 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
255 : | \\000\000\000\000\000\000\000\000\000\029\000\000\000\000\000\000\ | ||
256 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
257 : | \\000" | ||
258 : | ), | ||
259 : | (29, | ||
260 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
261 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
262 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
263 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
264 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
265 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
266 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
267 : | \\000\000\000\000\000\000\000\000\030\000\000\000\000\000\000\000\ | ||
268 : | \\000" | ||
269 : | ), | ||
270 : | (31, | ||
271 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
272 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
273 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
274 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
275 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
276 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
277 : | \\000\000\000\000\000\000\000\000\000\036\000\000\000\000\000\000\ | ||
278 : | \\000\000\000\000\032\000\000\000\000\000\000\000\000\000\000\000\ | ||
279 : | \\000" | ||
280 : | ), | ||
281 : | (32, | ||
282 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
283 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
284 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
285 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
286 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
287 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
288 : | \\000\033\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
289 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
290 : | \\000" | ||
291 : | ), | ||
292 : | (33, | ||
293 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
294 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
295 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
296 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
297 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
298 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
299 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
300 : | \\000\000\034\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
301 : | \\000" | ||
302 : | ), | ||
303 : | (34, | ||
304 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
305 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
306 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
307 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
308 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
309 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
310 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
311 : | \\000\000\000\000\035\000\000\000\000\000\000\000\000\000\000\000\ | ||
312 : | \\000" | ||
313 : | ), | ||
314 : | (36, | ||
315 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
316 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
317 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
318 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
319 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
320 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
321 : | \\000\000\000\000\000\000\000\037\000\000\000\000\000\000\000\000\ | ||
322 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
323 : | \\000" | ||
324 : | ), | ||
325 : | (38, | ||
326 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
327 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
328 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
329 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
330 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
331 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
332 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
333 : | \\000\000\000\000\000\039\000\000\000\000\000\000\000\000\000\000\ | ||
334 : | \\000" | ||
335 : | ), | ||
336 : | (39, | ||
337 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
338 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
339 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
340 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
341 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
342 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
343 : | \\000\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\ | ||
344 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
345 : | \\000" | ||
346 : | ), | ||
347 : | (40, | ||
348 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
349 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
350 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
351 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
352 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
353 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
354 : | \\000\000\000\000\000\041\000\000\000\000\000\000\000\000\000\000\ | ||
355 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
356 : | \\000" | ||
357 : | ), | ||
358 : | (41, | ||
359 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
360 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
361 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
362 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
363 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
364 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
365 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
366 : | \\042\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
367 : | \\000" | ||
368 : | ), | ||
369 : | (42, | ||
370 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
371 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
372 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
373 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
374 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
375 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
376 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
377 : | \\000\000\043\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
378 : | \\000" | ||
379 : | ), | ||
380 : | (43, | ||
381 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
382 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
383 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
384 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
385 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
386 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
387 : | \\000\000\000\000\000\044\000\000\000\000\000\000\000\000\000\000\ | ||
388 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
389 : | \\000" | ||
390 : | ), | ||
391 : | (44, | ||
392 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
393 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
394 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
395 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
396 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
397 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
398 : | \\000\000\000\000\000\000\045\000\000\000\000\000\000\000\000\000\ | ||
399 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
400 : | \\000" | ||
401 : | ), | ||
402 : | (45, | ||
403 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
404 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
405 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
406 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
407 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
408 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
409 : | \\000\000\000\000\000\000\000\000\000\046\000\000\000\000\000\000\ | ||
410 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
411 : | \\000" | ||
412 : | ), | ||
413 : | (46, | ||
414 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
415 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
416 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
417 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
418 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
419 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
420 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
421 : | \\000\000\000\000\000\000\000\000\047\000\000\000\000\000\000\000\ | ||
422 : | \\000" | ||
423 : | ), | ||
424 : | (49, | ||
425 : | "\000\000\000\000\000\000\000\000\000\049\000\000\000\000\000\000\ | ||
426 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
427 : | \\049\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
428 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
429 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
430 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
431 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
432 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
433 : | \\000" | ||
434 : | ), | ||
435 : | (52, | ||
436 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
437 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
438 : | \\000\000\000\000\000\000\000\000\000\053\000\000\000\000\000\000\ | ||
439 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
440 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
441 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
442 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
443 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
444 : | \\000" | ||
445 : | ), | ||
446 : | (54, | ||
447 : | "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
448 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
449 : | \\000\000\000\000\000\000\000\000\000\000\055\000\000\000\000\000\ | ||
450 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
451 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
452 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
453 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
454 : | \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ | ||
455 : | \\000" | ||
456 : | ), | ||
457 : | (57, | ||
458 : | "\057\057\057\057\057\057\057\057\057\057\000\057\057\057\057\057\ | ||
459 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
460 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
461 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
462 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
463 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
464 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
465 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
466 : | \\057" | ||
467 : | ), | ||
468 : | (58, | ||
469 : | "\057\057\057\057\057\057\057\057\057\057\000\057\057\057\057\057\ | ||
470 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
471 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
472 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
473 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
474 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
475 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\057\ | ||
476 : | \\057\057\057\057\057\057\057\057\057\057\057\057\057\059\057\057\ | ||
477 : | \\057" | ||
478 : | ), | ||
479 : | (61, | ||
480 : | "\061\061\061\061\061\061\061\061\061\061\000\061\061\061\061\061\ | ||
481 : | \\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\ | ||
482 : | \\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\ | ||
483 : | \\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\ | ||
484 : | \\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\ | ||
485 : | \\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\ | ||
486 : | \\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\ | ||
487 : | \\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\061\ | ||
488 : | \\061" | ||
489 : | ), | ||
490 : | (0, "")] | ||
491 : | fun f x = x | ||
492 : | val s = map f (rev (tl (rev s))) | ||
493 : | exception LexHackingError | ||
494 : | fun look ((j,x)::r, i) = if i = j then x else look(r, i) | ||
495 : | | look ([], i) = raise LexHackingError | ||
496 : | fun g {fin=x, trans=i} = {fin=x, trans=look(s,i)} | ||
497 : | in Vector.fromList(map g | ||
498 : | [{fin = [], trans = 0}, | ||
499 : | {fin = [(N 9)], trans = 1}, | ||
500 : | {fin = [(N 9)], trans = 1}, | ||
501 : | {fin = [], trans = 3}, | ||
502 : | {fin = [], trans = 3}, | ||
503 : | {fin = [(N 93)], trans = 5}, | ||
504 : | {fin = [(N 93)], trans = 5}, | ||
505 : | {fin = [(N 97)], trans = 7}, | ||
506 : | {fin = [(N 97)], trans = 7}, | ||
507 : | {fin = [(N 25)], trans = 0}, | ||
508 : | {fin = [(N 76)], trans = 10}, | ||
509 : | {fin = [(N 23)], trans = 0}, | ||
510 : | {fin = [(N 21)], trans = 0}, | ||
511 : | {fin = [(N 19)], trans = 0}, | ||
512 : | {fin = [(N 73)], trans = 14}, | ||
513 : | {fin = [(N 17)], trans = 0}, | ||
514 : | {fin = [(N 15)], trans = 0}, | ||
515 : | {fin = [(N 13)], trans = 17}, | ||
516 : | {fin = [(N 70)], trans = 0}, | ||
517 : | {fin = [], trans = 19}, | ||
518 : | {fin = [(N 4)], trans = 0}, | ||
519 : | {fin = [], trans = 21}, | ||
520 : | {fin = [], trans = 22}, | ||
521 : | {fin = [], trans = 23}, | ||
522 : | {fin = [(N 31)], trans = 24}, | ||
523 : | {fin = [], trans = 25}, | ||
524 : | {fin = [], trans = 26}, | ||
525 : | {fin = [], trans = 27}, | ||
526 : | {fin = [], trans = 28}, | ||
527 : | {fin = [], trans = 29}, | ||
528 : | {fin = [(N 50)], trans = 0}, | ||
529 : | {fin = [], trans = 31}, | ||
530 : | {fin = [], trans = 32}, | ||
531 : | {fin = [], trans = 33}, | ||
532 : | {fin = [], trans = 34}, | ||
533 : | {fin = [(N 38)], trans = 0}, | ||
534 : | {fin = [], trans = 36}, | ||
535 : | {fin = [(N 67)], trans = 0}, | ||
536 : | {fin = [], trans = 38}, | ||
537 : | {fin = [], trans = 39}, | ||
538 : | {fin = [], trans = 40}, | ||
539 : | {fin = [], trans = 41}, | ||
540 : | {fin = [], trans = 42}, | ||
541 : | {fin = [], trans = 43}, | ||
542 : | {fin = [], trans = 44}, | ||
543 : | {fin = [], trans = 45}, | ||
544 : | {fin = [], trans = 46}, | ||
545 : | {fin = [(N 62)], trans = 0}, | ||
546 : | {fin = [(N 7)], trans = 0}, | ||
547 : | {fin = [(N 9)], trans = 49}, | ||
548 : | {fin = [(N 1),(N 11)], trans = 0}, | ||
549 : | {fin = [(N 86)], trans = 0}, | ||
550 : | {fin = [(N 86)], trans = 52}, | ||
551 : | {fin = [(N 84)], trans = 0}, | ||
552 : | {fin = [(N 86)], trans = 54}, | ||
553 : | {fin = [(N 79)], trans = 0}, | ||
554 : | {fin = [(N 81)], trans = 0}, | ||
555 : | {fin = [(N 93)], trans = 57}, | ||
556 : | {fin = [(N 93)], trans = 58}, | ||
557 : | {fin = [(N 89),(N 93)], trans = 57}, | ||
558 : | {fin = [(N 91)], trans = 0}, | ||
559 : | {fin = [(N 97)], trans = 61}, | ||
560 : | {fin = [(N 95)], trans = 0}]) | ||
561 : | end | ||
562 : | structure StartStates = | ||
563 : | struct | ||
564 : | datatype yystartstate = STARTSTATE of int | ||
565 : | |||
566 : | (* start state definitions *) | ||
567 : | |||
568 : | val COMMENT = STARTSTATE 3; | ||
569 : | val DUMP = STARTSTATE 5; | ||
570 : | val INITIAL = STARTSTATE 1; | ||
571 : | val POSTLUDE = STARTSTATE 7; | ||
572 : | |||
573 : | end | ||
574 : | type result = UserDeclarations.lexresult | ||
575 : | exception LexerError (* raised if illegal leaf action tried *) | ||
576 : | end | ||
577 : | |||
578 : | fun makeLexer yyinput = | ||
579 : | let val yygone0=1 | ||
580 : | val yyb = ref "\n" (* buffer *) | ||
581 : | val yybl = ref 1 (*buffer length *) | ||
582 : | val yybufpos = ref 1 (* location of next character to use *) | ||
583 : | val yygone = ref yygone0 (* position in file of beginning of buffer *) | ||
584 : | val yydone = ref false (* eof found yet? *) | ||
585 : | val yybegin = ref 1 (*Current 'start state' for lexer *) | ||
586 : | |||
587 : | val YYBEGIN = fn (Internal.StartStates.STARTSTATE x) => | ||
588 : | yybegin := x | ||
589 : | |||
590 : | fun lex () : Internal.result = | ||
591 : | let fun continue() = lex() in | ||
592 : | let fun scan (s,AcceptingLeaves : Internal.yyfinstate list list,l,i0) = | ||
593 : | let fun action (i,nil) = raise LexError | ||
594 : | | action (i,nil::l) = action (i-1,l) | ||
595 : | | action (i,(node::acts)::l) = | ||
596 : | case node of | ||
597 : | Internal.N yyk => | ||
598 : | (let fun yymktext() = substring(!yyb,i0,i-i0) | ||
599 : | val yypos = i0+ !yygone | ||
600 : | open UserDeclarations Internal.StartStates | ||
601 : | in (yybufpos := i; case yyk of | ||
602 : | |||
603 : | (* Application actions *) | ||
604 : | |||
605 : | 1 => (inc lineNum; continue()) | ||
606 : | | 11 => (inc lineNum; continue()) | ||
607 : | | 13 => (T.K_LPAREN(!lineNum,!lineNum)) | ||
608 : | | 15 => (T.K_RPAREN(!lineNum,!lineNum)) | ||
609 : | | 17 => (T.K_COMMA(!lineNum,!lineNum)) | ||
610 : | | 19 => (T.K_COLON(!lineNum,!lineNum)) | ||
611 : | | 21 => (T.K_SEMICOLON(!lineNum,!lineNum)) | ||
612 : | | 23 => (T.K_EQUAL(!lineNum,!lineNum)) | ||
613 : | | 25 => (T.K_PIPE(!lineNum,!lineNum)) | ||
614 : | | 31 => (T.K_TERM(!lineNum,!lineNum)) | ||
615 : | | 38 => (T.K_START(!lineNum,!lineNum)) | ||
616 : | | 4 => (incVerbLvl(); YYBEGIN DUMP; continue()) | ||
617 : | | 50 => (T.K_TERMPREFIX(!lineNum,!lineNum)) | ||
618 : | | 62 => (T.K_RULEPREFIX(!lineNum,!lineNum)) | ||
619 : | | 67 => (T.K_SIG(!lineNum,!lineNum)) | ||
620 : | | 7 => (inc percentCount; | ||
621 : | if !percentCount = 2 | ||
622 : | then (YYBEGIN POSTLUDE; continue()) | ||
623 : | else T.PPERCENT(rev(!raw),!lineNum,!lineNum) | ||
624 : | before raw := []) | ||
625 : | | 70 => (YYBEGIN COMMENT; comLevel:=1; continue()) | ||
626 : | | 73 => let val yytext=yymktext() in T.INT(valOf(Int.fromString yytext),!lineNum,!lineNum) end | ||
627 : | | 76 => let val yytext=yymktext() in T.ID(yytext,!lineNum,!lineNum) end | ||
628 : | | 79 => (inc comLevel; continue()) | ||
629 : | | 81 => (inc lineNum; continue()) | ||
630 : | | 84 => (dec comLevel; | ||
631 : | if !comLevel=0 then YYBEGIN INITIAL else (); | ||
632 : | continue()) | ||
633 : | | 86 => (continue()) | ||
634 : | | 89 => (rawStop(); dec verbatimLevel; | ||
635 : | YYBEGIN INITIAL; continue()) | ||
636 : | | 9 => (continue()) | ||
637 : | | 91 => (rawNextLine (); inc lineNum; continue()) | ||
638 : | | 93 => let val yytext=yymktext() in outputRaw yytext; continue() end | ||
639 : | | 95 => (rawNextLine (); inc lineNum; continue()) | ||
640 : | | 97 => let val yytext=yymktext() in outputRaw yytext; continue() end | ||
641 : | | _ => raise Internal.LexerError | ||
642 : | |||
643 : | ) end ) | ||
644 : | |||
645 : | val {fin,trans} = Unsafe.Vector.sub(Internal.tab, s) | ||
646 : | val NewAcceptingLeaves = fin::AcceptingLeaves | ||
647 : | in if l = !yybl then | ||
648 : | if trans = #trans(Vector.sub(Internal.tab,0)) | ||
649 : | then action(l,NewAcceptingLeaves | ||
650 : | ) else let val newchars= if !yydone then "" else yyinput 1024 | ||
651 : | in if (size newchars)=0 | ||
652 : | then (yydone := true; | ||
653 : | if (l=i0) then UserDeclarations.eof () | ||
654 : | else action(l,NewAcceptingLeaves)) | ||
655 : | else (if i0=l then yyb := newchars | ||
656 : | else yyb := substring(!yyb,i0,l-i0)^newchars; | ||
657 : | yygone := !yygone+i0; | ||
658 : | yybl := size (!yyb); | ||
659 : | scan (s,AcceptingLeaves,l-i0,0)) | ||
660 : | end | ||
661 : | else let val NewChar = Char.ord(Unsafe.CharVector.sub(!yyb,l)) | ||
662 : | val NewChar = if NewChar<128 then NewChar else 128 | ||
663 : | val NewState = Char.ord(Unsafe.CharVector.sub(trans,NewChar)) | ||
664 : | in if NewState=0 then action(l,NewAcceptingLeaves) | ||
665 : | else scan(NewState,NewAcceptingLeaves,l+1,i0) | ||
666 : | end | ||
667 : | end | ||
668 : | (* | ||
669 : | val start= if substring(!yyb,!yybufpos-1,1)="\n" | ||
670 : | then !yybegin+1 else !yybegin | ||
671 : | *) | ||
672 : | in scan(!yybegin (* start *),nil,!yybufpos,!yybufpos) | ||
673 : | end | ||
674 : | end | ||
675 : | in lex | ||
676 : | end | ||
677 : | end |
root@smlnj-gforge.cs.uchicago.edu | ViewVC Help |
Powered by ViewVC 1.0.0 |