(* JungTaek Kim Copyright(c) 2000-2004 KAIST/SNU Research On Program Analysis System (National Creative Research Initiative Center 1998-2003) http://ropas.snu.ac.kr/n All rights reserved. This file is distributed under the terms of an Open Source License. *) structure Nparse = struct open Location fun batch_parse lexbuf = ( let val ast = Nparser.batch_parse Nlexer.token lexbuf in PostParse.check_topdec ast; Parsing.clear_parser(); ast end ) handle err as Nlexer.Error(Nlexer.Unterminated_comment, _, _) => raise err | err as Nlexer.Error(Nlexer.Unterminated_string, _, _) => raise err | err as Nlexer.Error(_, _, _) => raise err | err as NsyntaxErr.Error _ => raise err | Parsing.Parse_error | NsyntaxErr.Escape_error => let val loc = Location.location_to_location ( Lexing.lexeme_start lexbuf, Lexing.lexeme_end lexbuf, false ) in raise(NsyntaxErr.Error(NsyntaxErr.Unknown(loc))) end fun interactive_parse lexbuf = ( let val ast = Nparser.interactive_parse Nlexer.token lexbuf in PostParse.check_toplevel ast; Parsing.clear_parser(); ast end ) handle err as Nlexer.Error(Nlexer.Unterminated_comment, _, _) => raise err | err as Nlexer.Error(Nlexer.Unterminated_string, _, _) => raise err | err as Nlexer.Error(_, _, _) => raise err | err as NsyntaxErr.Error _ => raise err | Parsing.Parse_error | NsyntaxErr.Escape_error => let val loc = Location.location_to_location ( Lexing.lexeme_start lexbuf, Lexing.lexeme_end lexbuf, false ) in raise(NsyntaxErr.Error(NsyntaxErr.Unknown(loc))) end val toplevel_parse = interactive_parse val implementation_parse = batch_parse val parse = batch_parse end