comparison src/lacweb.grm @ 92:1a4c51fa615c

XML tags with contents
author Adam Chlipala <adamc@hcoop.net>
date Thu, 03 Jul 2008 17:02:42 -0400
parents 4327abd52997
children 94afff1ff7f6
comparison
equal deleted inserted replaced
91:4327abd52997 92:1a4c51fa615c
296 | xmlOne (xmlOne) 296 | xmlOne (xmlOne)
297 297
298 xmlOne : NOTAGS (EApp ((EVar (["Basis"], "cdata"), s (NOTAGSleft, NOTAGSright)), 298 xmlOne : NOTAGS (EApp ((EVar (["Basis"], "cdata"), s (NOTAGSleft, NOTAGSright)),
299 (EPrim (Prim.String NOTAGS), s (NOTAGSleft, NOTAGSright))), 299 (EPrim (Prim.String NOTAGS), s (NOTAGSleft, NOTAGSright))),
300 s (NOTAGSleft, NOTAGSright)) 300 s (NOTAGSleft, NOTAGSright))
301 | BEGIN_TAG DIVIDE GT (EApp ((EApp ((EVar (["Basis"], "tag"), s (BEGIN_TAGleft, GTright)), 301 | BEGIN_TAG DIVIDE GT (let
302 (EVar ([], BEGIN_TAG), s (BEGIN_TAGleft, GTright))), 302 val pos = s (BEGIN_TAGleft, GTright)
303 s (BEGIN_TAGleft, GTright)), 303 in
304 (EApp ((EVar (["Basis"], "cdata"), s (BEGIN_TAGleft, GTright)), 304 (EApp ((EApp ((EVar (["Basis"], "tag"), pos),
305 (EPrim (Prim.String ""), s (BEGIN_TAGleft, GTright))), 305 (EVar ([], BEGIN_TAG), pos)),
306 s (BEGIN_TAGleft, GTright))), s (BEGIN_TAGleft, GTright)) 306 pos),
307 (EApp ((EVar (["Basis"], "cdata"), pos),
308 (EPrim (Prim.String ""), pos)),
309 pos)), pos)
310 end)
311
312 | BEGIN_TAG GT xml END_TAG (let
313 val pos = s (BEGIN_TAGleft, GTright)
314 in
315 if BEGIN_TAG = END_TAG then
316 (EApp ((EApp ((EVar (["Basis"], "tag"), pos),
317 (EVar ([], BEGIN_TAG), pos)),
318 pos),
319 xml), pos)
320 else
321 (ErrorMsg.errorAt pos "Begin and end tags don't match.";
322 (EFold, pos))
323 end)
324