1 (* HCoop
Domtool (http
://hcoop
.sourceforge
.net
/)
2 * Copyright (c
) 2006, Adam Chlipala
4 * This program is free software
; you can redistribute it
and/or
5 * modify it under the terms
of the GNU General Public License
6 * as published by the Free Software Foundation
; either version
2
7 * of the License
, or (at your option
) any later version
.
9 * This program is distributed
in the hope that it will be useful
,
10 * but WITHOUT ANY WARRANTY
; without even the implied warranty
of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
. See the
12 * GNU General Public License for more details
.
14 * You should have received a copy
of the GNU General Public License
15 * along
with this program
; if not
, write to the Free Software
16 * Foundation
, Inc
., 51 Franklin Street
, Fifth Floor
, Boston
, MA
02110-1301, USA
.
19 (* Domtool configuration language parser
*)
21 structure Parse
:> PARSE
=
24 structure DomtoolLrVals
= DomtoolLrValsFn(structure Token
= LrParser
.Token
)
25 structure Lex
= DomtoolLexFn(structure Tokens
= DomtoolLrVals
.Tokens
)
26 structure DomtoolP
= Join(structure ParserData
= DomtoolLrVals
.ParserData
28 structure LrParser
= LrParser
)
30 (* The main parsing routine
*)
32 let val _
= (ErrorMsg
.fileName
:= filename
)
33 val file
= TextIO.openIn filename
34 fun get _
= TextIO.input file
35 fun parseerror(s
,p1
,p2
) = ErrorMsg
.error (SOME (p1
,p2
)) s
36 val lexer
= LrParser
.Stream
.streamify (Lex
.makeLexer get
)
37 val (absyn
, _
) = DomtoolP
.parse(30,lexer
, parseerror
, ())
42 handle LrParser
.ParseError
=> raise ErrorMsg
.Error