Change domtool-publish to leave files alone if they don't have the right extension
[hcoop/domtool2.git] / src / parse.sml
CommitLineData
a22c187b
AC
1(* HCoop Domtool (http://hcoop.sourceforge.net/)
2 * Copyright (c) 2006, Adam Chlipala
3 *
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.
8 *
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.
13 *
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.
dac62e84 17 *)
a22c187b
AC
18
19(* Domtool configuration language parser *)
20
21structure Parse :> PARSE =
22 struct
23
24 structure DomtoolLrVals = DomtoolLrValsFn(structure Token = LrParser.Token)
25 structure Lex = DomtoolLexFn(structure Tokens = DomtoolLrVals.Tokens)
26 structure DomtoolP = Join(structure ParserData = DomtoolLrVals.ParserData
27 structure Lex = Lex
28 structure LrParser = LrParser)
29
30 (* The main parsing routine *)
31 fun parse filename =
7f012ffd 32 let val _ = (ErrorMsg.fileName := filename)
a22c187b
AC
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, ())
38 in
39 TextIO.closeIn file;
40 absyn
41 end
42 handle LrParser.ParseError => raise ErrorMsg.Error
43end