Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/ml-burg/burg-lex.sml
ViewVC logotype

Annotation of /sml/trunk/src/ml-burg/burg-lex.sml

Parent Directory Parent Directory | Revision Log 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