2 * Dynamic web page generation
with Standard ML
3 * Copyright (C
) 2003 Adam Chlipala
5 * This library is free software
; you can redistribute it
and/or
6 * modify it under the terms
of the GNU Lesser General Public
7 * License
as published by the Free Software Foundation
; either
8 * version
2.1 of the License
, or (at your option
) any later version
.
10 * This library is distributed
in the hope that it will be useful
,
11 * but WITHOUT ANY WARRANTY
; without even the implied warranty
of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
. See the GNU
13 * Lesser General Public License for more details
.
15 * You should have received a copy
of the GNU Lesser General Public
16 * License along
with this library
; if not
, write to the Free Software
17 * Foundation
, Inc
., 59 Temple Place
, Suite
330, Boston
, MA
02111-1307 USA
20 (* Template language parser
*)
24 val parse
: string -> Tree
.block
27 structure Parse
:> PARSE
=
30 structure MltLrVals
= MltLrValsFn(structure Token
= LrParser
.Token
)
31 structure Lex
= MltLexFn(structure Tokens
= MltLrVals
.Tokens
)
32 structure MltP
= Join(structure ParserData
= MltLrVals
.ParserData
34 structure LrParser
= LrParser
)
36 (* The main parsing routine
*)
38 let val _
= (ErrorMsg
.reset(); ErrorMsg
.fileName
:= filename
)
39 val file
= TextIO.openIn filename
40 fun get _
= TextIO.input file
41 fun parseerror(s
,p1
,p2
) = ErrorMsg
.error (SOME (p1
,p2
)) s
42 val lexer
= LrParser
.Stream
.streamify (Lex
.makeLexer get
)
43 val (absyn
, _
) = MltP
.parse(30,lexer
, parseerror
, ())
48 handle LrParser
.ParseError
=> raise ErrorMsg
.Error