ligo/vendors/Preproc/E_ParserMain.ml
Christian Rinderknecht 9c9321029a First working version.
2020-03-24 17:48:01 +01:00

35 lines
1.1 KiB
OCaml

module Region = Simple_utils.Region
let highlight msg = Printf.eprintf "\027[31m%s\027[0m%!" msg
let options = EvalOpt.read ();;
match open_in options#input with
exception Sys_error msg -> prerr_endline msg
| cin ->
let buffer = Lexing.from_channel cin in
let open Lexing in
let () =
buffer.lex_curr_p <-
{buffer.lex_curr_p with pos_fname = options#input} in
let () =
try
let tree = E_Parser.expr E_Lexer.scan buffer in
let value = Preproc.(eval Env.empty tree)
in Printf.printf "%s\n" (string_of_bool value)
with
E_Lexer.Error error ->
let formatted =
E_Lexer.Error.format
~offsets:options#offsets ~file:true error
in highlight formatted.Region.value
| E_Parser.Error ->
let region = Preproc.mk_reg buffer
and value = Preproc.Error.Parse_error in
let error = Region.{value; region} in
let formatted =
Preproc.Error.format ~offsets:options#offsets
~file:true error
in highlight formatted.Region.value
in close_in cin