X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=src%2Fparse.ml;h=da42b87a378315624991a6ca882c858b4ed7d46c;hb=54c8ad92025a9c77c2b10644499b3944e1299187;hp=6e1ff95b6e71ebc07e1a3ae72519b3faf7a2bcb8;hpb=2ac1b84cb49ad04e27b4543436b0227153fbfb15;p=goals.git diff --git a/src/parse.ml b/src/parse.ml index 6e1ff95..da42b87 100644 --- a/src/parse.ml +++ b/src/parse.ml @@ -17,15 +17,15 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *) -open Lexer open Lexing - open Printf -let print_position fp lexbuf = +open Utils +open Lexer + +let string_position () lexbuf = let pos = lexbuf.lex_curr_p in - fprintf fp "%s:%d:%d" - pos.pos_fname pos.pos_lnum (pos.pos_cnum - pos.pos_bol) + sprintf "%s:%d:%d" pos.pos_fname pos.pos_lnum (pos.pos_cnum - pos.pos_bol) let parse_file env lexbuf = try @@ -33,28 +33,25 @@ let parse_file env lexbuf = Ast.Env.merge env env' with | SyntaxError msg -> - eprintf "%a: %s\n" print_position lexbuf msg; - exit 1 + failwithf "%a: %s" string_position lexbuf msg | Parser.Error -> - eprintf "%a: parse error\n" print_position lexbuf; - exit 1 + failwithf "%a: parse error" string_position lexbuf let parse_expr lexbuf = - try Parser.expr Lexer.read lexbuf + try Parser.expr_only Lexer.read lexbuf with | SyntaxError msg -> - eprintf "%a: %s\n" print_position lexbuf msg; - exit 1 + failwithf "%a: %s" string_position lexbuf msg | Parser.Error -> - eprintf "%a: parse error\n" print_position lexbuf; - exit 1 + failwithf "%a: parse error" string_position lexbuf (* This is used to parse the Goalfile. *) let parse_goalfile env filename = Cmdline.debug "parse file: %s" filename; let fp = open_in filename in - let lexbuf = Lexing.from_channel fp in - lexbuf.lex_curr_p <- { lexbuf.lex_curr_p with pos_fname = filename }; + let lexbuf = Lexing.from_channel ~with_positions:true fp in + let pos = lexbuf.lex_curr_p in + lexbuf.lex_curr_p <- { pos with pos_fname = filename }; let env' = parse_file env lexbuf in close_in fp; env' @@ -64,6 +61,7 @@ let parse_goalfile env filename = *) let parse_expr source str = Cmdline.debug "parse expression: %S" str; - let lexbuf = Lexing.from_string str in - lexbuf.lex_curr_p <- { lexbuf.lex_curr_p with pos_fname = source }; + let lexbuf = Lexing.from_string ~with_positions:true str in + let pos = lexbuf.lex_curr_p in + lexbuf.lex_curr_p <- { pos with pos_fname = source }; parse_expr lexbuf