-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathparse.sml
27 lines (23 loc) · 988 Bytes
/
parse.sml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
structure Parse :
sig
val parse : string -> Absyn.exp
val printAbsyn : string -> unit
end =
struct
structure TigerLrVals = TigerLrValsFun(structure Token = LrParser.Token)
structure Lex = TigerLexFun(structure Tokens = TigerLrVals.Tokens)
structure TigerP = Join(structure ParserData = TigerLrVals.ParserData
structure Lex = Lex
structure LrParser = LrParser)
fun parse filename = let
val _ = (ErrorMsg.reset(); ErrorMsg.fileName := filename)
val file = TextIO.openIn filename
fun get _ = TextIO.input file
fun parseError(s, p1, p2) = ErrorMsg.error p1 s
val lexer = LrParser.Stream.streamify (Lex.makeLexer get)
val (absyn, _) = TigerP.parse(30, lexer, parseError, ())
in TextIO.closeIn file;
absyn
end handle LrParser.ParseError => raise ErrorMsg.Error
fun printAbsyn filename = PrintAbsyn.print(TextIO.stdOut, parse filename)
end