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/branches/SMLNJ/src/smlnj-lib/HTML/html-lex.sml
ViewVC logotype

Annotation of /sml/branches/SMLNJ/src/smlnj-lib/HTML/html-lex.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10 - (view) (download)

1 : monnier 7 functor HTMLLexFn (
2 :     structure Tokens : HTML_TOKENS
3 :     structure Err : HTML_ERROR
4 :     structure HTMLAttrs : HTML_ATTRS)=
5 :     struct
6 :     structure UserDeclarations =
7 :     struct
8 :     (* html-lex
9 :     *
10 :     * COPYRIGHT (c) 1995 AT&T Bell Laboratories.
11 :     * COPYRIGHT (c) 1996 AT&T Research.
12 :     *
13 :     * A scanner for HTML.
14 :     *
15 :     * TODO:
16 :     * Recognize the DOCTYPE element
17 :     * <!DOCTYPE HTML PUBLIC "...">
18 :     * Clean-up the scanning of start tags (do we need Err?).
19 :     * Whitespace in PRE elements should be preserved, but how?
20 :     *)
21 :    
22 :     structure T = Tokens
23 :     structure Elems = HTMLElementsFn (
24 :     structure Tokens = Tokens
25 :     structure Err = Err
26 :     structure HTMLAttrs = HTMLAttrs)
27 :    
28 :     type pos = int
29 :     type svalue = T.svalue
30 :     type arg = (((string * int * int) -> unit) * string option)
31 :     type ('a, 'b) token = ('a, 'b) T.token
32 :     type lexresult= (svalue, pos) token
33 :    
34 :     fun eof _ = Tokens.EOF(0, 0)
35 :    
36 :     (* a buffer for collecting a string piecewise *)
37 :     val buffer = ref ([] : string list)
38 :     fun addStr s = (buffer := s :: !buffer)
39 :     fun getStr () = (String.concat(List.rev(! buffer)) before (buffer := []))
40 :    
41 :     end (* end of user routines *)
42 :     exception LexError (* raised if illegal leaf action tried *)
43 :     structure Internal =
44 :     struct
45 :    
46 :     datatype yyfinstate = N of int
47 :     type statedata = {fin : yyfinstate list, trans: string}
48 :     (* transition & final state table *)
49 :     val tab = let
50 :     val s = [
51 :     (0,
52 :     "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
53 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
54 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
55 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
56 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
57 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
58 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
59 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
60 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
61 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
62 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
63 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
64 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
65 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
66 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
67 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
68 :     ),
69 :     (1,
70 :     "\009\009\009\009\009\009\009\009\009\028\029\009\009\009\009\009\
71 :     \\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\
72 :     \\028\009\009\009\009\009\020\009\009\009\009\009\009\009\009\009\
73 :     \\009\009\009\009\009\009\009\009\009\009\009\009\011\009\009\009\
74 :     \\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\
75 :     \\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\
76 :     \\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\
77 :     \\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\
78 :     \\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\
79 :     \\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\
80 :     \\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\
81 :     \\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\
82 :     \\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\
83 :     \\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\
84 :     \\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\
85 :     \\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009"
86 :     ),
87 :     (3,
88 :     "\030\030\030\030\030\030\030\030\030\030\033\030\030\030\030\030\
89 :     \\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\
90 :     \\030\030\030\030\030\030\030\030\030\030\030\030\030\031\030\030\
91 :     \\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\
92 :     \\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\
93 :     \\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\
94 :     \\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\
95 :     \\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\
96 :     \\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\
97 :     \\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\
98 :     \\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\
99 :     \\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\
100 :     \\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\
101 :     \\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\
102 :     \\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\
103 :     \\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030"
104 :     ),
105 :     (5,
106 :     "\034\034\034\034\034\034\034\034\034\038\039\034\034\034\034\034\
107 :     \\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\
108 :     \\038\034\034\034\034\034\034\034\034\034\034\034\034\036\034\034\
109 :     \\034\034\034\034\034\034\034\034\034\034\034\034\034\034\035\034\
110 :     \\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\
111 :     \\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\
112 :     \\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\
113 :     \\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\
114 :     \\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\
115 :     \\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\
116 :     \\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\
117 :     \\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\
118 :     \\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\
119 :     \\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\
120 :     \\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\
121 :     \\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034"
122 :     ),
123 :     (7,
124 :     "\040\040\040\040\040\040\040\040\040\051\053\040\040\040\040\040\
125 :     \\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\
126 :     \\051\040\048\040\040\040\040\045\040\040\040\040\040\041\041\040\
127 :     \\041\041\041\041\041\041\041\041\041\041\040\040\040\044\043\040\
128 :     \\040\041\041\041\041\041\041\041\041\041\041\041\041\041\041\041\
129 :     \\041\041\041\041\041\041\041\041\041\041\041\040\040\040\040\040\
130 :     \\040\041\041\041\041\041\041\041\041\041\041\041\041\041\041\041\
131 :     \\041\041\041\041\041\041\041\041\041\041\041\040\040\040\040\040\
132 :     \\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\
133 :     \\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\
134 :     \\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\
135 :     \\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\
136 :     \\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\
137 :     \\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\
138 :     \\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\
139 :     \\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040"
140 :     ),
141 :     (9,
142 :     "\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
143 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
144 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
145 :     \\010\010\010\010\010\010\010\010\010\010\010\010\000\010\010\010\
146 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
147 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
148 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
149 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
150 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
151 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
152 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
153 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
154 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
155 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
156 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
157 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010"
158 :     ),
159 :     (11,
160 :     "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
161 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
162 :     \\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\013\
163 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
164 :     \\000\012\012\012\012\012\012\012\012\012\012\012\012\012\012\012\
165 :     \\012\012\012\012\012\012\012\012\012\012\012\000\000\000\000\000\
166 :     \\000\012\012\012\012\012\012\012\012\012\012\012\012\012\012\012\
167 :     \\012\012\012\012\012\012\012\012\012\012\012\000\000\000\000\000\
168 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
169 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
170 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
171 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
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 :     ),
177 :     (12,
178 :     "\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\012\012\000\
181 :     \\012\012\012\012\012\012\012\012\012\012\000\000\000\000\000\000\
182 :     \\000\012\012\012\012\012\012\012\012\012\012\012\012\012\012\012\
183 :     \\012\012\012\012\012\012\012\012\012\012\012\000\000\000\000\000\
184 :     \\000\012\012\012\012\012\012\012\012\012\012\012\012\012\012\012\
185 :     \\012\012\012\012\012\012\012\012\012\012\012\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
191 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
192 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
193 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
194 :     ),
195 :     (13,
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\014\014\014\014\014\014\014\014\014\014\014\014\014\014\014\
201 :     \\014\014\014\014\014\014\014\014\014\014\014\000\000\000\000\000\
202 :     \\000\014\014\014\014\014\014\014\014\014\014\014\014\014\014\014\
203 :     \\014\014\014\014\014\014\014\014\014\014\014\000\000\000\000\000\
204 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
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 :     ),
213 :     (14,
214 :     "\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\
215 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
216 :     \\016\000\000\000\000\000\000\000\000\000\000\000\000\014\014\000\
217 :     \\014\014\014\014\014\014\014\014\014\014\000\000\000\000\015\000\
218 :     \\000\014\014\014\014\014\014\014\014\014\014\014\014\014\014\014\
219 :     \\014\014\014\014\014\014\014\014\014\014\014\000\000\000\000\000\
220 :     \\000\014\014\014\014\014\014\014\014\014\014\014\014\014\014\014\
221 :     \\014\014\014\014\014\014\014\014\014\014\014\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
224 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
225 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
226 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
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 :     ),
231 :     (16,
232 :     "\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\
233 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
234 :     \\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
235 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\000\
236 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
237 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
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\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
247 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
248 :     ),
249 :     (17,
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\018\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\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
258 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
259 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
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 :     ),
267 :     (18,
268 :     "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
269 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
270 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\019\000\000\
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\000\000\000\000\000\000\000\
278 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
279 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
280 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
281 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
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 :     ),
285 :     (20,
286 :     "\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
287 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
288 :     \\010\010\010\023\010\010\010\010\010\010\010\010\010\010\010\010\
289 :     \\010\010\010\010\010\010\010\010\010\010\010\010\000\010\010\010\
290 :     \\010\021\021\021\021\021\021\021\021\021\021\021\021\021\021\021\
291 :     \\021\021\021\021\021\021\021\021\021\021\021\010\010\010\010\010\
292 :     \\010\021\021\021\021\021\021\021\021\021\021\021\021\021\021\021\
293 :     \\021\021\021\021\021\021\021\021\021\021\021\010\010\010\010\010\
294 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
295 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
296 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
297 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
298 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
299 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
300 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
301 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010"
302 :     ),
303 :     (21,
304 :     "\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
305 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
306 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\021\021\010\
307 :     \\021\021\021\021\021\021\021\021\021\021\010\022\000\010\010\010\
308 :     \\010\021\021\021\021\021\021\021\021\021\021\021\021\021\021\021\
309 :     \\021\021\021\021\021\021\021\021\021\021\021\010\010\010\010\010\
310 :     \\010\021\021\021\021\021\021\021\021\021\021\021\021\021\021\021\
311 :     \\021\021\021\021\021\021\021\021\021\021\021\010\010\010\010\010\
312 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
313 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
314 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
315 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
316 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
317 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
318 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
319 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010"
320 :     ),
321 :     (23,
322 :     "\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
323 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
324 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
325 :     \\026\026\026\026\026\026\026\026\026\026\010\010\000\010\010\010\
326 :     \\010\024\024\024\024\024\024\024\024\024\024\024\024\024\024\024\
327 :     \\024\024\024\024\024\024\024\024\024\024\024\010\010\010\010\010\
328 :     \\010\024\024\024\024\024\024\024\024\024\024\024\024\024\024\024\
329 :     \\024\024\024\024\024\024\024\024\024\024\024\010\010\010\010\010\
330 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
331 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
332 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
333 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
334 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
335 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
336 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
337 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010"
338 :     ),
339 :     (24,
340 :     "\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
341 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
342 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
343 :     \\010\010\010\010\010\010\010\010\010\010\010\025\000\010\010\010\
344 :     \\010\024\024\024\024\024\024\024\024\024\024\024\024\024\024\024\
345 :     \\024\024\024\024\024\024\024\024\024\024\024\010\010\010\010\010\
346 :     \\010\024\024\024\024\024\024\024\024\024\024\024\024\024\024\024\
347 :     \\024\024\024\024\024\024\024\024\024\024\024\010\010\010\010\010\
348 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
349 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
350 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
351 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
352 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
353 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
354 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
355 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010"
356 :     ),
357 :     (26,
358 :     "\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
359 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
360 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
361 :     \\026\026\026\026\026\026\026\026\026\026\010\027\000\010\010\010\
362 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
363 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
364 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
365 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
366 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
367 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
368 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
369 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
370 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
371 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
372 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\
373 :     \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010"
374 :     ),
375 :     (31,
376 :     "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
377 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
378 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\032\000\000\
379 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
380 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
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\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
390 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
391 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
392 :     ),
393 :     (36,
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\037\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\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
401 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
402 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
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\000\000\000\000\000\000\000"
410 :     ),
411 :     (41,
412 :     "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
413 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
414 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\042\042\000\
415 :     \\042\042\042\042\042\042\042\042\042\042\000\000\000\000\000\000\
416 :     \\000\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\
417 :     \\042\042\042\042\042\042\042\042\042\042\042\000\000\000\000\000\
418 :     \\000\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\
419 :     \\042\042\042\042\042\042\042\042\042\042\042\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\000\000\000\000\000\000\000\000\
422 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
423 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
424 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
425 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
426 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
427 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
428 :     ),
429 :     (45,
430 :     "\046\046\046\046\046\046\046\046\046\046\000\046\046\046\046\046\
431 :     \\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\
432 :     \\046\046\046\046\046\046\046\047\046\046\046\046\046\046\046\046\
433 :     \\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\
434 :     \\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\
435 :     \\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\
436 :     \\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\
437 :     \\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\
438 :     \\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\
439 :     \\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\
440 :     \\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\
441 :     \\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\
442 :     \\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\
443 :     \\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\
444 :     \\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\
445 :     \\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046"
446 :     ),
447 :     (48,
448 :     "\049\049\049\049\049\049\049\049\049\049\000\049\049\049\049\049\
449 :     \\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\
450 :     \\049\049\050\049\049\049\049\049\049\049\049\049\049\049\049\049\
451 :     \\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\
452 :     \\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\
453 :     \\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\
454 :     \\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\
455 :     \\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\
456 :     \\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\
457 :     \\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\
458 :     \\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\
459 :     \\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\
460 :     \\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\
461 :     \\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\
462 :     \\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\
463 :     \\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049"
464 :     ),
465 :     (51,
466 :     "\000\000\000\000\000\000\000\000\000\052\000\000\000\000\000\000\
467 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
468 :     \\052\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
469 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
470 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
471 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
472 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
473 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
474 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
475 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
476 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
477 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
478 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
479 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
480 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
481 :     \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
482 :     ),
483 :     (0, "")]
484 :     fun f x = x
485 :     val s = map f (rev (tl (rev s)))
486 :     exception LexHackingError
487 :     fun look ((j,x)::r, i) = if i = j then x else look(r, i)
488 :     | look ([], i) = raise LexHackingError
489 :     fun g {fin=x, trans=i} = {fin=x, trans=look(s,i)}
490 :     in Vector.fromList(map g
491 :     [{fin = [], trans = 0},
492 :     {fin = [], trans = 1},
493 :     {fin = [], trans = 1},
494 :     {fin = [], trans = 3},
495 :     {fin = [], trans = 3},
496 :     {fin = [], trans = 5},
497 :     {fin = [], trans = 5},
498 :     {fin = [], trans = 7},
499 :     {fin = [], trans = 7},
500 :     {fin = [(N 79),(N 81)], trans = 9},
501 :     {fin = [(N 79)], trans = 9},
502 :     {fin = [(N 81)], trans = 11},
503 :     {fin = [(N 3)], trans = 12},
504 :     {fin = [], trans = 13},
505 :     {fin = [], trans = 14},
506 :     {fin = [(N 32)], trans = 0},
507 :     {fin = [], trans = 16},
508 :     {fin = [], trans = 17},
509 :     {fin = [], trans = 18},
510 :     {fin = [(N 37)], trans = 0},
511 :     {fin = [(N 79),(N 81)], trans = 20},
512 :     {fin = [(N 79)], trans = 21},
513 :     {fin = [(N 72),(N 79)], trans = 9},
514 :     {fin = [(N 79)], trans = 23},
515 :     {fin = [(N 79)], trans = 24},
516 :     {fin = [(N 61),(N 79)], trans = 9},
517 :     {fin = [(N 79)], trans = 26},
518 :     {fin = [(N 67),(N 79)], trans = 9},
519 :     {fin = [(N 76),(N 79),(N 81)], trans = 9},
520 :     {fin = [(N 74),(N 79)], trans = 9},
521 :     {fin = [(N 44)], trans = 0},
522 :     {fin = [(N 44)], trans = 31},
523 :     {fin = [(N 40)], trans = 0},
524 :     {fin = [(N 42)], trans = 0},
525 :     {fin = [(N 55)], trans = 0},
526 :     {fin = [(N 49),(N 55)], trans = 0},
527 :     {fin = [(N 55)], trans = 36},
528 :     {fin = [(N 47)], trans = 0},
529 :     {fin = [(N 53),(N 55)], trans = 0},
530 :     {fin = [(N 51)], trans = 0},
531 :     {fin = [(N 25)], trans = 0},
532 :     {fin = [(N 13),(N 25)], trans = 41},
533 :     {fin = [(N 13)], trans = 41},
534 :     {fin = [(N 5),(N 25)], trans = 0},
535 :     {fin = [(N 15),(N 25)], trans = 0},
536 :     {fin = [(N 25)], trans = 45},
537 :     {fin = [], trans = 45},
538 :     {fin = [(N 23)], trans = 0},
539 :     {fin = [(N 25)], trans = 48},
540 :     {fin = [], trans = 48},
541 :     {fin = [(N 19)], trans = 0},
542 :     {fin = [(N 10),(N 25)], trans = 51},
543 :     {fin = [(N 10)], trans = 51},
544 :     {fin = [(N 7)], trans = 0}])
545 :     end
546 :     structure StartStates =
547 :     struct
548 :     datatype yystartstate = STARTSTATE of int
549 :    
550 :     (* start state definitions *)
551 :    
552 :     val COM1 = STARTSTATE 3;
553 :     val COM2 = STARTSTATE 5;
554 :     val INITIAL = STARTSTATE 1;
555 :     val STAG = STARTSTATE 7;
556 :    
557 :     end
558 :     type result = UserDeclarations.lexresult
559 :     exception LexerError (* raised if illegal leaf action tried *)
560 :     end
561 :    
562 :     val yylineno = ref 0
563 :    
564 :     fun makeLexer yyinput =
565 :     let
566 :     val yyb = ref "\n" (* buffer *)
567 :     val yybl = ref 1 (*buffer length *)
568 :     val yybufpos = ref 1 (* location of next character to use *)
569 :     val yygone = ref 1 (* position in file of beginning of buffer *)
570 :     val yydone = ref false (* eof found yet? *)
571 :     val yybegin = ref 1 (*Current 'start state' for lexer *)
572 :    
573 :     val YYBEGIN = fn (Internal.StartStates.STARTSTATE x) =>
574 :     yybegin := x
575 :    
576 :     fun lex (yyarg as (errorFn, file)) =
577 :     let fun continue() : Internal.result =
578 :     let fun scan (s,AcceptingLeaves : Internal.yyfinstate list list,l,i0) =
579 :     let fun action (i,nil) = raise LexError
580 :     | action (i,nil::l) = action (i-1,l)
581 :     | action (i,(node::acts)::l) =
582 :     case node of
583 :     Internal.N yyk =>
584 :     (let val yytext = substring(!yyb,i0,i-i0)
585 :     val yypos = i0+ !yygone
586 :     val _ = yylineno := CharVector.foldl
587 :     (fn (#"\n", n) => n+1 | (_, n) => n) (!yylineno) yytext
588 :     open UserDeclarations Internal.StartStates
589 :     in (yybufpos := i; case yyk of
590 :    
591 :     (* Application actions *)
592 :    
593 :     10 => (addStr yytext; continue())
594 :     | 13 => (addStr yytext; continue())
595 :     | 15 => (addStr yytext; continue())
596 :     | 19 => (addStr yytext; continue())
597 :     | 23 => (addStr yytext; continue())
598 :     | 25 => (addStr yytext; continue())
599 :     | 3 => (addStr yytext; YYBEGIN STAG; continue())
600 :     | 32 => (case Elems.endTag file (yytext, !yylineno, !yylineno)
601 :     of NONE => continue()
602 :     | (SOME tag) => tag
603 :     (* end case *))
604 :     | 37 => (YYBEGIN COM1; continue())
605 :     | 40 => (YYBEGIN COM2; continue())
606 :     | 42 => (continue())
607 :     | 44 => (continue())
608 :     | 47 => (YYBEGIN COM1; continue())
609 :     | 49 => (YYBEGIN INITIAL; continue())
610 :     | 5 => (addStr yytext;
611 :     YYBEGIN INITIAL;
612 :     case Elems.startTag file (getStr(), !yylineno, !yylineno)
613 :     of NONE => continue()
614 :     | (SOME tag) => tag
615 :     (* end case *))
616 :     | 51 => (continue())
617 :     | 53 => (continue())
618 :     | 55 => (errorFn("bad comment syntax", !yylineno, !yylineno+1);
619 :     YYBEGIN INITIAL;
620 :     continue())
621 :     | 61 => (
622 :     (** At some point, we should support &#SPACE; and &#TAB; **)
623 :     continue())
624 :     | 67 => (T.CHAR_REF(yytext, !yylineno, !yylineno))
625 :     | 7 => (addStr " "; continue())
626 :     | 72 => (T.ENTITY_REF(yytext, !yylineno, !yylineno))
627 :     | 74 => (continue())
628 :     | 76 => (continue())
629 :     | 79 => (T.PCDATA(yytext, !yylineno, !yylineno))
630 :     | 81 => (errorFn(concat[
631 :     "bogus character #\"", Char.toString(String.sub(yytext, 0)),
632 :     "\" in PCDATA\n"
633 :     ], !yylineno, !yylineno+1);
634 :     continue())
635 :     | _ => raise Internal.LexerError
636 :    
637 :     ) end )
638 :    
639 :     val {fin,trans} = Vector.sub(Internal.tab, s)
640 :     val NewAcceptingLeaves = fin::AcceptingLeaves
641 :     in if l = !yybl then
642 :     if trans = #trans(Vector.sub(Internal.tab,0))
643 :     then action(l,NewAcceptingLeaves
644 :     ) else let val newchars= if !yydone then "" else yyinput 1024
645 :     in if (size newchars)=0
646 :     then (yydone := true;
647 :     if (l=i0) then UserDeclarations.eof yyarg
648 :     else action(l,NewAcceptingLeaves))
649 :     else (if i0=l then yyb := newchars
650 :     else yyb := substring(!yyb,i0,l-i0)^newchars;
651 :     yygone := !yygone+i0;
652 :     yybl := size (!yyb);
653 :     scan (s,AcceptingLeaves,l-i0,0))
654 :     end
655 :     else let val NewChar = Char.ord(String.sub(!yyb,l))
656 :     val NewState = Char.ord(String.sub(trans,NewChar))
657 :     in if NewState=0 then action(l,NewAcceptingLeaves)
658 :     else scan(NewState,NewAcceptingLeaves,l+1,i0)
659 :     end
660 :     end
661 :     (*
662 :     val start= if substring(!yyb,!yybufpos-1,1)="\n"
663 :     then !yybegin+1 else !yybegin
664 :     *)
665 :     in scan(!yybegin (* start *),nil,!yybufpos,!yybufpos)
666 :     end
667 :     in continue end
668 :     in lex
669 :     end
670 :     end

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0