Show lexer error messages in ReasonLIGO
This commit is contained in:
parent
d3fa06d62a
commit
10b26f610f
@ -9,6 +9,16 @@ module SyntaxError = Parser_reasonligo.SyntaxError
|
|||||||
|
|
||||||
module Errors = struct
|
module Errors = struct
|
||||||
|
|
||||||
|
let lexer_error (e: Lexer.error AST.reg) =
|
||||||
|
let title () = "lexer error" in
|
||||||
|
let message () = Lexer.error_to_string e.value in
|
||||||
|
let data = [
|
||||||
|
("parser_loc",
|
||||||
|
fun () -> Format.asprintf "%a" Location.pp_lift @@ e.region
|
||||||
|
)
|
||||||
|
] in
|
||||||
|
error ~data title message
|
||||||
|
|
||||||
let wrong_function_arguments expr =
|
let wrong_function_arguments expr =
|
||||||
let title () = "wrong function arguments" in
|
let title () = "wrong function arguments" in
|
||||||
let message () = "" in
|
let message () = "" in
|
||||||
@ -65,10 +75,13 @@ let parse (parser: 'a parser) lexbuf =
|
|||||||
let start = Lexing.lexeme_start_p lexbuf in
|
let start = Lexing.lexeme_start_p lexbuf in
|
||||||
let end_ = Lexing.lexeme_end_p lexbuf in
|
let end_ = Lexing.lexeme_end_p lexbuf in
|
||||||
fail @@ (parser_error start end_)
|
fail @@ (parser_error start end_)
|
||||||
|
| Lexer.Error e ->
|
||||||
|
fail @@ (lexer_error e)
|
||||||
| _ ->
|
| _ ->
|
||||||
|
let _ = Printexc.print_backtrace Pervasives.stdout in
|
||||||
let start = Lexing.lexeme_start_p lexbuf in
|
let start = Lexing.lexeme_start_p lexbuf in
|
||||||
let end_ = Lexing.lexeme_end_p lexbuf in
|
let end_ = Lexing.lexeme_end_p lexbuf in
|
||||||
fail @@ (unrecognized_error start end_)
|
fail @@ (unrecognized_error start end_)
|
||||||
in
|
in
|
||||||
close ();
|
close ();
|
||||||
result
|
result
|
||||||
|
@ -138,6 +138,8 @@ module type S =
|
|||||||
|
|
||||||
type error
|
type error
|
||||||
|
|
||||||
|
val error_to_string : error -> string
|
||||||
|
|
||||||
exception Error of error Region.reg
|
exception Error of error Region.reg
|
||||||
|
|
||||||
val print_error :
|
val print_error :
|
||||||
|
@ -160,6 +160,9 @@ module type S = sig
|
|||||||
(* Error reporting *)
|
(* Error reporting *)
|
||||||
|
|
||||||
type error
|
type error
|
||||||
|
|
||||||
|
val error_to_string : error -> string
|
||||||
|
|
||||||
exception Error of error Region.reg
|
exception Error of error Region.reg
|
||||||
|
|
||||||
val print_error : ?offsets:bool -> [`Byte | `Point] ->
|
val print_error : ?offsets:bool -> [`Byte | `Point] ->
|
||||||
@ -345,7 +348,7 @@ module Make (Token: TOKEN) : (S with module Token = Token) =
|
|||||||
| Negative_byte_sequence
|
| Negative_byte_sequence
|
||||||
| Broken_string
|
| Broken_string
|
||||||
| Invalid_character_in_string
|
| Invalid_character_in_string
|
||||||
| Reserved_name
|
| Reserved_name of string
|
||||||
| Invalid_symbol
|
| Invalid_symbol
|
||||||
| Invalid_natural
|
| Invalid_natural
|
||||||
|
|
||||||
@ -387,8 +390,8 @@ module Make (Token: TOKEN) : (S with module Token = Token) =
|
|||||||
| Invalid_character_in_string ->
|
| Invalid_character_in_string ->
|
||||||
"Invalid character in string.\n\
|
"Invalid character in string.\n\
|
||||||
Hint: Remove or replace the character.\n"
|
Hint: Remove or replace the character.\n"
|
||||||
| Reserved_name ->
|
| Reserved_name s ->
|
||||||
"Reserved named.\n\
|
"Reserved name: " ^ s ^ ".\n\
|
||||||
Hint: Change the name.\n"
|
Hint: Change the name.\n"
|
||||||
| Invalid_symbol ->
|
| Invalid_symbol ->
|
||||||
"Invalid symbol.\n\
|
"Invalid symbol.\n\
|
||||||
@ -486,7 +489,7 @@ module Make (Token: TOKEN) : (S with module Token = Token) =
|
|||||||
let region, lexeme, state = sync state buffer in
|
let region, lexeme, state = sync state buffer in
|
||||||
match Token.mk_ident lexeme region with
|
match Token.mk_ident lexeme region with
|
||||||
Ok token -> token, state
|
Ok token -> token, state
|
||||||
| Error Token.Reserved_name -> fail region Reserved_name
|
| Error Token.Reserved_name -> fail region (Reserved_name lexeme)
|
||||||
|
|
||||||
let mk_constr state buffer =
|
let mk_constr state buffer =
|
||||||
let region, lexeme, state = sync state buffer
|
let region, lexeme, state = sync state buffer
|
||||||
|
Loading…
Reference in New Issue
Block a user