1structure AssembleDiskFiles :> AssembleDiskFiles =
2struct
3
4  structure DiskFilesLrVals =
5    DiskFilesLrValsFun(structure Token = LrParser.Token)
6
7  structure DiskFilesLex =
8    DiskFilesLexFun(structure Tokens = DiskFilesLrVals.Tokens)
9
10
11  structure DiskFileParser =
12     Join(structure ParserData = DiskFilesLrVals.ParserData
13          structure Lex = DiskFilesLex
14          structure LrParser = LrParser)
15
16  fun invoke lexstream = let
17    fun print_error (s,i:int,_) =
18        TextIO.output(TextIO.stdErr, Int.toString i ^ ": " ^ s ^ "\n")
19  in
20    #1 (DiskFileParser.parse(15,lexstream,print_error,()))
21  end
22
23  fun raw_read_stream strm = let
24    val lexer = DiskFileParser.makeLexer (fn _ => Portable.input_line strm)
25    val _ = DiskFilesLex.UserDeclarations.pos := 1
26  in
27    invoke lexer
28  end
29
30  fun raw_read_file fname = let
31    val strm = TextIO.openIn fname
32  in
33    raw_read_stream strm before TextIO.closeIn strm
34  end
35
36
37end;
38