From c8b8492ed966fb6e63e5934c92f997a1184c2385 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Wulfman Date: Tue, 16 Jun 2020 23:30:09 +0200 Subject: [PATCH 01/10] remaking PacscaLIGO simplifier --- src/bin/expect_tests/code_insertion.ml | 2 +- src/passes/01-parser/pascaligo/AST.ml | 40 +- src/passes/01-parser/pascaligo/Parser.mly | 105 +- src/passes/01-parser/pascaligo/ParserLog.ml | 77 +- src/passes/01-parser/pascaligo/Pretty.ml | 36 +- .../pascaligo/error.messages.checked-in | 63 - .../02-concrete_to_imperative/cameligo.ml | 2 +- .../errors_pascaligo.ml | 53 +- .../02-concrete_to_imperative/pascaligo.ml | 1794 +++++++---------- .../02-concrete_to_imperative/pascaligo.mli | 9 +- src/passes/03-self_ast_imperative/helpers.ml | 25 +- .../03-self_ast_imperative/none_variant.ml | 7 + src/passes/06-sugar_to_core/sugar_to_core.ml | 2 +- src/stages/1-ast_imperative/combinators.ml | 68 +- src/stages/1-ast_imperative/combinators.mli | 29 +- src/test/integration_tests.ml | 54 +- 16 files changed, 1060 insertions(+), 1306 deletions(-) diff --git a/src/bin/expect_tests/code_insertion.ml b/src/bin/expect_tests/code_insertion.ml index 6962b27cb..beb9dcd30 100644 --- a/src/bin/expect_tests/code_insertion.ml +++ b/src/bin/expect_tests/code_insertion.ml @@ -33,7 +33,7 @@ let%expect_test _ = run_ligo_bad [ "compile-contract" ; bad_contract "bad_michelson_insertion_2.ligo" ; "main" ] ; [%expect{| ligo: error - in file "bad_michelson_insertion_2.ligo", line 3, character 0 to line 5, character 41 + in file "bad_michelson_insertion_2.ligo", line 3, characters 9-13 Constant declaration 'main' Bad types: expected nat got ( nat * nat ) diff --git a/src/passes/01-parser/pascaligo/AST.ml b/src/passes/01-parser/pascaligo/AST.ml index d3266eaca..b43bf227d 100644 --- a/src/passes/01-parser/pascaligo/AST.ml +++ b/src/passes/01-parser/pascaligo/AST.ml @@ -161,8 +161,7 @@ and attr_decl = string reg ne_injection reg and const_decl = { kwd_const : kwd_const; name : variable; - colon : colon; - const_type : type_expr; + const_type : (colon * type_expr) option; equal : equal; init : expr; terminator : semi option; @@ -209,8 +208,7 @@ and type_tuple = (type_expr, comma) nsepseq par reg and fun_expr = { kwd_function : kwd_function; param : parameters; - colon : colon; - ret_type : type_expr; + ret_type : (colon * type_expr) option; kwd_is : kwd_is; return : expr } @@ -220,8 +218,7 @@ and fun_decl = { kwd_function : kwd_function; fun_name : variable; param : parameters; - colon : colon; - ret_type : type_expr; + ret_type : (colon * type_expr) option; kwd_is : kwd_is; block_with : (block reg * kwd_with) option; return : expr; @@ -238,15 +235,13 @@ and param_decl = and param_const = { kwd_const : kwd_const; var : variable; - colon : colon; - param_type : type_expr + param_type : (colon * type_expr) option } and param_var = { kwd_var : kwd_var; var : variable; - colon : colon; - param_type : type_expr + param_type : (colon * type_expr) option } and block = { @@ -274,8 +269,7 @@ and data_decl = and var_decl = { kwd_var : kwd_var; name : variable; - colon : colon; - var_type : type_expr; + var_type : (colon * type_expr) option; assign : assign; init : expr; terminator : semi option; @@ -413,18 +407,14 @@ and for_loop = | ForCollect of for_collect reg and for_int = { - kwd_for : kwd_for; - assign : var_assign reg; - kwd_to : kwd_to; - bound : expr; - step : (kwd_step * expr) option; - block : block reg -} - -and var_assign = { - name : variable; - assign : assign; - expr : expr + kwd_for : kwd_for; + binder : variable; + assign : assign; + init : expr; + kwd_to : kwd_to; + bound : expr; + step : (kwd_step * expr) option; + block : block reg } and for_collect = { @@ -633,6 +623,7 @@ and pattern = | PTuple of tuple_pattern and constr_pattern = + (*What is a unit pattern what does it catch ? is it like PWild ? *) PUnit of c_Unit | PFalse of c_False | PTrue of c_True @@ -645,6 +636,7 @@ and tuple_pattern = (pattern, comma) nsepseq par reg and list_pattern = PListComp of pattern injection reg | PNil of kwd_nil + (* Currently hd # tl is PCons, i would expect this to have type pattern * cons * pattern just like PParCons*) | PParCons of (pattern * cons * pattern) par reg | PCons of (pattern, cons) nsepseq reg diff --git a/src/passes/01-parser/pascaligo/Parser.mly b/src/passes/01-parser/pascaligo/Parser.mly index 435213727..afd3a80f9 100644 --- a/src/passes/01-parser/pascaligo/Parser.mly +++ b/src/passes/01-parser/pascaligo/Parser.mly @@ -142,6 +142,7 @@ type_decl: terminator = $5} in {region; value} } +type_expr_colon: ":" type_expr { $1,$2 } type_expr: fun_type | sum_type | record_type { $1 } @@ -239,52 +240,49 @@ field_decl: fun_expr: - "function" parameters ":" type_expr "is" expr { - let stop = expr_to_region $6 in + "function" parameters type_expr_colon? "is" expr { + let stop = expr_to_region $5 in let region = cover $1 stop and value = {kwd_function = $1; param = $2; - colon = $3; - ret_type = $4; - kwd_is = $5; - return = $6} + ret_type = $3; + kwd_is = $4; + return = $5} in {region; value} } (* Function declarations *) open_fun_decl: - ioption ("recursive") "function" fun_name parameters ":" type_expr "is" + ioption ("recursive") "function" fun_name parameters type_expr_colon? "is" block "with" expr { Scoping.check_reserved_name $3; - let stop = expr_to_region $10 in + let stop = expr_to_region $9 in let region = cover $2 stop and value = {kwd_recursive= $1; kwd_function = $2; fun_name = $3; param = $4; - colon = $5; - ret_type = $6; - kwd_is = $7; - block_with = Some ($8, $9); - return = $10; + ret_type = $5; + kwd_is = $6; + block_with = Some ($7, $8); + return = $9; terminator = None; attributes = None} in {region; value} } -| ioption ("recursive") "function" fun_name parameters ":" type_expr "is" +| ioption ("recursive") "function" fun_name parameters type_expr_colon? "is" expr { Scoping.check_reserved_name $3; - let stop = expr_to_region $8 in + let stop = expr_to_region $7 in let region = cover $2 stop and value = {kwd_recursive= $1; kwd_function = $2; fun_name = $3; param = $4; - colon = $5; - ret_type = $6; - kwd_is = $7; + ret_type = $5; + kwd_is = $6; block_with = None; - return = $8; + return = $7; terminator = None; attributes = None} in {region; value} } @@ -300,28 +298,26 @@ parameters: in Scoping.check_parameters params; $1 } param_decl: - "var" var ":" param_type { + "var" var param_type? { Scoping.check_reserved_name $2; - let stop = type_expr_to_region $4 in + let stop = match $3 with None -> $2.region | Some (_,t) -> type_expr_to_region t in let region = cover $1 stop and value = {kwd_var = $1; var = $2; - colon = $3; - param_type = $4} + param_type = $3} in ParamVar {region; value} } -| "const" var ":" param_type { +| "const" var param_type? { Scoping.check_reserved_name $2; - let stop = type_expr_to_region $4 in + let stop = match $3 with None -> $2.region | Some (_,t) -> type_expr_to_region t in let region = cover $1 stop and value = {kwd_const = $1; var = $2; - colon = $3; - param_type = $4} + param_type = $3} in ParamConst {region; value} } param_type: - fun_type { $1 } + ":" fun_type { $1,$2 } block: "begin" sep_or_term_list(statement,";") "end" { @@ -352,11 +348,10 @@ open_data_decl: open_const_decl: "const" unqualified_decl("=") { - let name, colon, const_type, equal, init, stop = $2 in + let name, const_type, equal, init, stop = $2 in let region = cover $1 stop and value = {kwd_const = $1; name; - colon; const_type; equal; init; @@ -366,11 +361,10 @@ open_const_decl: open_var_decl: "var" unqualified_decl(":=") { - let name, colon, var_type, assign, init, stop = $2 in + let name, var_type, assign, init, stop = $2 in let region = cover $1 stop and value = {kwd_var = $1; name; - colon; var_type; assign; init; @@ -378,10 +372,10 @@ open_var_decl: in {region; value} } unqualified_decl(OP): - var ":" type_expr OP expr { + var type_expr_colon? OP expr { Scoping.check_reserved_name $1; - let region = expr_to_region $5 - in $1, $2, $3, $4, $5, region } + let region = expr_to_region $4 + in $1, $2, $3, $4, region } const_decl: open_const_decl ";"? { @@ -616,26 +610,30 @@ while_loop: in While {region; value} } for_loop: - "for" var_assign "to" expr block { - let region = cover $1 $5.region in - let value = {kwd_for = $1; - assign = $2; - kwd_to = $3; - bound = $4; - step = None; - block = $5} - in For (ForInt {region; value}) - } -| "for" var_assign "to" expr "step" expr block { + "for" var ":=" expr "to" expr block { let region = cover $1 $7.region in let value = {kwd_for = $1; - assign = $2; - kwd_to = $3; - bound = $4; - step = Some ($5, $6); + binder = $2; + assign = $3; + init = $4; + kwd_to = $5; + bound = $6; + step = None; block = $7} in For (ForInt {region; value}) } +| "for" var ":=" expr "to" expr "step" expr block { + let region = cover $1 $9.region in + let value = {kwd_for = $1; + binder = $2; + assign = $3; + init = $4; + kwd_to = $5; + bound = $6; + step = Some ($7, $8); + block = $9} + in For (ForInt {region; value}) + } | "for" var arrow_clause? "in" collection expr block { Scoping.check_reserved_name $2; let region = cover $1 $7.region in @@ -653,13 +651,6 @@ collection: | "set" { Set $1 } | "list" { List $1 } -var_assign: - var ":=" expr { - Scoping.check_reserved_name $1; - let region = cover $1.region (expr_to_region $3) - and value = {name=$1; assign=$2; expr=$3} - in {region; value} } - arrow_clause: "->" var { Scoping.check_reserved_name $2; ($1,$2) } diff --git a/src/passes/01-parser/pascaligo/ParserLog.ml b/src/passes/01-parser/pascaligo/ParserLog.ml index 113f41446..3c5b75fa7 100644 --- a/src/passes/01-parser/pascaligo/ParserLog.ml +++ b/src/passes/01-parser/pascaligo/ParserLog.ml @@ -64,6 +64,11 @@ let print_sepseq : None -> () | Some seq -> print_nsepseq state sep print seq +let print_option : state -> (state -> 'a -> unit ) -> 'a option -> unit = + fun state print -> function + None -> () + | Some opt -> print state opt + let print_token state region lexeme = let line = sprintf "%s: %s\n"(compact state region) lexeme @@ -126,12 +131,11 @@ and print_decl state = function | AttrDecl decl -> print_attr_decl state decl and print_const_decl state {value; _} = - let {kwd_const; name; colon; const_type; + let {kwd_const; name; const_type; equal; init; terminator; _} = value in print_token state kwd_const "const"; print_var state name; - print_token state colon ":"; - print_type_expr state const_type; + print_option state print_colon_type_expr const_type; print_token state equal "="; print_expr state init; print_terminator state terminator @@ -155,6 +159,10 @@ and print_type_expr state = function | TVar type_var -> print_var state type_var | TString str -> print_string state str +and print_colon_type_expr state (colon, type_expr) = + print_token state colon ":"; + print_type_expr state type_expr; + and print_cartesian state {value; _} = print_nsepseq state "*" print_type_expr value @@ -203,14 +211,13 @@ and print_type_tuple state {value; _} = print_token state rpar ")" and print_fun_decl state {value; _} = - let {kwd_function; fun_name; param; colon; + let {kwd_function; fun_name; param; ret_type; kwd_is; block_with; return; terminator; _} = value in print_token state kwd_function "function"; print_var state fun_name; print_parameters state param; - print_token state colon ":"; - print_type_expr state ret_type; + print_option state print_colon_type_expr ret_type; print_token state kwd_is "is"; (match block_with with None -> () @@ -221,12 +228,11 @@ and print_fun_decl state {value; _} = print_terminator state terminator; and print_fun_expr state {value; _} = - let {kwd_function; param; colon; + let {kwd_function; param; ret_type; kwd_is; return} : fun_expr = value in print_token state kwd_function "function"; print_parameters state param; - print_token state colon ":"; - print_type_expr state ret_type; + print_option state print_colon_type_expr ret_type; print_token state kwd_is "is"; print_expr state return @@ -249,18 +255,16 @@ and print_param_decl state = function | ParamVar param_var -> print_param_var state param_var and print_param_const state {value; _} = - let {kwd_const; var; colon; param_type} = value in + let {kwd_const; var; param_type} = value in print_token state kwd_const "const"; print_var state var; - print_token state colon ":"; - print_type_expr state param_type + print_option state print_colon_type_expr param_type and print_param_var state {value; _} = - let {kwd_var; var; colon; param_type} = value in - print_token state kwd_var "var"; - print_var state var; - print_token state colon ":"; - print_type_expr state param_type + let {kwd_var; var; param_type} = value in + print_token state kwd_var "var"; + print_var state var; + print_option state print_colon_type_expr param_type and print_block state block = let {enclosing; statements; terminator} = block.value in @@ -283,12 +287,11 @@ and print_data_decl state = function | LocalFun decl -> print_fun_decl state decl and print_var_decl state {value; _} = - let {kwd_var; name; colon; var_type; + let {kwd_var; name; var_type; assign; init; terminator} = value in print_token state kwd_var "var"; print_var state name; - print_token state colon ":"; - print_type_expr state var_type; + print_option state print_colon_type_expr var_type; print_token state assign ":="; print_expr state init; print_terminator state terminator @@ -403,9 +406,11 @@ and print_for_loop state = function | ForCollect for_collect -> print_for_collect state for_collect and print_for_int state ({value; _} : for_int reg) = - let {kwd_for; assign; kwd_to; bound; step; block} = value in + let {kwd_for; binder; assign; init; kwd_to; bound; step; block} = value in print_token state kwd_for "for"; - print_var_assign state assign; + print_var state binder; + print_token state assign ":="; + print_expr state init; print_token state kwd_to "to"; print_expr state bound; (match step with @@ -415,12 +420,6 @@ and print_for_int state ({value; _} : for_int reg) = print_expr state expr); print_block state block -and print_var_assign state {value; _} = - let {name; assign; expr} = value in - print_var state name; - print_token state assign ":="; - print_expr state expr - and print_for_collect state ({value; _} : for_collect reg) = let {kwd_for; var; bind_to; kwd_in; collection; expr; block} = value in @@ -927,7 +926,7 @@ and pp_fun_decl state decl = let () = let state = state#pad arity (start + 2) in pp_node state ""; - pp_type_expr (state#pad 1 0) decl.ret_type in + print_option (state#pad 1 0) pp_type_expr @@ Option.map snd decl.ret_type in let () = let state = state#pad arity (start + 3) in pp_node state ""; @@ -945,7 +944,7 @@ and pp_fun_decl state decl = and pp_const_decl state decl = let arity = 3 in pp_ident (state#pad arity 0) decl.name; - pp_type_expr (state#pad arity 1) decl.const_type; + print_option (state#pad arity 1) pp_type_expr @@ Option.map snd decl.const_type; pp_expr (state#pad arity 2) decl.init and pp_type_expr state = function @@ -1014,7 +1013,7 @@ and pp_fun_expr state (expr: fun_expr) = let () = let state = state#pad 3 1 in pp_node state ""; - pp_type_expr (state#pad 1 0) expr.ret_type in + print_option (state#pad 1 0) pp_type_expr @@ Option.map snd expr.ret_type in let () = let state = state#pad 3 2 in pp_node state ""; @@ -1042,11 +1041,11 @@ and pp_param_decl state = function ParamConst {value; region} -> pp_loc_node state "ParamConst" region; pp_ident (state#pad 2 0) value.var; - pp_type_expr (state#pad 2 1) value.param_type + print_option (state#pad 2 1) pp_type_expr @@ Option.map snd value.param_type | ParamVar {value; region} -> pp_loc_node state "ParamVar" region; pp_ident (state#pad 2 0) value.var; - pp_type_expr (state#pad 2 1) value.param_type + print_option (state#pad 2 1) pp_type_expr @@ Option.map snd value.param_type and pp_statements state statements = let statements = Utils.nsepseq_to_list statements in @@ -1334,13 +1333,15 @@ and pp_for_loop state = function pp_for_collect state value and pp_for_int state for_int = - let {assign; bound; step; block; _} = for_int in + let {binder; init; bound; step; block; _} = for_int in let arity = match step with None -> 3 | Some _ -> 4 in let () = let state = state#pad arity 0 in pp_node state ""; - pp_var_assign state assign.value in + pp_ident (state#pad 2 0) binder; + pp_expr (state#pad 2 1) init + in let () = let state = state#pad arity 1 in pp_node state ""; @@ -1359,10 +1360,6 @@ and pp_for_int state for_int = pp_statements state statements in () -and pp_var_assign state asgn = - pp_ident (state#pad 2 0) asgn.name; - pp_expr (state#pad 2 1) asgn.expr - and pp_for_collect state collect = let () = let state = state#pad 3 0 in @@ -1450,7 +1447,7 @@ and pp_data_decl state = function and pp_var_decl state decl = pp_ident (state#pad 3 0) decl.name; - pp_type_expr (state#pad 3 1) decl.var_type; + print_option (state#pad 3 1) pp_type_expr @@ Option.map snd decl.var_type; pp_expr (state#pad 3 2) decl.init and pp_expr state = function diff --git a/src/passes/01-parser/pascaligo/Pretty.ml b/src/passes/01-parser/pascaligo/Pretty.ml index c3da0fe4a..59a921587 100644 --- a/src/passes/01-parser/pascaligo/Pretty.ml +++ b/src/passes/01-parser/pascaligo/Pretty.ml @@ -19,6 +19,11 @@ let pp_braces : ('a -> document) -> 'a braces reg -> document = fun printer {value; _} -> string "{" ^^ nest 1 (printer value.inside ^^ string "}") +let pp_option : ('a -> document) -> 'a option -> document = + fun printer -> function + None -> empty + | Some opt -> printer opt + let rec print ast = let app decl = group (pp_declaration decl) in let decl = Utils.nseq_to_list ast.decl in @@ -35,11 +40,11 @@ and pp_attr_decl decl = pp_ne_injection pp_string decl and pp_const_decl {value; _} = let {name; const_type; init; attributes; _} = value in let start = string ("const " ^ name.value) in - let t_expr = pp_type_expr const_type in + let t_expr = const_type in let attr = match attributes with None -> empty | Some a -> hardline ^^ pp_attr_decl a in - group (start ^/^ nest 2 (string ": " ^^ t_expr)) + group (start ^/^ pp_option (fun (_, d) -> nest 2 (string ": " ^^ pp_type_expr d)) t_expr) ^^ group (break 1 ^^ nest 2 (string "= " ^^ pp_expr init)) ^^ attr @@ -123,10 +128,9 @@ and pp_fun_expr {value; _} = let {param; ret_type; return; _} : fun_expr = value in let start = string "function" in let parameters = pp_par pp_parameters param in - let return_t = pp_type_expr ret_type in let expr = pp_expr return in group (start ^^ nest 2 (break 1 ^^ parameters)) - ^^ group (break 1 ^^ nest 2 (string ": " ^^ return_t)) + ^^ pp_option (fun (_,d) -> group (break 1 ^^ nest 2 (string ": " ^^ pp_type_expr d))) ret_type ^^ string " is" ^^ group (nest 4 (break 1 ^^ expr)) and pp_fun_decl {value; _} = @@ -138,7 +142,6 @@ and pp_fun_decl {value; _} = | Some _ -> string "recursive" ^/^ string "function" in let start = start ^^ group (break 1 ^^ nest 2 (pp_ident fun_name)) in let parameters = pp_par pp_parameters param in - let return_t = pp_type_expr ret_type in let expr = pp_expr return in let body = match block_with with @@ -150,7 +153,7 @@ and pp_fun_decl {value; _} = None -> empty | Some a -> hardline ^^ pp_attr_decl a in prefix 2 1 start parameters - ^^ group (nest 2 (break 1 ^^ string ": " ^^ nest 2 return_t ^^ string " is")) + ^^ group (nest 2 (pp_option (fun (_, d) -> break 1 ^^ string ": " ^^ nest 2 (pp_type_expr d)) ret_type ^^ string " is")) ^^ body ^^ attr and pp_parameters p = pp_nsepseq ";" pp_param_decl p @@ -161,15 +164,13 @@ and pp_param_decl = function and pp_param_const {value; _} = let {var; param_type; _} : param_const = value in - let name = string ("const " ^ var.value) in - let t_expr = pp_type_expr param_type - in prefix 2 1 (name ^^ string " :") t_expr + let name = string ("const " ^ var.value) + in prefix 2 1 name @@ pp_option (fun (_,d) -> string ": " ^^ pp_type_expr d) param_type and pp_param_var {value; _} = let {var; param_type; _} : param_var = value in - let name = string ("var " ^ var.value) in - let t_expr = pp_type_expr param_type - in prefix 2 1 (name ^^ string " :") t_expr + let name = string ("var " ^ var.value) + in prefix 2 1 name @@ pp_option (fun (_,d) -> string ": " ^^ pp_type_expr d) param_type and pp_block {value; _} = string "block {" @@ -191,8 +192,7 @@ and pp_data_decl = function and pp_var_decl {value; _} = let {name; var_type; init; _} = value in let start = string ("var " ^ name.value) in - let t_expr = pp_type_expr var_type in - group (start ^/^ nest 2 (string ": " ^^ t_expr)) + group (start ^/^ pp_option (fun (_,d) -> nest 2 (string ": " ^^ pp_type_expr d)) var_type) ^^ group (break 1 ^^ nest 2 (string ":= " ^^ pp_expr init)) and pp_instruction = function @@ -330,19 +330,15 @@ and pp_for_loop = function | ForCollect l -> pp_for_collect l and pp_for_int {value; _} = - let {assign; bound; step; block; _} = value in + let {binder; init; bound; step; block; _} = value in let step = match step with None -> empty | Some (_, e) -> prefix 2 1 (string " step") (pp_expr e) in - prefix 2 1 (string "for") (pp_var_assign assign) + prefix 2 1 (string "for") (prefix 2 1 (pp_ident binder ^^ string " :=") (pp_expr init)) ^^ prefix 2 1 (string " to") (pp_expr bound) ^^ step ^^ hardline ^^ pp_block block -and pp_var_assign {value; _} = - let {name; expr; _} = value in - prefix 2 1 (pp_ident name ^^ string " :=") (pp_expr expr) - and pp_for_collect {value; _} = let {var; bind_to; collection; expr; block; _} = value in let binding = diff --git a/src/passes/01-parser/pascaligo/error.messages.checked-in b/src/passes/01-parser/pascaligo/error.messages.checked-in index 7377200d0..e72d8ffee 100644 --- a/src/passes/01-parser/pascaligo/error.messages.checked-in +++ b/src/passes/01-parser/pascaligo/error.messages.checked-in @@ -827,18 +827,6 @@ interactive_expr: Function LPAR Var Ident COLON Ident VBAR -interactive_expr: Function LPAR Var Ident COLON With -## -## Ends in an error in state: 74. -## -## param_decl -> Var Ident COLON . param_type [ SEMI RPAR ] -## -## The known suffix of the stack is as follows: -## Var Ident COLON -## - - - interactive_expr: Function LPAR Var Ident With ## ## Ends in an error in state: 73. @@ -2828,18 +2816,6 @@ contract: Const Ident COLON String VBAR -contract: Const Ident COLON With -## -## Ends in an error in state: 495. -## -## unqualified_decl(EQ) -> Ident COLON . type_expr EQ expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] -## -## The known suffix of the stack is as follows: -## Ident COLON -## - - - contract: Const Ident With ## ## Ends in an error in state: 494. @@ -4010,18 +3986,6 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin -contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Var Ident COLON With -## -## Ends in an error in state: 418. -## -## unqualified_decl(ASS) -> Ident COLON . type_expr ASS expr [ SEMI RBRACE End ] -## -## The known suffix of the stack is as follows: -## Ident COLON -## - - - contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Var Ident With ## ## Ends in an error in state: 417. @@ -4174,19 +4138,6 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String VBAR -contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON With -## -## Ends in an error in state: 463. -## -## open_fun_decl -> Function Ident parameters COLON . type_expr Is block With expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] -## open_fun_decl -> Function Ident parameters COLON . type_expr Is expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] -## -## The known suffix of the stack is as follows: -## Function Ident parameters COLON -## - - - contract: Function Ident LPAR Const Ident COLON Ident RPAR With ## ## Ends in an error in state: 462. @@ -4284,19 +4235,6 @@ contract: Recursive Function Ident LPAR Const Ident COLON Ident RPAR COLON Strin -contract: Recursive Function Ident LPAR Const Ident COLON Ident RPAR COLON With -## -## Ends in an error in state: 87. -## -## open_fun_decl -> Recursive Function Ident parameters COLON . type_expr Is block With expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] -## open_fun_decl -> Recursive Function Ident parameters COLON . type_expr Is expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] -## -## The known suffix of the stack is as follows: -## Recursive Function Ident parameters COLON -## - - - contract: Recursive Function Ident LPAR Const Ident COLON Ident RPAR With ## ## Ends in an error in state: 86. @@ -4836,4 +4774,3 @@ contract: With ## - diff --git a/src/passes/02-concrete_to_imperative/cameligo.ml b/src/passes/02-concrete_to_imperative/cameligo.ml index 5ccfaf365..007c70e49 100644 --- a/src/passes/02-concrete_to_imperative/cameligo.ml +++ b/src/passes/02-concrete_to_imperative/cameligo.ml @@ -543,7 +543,7 @@ and compile_fun lamb' : (expr , abs_error) result = let aux ((var : Raw.variable) , ty_opt) = match var.value , ty_opt with | "storage" , None -> - ok (var , t_variable "storage") + ok (var , t_variable ~loc @@ Var.fresh ~name:"storage" ()) | _ , None -> fail @@ untyped_fun_param var | _ , Some ty -> ( diff --git a/src/passes/02-concrete_to_imperative/errors_pascaligo.ml b/src/passes/02-concrete_to_imperative/errors_pascaligo.ml index dfb59afef..32b789496 100644 --- a/src/passes/02-concrete_to_imperative/errors_pascaligo.ml +++ b/src/passes/02-concrete_to_imperative/errors_pascaligo.ml @@ -10,32 +10,38 @@ type abs_error = [ | `Concrete_pascaligo_unknown_predefined_type of Raw.constr | `Concrete_pascaligo_unsupported_non_var_pattern of Raw.pattern | `Concrete_pascaligo_only_constructors of Raw.pattern - | `Concrete_pascaligo_unsupported_pattern_type of Raw.pattern list + | `Concrete_pascaligo_unsupported_pattern_type of Raw.pattern | `Concrete_pascaligo_unsupported_tuple_pattern of Raw.pattern | `Concrete_pascaligo_unsupported_string_singleton of Raw.type_expr | `Concrete_pascaligo_unsupported_deep_some_pattern of Raw.pattern - | `Concrete_pascaligo_unsupported_deep_list_pattern of (Raw.pattern, Raw.wild) Parser_shared.Utils.nsepseq Raw.reg + | `Concrete_pascaligo_unsupported_deep_list_pattern of Raw.pattern + | `Concrete_pascaligo_unsupported_deep_tuple_pattern of (Raw.pattern, Raw.wild) Parser_shared.Utils.nsepseq Raw.par Raw.reg | `Concrete_pascaligo_unknown_built_in of string | `Concrete_pascaligo_michelson_type_wrong of Raw.type_expr * string | `Concrete_pascaligo_michelson_type_wrong_arity of Location.t * string | `Concrete_pascaligo_instruction_tracer of Raw.instruction * abs_error | `Concrete_pascaligo_program_tracer of Raw.declaration list * abs_error + | `Concrete_pascaligo_recursive_fun of Location.t + | `Concrete_pascaligo_block_attribute of Raw.block Region.reg ] let unsupported_cst_constr p = `Concrete_pascaligo_unsupported_constant_constr p let unknown_predefined_type name = `Concrete_pascaligo_unknown_predefined_type name let unsupported_non_var_pattern p = `Concrete_pascaligo_unsupported_non_var_pattern p +let untyped_recursive_fun loc = `Concrete_pascaligo_recursive_fun loc let only_constructors p = `Concrete_pascaligo_only_constructors p let unsupported_pattern_type pl = `Concrete_pascaligo_unsupported_pattern_type pl let unsupported_tuple_pattern p = `Concrete_pascaligo_unsupported_tuple_pattern p let unsupported_string_singleton te = `Concrete_pascaligo_unsupported_string_singleton te let unsupported_deep_some_patterns p = `Concrete_pascaligo_unsupported_deep_some_pattern p let unsupported_deep_list_patterns cons = `Concrete_pascaligo_unsupported_deep_list_pattern cons +let unsupported_deep_tuple_patterns t = `Concrete_pascaligo_unsupported_deep_tuple_pattern t let unknown_built_in name = `Concrete_pascaligo_unknown_built_in name let michelson_type_wrong texpr name = `Concrete_pascaligo_michelson_type_wrong (texpr,name) let michelson_type_wrong_arity loc name = `Concrete_pascaligo_michelson_type_wrong_arity (loc,name) let abstracting_instruction_tracer i err = `Concrete_pascaligo_instruction_tracer (i,err) let program_tracer decl err = `Concrete_pascaligo_program_tracer (decl,err) +let block_start_with_attribute block = `Concrete_pascaligo_block_attribute block let rec error_ppformat : display_format:string display_format -> Format.formatter -> abs_error -> unit = @@ -51,7 +57,7 @@ let rec error_ppformat : display_format:string display_format -> | `Concrete_pascaligo_unsupported_pattern_type pl -> Format.fprintf f "@[%a@Currently, only booleans, lists, options, and constructors are supported in patterns@]" - Location.pp_lift (List.fold_left (fun a p -> Region.cover a (Raw.pattern_to_region p)) Region.ghost pl) + Location.pp_lift @@ Raw.pattern_to_region pl | `Concrete_pascaligo_unsupported_tuple_pattern p -> Format.fprintf f "@[%a@The following tuple pattern is not supported yet:@\"%s\"@]" @@ -76,7 +82,11 @@ let rec error_ppformat : display_format:string display_format -> | `Concrete_pascaligo_unsupported_deep_list_pattern cons -> Format.fprintf f "@[%a@Currently, only empty lists and x::y are supported in list patterns@]" - Location.pp_lift @@ cons.Region.region + Location.pp_lift @@ Raw.pattern_to_region cons + | `Concrete_pascaligo_unsupported_deep_tuple_pattern tuple -> + Format.fprintf f + "@[%a@Currently, nested tuple pattern is not suppoerted@]" + Location.pp_lift @@ tuple.Region.region | `Concrete_pascaligo_only_constructors p -> Format.fprintf f "@[%a@Currently, only constructors are supported in patterns@]" @@ -105,6 +115,14 @@ let rec error_ppformat : display_format:string display_format -> "@[%a@Abstracting program@%a@]" Location.pp_lift (List.fold_left (fun a d -> Region.cover a (Raw.declaration_to_region d)) Region.ghost decl) (error_ppformat ~display_format) err + | `Concrete_pascaligo_recursive_fun loc -> + Format.fprintf f + "@[%a@Untyped recursive functions are not supported yet@]" + Location.pp loc + | `Concrete_pascaligo_block_attribute block -> + Format.fprintf f + "@[%a@Attributes have to follow the declaration it is attached@]" + Location.pp_lift @@ block.region ) @@ -125,9 +143,16 @@ let rec error_jsonformat : abs_error -> J.t = fun a -> ("location", `String loc); ("type", t ) ] in json_error ~stage ~content + | `Concrete_pascaligo_recursive_fun loc -> + let message = `String "Untyped recursive functions are not supported yet" in + let loc = Format.asprintf "%a" Location.pp loc in + let content = `Assoc [ + ("message", message ); + ("location", `String loc);] in + json_error ~stage ~content | `Concrete_pascaligo_unsupported_pattern_type pl -> let loc = Format.asprintf "%a" - Location.pp_lift (List.fold_left (fun a p -> Region.cover a (Raw.pattern_to_region p)) Region.ghost pl) in + Location.pp_lift @@ Raw.pattern_to_region pl in let message = `String "Currently, only booleans, lists, options, and constructors are supported in patterns" in let content = `Assoc [ ("message", message ); @@ -172,7 +197,14 @@ let rec error_jsonformat : abs_error -> J.t = fun a -> json_error ~stage ~content | `Concrete_pascaligo_unsupported_deep_list_pattern cons -> let message = `String "Currently, only empty lists and x::y are supported in list patterns" in - let loc = Format.asprintf "%a" Location.pp_lift @@ cons.Region.region in + let loc = Format.asprintf "%a" Location.pp_lift @@ Raw.pattern_to_region cons in + let content = `Assoc [ + ("message", message ); + ("location", `String loc);] in + json_error ~stage ~content + | `Concrete_pascaligo_unsupported_deep_tuple_pattern tuple -> + let message = `String "Currently, nested tuple pattern is not supported" in + let loc = Format.asprintf "%a" Location.pp_lift @@ tuple.Region.region in let content = `Assoc [ ("message", message ); ("location", `String loc);] in @@ -224,4 +256,11 @@ let rec error_jsonformat : abs_error -> J.t = fun a -> ("message", message ); ("location", `String loc); ("children", children) ] in - json_error ~stage ~content \ No newline at end of file + json_error ~stage ~content + | `Concrete_pascaligo_block_attribute block -> + let message = Format.asprintf "Attributes have to follow the declaration it is attached" in + let loc = Format.asprintf "%a" Location.pp_lift block.region in + let content = `Assoc [ + ("message", `String message ); + ("location", `String loc); ] in + json_error ~stage ~content diff --git a/src/passes/02-concrete_to_imperative/pascaligo.ml b/src/passes/02-concrete_to_imperative/pascaligo.ml index 51365df69..243a90b1c 100644 --- a/src/passes/02-concrete_to_imperative/pascaligo.ml +++ b/src/passes/02-concrete_to_imperative/pascaligo.ml @@ -1,1058 +1,814 @@ open Errors_pascaligo open Trace -open Ast_imperative -module Raw = Parser.Pascaligo.AST -module SMap = Map.String -(* module ParserLog = Parser_pascaligo.ParserLog *) +module CST = Parser.Pascaligo.AST +module AST = Ast_imperative -open Combinators +open AST let nseq_to_list (hd, tl) = hd :: tl let npseq_to_list (hd, tl) = hd :: (List.map snd tl) -let pseq_to_list = function - None -> [] -| Some lst -> npseq_to_list lst -let get_value : 'a Raw.reg -> 'a = fun x -> x.value +let npseq_to_ne_list (hd, tl) = (hd, List.map snd tl) + +let (<@) f g x = f (g x) open Operators.Concrete_to_imperative.Pascaligo let r_split = Location.r_split -(* Statements can't be simplified in isolation. [a ; b ; c] can get - simplified either as [let x = expr in (b ; c)] if [a] is a [const x - = expr] declaration or as [sequence(a, sequence(b, c))] for - everything else. Because of this, abstracting sequences depend on - their contents. To avoid peeking in their contents, we instead - simplify sequences elements as functions from their next elements - to the actual result. - - For [return_let_in], if there is no follow-up element, an error is - triggered, as you can't have [let x = expr in ...] with no [...]. A - cleaner option might be to add a [unit] instead of failing. - - [return_statement] is used for non-let-in statements. - *) - -let return_let_in ?loc binder inline rhs = ok @@ fun expr'_opt -> - match expr'_opt with - | None -> ok @@ e_let_in ?loc binder inline rhs (e_skip ()) - | Some expr' -> ok @@ e_let_in ?loc binder inline rhs expr' - -let return_statement expr = ok @@ fun expr'_opt -> - match expr'_opt with - | None -> ok @@ expr - | Some expr' -> ok @@ e_sequence expr expr' - -let get_t_string_singleton_opt = function - | Raw.TString s -> Some s.value - | _ -> None - - -let rec compile_type_expression (t:Raw.type_expr) : (type_expression , (abs_error)) result = - match t with - TPar x -> compile_type_expression x.value.inside - | TVar v -> ( - let (v,loc) = r_split v in - match type_constants v with - | Some s -> ok @@ make_t ~loc @@ T_constant s - | None -> ok @@ make_t ~loc @@ T_variable (Var.of_name v) - ) - | TFun x -> ( - let (x,loc) = r_split x in - let%bind (a , b) = - let (a , _ , b) = x in - bind_map_pair compile_type_expression (a , b) in - ok @@ make_t ~loc @@ T_arrow {type1=a;type2=b} - ) - | TApp x -> - let (x, loc) = r_split x in - let (name, tuple) = x in - (match name.value with - | "michelson_or" -> - let lst = npseq_to_list tuple.value.inside in - (match lst with - | [a ; b ; c ; d ] -> ( - let%bind b' = - trace_option (michelson_type_wrong t name.value) @@ - get_t_string_singleton_opt b in - let%bind d' = - trace_option (michelson_type_wrong t name.value) @@ - get_t_string_singleton_opt d in - let%bind a' = compile_type_expression a in - let%bind c' = compile_type_expression c in - ok @@ t_michelson_or ~loc a' b' c' d' - ) - | _ -> fail @@ michelson_type_wrong_arity loc name.value) - | "michelson_pair" -> - let lst = npseq_to_list tuple.value.inside in - (match lst with - | [a ; b ; c ; d ] -> ( - let%bind b' = - trace_option (michelson_type_wrong t name.value) @@ - get_t_string_singleton_opt b in - let%bind d' = - trace_option (michelson_type_wrong t name.value) @@ - get_t_string_singleton_opt d in - let%bind a' = compile_type_expression a in - let%bind c' = compile_type_expression c in - ok @@ t_michelson_pair ~loc a' b' c' d' - ) - | _ -> fail @@ michelson_type_wrong_arity loc name.value) - | _ -> - let lst = npseq_to_list tuple.value.inside in - let%bind lst = - bind_list @@ List.map compile_type_expression lst in (** TODO: fix constant and operator*) - let%bind cst = - trace_option (unknown_predefined_type name) @@ - type_operators name.value in - ok @@ t_operator ~loc cst lst ) - | TProd p -> - let%bind tpl = compile_list_type_expression - @@ npseq_to_list p.value in - ok tpl - | TRecord r -> - let (r,loc ) = r_split r in - let aux = fun (x, y) -> - let%bind y = compile_type_expression y in - ok (x, y) - in - let order = fun i (x,y) -> - ((x,i),y) - in - let apply = - fun (x:Raw.field_decl Raw.reg) -> (x.value.field_name.value, x.value.field_type) in - let%bind lst = bind_list - @@ List.map aux - @@ List.mapi order - @@ List.map apply - @@ npseq_to_list r.ne_elements in - let m = List.fold_left (fun m ((x,i), y) -> LMap.add (Label x) {field_type=y;field_decl_pos=i} m) LMap.empty lst in - ok @@ make_t ~loc @@ T_record m - | TSum s -> - let (s,loc) = r_split s in - let aux i (v:Raw.variant Raw.reg) = - let args = - match v.value.arg with - None -> [] - | Some (_, TProd product) -> npseq_to_list product.value - | Some (_, t_expr) -> [t_expr] in - let%bind te = compile_list_type_expression @@ args in - ok ((v.value.constr.value,i), te) - in - let%bind lst = bind_list - @@ List.mapi aux - @@ npseq_to_list s in - let m = List.fold_left (fun m ((x,i), y) -> CMap.add (Constructor x) {ctor_type=y;ctor_decl_pos=i} m) CMap.empty lst in - ok @@ make_t ~loc @@ T_sum m - | TString _s -> fail @@ unsupported_string_singleton t - -and compile_list_type_expression (lst:Raw.type_expr list) : (type_expression , (abs_error)) result = - match lst with - | [] -> ok @@ t_unit () - | [hd] -> compile_type_expression hd - | lst -> - let%bind lst = bind_list @@ List.map compile_type_expression lst in - ok @@ t_tuple lst - -let compile_projection : Raw.projection Region.reg -> _ = fun p -> - let (p' , loc) = r_split p in - let var = - let name = Var.of_name p'.struct_name.value in - e_variable name in - let path = p'.field_path in - let path' = - let aux (s:Raw.selection) = - match s with - | FieldName property -> Access_record property.value - | Component index -> (Access_tuple (snd index.value)) +let rec compile_type_expression : CST.type_expr -> _ result = fun te -> + let return te = ok @@ te in + match te with + TSum sum -> + let (nsepseq, loc) = r_split sum in + let lst = npseq_to_list nsepseq in + let aux (variant : CST.variant CST.reg) = + let (v, _) = r_split variant in + let%bind type_expr = bind_map_option (compile_type_expression <@ snd) v.arg in + let type_expr = Option.unopt ~default:(t_unit ()) type_expr in + ok @@ (v.constr.value,type_expr) in - List.map aux @@ npseq_to_list path in - ok @@ e_accessor ~loc var path' + let%bind sum = bind_map_list aux lst in + return @@ t_sum_ez ~loc sum + | TRecord record -> + let (nsepseq, loc) = r_split record in + let lst = npseq_to_list nsepseq.ne_elements in + let aux (field : CST.field_decl CST.reg) = + let (f, _) = r_split field in + let%bind type_expr = compile_type_expression f.field_type in + ok @@ (f.field_name.value,type_expr) + in + let%bind record = bind_map_list aux lst in + return @@ t_record_ez ~loc record + | TProd prod -> + let (nsepseq, loc) = r_split prod in + let lst = npseq_to_list nsepseq in + let%bind lst = bind_map_list compile_type_expression lst in + return @@ t_tuple ~loc lst + | TApp app -> + let get_t_string_singleton_opt = function + | CST.TString s -> Some s.value + | _ -> None + in + let ((operator,args), loc) = r_split app in + (* this is a bad design, michelson_or and pair should be an operator + see AnnotType *) + (match operator.value with + | "michelson_or" -> + let lst = npseq_to_list args.value.inside in + (match lst with + | [a ; b ; c ; d ] -> ( + let%bind b' = + trace_option (michelson_type_wrong te operator.value) @@ + get_t_string_singleton_opt b in + let%bind d' = + trace_option (michelson_type_wrong te operator.value) @@ + get_t_string_singleton_opt d in + let%bind a' = compile_type_expression a in + let%bind c' = compile_type_expression c in + ok @@ t_michelson_or ~loc a' b' c' d' + ) + | _ -> fail @@ michelson_type_wrong_arity loc operator.value) + | "michelson_pair" -> + let lst = npseq_to_list args.value.inside in + (match lst with + | [a ; b ; c ; d ] -> ( + let%bind b' = + trace_option (michelson_type_wrong te operator.value) @@ + get_t_string_singleton_opt b in + let%bind d' = + trace_option (michelson_type_wrong te operator.value) @@ + get_t_string_singleton_opt d in + let%bind a' = compile_type_expression a in + let%bind c' = compile_type_expression c in + ok @@ t_michelson_pair ~loc a' b' c' d' + ) + | _ -> fail @@ michelson_type_wrong_arity loc operator.value) + | _ -> + let%bind operators = + trace_option (unknown_predefined_type operator) @@ + type_operators operator.value in + let lst = npseq_to_list args.value.inside in + let%bind lst = bind_map_list compile_type_expression lst in + return @@ t_operator ~loc operators lst + ) + | TFun func -> + let ((input_type,_,output_type), loc) = r_split func in + let%bind input_type = compile_type_expression input_type in + let%bind output_type = compile_type_expression output_type in + return @@ t_function ~loc input_type output_type + | TPar par -> + let (par, _) = r_split par in + let type_expr = par.inside in + compile_type_expression type_expr + | TVar var -> + let (name,loc) = r_split var in + (match type_constants name with + Some const -> return @@ t_constant ~loc const + | None -> return @@ t_variable_ez ~loc name + ) + | TString _s -> fail @@ unsupported_string_singleton te +let compile_selection (selection : CST.selection) = + match selection with + FieldName name -> + let (name, loc) = r_split name in + (Access_record name, loc) + | Component comp -> + let ((_,index), loc) = r_split comp in + (Access_tuple index, loc) -let rec compile_expression (t:Raw.expr) : (expr , (abs_error)) result = - let return x = ok x in - match t with - | EAnnot a -> ( - let par, loc = r_split a in - let expr, _, type_expr = par.inside in - let%bind expr' = compile_expression expr in - let%bind type_expr' = compile_type_expression type_expr in - return @@ e_annotation ~loc expr' type_expr' +let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) result = fun e -> + let return e = ok @@ e in + let compile_tuple_expression (tuple_expr : CST.tuple_expr) = + let (lst, loc) = r_split tuple_expr in + let%bind lst = bind_map_list compile_expression @@ npseq_to_list lst.inside in + match lst with + hd::[] -> return @@ hd + | lst -> return @@ e_tuple ~loc lst + in + let compile_path (path : CST.path) = + match path with + Name var -> + let (var, loc) = r_split var in + return @@ e_variable_ez ~loc var + | Path proj -> + let (proj, loc) = r_split proj in + let (var, _loc_var) = r_split proj.struct_name in + let var = e_variable_ez ~loc var in + let (sels, _) = List.split @@ List.map compile_selection @@ npseq_to_list proj.field_path in + return @@ e_accessor var sels + in + let compile_bin_op (op_type : AST.constant') (op : _ CST.bin_op CST.reg) = + let (op, loc) = r_split op in + let%bind a = compile_expression op.arg1 in + let%bind b = compile_expression op.arg2 in + return @@ e_constant ~loc op_type [a; b] + in + let compile_un_op (op_type : AST.constant') (op : _ CST.un_op CST.reg) = + let (op, loc) = r_split op in + let%bind arg = compile_expression op.arg in + return @@ e_constant ~loc op_type [arg] + in + match e with + EVar var -> + let (var, loc) = r_split var in + (match constants var with + Some const -> return @@ e_constant ~loc const [] + | None -> return @@ e_variable_ez ~loc var ) - | EVar c -> ( - let (c', loc) = r_split c in - match constants c' with - | None -> return @@ e_variable ~loc (Var.of_name c.value) - | Some s -> return @@ e_constant ~loc s [] - ) - | ECall x -> ( - let ((f, args), loc) = r_split x in - let (args, args_loc) = r_split args in - let args' = npseq_to_list args.inside in - match f with - | EVar name -> ( - let (f_name , f_loc) = r_split name in - match constants f_name with - | None -> - let%bind arg = compile_tuple_expression ~loc:args_loc args' in - return @@ e_application ~loc (e_variable ~loc:f_loc (Var.of_name f_name)) arg - | Some s -> - let%bind lst = bind_map_list compile_expression args' in - return @@ e_constant ~loc s lst - ) - | f -> ( - let%bind f' = compile_expression f in - let%bind arg = compile_tuple_expression ~loc:args_loc args' in - return @@ e_application ~loc f' arg - ) - ) - | EPar x -> compile_expression x.value.inside + | EPar par -> compile_expression par.value.inside | EUnit reg -> let loc = Location.lift reg in - return @@ e_literal ~loc Literal_unit - | EBytes x -> - let (x' , loc) = r_split x in - return @@ e_literal ~loc (Literal_bytes (Hex.to_bytes @@ snd x')) - | ETuple tpl -> - let (tpl' , loc) = r_split tpl in - compile_tuple_expression ~loc @@ npseq_to_list tpl'.inside - | ERecord r -> - let%bind fields = bind_list - @@ List.map (fun ((k : _ Raw.reg), v) -> let%bind v = compile_expression v in ok (k.value, v)) - @@ List.map (fun (x:Raw.field_assignment Raw.reg) -> - (x.value.field_name, x.value.field_expr)) - @@ npseq_to_list r.value.ne_elements in - let aux prev (k, v) = SMap.add k v prev in - return @@ e_record (List.fold_left aux SMap.empty fields) - | EProj p -> compile_projection p - | EUpdate u -> compile_update u - | EConstr (ConstrApp c) -> ( - let ((c, args) , loc) = r_split c in - match args with - None -> - return @@ e_constructor ~loc c.value (e_unit ()) - | Some args -> - let args, args_loc = r_split args in - let%bind arg = - compile_tuple_expression ~loc:args_loc - @@ npseq_to_list args.inside in - return @@ e_constructor ~loc c.value arg - ) - | EConstr (SomeApp a) -> - let ((_, args) , loc) = r_split a in - let (args , args_loc) = r_split args in - let%bind arg = - compile_tuple_expression ~loc:args_loc - @@ npseq_to_list args.inside in - return @@ e_constant ~loc C_SOME [arg] - | EConstr (NoneExpr reg) -> ( - let loc = Location.lift reg in - return @@ e_none ~loc () - ) - | EArith (Add c) -> - compile_binop "ADD" c - | EArith (Sub c) -> - compile_binop "SUB" c - | EArith (Mult c) -> - compile_binop "TIMES" c - | EArith (Div c) -> - compile_binop "DIV" c - | EArith (Mod c) -> - compile_binop "MOD" c - | EArith (Int n) -> ( - let (n , loc) = r_split n in - let n = snd n in - return @@ e_literal ~loc (Literal_int n) - ) - | EArith (Nat n) -> ( - let (n , loc) = r_split n in - let n = snd @@ n in - return @@ e_literal ~loc (Literal_nat n) - ) - | EArith (Mutez n) -> ( - let (n , loc) = r_split n in - let n = snd @@ n in - return @@ e_literal ~loc (Literal_mutez n) + return @@ e_unit ~loc () + | EBytes bytes -> + let (bytes, loc) = r_split bytes in + let (_s,b) = bytes in + return @@ e_bytes_hex ~loc b + | EString str ->( + match str with + Cat c -> + let (op,loc) = r_split c in + let%bind a = compile_expression op.arg1 in + let%bind b = compile_expression op.arg2 in + return @@ e_constant ~loc C_CONCAT [a;b] + | String str -> + let (str, loc) = r_split str in + return @@ e_string ~loc str + | Verbatim str -> + let (str, loc) = r_split str in + return @@ e_verbatim ~loc str ) - | EArith (Neg e) -> compile_unop "NEG" e - | EString (String s) -> - let (s , loc) = r_split s in - return @@ e_literal ~loc (Literal_string (Standard s)) - | EString (Verbatim v) -> - let (v , loc) = r_split v in - return @@ e_literal ~loc (Literal_string (Verbatim v)) - | EString (Cat bo) -> - let (bo , loc) = r_split bo in - let%bind sl = compile_expression bo.arg1 in - let%bind sr = compile_expression bo.arg2 in - return @@ e_string_cat ~loc sl sr - | ELogic l -> compile_logic_expression l - | EList l -> compile_list_expression l - | ESet s -> compile_set_expression s - | ECond c -> - let (c , loc) = r_split c in - let%bind expr = compile_expression c.test in - let%bind match_true = compile_expression c.ifso in - let%bind match_false = compile_expression c.ifnot in - return @@ e_cond ~loc expr match_true match_false - - | ECase c -> ( - let (c , loc) = r_split c in - let%bind e = compile_expression c.expr in - let%bind lst = - let aux (x : Raw.expr Raw.case_clause) = - let%bind expr = compile_expression x.rhs in - ok (x.pattern, expr) in - bind_list - @@ List.map aux - @@ List.map get_value - @@ npseq_to_list c.cases.value in - let%bind cases = compile_cases lst in - return @@ e_matching ~loc e cases + | EArith arth -> + ( match arth with + Add plus -> compile_bin_op C_ADD plus + | Sub minus -> compile_bin_op C_SUB minus + | Mult times -> compile_bin_op C_MUL times + | Div slash -> compile_bin_op C_DIV slash + | Mod mod_ -> compile_bin_op C_MOD mod_ + | Neg minus -> compile_un_op C_NEG minus + | Int i -> + let ((_,i), loc) = r_split i in + return @@ e_int_z ~loc i + | Nat n -> + let ((_,n), loc) = r_split n in + return @@ e_nat_z ~loc n + | Mutez mtez -> + let ((_,mtez), loc) = r_split mtez in + return @@ e_mutez_z ~loc mtez ) - | EMap (MapInj mi) -> ( - let (mi , loc) = r_split mi in - let%bind lst = - let lst = List.map get_value @@ pseq_to_list mi.elements in - let aux : Raw.binding -> (expression * expression, (abs_error)) result = - fun b -> - let%bind src = compile_expression b.source in - let%bind dst = compile_expression b.image in - ok (src, dst) in - bind_map_list aux lst in - return @@ e_map ~loc lst + | ELogic logic -> ( + match logic with + BoolExpr be -> ( + match be with + Or or_ -> compile_bin_op C_OR or_ + | And and_ -> compile_bin_op C_AND and_ + | Not not_ -> compile_un_op C_NOT not_ + | True reg -> let loc = Location.lift reg in return @@ e_true ~loc () + | False reg -> let loc = Location.lift reg in return @@ e_false ~loc () ) - | EMap (BigMapInj mi) -> ( - let (mi , loc) = r_split mi in - let%bind lst = - let lst = List.map get_value @@ pseq_to_list mi.elements in - let aux : Raw.binding -> (expression * expression, (abs_error)) result = - fun b -> - let%bind src = compile_expression b.source in - let%bind dst = compile_expression b.image in - ok (src, dst) in - bind_map_list aux lst in - return @@ e_big_map ~loc lst + | CompExpr ce -> ( + match ce with + Lt lt -> compile_bin_op C_LT lt + | Leq le -> compile_bin_op C_LE le + | Gt gt -> compile_bin_op C_GT gt + | Geq ge -> compile_bin_op C_GE ge + | Equal eq -> compile_bin_op C_EQ eq + | Neq ne -> compile_bin_op C_NEQ ne ) - | EMap (MapLookUp lu) -> ( - let (lu , loc) = r_split lu in - let%bind path = match lu.path with - | Name v -> ( - let (v , loc) = r_split v in - return @@ e_variable ~loc (Var.of_name v) - ) - | Path p -> compile_projection p + ) + (* This case is due to a bad besign of our constant it as to change + with the new typer so LIGO-684 on Jira *) + | ECall {value=(EVar var,args);region} -> + let loc = Location.lift region in + let (var, loc_var) = r_split var in + (match constants var with + Some const -> + let (args, _) = r_split args in + let%bind args = bind_map_list compile_expression @@ npseq_to_list args.inside in + return @@ e_constant ~loc const args + | None -> + let func = e_variable_ez ~loc:loc_var var in + let%bind args = compile_tuple_expression args in + return @@ e_application ~loc func args + ) + | ECall call -> + let ((func, args), loc) = r_split call in + let%bind func = compile_expression func in + let%bind args = compile_tuple_expression args in + return @@ e_application ~loc func args + | ETuple lst -> + compile_tuple_expression lst + | ERecord record -> + let (record, loc) = r_split record in + let aux (fa : CST.field_assignment CST.reg) = + let (fa, _) = r_split fa in + let (name, _) = r_split fa.field_name in + let%bind expr = compile_expression fa.field_expr in + ok @@ (name, expr) + in + let%bind record = bind_map_list aux @@ npseq_to_list record.ne_elements in + return @@ e_record_ez ~loc record + | EProj proj -> + let (proj, loc) = r_split proj in + let (var, _loc_var) = r_split proj.struct_name in + let var = e_variable_ez ~loc var in + let (sels, _) = List.split @@ List.map compile_selection @@ npseq_to_list proj.field_path in + return @@ e_accessor var sels + | EUpdate update -> + let (update, _loc) = r_split update in + let%bind record = compile_path update.record in + let (updates, _loc) = r_split update.updates in + let aux (up : CST.field_path_assignment CST.reg) = + let (up, loc) = r_split up in + let path = up.field_path in + let%bind expr = compile_expression up.field_expr in + let path = (match path with + Name var -> [Access_record var.value] + | Path proj -> + let (proj, _) = r_split proj in + let (path, _) = List.split @@ List.map compile_selection @@ npseq_to_list proj.field_path in + (Access_record proj.struct_name.value)::path + ) + in + ok @@ (path, expr, loc) + in + let%bind updates = bind_map_list aux @@ npseq_to_list updates.ne_elements in + let aux e (path, update, loc) = e_update ~loc e path update in + return @@ List.fold_left aux record updates + | EFun func -> + let compile_param (param : CST.param_decl) = + match param with + ParamConst p -> + let (p, _) = r_split p in + let (var, _loc) = r_split p.var in + let%bind p_type = bind_map_option (compile_type_expression <@ snd) p.param_type in + ok @@ (var, p_type) + | ParamVar p -> + let (p, _) = r_split p in + let (var, _loc) = r_split p.var in + let%bind p_type = bind_map_option (compile_type_expression <@ snd) p.param_type in + ok @@ (var, p_type) + in + let (func, loc) = r_split func in + let (param, loc_par) = r_split func.param in + let%bind param = bind_map_list compile_param @@ npseq_to_list param.inside in + let (param, param_type) = List.split param in + let%bind ret_type = bind_map_option (compile_type_expression <@ snd )func.ret_type in + let%bind body = compile_expression func.return in + let (lambda, fun_type) = match param_type with + ty::[] -> + e_lambda ~loc (Var.of_name @@ List.hd param) ty ret_type body, + Option.map (fun (a,b) -> t_function a b)@@ Option.bind_pair (ty,ret_type) + (* Cannot be empty *) + | lst -> + let lst = Option.bind_list lst in + let input_type = Option.map t_tuple lst in + let binder = Var.fresh ~name:"parameter" () in + e_lambda ~loc binder input_type (ret_type) @@ + e_matching_tuple_ez ~loc:loc_par (e_variable binder) param lst body, + Option.map (fun (a,b) -> t_function a b)@@ Option.bind_pair (input_type,ret_type) + in + return @@ Option.unopt ~default:lambda @@ + Option.map (e_annotation ~loc lambda) fun_type + | EConstr (SomeApp some) -> + let ((_, arg), loc) = r_split some in + let%bind args = compile_tuple_expression arg in + return @@ e_some ~loc args + | EConstr (NoneExpr reg) -> + let loc = Location.lift reg in + return @@ e_none ~loc () + | EConstr (ConstrApp constr) -> + let ((constr,args_o), loc) = r_split constr in + let%bind args_o = bind_map_option compile_tuple_expression args_o in + let args = Option.unopt ~default:(e_unit ~loc:(Location.lift constr.region) ()) args_o in + return @@ e_constructor ~loc constr.value args + | ECase case -> + let (case, loc) = r_split case in + let%bind matchee = compile_expression case.expr in + let (cases, _) = r_split case.cases in + let%bind cases = compile_matching_expr compile_expression @@ npseq_to_ne_list cases in + return @@ e_matching ~loc matchee cases + | EAnnot annot -> + let (annot, loc) = r_split annot in + let (expr, _, ty) = annot.inside in + let%bind expr = compile_expression expr in + let%bind ty = compile_type_expression ty in + return @@ e_annotation ~loc expr ty + | ECond cond -> + let (cond, loc) = r_split cond in + let%bind test = compile_expression cond.test in + let%bind then_clause = compile_expression cond.ifso in + let%bind else_clause = compile_expression cond.ifnot in + return @@ e_cond ~loc test then_clause else_clause + | EList lst -> ( + match lst with + ECons cons -> + let (cons, loc) = r_split cons in + let%bind a = compile_expression cons.arg1 in + let%bind b = compile_expression cons.arg2 in + return @@ e_constant ~loc C_CONS [a; b] + | EListComp lc -> + let (lc,loc) = r_split lc in + let lst = + Option.unopt ~default:[] @@ + Option.map npseq_to_list lc.elements in - let%bind index = compile_expression lu.index.value.inside in - return @@ e_accessor ~loc path [Access_map index] - ) - | EFun f -> - let (f , loc) = r_split f in - let%bind (_ty_opt, f') = compile_fun_expression ~loc f - in return @@ f' + let%bind lst = bind_map_list compile_expression lst in + return @@ e_list ~loc lst + | ENil nil -> + let loc = Location.lift nil in + return @@ e_list ~loc [] + (* Is seems that either ENil is redondant or EListComp should be an nsepseq and not a sepseq *) + ) + | ESet set -> ( + match set with + SetInj si -> + let (si, loc) = r_split si in + let set = + Option.unopt ~default:[] @@ + Option.map npseq_to_list si.elements + in + let%bind set = bind_map_list compile_expression set in + return @@ e_set ~loc set + | SetMem sm -> + let (sm, loc) = r_split sm in + let%bind set = compile_expression sm.set in + let%bind elem = compile_expression sm.element in + return @@ e_constant ~loc C_SET_MEM [elem;set] + ) + | EMap map -> ( + match map with + MapLookUp mlu -> + + let (mlu, loc) = r_split mlu in + let%bind path = compile_path mlu.path in + let (index, _) = r_split mlu.index in + let%bind index = compile_expression index.inside in + return @@ e_accessor ~loc path [Access_map index] + | MapInj mij -> + let (mij, loc) = r_split mij in + let lst = Option.unopt ~default:[] @@ + Option.map npseq_to_list mij.elements in + let aux (binding : CST.binding CST.reg) = + let (binding, _) = r_split binding in + let%bind key = compile_expression binding.source in + let%bind value = compile_expression binding.image in + ok @@ (key,value) + in + let%bind map = bind_map_list aux lst in + return @@ e_map ~loc map + | BigMapInj mij -> + let (mij, loc) = r_split mij in + let lst = Option.unopt ~default:[] @@ + Option.map npseq_to_list mij.elements in + let aux (binding : CST.binding CST.reg) = + let (binding, _) = r_split binding in + let%bind key = compile_expression binding.source in + let%bind value = compile_expression binding.image in + ok @@ (key,value) + in + let%bind map = bind_map_list aux lst in + return @@ e_big_map ~loc map + ) | ECodeInsert ci -> let (ci, loc) = r_split ci in - let language = ci.language.value in - let%bind code = compile_expression ci.code in + let (language, _) = r_split ci.language in + let%bind code = compile_expression ci.code in return @@ e_raw_code ~loc language code -and compile_update (u: Raw.update Region.reg) = - let u, loc = r_split u in - let name, path = compile_path u.record in - let var = e_variable (Var.of_name name) in - let record = if path = [] then var else e_accessor var path in - let updates = u.updates.value.ne_elements in - let%bind updates' = - let aux (f: Raw.field_path_assignment Raw.reg) = - let f, _ = r_split f in - let%bind expr = compile_expression f.field_expr - in ok (compile_path f.field_path, expr) - in bind_map_list aux @@ npseq_to_list updates in - let aux ur ((var, path), expr) = - ok @@ e_update ~loc ur (Access_record var :: path) expr - in bind_fold_list aux record updates' - -and compile_logic_expression (t:Raw.logic_expr) : (expression , (abs_error)) result = - match t with - | BoolExpr (False reg) -> - ok @@ e_bool ~loc:(Location.lift reg) false - | BoolExpr (True reg) -> - ok @@ e_bool ~loc:(Location.lift reg) true - | BoolExpr (Or b) -> - compile_binop "OR" b - | BoolExpr (And b) -> - compile_binop "AND" b - | BoolExpr (Not b) -> - compile_unop "NOT" b - | CompExpr (Lt c) -> - compile_binop "LT" c - | CompExpr (Gt c) -> - compile_binop "GT" c - | CompExpr (Leq c) -> - compile_binop "LE" c - | CompExpr (Geq c) -> - compile_binop "GE" c - | CompExpr (Equal c) -> - compile_binop "EQ" c - | CompExpr (Neq c) -> - compile_binop "NEQ" c - -and compile_list_expression (t:Raw.list_expr) : (expression , (abs_error)) result = - let return x = ok x in - match t with - ECons c -> - compile_binop "CONS" c - | EListComp lst -> - let (lst , loc) = r_split lst in - let%bind lst' = - bind_map_list compile_expression @@ - pseq_to_list lst.elements in - return @@ e_list ~loc lst' - | ENil reg -> - let loc = Location.lift reg in - return @@ e_list ~loc [] - -and compile_set_expression (t:Raw.set_expr) : (expression , (abs_error)) result = - match t with - | SetMem x -> ( - let (x' , loc) = r_split x in - let%bind set' = compile_expression x'.set in - let%bind element' = compile_expression x'.element in - ok @@ e_constant ~loc C_SET_MEM [ element' ; set' ] - ) - | SetInj x -> ( - let (x' , loc) = r_split x in - let elements = pseq_to_list x'.elements in - let%bind elements' = bind_map_list compile_expression elements in - ok @@ e_set ~loc elements' - ) - -and compile_binop (name:string) (t:_ Raw.bin_op Region.reg) : (expression , (abs_error)) result = - let return x = ok x in - let (t , loc) = r_split t in - let%bind a = compile_expression t.arg1 in - let%bind b = compile_expression t.arg2 in - let%bind name = trace_option (unknown_built_in name) @@ constants name in - return @@ e_constant ~loc name [ a ; b ] - -and compile_unop (name:string) (t:_ Raw.un_op Region.reg) : (expression , (abs_error)) result = - let return x = ok x in - let (t , loc) = r_split t in - let%bind a = compile_expression t.arg in - let%bind name = trace_option (unknown_built_in name) @@ constants name in - return @@ e_constant ~loc name [ a ] - -and compile_tuple_expression ?loc (lst:Raw.expr list) : (expression , (abs_error)) result = - let return x = ok x in - match lst with - | [] -> return @@ e_literal Literal_unit - | [hd] -> compile_expression hd - | lst -> - let%bind lst = bind_list @@ List.map compile_expression lst - in return @@ e_tuple ?loc lst - -and compile_data_declaration : Raw.data_decl -> _ result = - fun t -> - match t with - | LocalVar x -> - let (x , loc) = r_split x in - let name = x.name.value in - let%bind t = compile_type_expression x.var_type in - let%bind expression = compile_expression x.init in - return_let_in ~loc (Var.of_name name, Some t) false expression - | LocalConst x -> - let (x , loc) = r_split x in - let name = x.name.value in - let%bind t = compile_type_expression x.const_type in - let%bind expression = compile_expression x.init in - let inline = - match x.attributes with - None -> false - | Some {value; _} -> - npseq_to_list value.ne_elements - |> List.exists (fun Region.{value; _} -> value = "\"inline\"") - in return_let_in ~loc (Var.of_name name, Some t) inline expression - | LocalFun f -> - let (f , loc) = r_split f in - let%bind (binder, expr) = compile_fun_decl ~loc f in - let inline = - match f.attributes with - None -> false - | Some {value; _} -> - npseq_to_list value.ne_elements - |> List.exists (fun Region.{value; _} -> value = "\"inline\"") - in return_let_in ~loc binder inline expr - -and compile_param : - Raw.param_decl -> (string * type_expression, (abs_error)) result = - fun t -> - match t with - | ParamConst c -> - let c = c.value in - let param_name = c.var.value in - let%bind type_expression = compile_type_expression c.param_type in - ok (param_name , type_expression) - | ParamVar v -> - let c = v.value in - let param_name = c.var.value in - let%bind type_expression = compile_type_expression c.param_type in - ok (param_name , type_expression) - -and compile_fun_decl : - loc:_ -> Raw.fun_decl -> - ((expression_variable * type_expression option) * expression , (abs_error)) result = - fun ~loc x -> - let open! Raw in - let {kwd_recursive;fun_name; param; ret_type; block_with; - return; attributes} : fun_decl = x in - let inline = - match attributes with - None -> false - | Some {value; _} -> - npseq_to_list value.ne_elements - |> List.exists (fun Region.{value; _} -> value = "\"inline\"") in - let statements = - match block_with with - | Some (block,_) -> npseq_to_list block.value.statements - | None -> [] +and compile_matching_expr : type a.(a -> _ result) -> a CST.case_clause CST.reg List.Ne.t -> _ = +fun compiler cases -> + let compile_pattern pattern = ok @@ pattern in - (match param.value.inside with - a, [] -> ( - let%bind input = compile_param a in - let (binder , input_type) = input in - let%bind instructions = compile_statement_list statements in - let%bind result = compile_expression return in - let%bind output_type = compile_type_expression ret_type in - let body = instructions in - let%bind result = - let aux prec cur = cur (Some prec) in - bind_fold_right_list aux result body in - let binder = Var.of_name binder in - let fun_name = Var.of_name fun_name.value in - let fun_type = t_function input_type output_type in - let expression : expression = - e_lambda ~loc binder (Some input_type)(Some output_type) result in - let%bind expression = match kwd_recursive with - None -> ok @@ expression | - Some _ -> ok @@ e_recursive ~loc fun_name fun_type - @@ {binder;input_type=Some input_type; output_type= Some output_type; result} + let return e = ok @@ e in + let compile_simple_pattern (pattern : CST.pattern) = + match pattern with + PVar var -> + let (var, _) = r_split var in + ok @@ Var.of_name var + | _ -> fail @@ unsupported_non_var_pattern pattern + in + let compile_list_pattern (cases : (CST.pattern * _) list) = + match cases with + [(PList PNil _, match_nil);(PList PCons cons, econs)] + | [(PList PCons cons, econs);(PList PNil _, match_nil)] -> + let (cons,_) = r_split cons in + let%bind (hd,tl) = match snd @@ List.split (snd cons) with + tl::[] -> ok @@ (fst cons,tl) + | _ -> fail @@ unsupported_deep_list_patterns @@ fst cons in - ok ((fun_name, Some fun_type), expression) - ) - | lst -> ( - let lst = npseq_to_list lst in - (* TODO wrong, should be fresh? *) - let arguments_name = Var.of_name "arguments" in - let%bind params = bind_map_list compile_param lst in - let (binder , input_type) = - let type_expression = t_tuple (List.map snd params) in - (arguments_name , type_expression) in - let%bind tpl_declarations = - let aux = fun i (param, type_expr) -> - let expr = - e_accessor (e_variable arguments_name) [Access_record (string_of_int i)] in - let type_variable = Some type_expr in - let ass = return_let_in (Var.of_name param , type_variable) inline expr in - ass - in - bind_list @@ List.mapi aux params in - let%bind instructions = compile_statement_list statements in - let%bind result = compile_expression return in - let%bind output_type = compile_type_expression ret_type in - let body = tpl_declarations @ instructions in - let%bind result = - let aux prec cur = cur (Some prec) in - bind_fold_right_list aux result body in - let fun_name = Var.of_name fun_name.value in - let fun_type = t_function input_type output_type in - let expression : expression = - e_lambda ~loc binder (Some input_type)(Some output_type) result in - let%bind expression = match kwd_recursive with - None -> ok @@ expression | - Some _ -> ok @@ e_recursive ~loc fun_name fun_type - @@ {binder;input_type=Some input_type; output_type= Some output_type; result} - in - ok ((fun_name, Some fun_type), expression) - ) - ) - -and compile_fun_expression : - loc:_ -> Raw.fun_expr -> (type_expression option * expression , (abs_error)) result = - fun ~loc x -> - let open! Raw in - let {param; ret_type; return; _} : fun_expr = x in - let statements = [] in - (match param.value.inside with - a, [] -> ( - let%bind input = compile_param a in - let (binder , input_type) = input in - let%bind instructions = compile_statement_list statements in - let%bind result = compile_expression return in - let%bind output_type = compile_type_expression ret_type in - - let body = instructions in - let%bind result = - let aux prec cur = cur (Some prec) in - bind_fold_right_list aux result body in - let binder = Var.of_name binder in - let fun_type = t_function input_type output_type in - let expression = - e_lambda ~loc binder (Some input_type)(Some output_type) result - in - ok (Some fun_type , expression) - ) - | lst -> ( - let lst = npseq_to_list lst in - (* TODO wrong, should be fresh? *) - let arguments_name = Var.of_name "arguments" in - let%bind params = bind_map_list compile_param lst in - let (binder , input_type) = - let type_expression = t_tuple (List.map snd params) in - (arguments_name , type_expression) in - let%bind tpl_declarations = - let aux = fun i (param, param_type) -> - let expr = e_accessor (e_variable arguments_name) [Access_tuple (Z.of_int i)] in - let type_variable = Some param_type in - let ass = return_let_in (Var.of_name param , type_variable) false expr in - ass - in - bind_list @@ List.mapi aux params in - let%bind instructions = compile_statement_list statements in - let%bind result = compile_expression return in - let%bind output_type = compile_type_expression ret_type in - let body = tpl_declarations @ instructions in - let%bind result = - let aux prec cur = cur (Some prec) in - bind_fold_right_list aux result body in - let fun_type = t_function input_type output_type in - let expression = - e_lambda ~loc binder (Some input_type)(Some output_type) result - in - ok (Some fun_type , expression) - ) - ) - -and compile_statement_list statements = - let open Raw in - let rec hook acc = function - [] -> acc - | [Attr _] -> - (* Detached attributes are erased. TODO: Warning. *) - acc - | Attr _ :: (Attr _ :: _ as statements) -> - (* Detached attributes are erased. TODO: Warning. *) - hook acc statements - | Attr decl :: Data (LocalConst {value; region}) :: statements -> - let new_const = - Data (LocalConst {value = {value with attributes = Some decl}; region}) - in hook acc (new_const :: statements) - | Attr decl :: Data (LocalFun {value; region}) :: statements -> - let new_fun = - Data (LocalFun {value = {value with attributes = Some decl}; region}) - in hook acc (new_fun :: statements) - | Attr _ :: statements -> - (* Detached attributes are erased. TODO: Warning. *) - hook acc statements - | Instr i :: statements -> - hook (compile_instruction i :: acc) statements - | Data d :: statements -> - hook (compile_data_declaration d :: acc) statements - in bind_list @@ hook [] (List.rev statements) - -and compile_single_instruction : Raw.instruction -> ((_ -> (expression , (abs_error)) result), (abs_error)) result = - fun t -> - match t with - | ProcCall x -> ( - let (f, args) , loc = r_split x in - let args, args_loc = r_split args in - let args' = npseq_to_list args.inside in - match f with - | EVar name -> ( - let (f_name , f_loc) = r_split name in - match constants f_name with - | None -> - let%bind arg = compile_tuple_expression ~loc:args_loc args' in - return_statement @@ e_application ~loc (e_variable ~loc:f_loc (Var.of_name f_name)) arg - | Some s -> - let%bind lst = bind_map_list compile_expression args' in - return_statement @@ e_constant ~loc s lst + let%bind (hd,tl) = bind_map_pair compile_simple_pattern (hd,tl) in + let match_cons = (hd,tl,econs) in + ok @@ (match_nil,match_cons) + | _ -> fail @@ unsupported_deep_list_patterns @@ fst @@ List.hd cases + in + let compile_simple_tuple_pattern (tuple : CST.tuple_pattern) = + let (lst, _) = r_split tuple in + match lst.inside with + hd,[] -> compile_simple_pattern hd + | _ -> fail @@ unsupported_deep_tuple_patterns tuple + in + let compile_constr_pattern (constr : CST.pattern) = + match constr with + PConstr c -> + ( match c with + PUnit _ -> + fail @@ unsupported_pattern_type constr + | PFalse _ -> ok @@ (Constructor "false", Var.of_name "_") + | PTrue _ -> ok @@ (Constructor "true", Var.of_name "_") + | PNone _ -> ok @@ (Constructor "None", Var.of_name "_") + | PSomeApp some -> + let (some,_) = r_split some in + let (_, pattern) = some in + let (pattern,_) = r_split pattern in + let%bind pattern = compile_simple_pattern pattern.inside in + ok @@ (Constructor "Some", pattern) + | PConstrApp constr -> + let (constr, _) = r_split constr in + let (constr, patterns) = constr in + let (constr, _) = r_split constr in + let%bind pattern = bind_map_option compile_simple_tuple_pattern patterns in + let pattern = Option.unopt ~default:(Var.of_name "_") pattern in + ok (Constructor constr, pattern) ) - | f -> ( - let%bind f' = compile_expression f in - let%bind arg = compile_tuple_expression ~loc:args_loc args' in - return_statement @@ e_application ~loc f' arg - ) - ) - | Skip reg -> ( - let loc = Location.lift reg in - return_statement @@ e_skip ~loc () - ) - | Loop (While l) -> - let (wl, loc) = r_split l in - let%bind condition = compile_expression wl.cond in - let%bind body = compile_block wl.block.value in - let%bind body = body @@ None in - return_statement @@ e_while ~loc condition body - | Loop (For (ForInt fi)) -> ( - let (fi,loc) = r_split fi in - let binder = Var.of_name fi.assign.value.name.value in - let%bind start = compile_expression fi.assign.value.expr in - let%bind bound = compile_expression fi.bound in - let%bind step = match fi.step with - | None -> ok @@ e_int_z Z.one - | Some (_, step) -> compile_expression step in - let%bind body = compile_block fi.block.value in - let%bind body = body @@ None in - return_statement @@ e_for ~loc binder start bound step body - ) - | Loop (For (ForCollect fc)) -> - let (fc,loc) = r_split fc in - let binder = (Var.of_name fc.var.value, Option.map (fun x -> Var.of_name (snd x:string Raw.reg).value) fc.bind_to) in - let%bind collection = compile_expression fc.expr in - let collection_type = match fc.collection with - | Map _ -> Map - | Set _ -> Set - | List _ -> List - in - let%bind body = compile_block fc.block.value in - let%bind body = body @@ None in - return_statement @@ e_for_each ~loc binder collection collection_type body - | Cond c -> ( - let (c , loc) = r_split c in - let%bind expr = compile_expression c.test in - let%bind match_true = match c.ifso with - ClauseInstr i -> - compile_single_instruction i - | ClauseBlock b -> - match b with - LongBlock {value; _} -> - compile_block value - | ShortBlock {value; _} -> - compile_statements @@ fst value.inside in - let%bind match_false = match c.ifnot with - ClauseInstr i -> - compile_single_instruction i - | ClauseBlock b -> - match b with - LongBlock {value; _} -> - compile_block value - | ShortBlock {value; _} -> - compile_statements @@ fst value.inside in + | _ -> fail @@ unsupported_pattern_type constr + in + let aux (case : a CST.case_clause CST.reg) = + let (case, _loc) = r_split case in + let%bind pattern = compile_pattern case.pattern in + let%bind expr = compiler case.rhs in + ok (pattern, expr) + in + let%bind cases = bind_map_ne_list aux cases in + match cases with + | (PVar var, expr), [] -> + let (var, _) = r_split var in + let var = Var.of_name var in + return @@ AST.Match_variable (var, None, expr) + | (PTuple tuple, _expr), [] -> + fail @@ unsupported_tuple_pattern @@ CST.PTuple tuple + | (PList _, _), _ -> + let%bind (match_nil,match_cons) = compile_list_pattern @@ List.Ne.to_list cases in + return @@ AST.Match_list {match_nil;match_cons} + | (PConstr _,_), _ -> + let (pattern, lst) = List.split @@ List.Ne.to_list cases in + let%bind constrs = bind_map_list compile_constr_pattern pattern in + return @@ AST.Match_variant (List.combine constrs lst) + | (p, _), _ -> fail @@ unsupported_pattern_type p + +let compile_attribute_declaration attributes = + match attributes with + None -> ok @@ false + | Some _ -> ok @@ true - let%bind match_true = match_true None in - let%bind match_false = match_false None in - return_statement @@ e_cond ~loc expr match_true match_false - ) - | Assign a -> ( - let (a , loc) = r_split a in - let%bind value_expr = compile_expression a.rhs in - match a.lhs with - | Path path -> - let name , path' = compile_path path in - let name = Var.of_name name in - return_statement @@ e_assign ~loc name path' value_expr - | MapPath v -> - let v' = v.value in - let%bind (varname,map,path) = match v'.path with - | Name name -> - ok (name.value , - e_variable (Var.of_name name.value), []) - | Path p -> - let name, p' = compile_path v'.path in - let%bind accessor = compile_projection p in - ok @@ (name, accessor, p') in - let%bind key_expr = - compile_expression v'.index.value.inside in - let expr' = e_map_add key_expr value_expr map in - let varname = Var.of_name varname in - return_statement @@ e_assign ~loc varname path expr' - ) - | CaseInstr c -> ( - let (c , loc) = r_split c in - let%bind expr = compile_expression c.expr in - let%bind cases = - let aux (x : Raw.if_clause Raw.case_clause Raw.reg) = - let%bind case_clause = - match x.value.rhs with - ClauseInstr i -> - compile_single_instruction i - | ClauseBlock b -> - match b with - LongBlock {value; _} -> - compile_block value - | ShortBlock {value; _} -> - compile_statements @@ fst value.inside in - let%bind case_clause = case_clause None in - ok (x.value.pattern, case_clause) in - bind_list - @@ List.map aux - @@ npseq_to_list c.cases.value in - let%bind m = compile_cases cases in - return_statement @@ e_matching ~loc expr m - ) - | RecordPatch r -> - let reg = r.region in - let r, loc = r_split r in - let aux (fa: Raw.field_assignment Raw.reg) : Raw.field_path_assignment Raw.reg = - {value = {field_path = Name fa.value.field_name; - assignment = fa.value.assignment; - field_expr = fa.value.field_expr}; - region = fa.region} in - let update : Raw.field_path_assignment Raw.reg Raw.ne_injection Raw.reg = { - value = Raw.map_ne_injection aux r.record_inj.value; - region = r.record_inj.region} in - let u : Raw.update = { - record = r.path; - kwd_with = r.kwd_with; - updates = update} in - let%bind expr = compile_update {value=u;region=reg} in - let name, access_path = compile_path r.path in - let name = Var.of_name name in - return_statement @@ e_assign ~loc name access_path expr - | MapPatch patch -> - let map_p, loc = r_split patch in - let name, access_path = compile_path map_p.path in - let%bind inj = bind_list - @@ List.map (fun (x:Raw.binding Region.reg) -> - let x = x.value in - let (key, value) = x.source, x.image in - let%bind key' = compile_expression key in - let%bind value' = compile_expression value - in ok @@ (key', value') - ) - @@ npseq_to_list map_p.map_inj.value.ne_elements in - (match inj with - | [] -> return_statement @@ e_skip ~loc () - | _ :: _ -> - let assigns = List.fold_right - (fun (key, value) map -> (e_map_add key value map)) - inj - (e_accessor ~loc (e_variable (Var.of_name name)) access_path) - and name = Var.of_name name in - return_statement @@ e_assign ~loc name access_path assigns) - | SetPatch patch -> ( - let setp, loc = r_split patch in - let name, access_path = compile_path setp.path in - let%bind inj = - bind_list @@ - List.map compile_expression @@ - npseq_to_list setp.set_inj.value.ne_elements in - match inj with - | [] -> return_statement @@ e_skip ~loc () - | _ :: _ -> - let assigns = List.fold_right - (fun hd s -> e_constant C_SET_ADD [hd ; s]) - inj (e_accessor ~loc (e_variable (Var.of_name name)) access_path) in - let name = Var.of_name name in - return_statement @@ e_assign ~loc name access_path assigns - ) - | MapRemove r -> - let (v , loc) = r_split r in - let key = v.key in - let%bind (name,map,path) = match v.map with - | Name v -> ok (v.value , e_variable (Var.of_name v.value) , []) - | Path p -> - let name, p' = compile_path v.map in - let%bind accessor = compile_projection p in - ok @@ (name , accessor , p') - in - let%bind key' = compile_expression key in - let expr = e_constant ~loc C_MAP_REMOVE [key' ; map] in - let name = Var.of_name name in - return_statement @@ e_assign ~loc name path expr - | SetRemove r -> - let set_rm, loc = r_split r in - let%bind (name, set, path) = - match set_rm.set with - | Name v -> - ok (v.value, e_variable (Var.of_name v.value), []) - | Path path -> - let name, p' = compile_path set_rm.set in - let%bind accessor = compile_projection path in - ok @@ (name, accessor, p') in - let%bind removed' = compile_expression set_rm.element in - let expr = e_constant ~loc C_SET_REMOVE [removed' ; set] in - let name = Var.of_name name in - return_statement @@ e_assign ~loc name path expr +let compile_parameters (params : CST.parameters) = + let compile_param_decl (param : CST.param_decl) = + match param with + ParamConst pc -> + let (pc, _loc) = r_split pc in + let (var, _) = r_split pc.var in + let%bind param_type = bind_map_option (compile_type_expression <@ snd) pc.param_type in + ok @@ (var, param_type) + | ParamVar pv -> + let (pv, _loc) = r_split pv in + let (var, _) = r_split pv.var in + let%bind param_type = bind_map_option (compile_type_expression <@ snd) pv.param_type in + ok @@ (var, param_type) + in + let (params, _loc) = r_split params in + let params = npseq_to_list params.inside in + bind_map_list compile_param_decl params -and compile_path : Raw.path -> string * access list = function - Raw.Name v -> v.value, [] -| Raw.Path {value; _} -> - let Raw.{struct_name; field_path; _} = value in - let var = struct_name.value in - let path = List.map compile_selection @@ npseq_to_list field_path - in var, path +let rec compile_instruction : ?next: AST.expression -> CST.instruction -> _ result = fun ?next instruction -> + let return expr = match next with + Some e -> ok @@ e_sequence expr e + | None -> ok @@ expr + in + let compile_tuple_expression (tuple_expr : CST.tuple_expr) = + let (lst, loc) = r_split tuple_expr in + let%bind lst = bind_map_list compile_expression @@ npseq_to_list lst.inside in + match lst with + hd::[] -> ok @@ hd + | lst -> ok @@ e_tuple ~loc lst + in + let compile_if_clause : ?next:AST.expression -> CST.if_clause -> _ = fun ?next if_clause -> + match if_clause with + ClauseInstr i -> compile_instruction ?next i + | ClauseBlock (LongBlock block) -> compile_block ?next block + | ClauseBlock (ShortBlock block) -> + (* This looks like it should be the job of the parser *) + let CST.{lbrace; inside; rbrace} = block.value in + let region = block.region in + let enclosing = CST.Block (Region.ghost, lbrace, rbrace) + and (statements,terminator) = inside in + let value = CST.{enclosing;statements;terminator} in + let block : _ CST.reg = {value; region} in + compile_block ?next block -and compile_selection : Raw.selection -> access = function - FieldName property -> Access_record property.value -| Component index -> Access_tuple (snd index.value) + in + let compile_path : CST.path -> _ = fun path -> + match path with + Name var -> + let (var,loc) = r_split var in + let str = e_variable_ez ~loc var in + ok @@ (str, var, []) + | Path proj -> + let (proj, loc) = r_split proj in + let (var, loc_var) = r_split proj.struct_name in + let path = List.map compile_selection @@ npseq_to_list proj.field_path in + let (path, _) = List.split path in + let str = e_accessor ~loc (e_variable_ez ~loc:loc_var var) path in + ok @@ (str, var, path) + in + let compile_lhs : CST.lhs -> _ = fun lhs -> + match lhs with + | Path path -> + let%bind (_, var, path) = compile_path path in + ok @@ (var, path) + | MapPath (mlu) -> + let (mlu, _loc) = r_split mlu in + let%bind (_, var, path) = compile_path mlu.path in + let%bind index = compile_expression @@ mlu.index.value.inside in + ok @@ (var, path @ [Access_map index]) -and compile_cases : (Raw.pattern * expression) list -> (matching_expr , (abs_error)) result = fun t -> - let open Raw in - let get_var (t:Raw.pattern) = - match t with - | PVar v -> ok v.value - | p -> fail @@ unsupported_non_var_pattern p in - let get_tuple (t: Raw.pattern) = - match t with - | PTuple v -> npseq_to_list v.value.inside - | x -> [ x ] in - let get_single (t: Raw.pattern) = - let t' = get_tuple t in - let%bind () = - Assert.assert_list_size (unsupported_tuple_pattern t) t' 1 in - ok (List.hd t') in - let get_toplevel (t : Raw.pattern) = - match t with - | PList PCons x -> ( - let (x' , lst) = x.value in - match lst with - | [] -> ok x' - | _ -> ok t - ) - | pattern -> ok pattern in - let get_constr (t: Raw.pattern) = - match t with - | PConstr (PConstrApp v) -> ( - let value = v.value in - match value with - | constr, None -> - ok (constr.value, "unit") - | _ -> - let const, pat_opt = v.value in - let%bind pat = - trace_option (unsupported_cst_constr t) @@ - pat_opt in - let%bind single_pat = get_single (PTuple pat) in - let%bind var = get_var single_pat in - ok (const.value , var) - ) - | _ -> fail @@ only_constructors t in - let%bind patterns = - let aux (x , y) = - let%bind x' = get_toplevel x in - ok (x' , y) - in bind_map_list aux t in - match patterns with - | [(PConstr PFalse _ , f) ; (PConstr PTrue _ , t)] - | [(PConstr PTrue _ , t) ; (PConstr PFalse _ , f)] -> - ok @@ Match_variant ([((Constructor "true", Var.of_name "_"), t); ((Constructor "false", Var.of_name "_"), f)]) - | [(PConstr PSomeApp v , some) ; (PConstr PNone _ , none)] - | [(PConstr PNone _ , none) ; (PConstr PSomeApp v , some)] -> ( - let (_, v) = v.value in - let%bind v = match v.value.inside with - | PVar v -> ok v.value - | p -> fail @@ unsupported_deep_some_patterns p in - ok @@ Match_option {match_none = none ; match_some = (Var.of_name v, some) } + in + match instruction with + Cond c -> + let (c, loc) = r_split c in + let%bind test = compile_expression c.test in + let%bind ifso = compile_if_clause c.ifso in + let%bind ifnot = compile_if_clause c.ifnot in + return @@ e_cond ~loc test ifso ifnot + | CaseInstr ci -> + let (ci, loc) = r_split ci in + let%bind matchee = compile_expression ci.expr in + let%bind cases = compile_matching_expr compile_if_clause @@ npseq_to_ne_list ci.cases.value in + return @@ e_matching ~loc matchee cases + | Assign a -> + let (a,loc) = r_split a in + let%bind (var,path) = compile_lhs a.lhs in + let%bind rhs = compile_expression a.rhs in + return @@ e_assign_ez ~loc var path rhs + | Loop (While wl) -> + let (wl, loc) = r_split wl in + let%bind cond = compile_expression wl.cond in + let%bind body = compile_block wl.block in + return @@ e_while ~loc cond body + | Loop (For (ForInt fl)) -> + let (fl, loc) = r_split fl in + let (binder, _) = r_split fl.binder in + let%bind start = compile_expression fl.init in + let%bind bound = compile_expression fl.bound in + let%bind increment = Option.unopt ~default:(ok @@ e_int_z Z.one) @@ + Option.map (compile_expression <@ snd) fl.step + in + let%bind body = compile_block fl.block in + return @@ e_for_ez ~loc binder start bound increment body + | Loop (For (ForCollect el)) -> + let (el, loc) = r_split el in + let binder = + let (key, _) = r_split el.var in + let value = Option.map (fun x -> fst (r_split (snd x))) el.bind_to in + (key,value) + in + let%bind collection = compile_expression el.expr in + let (collection_type, _) = match el.collection with + Map loc -> (Map, loc) | Set loc -> (Set, loc) | List loc -> (List, loc) + in + let%bind body = compile_block el.block in + return @@ e_for_each_ez ~loc binder collection collection_type body + | ProcCall {value=(EVar var,args);region} -> + let loc = Location.lift region in + let (var, loc_var) = r_split var in + (match constants var with + Some const -> + let (args, _) = r_split args in + let%bind args = bind_map_list compile_expression @@ npseq_to_list args.inside in + return @@ e_constant ~loc const args + | None -> + let func = e_variable_ez ~loc:loc_var var in + let%bind args = compile_tuple_expression args in + return @@ e_application ~loc func args ) - | [(PList PCons c, cons) ; (PList (PNil _), nil)] - | [(PList (PNil _), nil) ; (PList PCons c, cons)] -> - let%bind (a, b) = - match c.value with - | a, [(_, b)] -> - let%bind a = get_var a in - let%bind b = get_var b in - ok (a, b) - | _ -> fail @@ unsupported_deep_list_patterns c + | ProcCall pc -> + let (pc, loc) = r_split pc in + let (func, args) = pc in + let%bind func = compile_expression func in + let%bind args = compile_tuple_expression args in + return @@ e_application ~loc func args + | Skip s -> + let loc = Location.lift s in + return @@ e_skip ~loc () + | RecordPatch rp -> + let (rp, loc) = r_split rp in + let%bind (record, var, path) = compile_path rp.path in + let (updates, _) = r_split rp.record_inj in + let updates = npseq_to_list updates.ne_elements in + let aux record (update: CST.field_assignment CST.reg) = + let (update,loc) = r_split update in + let path = [Access_record update.field_name.value] in + let%bind expr = compile_expression update.field_expr in + ok @@ e_update ~loc record path expr + in + let%bind new_record = bind_fold_list aux record updates in + return @@ e_assign_ez ~loc var path @@ new_record + | MapPatch mp -> + let (mp, loc) = r_split mp in + let%bind (map, var, path) = compile_path mp.path in + let (updates, _) = r_split mp.map_inj in + let updates = npseq_to_list updates.ne_elements in + let aux map (update: CST.binding CST.reg) = + let (update,loc) = r_split update in + let%bind key = compile_expression update.source in + let%bind value = compile_expression update.image in + ok @@ e_map_add ~loc key value map + in + let%bind new_map = bind_fold_list aux map updates in + return @@ e_assign_ez ~loc var path @@ new_map + | SetPatch sp -> + let (sp, loc) = r_split sp in + let%bind (set, var, path) = compile_path sp.path in + let (updates, _) = r_split sp.set_inj in + let updates = npseq_to_list updates.ne_elements in + let aux set (update: CST.expr) = + let%bind key = compile_expression update in + ok @@ e_constant ~loc C_SET_ADD [key; set] + in + let%bind new_map = bind_fold_list aux set updates in + return @@ e_assign_ez ~loc var path @@ new_map + | MapRemove mr -> + let (mr, loc) = r_split mr in + let%bind (map, var, path) = compile_path mr.map in + let%bind key = compile_expression mr.key in + return @@ e_assign_ez ~loc var path @@ + e_constant ~loc C_MAP_REMOVE [key;map] + | SetRemove sr -> + let (sr, loc) = r_split sr in + let%bind (set, var, path) = compile_path sr.set in + let%bind ele = compile_expression sr.element in + return @@ e_assign_ez ~loc var path @@ + e_constant ~loc C_SET_REMOVE [ele;set] - in - ok @@ Match_list {match_cons = (Var.of_name a, Var.of_name b, cons) ; match_nil = nil} +and compile_data_declaration : next:AST.expression -> ?attr:CST.attr_decl -> CST.data_decl -> _ = fun ~next ?attr data_decl -> + let return loc name type_ init = + let%bind attr = compile_attribute_declaration attr in + ok @@ e_let_in_ez ~loc name type_ attr init next in + match data_decl with + LocalConst const_decl -> + let (cd, loc) = r_split const_decl in + let (name, _) = r_split cd.name in + let%bind type_ = bind_map_option (compile_type_expression <@ snd)cd.const_type in + let%bind init = compile_expression cd.init in + return loc name type_ init + | LocalVar var_decl -> + let (vd, loc) = r_split var_decl in + let (name, _) = r_split vd.name in + let%bind type_ = bind_map_option (compile_type_expression <@ snd) vd.var_type in + let%bind init = compile_expression vd.init in + return loc name type_ init + | LocalFun fun_decl -> + let (fun_decl,loc) = r_split fun_decl in + let%bind (fun_name,fun_type,_attr,lambda) = compile_fun_decl fun_decl in + return loc fun_name fun_type lambda + +and compile_statement : ?next:AST.expression -> CST.attr_decl option -> CST.statement -> _ result = fun ?next attr statement -> + match statement with + Instr i -> + let%bind i = compile_instruction ?next i in + ok @@ (Some i, None) + | Data dd -> + let next = Option.unopt ~default:(e_skip ()) next in + let%bind dd = compile_data_declaration ~next ?attr dd in + ok @@ (Some dd, None) + | Attr at -> ok @@ (next, Some at) + + +and compile_block : ?next:AST.expression -> CST.block CST.reg -> _ result = fun ?next block -> + let (block', _loc) = r_split block in + let statements = npseq_to_list block'.statements in + let aux (next,attr) statement = + let%bind (statement, attr) = compile_statement ?next attr statement in + ok @@ (statement,attr) + in + let%bind (block', _) = bind_fold_right_list aux (next,None) statements in + match block' with + Some block -> ok @@ block + | None -> fail @@ block_start_with_attribute block + +and compile_fun_decl ({kwd_recursive; fun_name; param; ret_type; block_with; return=r; attributes}: CST.fun_decl) = + let%bind attr = compile_attribute_declaration attributes in + let (fun_name, loc) = r_split fun_name in + let%bind ret_type = bind_map_option (compile_type_expression <@ snd) ret_type in + let%bind param = compile_parameters param in + let%bind r = compile_expression r in + let (param, param_type) = List.split param in + let%bind body = Option.unopt ~default:(ok @@ r) @@ + Option.map (compile_block ~next:r <@ fst) block_with + in + (* This handle the parameter case *) + let (lambda,fun_type) = (match param_type with + ty::[] -> + let lambda : AST.lambda = { + binder = (Var.of_name @@ List.hd param); + input_type = ty ; + output_type = ret_type ; + result = body; + } in + lambda,Option.map (fun (a,b) -> t_function a b)@@ Option.bind_pair (ty,ret_type) | lst -> - let%bind constrs = - trace_strong (unsupported_pattern_type (List.map fst lst)) @@ - let aux (x , y) = - let%bind x' = - get_constr x in - ok (x' , y) in - bind_map_list aux lst in - ok @@ ez_match_variant constrs + let lst = Option.bind_list lst in + let input_type = Option.map t_tuple lst in + let binder = Var.fresh ~name:"parameter" () in + let lambda : AST.lambda = { + binder; + input_type = input_type; + output_type = ret_type; + result = e_matching_tuple_ez (e_variable binder) param lst body; + } in + lambda,Option.map (fun (a,b) -> t_function a b)@@ Option.bind_pair (input_type,ret_type) + ) + in + (* This handle the recursion *) + let%bind func = match kwd_recursive with + Some reg -> + let%bind fun_type = trace_option (untyped_recursive_fun loc) @@ fun_type in + ok @@ e_recursive_ez ~loc:(Location.lift reg) fun_name fun_type lambda + | None -> + ok @@ make_e ~loc @@ E_lambda lambda + in + ok @@ (fun_name,fun_type, attr, func) -and compile_instruction : Raw.instruction -> ((_ -> (expression, (abs_error)) result) , (abs_error)) result = - fun t -> trace (abstracting_instruction_tracer t) @@ compile_single_instruction t - -and compile_statements : Raw.statements -> ((_ -> (expression,(abs_error)) result) , (abs_error)) result = - fun statements -> - let lst = npseq_to_list statements in - let%bind fs = compile_statement_list lst in - let aux : _ -> (expression option -> (expression, (abs_error)) result) -> _ = - fun prec cur -> - let%bind res = cur prec - in ok @@ Some res in - ok @@ fun (expr' : _ option) -> - let%bind ret = bind_fold_right_list aux expr' fs in - ok @@ Option.unopt_exn ret - -and compile_block : Raw.block -> ((_ -> (expression , (abs_error)) result) , (abs_error)) result = - fun t -> compile_statements t.statements - - -and compile_declaration_list declarations : (declaration Location.wrap list, (abs_error)) result = - let open Raw in - let rec hook acc = function - [] -> acc - | [AttrDecl _] -> - (* Detached attributes are erased. TODO: Warning. *) - acc - | AttrDecl _ :: (AttrDecl _ :: _ as declarations) -> - (* Detached attributes are erased. TODO: Warning. *) - hook acc declarations - | AttrDecl decl :: ConstDecl {value; region} :: declarations -> - let new_const = - ConstDecl {value = {value with attributes = Some decl}; region} - in hook acc (new_const :: declarations) - | AttrDecl decl :: FunDecl {value; region} :: declarations -> - let new_fun = - FunDecl {value = {value with attributes = Some decl}; region} - in hook acc (new_fun :: declarations) - | AttrDecl _ :: declarations -> - (* Detached attributes are erased. TODO: Warning. *) - hook acc declarations - | TypeDecl decl :: declarations -> - let decl, loc = r_split decl in - let {name; type_expr} : Raw.type_decl = decl in - let%bind type_expression = compile_type_expression type_expr in - let new_decl = - Declaration_type (Var.of_name name.value, type_expression) in - let res = Location.wrap ~loc new_decl in - hook (bind_list_cons res acc) declarations - | ConstDecl decl :: declarations -> - let compile_const_decl = - fun {name;const_type; init; attributes} -> - let%bind expression = compile_expression init in - let%bind t = compile_type_expression const_type in - let type_annotation = Some t in - let inline = - match attributes with - None -> false - | Some {value; _} -> - npseq_to_list value.ne_elements - |> List.exists (fun Region.{value; _} -> value = "\"inline\"") in - let new_decl = - Declaration_constant - (Var.of_name name.value, type_annotation, inline, expression) - in ok new_decl in - let%bind res = - bind_map_location compile_const_decl (Location.lift_region decl) - in hook (bind_list_cons res acc) declarations - | FunDecl fun_decl :: declarations -> - let decl, loc = r_split fun_decl in - let%bind ((name, ty_opt), expr) = compile_fun_decl ~loc decl in - let inline = - match fun_decl.value.attributes with - None -> false - | Some {value; _} -> - npseq_to_list value.ne_elements - |> List.exists (fun Region.{value; _} -> value = "\"inline\"") in - let new_decl = - Declaration_constant (name, ty_opt, inline, expr) in - let res = Location.wrap ~loc new_decl in - hook (bind_list_cons res acc) declarations - in hook (ok @@ []) (List.rev declarations) - -let compile_program : Raw.ast -> (program , (abs_error)) result = +(* Currently attributes are badly proccess, some adaptation are made to accomodate this + maked as ATR *) +let compile_declaration : (CST.attr_decl option * _) -> CST.declaration -> _ = fun (attr, lst) decl -> + let return ?attr reg decl = ok @@ (attr, (Location.wrap ~loc:(Location.lift reg) decl)::lst) in (*ATR*) + match decl with + TypeDecl {value={name; type_expr; _};region} -> + (* Todo : if attr isn't none, send warning *) + let (name,_) = r_split name in + let%bind type_expr = compile_type_expression type_expr in + return region @@ AST.Declaration_type (Var.of_name name, type_expr) + | ConstDecl {value={name; const_type; init; attributes=_};region} -> + let (name, _) = r_split name in + let attributes = attr in (*ATR*) + let%bind const_type = bind_map_option (compile_type_expression <@ snd) const_type in + let%bind init = compile_expression init in + let%bind attr = compile_attribute_declaration attributes in + return region @@ AST.Declaration_constant (Var.of_name name, const_type,attr,init) + | FunDecl {value;region} -> + let value = {value with attributes = attr} in (*ATR*) + let%bind (fun_name,fun_type,attr,lambda) = compile_fun_decl value in + return region @@ AST.Declaration_constant (Var.of_name fun_name, fun_type, attr, lambda) + | AttrDecl decl -> ok @@ (Some decl, lst) (*ATR*) + +(* This should be change to the commented function when attributes are fixed +let compile_program : CST.ast -> _ result = fun t -> + bind_map_list compile_declaration @@ nseq_to_list t.decl + *) +let compile_program : CST.ast -> _ result = fun t -> - let declarations = nseq_to_list t.decl in - trace (program_tracer declarations) @@ - compile_declaration_list declarations + let declarations = List.rev @@ nseq_to_list t.decl in + let attr = (None, []) in + let%bind (_, declarations) = bind_fold_list compile_declaration attr declarations in + ok @@ declarations diff --git a/src/passes/02-concrete_to_imperative/pascaligo.mli b/src/passes/02-concrete_to_imperative/pascaligo.mli index 0c7730c0f..9fecca4dc 100644 --- a/src/passes/02-concrete_to_imperative/pascaligo.mli +++ b/src/passes/02-concrete_to_imperative/pascaligo.mli @@ -1,15 +1,14 @@ (** Converts PascaLIGO programs to the Simplified Abstract Syntax Tree. *) open Trace -open Ast_imperative -module Raw = Parser.Pascaligo.AST -module SMap = Map.String +module AST = Ast_imperative +module CST = Parser.Pascaligo.AST (** Convert a concrete PascaLIGO expression AST to the imperative expression AST used by the compiler. *) -val compile_expression : Raw.expr -> (expr , Errors_pascaligo.abs_error) result +val compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) result (** Convert a concrete PascaLIGO program AST to the miperative program AST used by the compiler. *) -val compile_program : Raw.ast -> (program, Errors_pascaligo.abs_error) result +val compile_program : CST.ast -> (AST.program, Errors_pascaligo.abs_error) result diff --git a/src/passes/03-self_ast_imperative/helpers.ml b/src/passes/03-self_ast_imperative/helpers.ml index 8831b8588..e9847f2b7 100644 --- a/src/passes/03-self_ast_imperative/helpers.ml +++ b/src/passes/03-self_ast_imperative/helpers.ml @@ -97,8 +97,13 @@ let rec fold_expression : ('a, 'err) folder -> 'a -> expression -> ('a, 'err) re let ab = (expr1,expr2) in let%bind res = bind_fold_pair self init' ab in ok res - | E_assign {variable=_;access_path=_;expression} -> - let%bind res = self init' expression in + | E_assign {variable=_;access_path;expression} -> + let aux res a = match a with + | Access_map e -> self res e + | _ -> ok res + in + let%bind res = bind_fold_list aux init' access_path in + let%bind res = self res expression in ok res | E_for {body; _} -> let%bind res = self init' body in @@ -246,6 +251,13 @@ let rec map_expression : 'err exp_mapper -> expression -> (expression, 'err) res return @@ E_sequence {expr1;expr2} ) | E_assign {variable;access_path;expression} -> ( + let aux a = match a with + | Access_map e -> + let%bind e = self e in + ok @@ Access_map e + | e -> ok @@ e + in + let%bind access_path = bind_map_list aux access_path in let%bind expression = self expression in return @@ E_assign {variable;access_path;expression} ) @@ -437,7 +449,14 @@ let rec fold_map_expression : ('a, 'err) fold_mapper -> 'a -> expression -> ('a ok (res, return @@ E_sequence {expr1;expr2}) ) | E_assign {variable;access_path;expression} -> - let%bind (res, expression) = self init' expression in + let aux res a = match a with + | Access_map e -> + let%bind (res,e) = self res e in + ok @@ (res,Access_map e) + | e -> ok @@ (res,e) + in + let%bind (res, access_path) = bind_fold_map_list aux init' access_path in + let%bind (res, expression) = self res expression in ok (res, return @@ E_assign {variable;access_path;expression}) | E_for {binder; start; final; increment; body} -> let%bind (res, body) = self init' body in diff --git a/src/passes/03-self_ast_imperative/none_variant.ml b/src/passes/03-self_ast_imperative/none_variant.ml index 77f44b691..8a26de73d 100644 --- a/src/passes/03-self_ast_imperative/none_variant.ml +++ b/src/passes/03-self_ast_imperative/none_variant.ml @@ -7,4 +7,11 @@ let peephole_expression : expression -> (expression , self_ast_imperative_error) match e.expression_content with | E_constructor {constructor=Constructor "Some";element=e} -> return @@ E_constant {cons_name=C_SOME;arguments=[ e ]} | E_constructor {constructor=Constructor "None"; _} -> return @@ E_constant {cons_name=C_NONE ; arguments=[]} + | E_matching {matchee;cases=Match_variant [((Constructor "None", _),none_expr);((Constructor "Some", some),some_expr)]} + | E_matching {matchee;cases=Match_variant [((Constructor "Some", some),some_expr);((Constructor "None", _),none_expr)]} + -> + let match_none = none_expr in + let match_some = some,some_expr in + let cases = Match_option {match_none;match_some} in + return @@ E_matching {matchee;cases} | e -> return e diff --git a/src/passes/06-sugar_to_core/sugar_to_core.ml b/src/passes/06-sugar_to_core/sugar_to_core.ml index e5b91b124..de1e9f3b7 100644 --- a/src/passes/06-sugar_to_core/sugar_to_core.ml +++ b/src/passes/06-sugar_to_core/sugar_to_core.ml @@ -122,7 +122,7 @@ let rec compile_expression : I.expression -> (O.expression , sugar_to_core_error | I.Access_record a -> ok @@ O.e_record_update ?loc s (Label a) e | I.Access_map k -> let%bind k = compile_expression k in - ok @@ O.e_constant ?loc C_UPDATE [k;O.e_some (e);s] + ok @@ O.e_constant ?loc C_MAP_ADD [k;e;s] in let aux (s, e : O.expression * _) lst = let%bind s' = accessor ~loc:s.location s lst in diff --git a/src/stages/1-ast_imperative/combinators.ml b/src/stages/1-ast_imperative/combinators.ml index 94432921b..d52a4bdef 100644 --- a/src/stages/1-ast_imperative/combinators.ml +++ b/src/stages/1-ast_imperative/combinators.ml @@ -20,25 +20,24 @@ let t_key_hash ?loc () : type_expression = make_t ?loc @@ T_constant (TC_key_ let t_timestamp ?loc () : type_expression = make_t ?loc @@ T_constant (TC_timestamp) let t_option ?loc o : type_expression = make_t ?loc @@ T_operator (TC_option, [o]) let t_list ?loc t : type_expression = make_t ?loc @@ T_operator (TC_list, [t]) -let t_variable ?loc n : type_expression = make_t ?loc @@ T_variable (Var.of_name n) +let t_constant ?loc c : type_expression = make_t ?loc @@ T_constant c +let t_variable ?loc n : type_expression = make_t ?loc @@ T_variable n +let t_variable_ez ?loc n : type_expression = t_variable ?loc @@ Var.of_name n + +let t_record ?loc record : type_expression = make_t ?loc @@ T_record record let t_record_ez ?loc lst = let lst = List.mapi (fun i (k, v) -> (Label k, {field_type=v;field_decl_pos=i})) lst in - let m = LMap.of_list lst in - make_t ?loc @@ T_record (m:field_content label_map) -let t_record ?loc m : type_expression = - let lst = Map.String.to_kv_list m in - t_record_ez ?loc lst + let record = LMap.of_list lst in + t_record ?loc (record:field_content label_map) let t_tuple ?loc lst : type_expression = make_t ?loc @@ T_tuple lst let t_pair ?loc (a , b) : type_expression = t_tuple ?loc [a; b] -let ez_t_sum ?loc (lst:(string * type_expression) list) : type_expression = +let t_sum ?loc sum : type_expression = make_t ?loc @@ T_sum sum +let t_sum_ez ?loc (lst:(string * type_expression) list) : type_expression = let aux (prev,i) (k, v) = (CMap.add (Constructor k) {ctor_type=v;ctor_decl_pos=i} prev, i+1) in let (map,_) = List.fold_left aux (CMap.empty,0) lst in - make_t ?loc @@ T_sum (map: ctor_content constructor_map) -let t_sum ?loc m : type_expression = - let lst = Map.String.to_kv_list m in - ez_t_sum ?loc lst + t_sum ?loc (map: ctor_content constructor_map) let t_operator ?loc op lst: type_expression = make_t ?loc @@ T_operator (op, lst) let t_annoted ?loc ty str : type_expression = make_t ?loc @@ T_annoted (ty, str) @@ -86,14 +85,13 @@ let e'_bytes b : expression_content option = let bytes = Hex.to_bytes (`Hex b) in Some (E_literal (Literal_bytes bytes)) with _ -> None -let e_bytes_hex ?loc b : expression option = +let e_bytes_hex_ez ?loc b : expression option = match e'_bytes b with | Some e' -> Some (make_e ?loc e') | None -> None -let e_bytes_raw ?loc (b: bytes) : expression = - make_e ?loc @@ E_literal (Literal_bytes b) -let e_bytes_string ?loc (s: string) : expression = - make_e ?loc @@ E_literal (Literal_bytes (Hex.to_bytes (Hex.of_string s))) +let e_bytes_raw ?loc (b: bytes) : expression = make_e ?loc @@ E_literal (Literal_bytes b) +let e_bytes_hex ?loc b : expression = e_bytes_raw ?loc @@ Hex.to_bytes b +let e_bytes_string ?loc (s: string) : expression = e_bytes_hex ?loc @@ Hex.of_string s let e_some ?loc s : expression = make_e ?loc @@ E_constant {cons_name = C_SOME; arguments = [s]} let e_none ?loc () : expression = make_e ?loc @@ E_constant {cons_name = C_NONE; arguments = []} let e_string_cat ?loc sl sr : expression = make_e ?loc @@ E_constant {cons_name = C_CONCAT; arguments = [sl ; sr ]} @@ -102,13 +100,18 @@ let e_binop ?loc name a b = make_e ?loc @@ E_constant {cons_name = name ; argum let e_constant ?loc name lst = make_e ?loc @@ E_constant {cons_name=name ; arguments = lst} let e_variable ?loc v = make_e ?loc @@ E_variable v +let e_variable_ez ?loc v = e_variable ?loc @@ Var.of_name v let e_application ?loc a b = make_e ?loc @@ E_application {lamb=a ; args=b} let e_lambda ?loc binder input_type output_type result : expression = make_e ?loc @@ E_lambda {binder; input_type; output_type; result} let e_recursive ?loc fun_name fun_type lambda = make_e ?loc @@ E_recursive {fun_name; fun_type; lambda} -let e_let_in ?loc (binder, ascr) inline rhs let_result = make_e ?loc @@ E_let_in { let_binder = (binder, ascr) ; rhs ; let_result; inline } +let e_recursive_ez ?loc fun_name fun_type lambda = e_recursive ?loc (Var.of_name fun_name) fun_type lambda +let e_let_in ?loc let_binder inline rhs let_result = make_e ?loc @@ E_let_in { let_binder; rhs ; let_result; inline } +let e_let_in_ez ?loc binder ascr inline rhs let_result = e_let_in ?loc (Var.of_name binder, ascr) inline rhs let_result let e_raw_code ?loc language code = make_e ?loc @@ E_raw_code {language; code} let e_constructor ?loc s a : expression = make_e ?loc @@ E_constructor { constructor = Constructor s; element = a} +let e_true ?loc (): expression = e_constructor ?loc "true" @@ e_unit ?loc () +let e_false ?loc (): expression = e_constructor ?loc "false" @@ e_unit ?loc () let e_matching ?loc a b : expression = make_e ?loc @@ E_matching {matchee=a;cases=b} let e_accessor ?loc record path = make_e ?loc @@ E_accessor {record; path} @@ -132,26 +135,28 @@ let e_while ?loc condition body = make_e ?loc @@ E_while {condition; body} let e_for ?loc binder start final increment body = make_e ?loc @@ E_for {binder;start;final;increment;body} let e_for_each ?loc binder collection collection_type body = make_e ?loc @@ E_for_each {binder;collection;collection_type;body} +let e_for_ez ?loc binder start final increment body = e_for ?loc (Var.of_name binder) start final increment body +let e_for_each_ez ?loc (b,bo) collection collection_type body = e_for_each ?loc (Var.of_name b, Option.map Var.of_name bo) collection collection_type body + let e_bool ?loc b : expression = e_constructor ?loc (string_of_bool b) (e_unit ()) -let ez_match_variant (lst : ((string * string) * 'a) list) = - let lst = List.map (fun ((c,n),a) -> ((Constructor c, Var.of_name n), a) ) lst in - Match_variant lst -let e_matching_variant ?loc a (lst : ((string * string)* 'a) list) = - e_matching ?loc a (ez_match_variant lst) - +let e_matching_variant ?loc a lst = e_matching ?loc a @@ Match_variant lst let e_matching_record ?loc m lst ty_opt expr = e_matching ?loc m @@ Match_record (lst,ty_opt, expr) let e_matching_tuple ?loc m lst ty_opt expr = e_matching ?loc m @@ Match_tuple (lst,ty_opt, expr) let e_matching_variable ?loc m var ty_opt expr = e_matching ?loc m @@ Match_variable (var,ty_opt, expr) +let e_matching_tuple_ez ?loc m lst ty_opt expr = + let lst = List.map Var.of_name lst in + e_matching_tuple ?loc m lst ty_opt expr + +let ez_match_variant (lst : ((string * string) * 'a) list) = + let lst = List.map (fun ((c,n),a) -> ((Constructor c, Var.of_name n), a) ) lst in + Match_variant lst + +let e_record ?loc map = make_e ?loc @@ E_record map let e_record_ez ?loc (lst : (string * expr) list) : expression = let map = List.fold_left (fun m (x, y) -> LMap.add (Label x) y m) LMap.empty lst in - make_e ?loc @@ E_record map -let e_record ?loc map = - let lst = Map.String.to_kv_list map in - e_record_ez ?loc lst - - + e_record ?loc map let make_option_typed ?loc e t_opt = match t_opt with @@ -175,8 +180,9 @@ let e_typed_set ?loc lst k = e_annotation ?loc (e_set lst) (t_set k) -let e_assign ?loc variable access_path expression = - make_e ?loc @@ E_assign {variable;access_path;expression} +let e_assign ?loc variable access_path expression = make_e ?loc @@ E_assign {variable;access_path;expression} +let e_assign_ez ?loc variable access_path expression = e_assign ?loc (Var.of_name variable) access_path expression + let get_e_accessor = fun t -> match t with diff --git a/src/stages/1-ast_imperative/combinators.mli b/src/stages/1-ast_imperative/combinators.mli index 170f0a2c0..c03b88de5 100644 --- a/src/stages/1-ast_imperative/combinators.mli +++ b/src/stages/1-ast_imperative/combinators.mli @@ -17,15 +17,17 @@ val t_key_hash : ?loc:Location.t -> unit -> type_expression val t_timestamp : ?loc:Location.t -> unit -> type_expression val t_signature : ?loc:Location.t -> unit -> type_expression val t_list : ?loc:Location.t -> type_expression -> type_expression -val t_variable : ?loc:Location.t -> string -> type_expression +val t_constant : ?loc:Location.t -> type_constant -> type_expression +val t_variable : ?loc:Location.t -> type_variable -> type_expression +val t_variable_ez : ?loc:Location.t -> string -> type_expression val t_pair : ?loc:Location.t -> ( type_expression * type_expression ) -> type_expression val t_tuple : ?loc:Location.t -> type_expression list -> type_expression -val t_record : ?loc:Location.t -> type_expression Map.String.t -> type_expression +val t_record : ?loc:Location.t -> field_content label_map -> type_expression val t_record_ez : ?loc:Location.t -> (string * type_expression) list -> type_expression -val t_sum : ?loc:Location.t -> type_expression Map.String.t -> type_expression -val ez_t_sum : ?loc:Location.t -> ( string * type_expression ) list -> type_expression +val t_sum : ?loc:Location.t -> ctor_content constructor_map -> type_expression +val t_sum_ez : ?loc:Location.t -> ( string * type_expression ) list -> type_expression val t_function : ?loc:Location.t -> type_expression -> type_expression -> type_expression val t_map : ?loc:Location.t -> type_expression -> type_expression -> type_expression @@ -65,8 +67,11 @@ val e_key_hash : ?loc:Location.t -> string -> expression val e_chain_id : ?loc:Location.t -> string -> expression val e_mutez_z : ?loc:Location.t -> Z.t -> expression val e_mutez : ?loc:Location.t -> int -> expression +val e_true : ?loc:Location.t -> unit -> expression +val e_false : ?loc:Location.t -> unit -> expression val e'_bytes : string -> expression_content option -val e_bytes_hex : ?loc:Location.t -> string -> expression option +val e_bytes_hex_ez : ?loc:Location.t -> string -> expression option +val e_bytes_hex : ?loc:Location.t -> Hex.t -> expression val e_bytes_raw : ?loc:Location.t -> bytes -> expression val e_bytes_string : ?loc:Location.t -> string -> expression @@ -78,21 +83,27 @@ val e_map_add : ?loc:Location.t -> expression -> expression -> expression -> ex val e_constant : ?loc:Location.t -> constant' -> expression list -> expression val e_variable : ?loc:Location.t -> expression_variable -> expression +val e_variable_ez : ?loc:Location.t -> string -> expression val e_application : ?loc:Location.t -> expression -> expression -> expression val e_lambda : ?loc:Location.t -> expression_variable -> type_expression option -> type_expression option -> expression -> expression val e_recursive : ?loc:Location.t -> expression_variable -> type_expression -> lambda -> expression +val e_recursive_ez : ?loc:Location.t -> string -> type_expression -> lambda -> expression val e_let_in : ?loc:Location.t -> ( expression_variable * type_expression option ) -> bool -> expression -> expression -> expression +val e_let_in_ez : ?loc:Location.t -> string -> type_expression option -> bool -> expression -> expression -> expression val e_raw_code : ?loc:Location.t -> string -> expression -> expression val e_constructor : ?loc:Location.t -> string -> expression -> expression val e_matching : ?loc:Location.t -> expression -> matching_expr -> expression + val ez_match_variant : ((string * string ) * expression) list -> matching_expr -val e_matching_variant : ?loc:Location.t -> expression -> ((string * string) * expression) list -> expression +val e_matching_variant : ?loc:Location.t -> expression -> ((constructor' * expression_variable) * expression) list -> expression val e_matching_record : ?loc:Location.t -> expression -> (label * expression_variable) list -> type_expression list option -> expression -> expression val e_matching_tuple : ?loc:Location.t -> expression -> expression_variable list -> type_expression list option -> expression -> expression val e_matching_variable: ?loc:Location.t -> expression -> expression_variable -> type_expression option -> expression -> expression -val e_record : ?loc:Location.t -> expr Map.String.t -> expression +val e_matching_tuple_ez: ?loc:Location.t -> expression -> string list -> type_expression list option -> expression -> expression + +val e_record : ?loc:Location.t -> expr label_map -> expression val e_record_ez : ?loc:Location.t -> ( string * expr ) list -> expression val e_accessor : ?loc:Location.t -> expression -> access list -> expression val e_update : ?loc:Location.t -> expression -> access list -> expression -> expression @@ -112,11 +123,15 @@ val e_map : ?loc:Location.t -> ( expression * expression ) list -> expression val e_big_map : ?loc:Location.t -> ( expr * expr ) list -> expression val e_assign : ?loc:Location.t -> expression_variable -> access list -> expression -> expression +val e_assign_ez : ?loc:Location.t -> string -> access list -> expression -> expression val e_while : ?loc:Location.t -> expression -> expression -> expression val e_for : ?loc:Location.t -> expression_variable -> expression -> expression -> expression -> expression -> expression val e_for_each : ?loc:Location.t -> expression_variable * expression_variable option -> expression -> collect_type -> expression -> expression +val e_for_ez : ?loc:Location.t -> string -> expression -> expression -> expression -> expression -> expression +val e_for_each_ez : ?loc:Location.t -> string * string option -> expression -> collect_type -> expression -> expression + val make_option_typed : ?loc:Location.t -> expression -> type_expression option -> expression val e_typed_none : ?loc:Location.t -> type_expression -> expression diff --git a/src/test/integration_tests.ml b/src/test/integration_tests.ml index e9d283458..022942e31 100644 --- a/src/test/integration_tests.ml +++ b/src/test/integration_tests.ml @@ -410,13 +410,13 @@ let string_arithmetic_religo () : (unit, _) result = let bytes_arithmetic () : (unit, _) result = let%bind program = type_file "./contracts/bytes_arithmetic.ligo" in - let%bind foo = trace_option (test_internal __LOC__) @@ e_bytes_hex "0f00" in - let%bind foototo = trace_option (test_internal __LOC__) @@ e_bytes_hex "0f007070" in - let%bind toto = trace_option (test_internal __LOC__) @@ e_bytes_hex "7070" in - let%bind empty = trace_option (test_internal __LOC__) @@ e_bytes_hex "" in - let%bind tata = trace_option (test_internal __LOC__) @@ e_bytes_hex "ff7a7aff" in - let%bind at = trace_option (test_internal __LOC__) @@ e_bytes_hex "7a7a" in - let%bind ba = trace_option (test_internal __LOC__) @@ e_bytes_hex "ba" in + let%bind foo = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "0f00" in + let%bind foototo = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "0f007070" in + let%bind toto = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "7070" in + let%bind empty = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "" in + let%bind tata = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "ff7a7aff" in + let%bind at = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "7a7a" in + let%bind ba = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "ba" in let%bind () = expect_eq program "concat_op" foo foototo in let%bind () = expect_eq program "concat_op" empty toto in let%bind () = expect_eq program "slice_op" tata at in @@ -454,8 +454,8 @@ let comparable_mligo () : (unit, _) result = let crypto () : (unit, _) result = let%bind program = type_file "./contracts/crypto.ligo" in - let%bind foo = trace_option (test_internal __LOC__) @@ e_bytes_hex "0f00" in - let%bind foototo = trace_option (test_internal __LOC__) @@ e_bytes_hex "0f007070" in + let%bind foo = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "0f00" in + let%bind foototo = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "0f007070" in let%bind b1 = Test_helpers.run_typed_program_with_imperative_input program "hasherman512" foo in let%bind () = expect_eq_core program "hasherman512" foo b1 in let%bind b2 = Test_helpers.run_typed_program_with_imperative_input program "hasherman512" foototo in @@ -468,8 +468,8 @@ let crypto () : (unit, _) result = let crypto_mligo () : (unit, _) result = let%bind program = mtype_file "./contracts/crypto.mligo" in - let%bind foo = trace_option (test_internal __LOC__) @@ e_bytes_hex "0f00" in - let%bind foototo = trace_option (test_internal __LOC__) @@ e_bytes_hex "0f007070" in + let%bind foo = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "0f00" in + let%bind foototo = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "0f007070" in let%bind b1 = Test_helpers.run_typed_program_with_imperative_input program "hasherman512" foo in let%bind () = expect_eq_core program "hasherman512" foo b1 in let%bind b2 = Test_helpers.run_typed_program_with_imperative_input program "hasherman512" foototo in @@ -482,8 +482,8 @@ let crypto_mligo () : (unit, _) result = let crypto_religo () : (unit, _) result = let%bind program = retype_file "./contracts/crypto.religo" in - let%bind foo = trace_option (test_internal __LOC__) @@ e_bytes_hex "0f00" in - let%bind foototo = trace_option (test_internal __LOC__) @@ e_bytes_hex "0f007070" in + let%bind foo = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "0f00" in + let%bind foototo = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "0f007070" in let%bind b1 = Test_helpers.run_typed_program_with_imperative_input program "hasherman512" foo in let%bind () = expect_eq_core program "hasherman512" foo b1 in let%bind b2 = Test_helpers.run_typed_program_with_imperative_input program "hasherman512" foototo in @@ -496,13 +496,13 @@ let crypto_religo () : (unit, _) result = let bytes_arithmetic_mligo () : (unit, _) result = let%bind program = mtype_file "./contracts/bytes_arithmetic.mligo" in - let%bind foo = trace_option (test_internal __LOC__) @@ e_bytes_hex "0f00" in - let%bind foototo = trace_option (test_internal __LOC__) @@ e_bytes_hex "0f007070" in - let%bind toto = trace_option (test_internal __LOC__) @@ e_bytes_hex "7070" in - let%bind empty = trace_option (test_internal __LOC__) @@ e_bytes_hex "" in - let%bind tata = trace_option (test_internal __LOC__) @@ e_bytes_hex "ff7a7aff" in - let%bind at = trace_option (test_internal __LOC__) @@ e_bytes_hex "7a7a" in - let%bind ba = trace_option (test_internal __LOC__) @@ e_bytes_hex "ba" in + let%bind foo = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "0f00" in + let%bind foototo = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "0f007070" in + let%bind toto = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "7070" in + let%bind empty = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "" in + let%bind tata = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "ff7a7aff" in + let%bind at = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "7a7a" in + let%bind ba = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "ba" in let%bind () = expect_eq program "concat_op" foo foototo in let%bind () = expect_eq program "concat_op" empty toto in let%bind () = expect_eq program "slice_op" tata at in @@ -516,13 +516,13 @@ let bytes_arithmetic_mligo () : (unit, _) result = let bytes_arithmetic_religo () : (unit, _) result = let%bind program = retype_file "./contracts/bytes_arithmetic.religo" in - let%bind foo = trace_option (test_internal __LOC__) @@ e_bytes_hex "0f00" in - let%bind foototo = trace_option (test_internal __LOC__) @@ e_bytes_hex "0f007070" in - let%bind toto = trace_option (test_internal __LOC__) @@ e_bytes_hex "7070" in - let%bind empty = trace_option (test_internal __LOC__) @@ e_bytes_hex "" in - let%bind tata = trace_option (test_internal __LOC__) @@ e_bytes_hex "ff7a7aff" in - let%bind at = trace_option (test_internal __LOC__) @@ e_bytes_hex "7a7a" in - let%bind ba = trace_option (test_internal __LOC__) @@ e_bytes_hex "ba" in + let%bind foo = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "0f00" in + let%bind foototo = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "0f007070" in + let%bind toto = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "7070" in + let%bind empty = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "" in + let%bind tata = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "ff7a7aff" in + let%bind at = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "7a7a" in + let%bind ba = trace_option (test_internal __LOC__) @@ e_bytes_hex_ez "ba" in let%bind () = expect_eq program "concat_op" foo foototo in let%bind () = expect_eq program "concat_op" empty toto in let%bind () = expect_eq program "slice_op" tata at in From c2e4f2f36dbb0f9ae167ec0156bbcf6673029507 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Wulfman Date: Wed, 27 May 2020 16:13:27 +0200 Subject: [PATCH 02/10] Add pp can assert_value_eq for Literal_op --- src/stages/3-ast_core/misc.ml | 56 ++++++++++++++++++++++++++++++++++- src/stages/common/PP.ml | 53 ++++++++++++++++++++++++++++++++- 2 files changed, 107 insertions(+), 2 deletions(-) diff --git a/src/stages/3-ast_core/misc.ml b/src/stages/3-ast_core/misc.ml index ca6519052..239e08c35 100644 --- a/src/stages/3-ast_core/misc.ml +++ b/src/stages/3-ast_core/misc.ml @@ -1,5 +1,59 @@ open Types +open Memory_proto_alpha.Protocol.Alpha_context +let assert_operation_eq (a: packed_internal_operation) (b: packed_internal_operation): unit option = + let Internal_operation {source=sa; operation=oa; nonce=na} = a in + let Internal_operation {source=sb; operation=ob; nonce=nb} = b in + let assert_source_eq sa sb = + let sa = Contract.to_b58check sa in + let sb = Contract.to_b58check sb in + if String.equal sa sb then Some () else None + in + let rec assert_param_eq (pa,pb) = + let open Tezos_micheline.Micheline in + match (pa, pb) with + | Int (la, ia), Int (lb, ib) when la = lb && ia = ib -> Some () + | String (la, sa), String (lb, sb) when la = lb && sa = sb -> Some () + | Bytes (la, ba), Bytes (lb, bb) when la = lb && ba = bb -> Some () + | Prim (la, pa, nla, aa), Prim (lb, pb, nlb, ab) when la = lb && pa = pb -> + let la = List.map assert_param_eq @@ List.combine nla nlb in + let lb = List.map ( fun (sa,sb) -> + if String.equal sa sb then Some () else None) @@ + List.combine aa ab + in + Option.map (fun _ -> ()) @@ Option.bind_list @@ la @ lb + | Seq (la, nla), Seq (lb, nlb) when la = lb -> + Option.map (fun _ -> ()) @@ Option.bind_list @@ List.map assert_param_eq @@ + List.combine nla nlb + | _ -> None + in + let assert_operation_eq (type a b) (oa: a manager_operation) (ob: b manager_operation) = + match (oa, ob) with + | Reveal sa, Reveal sb when sa = sb -> Some () + | Reveal _, _ -> None + | Transaction ta, Transaction tb -> + let aa,pa,ea,da = ta.amount,ta.parameters,ta.entrypoint,ta.destination in + let ab,pb,eb,db = tb.amount,tb.parameters,tb.entrypoint,tb.destination in + Format.printf "amount : %b; p : %b, e: %b, d : %b\n" (aa=ab) (pa=pb) (ea=eb) (da=db) ; + let (pa,pb) = Tezos_data_encoding.Data_encoding.(force_decode pa, force_decode pb) in + Option.bind (fun _ -> Some ()) @@ + Option.bind_list [ + Option.bind (fun (pa,pb) -> assert_param_eq Tezos_micheline.Micheline.(root pa, root pb)) @@ + Option.bind_pair (pa,pb); + if aa = ab && ea = eb && da = db then Some () else None ] + | Transaction _, _ -> None + | Origination _oa, Origination _ob -> Some () + | Origination _, _ -> None + | Delegation da, Delegation db when da = db -> Some () + | Delegation _, _ -> None + in + let assert_nonce_eq na nb = if na = nb then Some () else None in + Option.bind (fun _ -> Some ()) @@ + Option.bind_list [ + assert_source_eq sa sb; + assert_operation_eq oa ob; + assert_nonce_eq na nb] + let assert_literal_eq (a, b : literal * literal) : unit option = match (a, b) with | Literal_int a, Literal_int b when a = b -> Some () @@ -27,7 +81,7 @@ let assert_literal_eq (a, b : literal * literal) : unit option = | Literal_address a, Literal_address b when a = b -> Some () | Literal_address _, Literal_address _ -> None | Literal_address _, _ -> None - | Literal_operation _, Literal_operation _ -> None + | Literal_operation opa, Literal_operation opb -> assert_operation_eq opa opb | Literal_operation _, _ -> None | Literal_signature a, Literal_signature b when a = b -> Some () | Literal_signature _, Literal_signature _ -> None diff --git a/src/stages/common/PP.ml b/src/stages/common/PP.ml index 2a02fa4e0..7123a1c86 100644 --- a/src/stages/common/PP.ml +++ b/src/stages/common/PP.ml @@ -130,6 +130,57 @@ let constant ppf : constant' -> unit = function | C_CONVERT_FROM_RIGHT_COMB -> fprintf ppf "CONVERT_FROM_RIGHT_COMB" | C_CONVERT_FROM_LEFT_COMB -> fprintf ppf "CONVERT_FROM_LEFT_COMB" +let operation ppf (o : Memory_proto_alpha.Protocol.Alpha_context.packed_internal_operation) : unit = + let print_option f ppf o = + match o with + Some (s) -> fprintf ppf "%a" f s + | None -> fprintf ppf "None" + in + let open Tezos_micheline.Micheline in + let rec prim ppf (node : (_,Memory_proto_alpha.Protocol.Alpha_context.Script.prim) node)= match node with + | Int (l , i) -> fprintf ppf "Int (%i, %a)" l Z.pp_print i + | String (l , s) -> fprintf ppf "String (%i, %s)" l s + | Bytes (l, b) -> fprintf ppf "B (%i, %s)" l (Bytes.to_string b) + | Prim (l , p , nl, a) -> fprintf ppf "P (%i, %s, %a, %a)" l + (Memory_proto_alpha.Protocol.Michelson_v1_primitives.string_of_prim p) + (list_sep_d prim) nl + (list_sep_d (fun ppf s -> fprintf ppf "%s" s)) a + | Seq (l, nl) -> fprintf ppf "S (%i, %a)" l + (list_sep_d prim) nl + in + let l ppf (l: Memory_proto_alpha.Protocol.Alpha_context.Script.lazy_expr) = + let oo = Tezos_data_encoding.Data_encoding.force_decode l in + match oo with + Some o -> fprintf ppf "%a" prim (Tezos_micheline.Micheline.root o) + | None -> fprintf ppf "Fail decoding" + in + + let op ppf (type a) : a Memory_proto_alpha.Protocol.Alpha_context.manager_operation -> unit = function + | Reveal (s: Tezos_protocol_environment_006_PsCARTHA__Environment.Signature.Public_key.t) -> + fprintf ppf "R %a" Tezos_protocol_environment_006_PsCARTHA__Environment.Signature.Public_key.pp s + | Transaction {amount; parameters; entrypoint; destination} -> + fprintf ppf "T {%a; %a; %s; %a}" + Memory_proto_alpha.Protocol.Alpha_context.Tez.pp amount + l parameters + entrypoint + Memory_proto_alpha.Protocol.Alpha_context.Contract.pp destination + + | Origination {delegate; script; credit; preorigination} -> + fprintf ppf "O {%a; %a; %a; %a}" + (print_option Tezos_protocol_environment_006_PsCARTHA__Environment.Signature.Public_key_hash.pp) delegate + l script.code + Memory_proto_alpha.Protocol.Alpha_context.Tez.pp credit + (print_option Memory_proto_alpha.Protocol.Alpha_context.Contract.pp) preorigination + + | Delegation so -> + fprintf ppf "D %a" (print_option Tezos_protocol_environment_006_PsCARTHA__Environment.Signature.Public_key_hash.pp) so + in + let Internal_operation {source;operation;nonce} = o in + fprintf ppf "{source: %s; operation: %a; nonce: %i" + (Memory_proto_alpha.Protocol.Alpha_context.Contract.to_b58check source) + op operation + nonce + let literal ppf (l : literal) = match l with | Literal_unit -> fprintf ppf "unit" @@ -141,7 +192,7 @@ let literal ppf (l : literal) = | Literal_string s -> fprintf ppf "%a" Ligo_string.pp s | Literal_bytes b -> fprintf ppf "0x%a" Hex.pp (Hex.of_bytes b) | Literal_address s -> fprintf ppf "@%S" s - | Literal_operation _ -> fprintf ppf "Operation(...bytes)" + | Literal_operation o -> fprintf ppf "Operation(%a)" operation o | Literal_key s -> fprintf ppf "key %s" s | Literal_key_hash s -> fprintf ppf "key_hash %s" s | Literal_signature s -> fprintf ppf "Signature %s" s From 98487d8bb7d76c3c85bd0df9d91f9214ed9eb038 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Wulfman Date: Wed, 27 May 2020 16:19:29 +0200 Subject: [PATCH 03/10] Add a basic multisig contract --- src/test/basic_multisig_tests.ml | 208 ++++++++++++++++++ src/test/contracts/basic_multisig/config.ligo | 5 + .../contracts/basic_multisig/config.mligo | 5 + .../contracts/basic_multisig/multisig.ligo | 71 ++++++ .../contracts/basic_multisig/multisig.mligo | 65 ++++++ .../contracts/basic_multisig/multisig.religo | 74 +++++++ src/test/dune | 1 + src/test/test.ml | 1 + 8 files changed, 430 insertions(+) create mode 100644 src/test/basic_multisig_tests.ml create mode 100644 src/test/contracts/basic_multisig/config.ligo create mode 100644 src/test/contracts/basic_multisig/config.mligo create mode 100644 src/test/contracts/basic_multisig/multisig.ligo create mode 100644 src/test/contracts/basic_multisig/multisig.mligo create mode 100644 src/test/contracts/basic_multisig/multisig.religo diff --git a/src/test/basic_multisig_tests.ml b/src/test/basic_multisig_tests.ml new file mode 100644 index 000000000..61a205e54 --- /dev/null +++ b/src/test/basic_multisig_tests.ml @@ -0,0 +1,208 @@ +open Trace +open Test_helpers + +let file = "./contracts/basic_multisig/multisig.ligo" +let mfile = "./contracts/basic_multisig/multisig.mligo" +let refile = "./contracts/basic_multisig/multisig.religo" + +let type_file f s = + let%bind typed,state = Ligo.Compile.Utils.type_file f s (Contract "main") in + ok @@ (typed,state) + +let get_program f st = + let s = ref None in + fun () -> match !s with + | Some s -> ok s + | None -> ( + let%bind program = type_file f st in + s := Some program ; + ok program + ) + +let compile_main f s () = + let%bind typed_prg,_ = type_file f s in + let%bind mini_c_prg = Ligo.Compile.Of_typed.compile typed_prg in + let%bind michelson_prg = Ligo.Compile.Of_mini_c.aggregate_and_compile_contract mini_c_prg "main" in + let%bind (_contract: Tezos_utils.Michelson.michelson) = + (* fails if the given entry point is not a valid contract *) + Ligo.Compile.Of_michelson.build_contract michelson_prg in + ok () + +open Ast_imperative + +let init_storage threshold counter pkeys = + let keys = List.map + (fun el -> + let (_,pk_str,_) = str_keys el in + e_key @@ pk_str) + pkeys in + e_record_ez [ + ("id" , e_string "MULTISIG" ) ; + ("counter" , e_nat counter ) ; + ("threshold" , e_nat threshold) ; + ("auth" , e_typed_list keys (t_key ())) ; + ] + +let (first_owner , first_contract) = + let open Proto_alpha_utils.Memory_proto_alpha in + let id = List.nth dummy_environment.identities 0 in + let kt = id.implicit_contract in + Protocol.Alpha_context.Contract.to_b58check kt , kt + + let bad_contract () = + let title = (thunk ("Not a contract")) in + let message () = Format.asprintf "" in + let data = [ + ] in + error ~data title message () + +let op_list = + let open Memory_proto_alpha.Protocol.Alpha_context in + let source : Contract.t = first_contract in + let%bind operation = + let parameters : Script.lazy_expr = Script.unit_parameter in + let entrypoint = "default" in + let open Proto_alpha_utils in + let%bind destination = Trace.trace_alpha_tzresult (bad_contract) @@ + Contract.of_b58check "tz1PpDGHRXFQq3sYDuH8EpLWzPm5PFpe1sLE" + in + ok @@ Transaction {amount=Tez.zero; parameters; entrypoint; destination} in + ok @@ (e_typed_list [e_literal (Literal_operation (Internal_operation {source;operation;nonce=0}))] (t_operation ())) +let empty_payload = e_unit () + +let chain_id_zero = e_chain_id @@ Tezos_crypto.Base58.simple_encode + Tezos_base__TzPervasives.Chain_id.b58check_encoding + Tezos_base__TzPervasives.Chain_id.zero + +(* sign the message 'msg' with 'keys', if 'is_valid'=false the providid signature will be incorrect *) +let params counter payload keys is_validl f s = + let%bind program,_ = get_program f s () in + let aux = fun acc (key,is_valid) -> + let (_,_pk,sk) = key in + let (pkh,_,_) = str_keys key in + let msg = e_tuple + [ payload ; + e_nat counter ; + e_string (if is_valid then "MULTISIG" else "XX") ; + chain_id_zero ] in + let%bind signature = sign_message program msg sk in + ok @@ (e_pair (e_key_hash pkh) (e_signature signature))::acc in + let%bind signed_msgs = Trace.bind_fold_list aux [] (List.rev @@ List.combine keys is_validl) in + ok @@ e_record_ez [ + ("counter" , e_nat counter ) ; + ("payload" , payload) ; + ("signatures" , e_typed_list signed_msgs (t_pair (t_key_hash (),t_signature ())) ) ; + ] + +(* Provide one valid signature when the threshold is two of two keys *) +let not_enough_1_of_2 f s () = + let%bind program = get_program f s () in + let exp_failwith = "Not enough signatures passed the check" in + let keys = gen_keys () in + let%bind test_params = params 0 empty_payload [keys] [true] f s in + let options = Proto_alpha_utils.Memory_proto_alpha.make_options ~sender:first_contract () in + let%bind () = expect_string_failwith + program ~options "main" (e_pair test_params (init_storage 2 0 [keys;gen_keys()])) exp_failwith in + ok () + +let unmatching_counter f s () = + let%bind program = get_program f s () in + let exp_failwith = "Counters does not match" in + let keys = gen_keys () in + let%bind test_params = params 1 empty_payload [keys] [true] f s in + let%bind () = expect_string_failwith + program "main" (e_pair test_params (init_storage 1 0 [keys])) exp_failwith in + ok () + +(* Provide one invalid signature (correct key but incorrect signature) + when the threshold is one of one key *) +let invalid_1_of_1 f s () = + let%bind program = get_program f s () in + let exp_failwith = "Invalid signature" in + let keys = [gen_keys ()] in + let%bind test_params = params 0 empty_payload keys [false] f s in + let%bind () = expect_string_failwith + program "main" (e_pair test_params (init_storage 1 0 keys)) exp_failwith in + ok () + +(* Provide one valid signature when the threshold is one of one key *) +let valid_1_of_1 f s () = + let%bind program = get_program f s () in + let%bind op_list = op_list in + let keys = gen_keys () in + let%bind () = expect_eq_n_trace_aux [0;1;2] program "main" + (fun n -> + let%bind params = params n empty_payload [keys] [true] f s in + ok @@ e_pair params (init_storage 1 n [keys]) + ) + (fun n -> + ok @@ e_pair op_list (init_storage 1 (n+1) [keys]) + ) in + ok () + +(* Provive two valid signatures when the threshold is two of three keys *) +let valid_2_of_3 f s () = + let%bind program = get_program f s () in + let%bind op_list = op_list in + let param_keys = [gen_keys (); gen_keys ()] in + let st_keys = param_keys @ [gen_keys ()] in + let%bind () = expect_eq_n_trace_aux [0;1;2] program "main" + (fun n -> + let%bind params = params n empty_payload param_keys [true;true] f s in + ok @@ e_pair params (init_storage 2 n st_keys) + ) + (fun n -> + ok @@ e_pair op_list (init_storage 2 (n+1) st_keys) + ) in + ok () + +(* Provide one invalid signature and two valid signatures when the threshold is two of three keys *) +let invalid_3_of_3 f s () = + let%bind program = get_program f s () in + let valid_keys = [gen_keys() ; gen_keys()] in + let invalid_key = gen_keys () in + let param_keys = valid_keys @ [invalid_key] in + let st_keys = valid_keys @ [gen_keys ()] in + let%bind test_params = params 0 empty_payload param_keys [false;true;true] f s in + let exp_failwith = "Invalid signature" in + let%bind () = expect_string_failwith + program "main" (e_pair test_params (init_storage 2 0 st_keys)) exp_failwith in + ok () + +(* Provide two valid signatures when the threshold is three of three keys *) +let not_enough_2_of_3 f s () = + let%bind program = get_program f s() in + let valid_keys = [gen_keys() ; gen_keys()] in + let st_keys = gen_keys () :: valid_keys in + let%bind test_params = params 0 empty_payload (valid_keys) [true;true] f s in + let exp_failwith = "Not enough signatures passed the check" in + let%bind () = expect_string_failwith + program "main" (e_pair test_params (init_storage 3 0 st_keys)) exp_failwith in + ok () + +let main = test_suite "Basic Multisig" [ + test "compile" (compile_main file "pascaligo"); + test "unmatching_counter" (unmatching_counter file "pascaligo"); + test "valid_1_of_1" (valid_1_of_1 file "pascaligo"); + test "invalid_1_of_1" (invalid_1_of_1 file "pascaligo"); + test "not_enough_signature" (not_enough_1_of_2 file "pascaligo"); + test "valid_2_of_3" (valid_2_of_3 file "pascaligo"); + test "invalid_3_of_3" (invalid_3_of_3 file "pascaligo"); + test "not_enough_2_of_3" (not_enough_2_of_3 file "pascaligo"); + test "compile (mligo)" (compile_main mfile "cameligo"); + test "unmatching_counter (mligo)" (unmatching_counter mfile "cameligo"); + test "valid_1_of_1 (mligo)" (valid_1_of_1 mfile "cameligo"); + test "invalid_1_of_1 (mligo)" (invalid_1_of_1 mfile "cameligo"); + test "not_enough_signature (mligo)" (not_enough_1_of_2 mfile "cameligo"); + test "valid_2_of_3 (mligo)" (valid_2_of_3 mfile "cameligo"); + test "invalid_3_of_3 (mligo)" (invalid_3_of_3 mfile "cameligo"); + test "not_enough_2_of_3 (mligo)" (not_enough_2_of_3 mfile "cameligo"); + test "compile (religo)" (compile_main refile "reasonligo"); + test "unmatching_counter (religo)" (unmatching_counter refile "reasonligo"); + test "valid_1_of_1 (religo)" (valid_1_of_1 refile "reasonligo"); + test "invalid_1_of_1 (religo)" (invalid_1_of_1 refile "reasonligo"); + test "not_enough_signature (religo)" (not_enough_1_of_2 refile "reasonligo"); + test "valid_2_of_3 (religo)" (valid_2_of_3 refile "reasonligo"); + test "invalid_3_of_3 (religo)" (invalid_3_of_3 refile "reasonligo"); + test "not_enough_2_of_3 (religo)" (not_enough_2_of_3 refile "reasonligo"); + ] diff --git a/src/test/contracts/basic_multisig/config.ligo b/src/test/contracts/basic_multisig/config.ligo new file mode 100644 index 000000000..1cee7a1cc --- /dev/null +++ b/src/test/contracts/basic_multisig/config.ligo @@ -0,0 +1,5 @@ +type c_counter_type is nat +type c_payload_type is unit + +const c_address : address = + ("tz1PpDGHRXFQq3sYDuH8EpLWzPm5PFpe1sLE": address) diff --git a/src/test/contracts/basic_multisig/config.mligo b/src/test/contracts/basic_multisig/config.mligo new file mode 100644 index 000000000..81b6ef584 --- /dev/null +++ b/src/test/contracts/basic_multisig/config.mligo @@ -0,0 +1,5 @@ +type c_counter_type = nat +type c_payload_type = unit + +let c_address : address = + ("tz1PpDGHRXFQq3sYDuH8EpLWzPm5PFpe1sLE": address) diff --git a/src/test/contracts/basic_multisig/multisig.ligo b/src/test/contracts/basic_multisig/multisig.ligo new file mode 100644 index 000000000..10088213a --- /dev/null +++ b/src/test/contracts/basic_multisig/multisig.ligo @@ -0,0 +1,71 @@ +#include "config.ligo" + +// storage type + +type counter is c_counter_type +type threshold is c_counter_type +type authorized_keys is list (key) + +type storage is + record [ + id : string; + counter : counter; + threshold : threshold; + auth : authorized_keys + ] + +// I/O types + +type payload is c_payload_type +type signatures is list (key_hash * signature) + +type parameter is + record [ + counter : counter; + payload : payload; + signatures : signatures + ] + +type return is list (operation) * storage + + +function main (const p : parameter; const s : storage) : return is +block { + + var payload: payload := p.payload; + + + if p.counter =/= s.counter then + failwith ("Counters does not match") + else { + const packed_payload : bytes = + Bytes.pack ((payload, p.counter, s.id, Tezos.chain_id)); + var valid : nat := 0n; + + var pkh_sigs : signatures := p.signatures; + for key in list s.auth block { + case pkh_sigs of + nil -> skip + | pkh_sig # tl -> block { + if pkh_sig.0 = Crypto.hash_key (key) then block { + pkh_sigs := tl; + if Crypto.check (key, pkh_sig.1, packed_payload) + then valid := valid + 1n + else failwith ("Invalid signature") + } + else skip + } + end + }; + + if valid < s.threshold then + failwith ("Not enough signatures passed the check") + else s.counter := s.counter + 1n + }; + const contract_opt : option (contract(payload)) = Tezos.get_contract_opt(c_address); + var op : list(operation) := nil; + case contract_opt of + | Some (c) -> op := list [Tezos.transaction (payload, 0tez, c)] + | None -> failwith ("Contract not found") + end; +} with (op, s) diff --git a/src/test/contracts/basic_multisig/multisig.mligo b/src/test/contracts/basic_multisig/multisig.mligo new file mode 100644 index 000000000..747cd0419 --- /dev/null +++ b/src/test/contracts/basic_multisig/multisig.mligo @@ -0,0 +1,65 @@ +#include "config.mligo" + +// storage type + +type counter = c_counter_type +type threshold = c_counter_type +type authorized_keys = key list + +type storage = { + id : string; + counter : counter; + threshold : threshold; + auth : authorized_keys +} + +// I/O types + +type payload = c_payload_type +type signatures = (key_hash * signature) list + +type parameter = { + counter : counter; + payload : payload; + signatures : signatures +} + +type return = operation list * storage + + +let main (p, s : parameter * storage) : return = + let payload : payload = p.payload in + let s = + if p.counter <> s.counter then + (failwith "Counters does not match" : storage) + else + let packed_payload : bytes = + Bytes.pack (payload, p.counter, s.id, Tezos.chain_id) in + let valid : nat = 0n in + let keys : authorized_keys = s.auth in + let aux = + fun (vk, pkh_sig: (nat * authorized_keys)*(key_hash * signature)) -> + let valid, keys = vk in + match keys with + | [] -> vk + | key::keys -> + if pkh_sig.0 = Crypto.hash_key key + then + let valid = + if Crypto.check key pkh_sig.1 packed_payload + then valid + 1n + else (failwith "Invalid signature" : nat) + in valid, keys + else valid, keys in + let valid, keys = + List.fold aux p.signatures (valid, keys) in + if valid < s.threshold then + (failwith ("Not enough signatures passed the check") : storage) + else {s with counter = s.counter + 1n} + in + let contract_opt : payload contract option = Tezos.get_contract_opt(c_address) in + let op = match contract_opt with + Some (c) -> [Tezos.transaction payload 0tez c] + | None -> (failwith ("Contract not found") : operation list) + in + op, s diff --git a/src/test/contracts/basic_multisig/multisig.religo b/src/test/contracts/basic_multisig/multisig.religo new file mode 100644 index 000000000..fbdc22899 --- /dev/null +++ b/src/test/contracts/basic_multisig/multisig.religo @@ -0,0 +1,74 @@ +#include "config.mligo" + +// storage type + +type counter = c_counter_type +type threshold = c_counter_type +type authorized_keys = list (key); + +type storage = { + id : string, + counter : counter, + threshold : threshold, + auth : authorized_keys +}; + +// I/O types + +type payload = c_payload_type +type dummy = (key_hash,signature); +type signatures = list ((key_hash,signature)); /* Waiting to be fixed */ + +type parameter = { + counter : counter, + payload : payload, + signatures : signatures +}; + +type return = (list (operation),storage); + +let main = ((p, s): (parameter, storage)) : return => +{ + let payload : payload = p.payload; + let s = + if (p.counter != s.counter) { + (failwith ("Counters does not match") : storage); + } else { + let packed_payload : bytes = + Bytes.pack ((payload, p.counter, s.id, Tezos.chain_id)); + let valid : nat = 0n; + let keys : authorized_keys = s.auth; + let aux = ((vk, pkh_sig) : + ((nat, authorized_keys), (key_hash, signature))) + : (nat, authorized_keys) => { + let (valid, keys) = vk; + switch (keys) { + | [] => vk; + | [key, ...keys] => + if (pkh_sig[0] == Crypto.hash_key (key)) { + let valid = + if (Crypto.check (key, pkh_sig[1], packed_payload)) { + valid + 1n; + } + else { (failwith ("Invalid signature") : nat) }; + (valid, keys); + } + else { (valid, keys); }; + }; + }; + let (valid, keys) = + List.fold (aux, p.signatures, (valid, keys)); + if (valid < s.threshold) { + (failwith ("Not enough signatures passed the check") : storage); + } + else { + {...s,counter : s.counter + 1n}; + }; + }; + let contract_opt : option (contract (payload)) = Tezos.get_contract_opt(c_address); + let op = switch (contract_opt) { + | Some (c) => [Tezos.transaction(payload, 0tez, c)] + | None => (failwith ("Contract not found") : list (operation)) + }; + (op,s) +}; diff --git a/src/test/dune b/src/test/dune index cc571bfdf..5625b81e6 100644 --- a/src/test/dune +++ b/src/test/dune @@ -6,6 +6,7 @@ simple-utils ligo alcotest + tezos-utils tezos-crypto ) (preprocess diff --git a/src/test/test.ml b/src/test/test.ml index b6a9a9c41..9e6d3a927 100644 --- a/src/test/test.ml +++ b/src/test/test.ml @@ -13,6 +13,7 @@ let () = Id_tests.main ; Id_tests_p.main ; Id_tests_r.main ; + Basic_multisig_tests.main; Multisig_tests.main ; Multisig_v2_tests.main ; Replaceable_id_tests.main ; From 36df068dfca0ec8651b572c70f1e36d23d80d62c Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Wulfman Date: Thu, 18 Jun 2020 18:27:37 +0200 Subject: [PATCH 04/10] wip: new error monad --- src/test/basic_multisig_tests.ml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/test/basic_multisig_tests.ml b/src/test/basic_multisig_tests.ml index 61a205e54..9efc9ea86 100644 --- a/src/test/basic_multisig_tests.ml +++ b/src/test/basic_multisig_tests.ml @@ -49,12 +49,6 @@ let (first_owner , first_contract) = let kt = id.implicit_contract in Protocol.Alpha_context.Contract.to_b58check kt , kt - let bad_contract () = - let title = (thunk ("Not a contract")) in - let message () = Format.asprintf "" in - let data = [ - ] in - error ~data title message () let op_list = let open Memory_proto_alpha.Protocol.Alpha_context in @@ -63,7 +57,8 @@ let op_list = let parameters : Script.lazy_expr = Script.unit_parameter in let entrypoint = "default" in let open Proto_alpha_utils in - let%bind destination = Trace.trace_alpha_tzresult (bad_contract) @@ + let%bind destination = + Trace.trace_alpha_tzresult (fun _ -> Main_errors.test_internal __LOC__) @@ Contract.of_b58check "tz1PpDGHRXFQq3sYDuH8EpLWzPm5PFpe1sLE" in ok @@ Transaction {amount=Tez.zero; parameters; entrypoint; destination} in From 8ce7ae0f276bb2b7d01e4cb6295a7e8052185135 Mon Sep 17 00:00:00 2001 From: Christian Rinderknecht Date: Sat, 20 Jun 2020 15:49:52 +0200 Subject: [PATCH 05/10] Fixed the parsing of sequences in CameLIGO. --- src/passes/01-parser/cameligo/Parser.mly | 77 ++- .../cameligo/error.messages.checked-in | 505 ++++++++++++------ 2 files changed, 387 insertions(+), 195 deletions(-) diff --git a/src/passes/01-parser/cameligo/Parser.mly b/src/passes/01-parser/cameligo/Parser.mly index 9dca6a5c4..27a75ba61 100644 --- a/src/passes/01-parser/cameligo/Parser.mly +++ b/src/passes/01-parser/cameligo/Parser.mly @@ -121,11 +121,10 @@ type_decl: "type" type_name "=" type_expr { Scoping.check_reserved_name $2; let region = cover $1 (type_expr_to_region $4) in - let value = { - kwd_type = $1; - name = $2; - eq = $3; - type_expr = $4} + let value = {kwd_type = $1; + name = $2; + eq = $3; + type_expr = $4} in {region; value} } type_expr: @@ -580,13 +579,24 @@ core_expr: | "false" { ELogic (BoolExpr (False $1)) } | "true" { ELogic (BoolExpr (True $1)) } | list__(expr) { EList (EListComp $1) } -| sequence { ESeq $1 } +| sequence { $1 } | record_expr { ERecord $1 } | update_record { EUpdate $1 } | code_insert { ECodeInsert $1 } | par(expr) { EPar $1 } | par(annot_expr) { EAnnot $1 } +code_insert: + "[" "%" Constr expr "]" { + let region = cover $1 $5 in + let value = { + lbracket =$1; + percent =$2; + language =$3; + code =$4; + rbracket =$5} + in {region; value} } + annot_expr: expr ":" type_expr { $1,$2,$3 } @@ -653,49 +663,41 @@ field_path_assignment : field_assignment: field_name "=" expr { let region = cover $1.region (expr_to_region $3) - and value = {field_name = $1; - assignment = $2; - field_expr = $3} + and value = {field_name=$1; assignment=$2; field_expr=$3} in {region; value} } path : "" { Name $1 } | projection { Path $1 } +(* Sequences *) + sequence: "begin" series? "end" { let region = cover $1 $3 and compound = BeginEnd ($1,$3) in - let elements, terminator = - match $2 with - None -> None, None - | Some (ne_elements, terminator) -> - Some ne_elements, terminator in - let value = {compound; elements; terminator} - in {region; value} } + let elements = $2 in + let value = {compound; elements; terminator=None} + in ESeq {region; value} } series: - last_expr { - let expr, term = $1 in (expr, []), term - } -| seq_expr ";" series { - let rest, term = $3 in - let seq = Utils.nsepseq_cons $1 $2 rest - in seq, term } + seq_expr ";" series { Utils.nsepseq_cons $1 $2 $3 } +| last_expr { $1,[] } last_expr: - seq_expr ";"? -| fun_expr(seq_expr) ";"? -| match_expr(seq_expr) ";"? { - $1,$2 - } -| "let" ioption("rec") let_binding seq(Attr) "in" series { - let seq, term = $6 in + seq_expr +| fun_expr(last_expr) +| match_expr(last_expr) +| let_in_sequence { $1 } + +let_in_sequence: + "let" ioption("rec") let_binding seq(Attr) "in" series { + let seq = $6 in let stop = nsepseq_to_region expr_to_region seq in let region = cover $1 stop in let compound = BeginEnd (Region.ghost, Region.ghost) in let elements = Some seq in - let value = {compound; elements; terminator=term} in + let value = {compound; elements; terminator=None} in let body = ESeq {region; value} in let value = {kwd_let = $1; kwd_rec = $2; @@ -703,18 +705,7 @@ last_expr: attributes = $4; kwd_in = $5; body} - in ELetIn {region; value}, term } + in ELetIn {region; value} } seq_expr: disj_expr_level | if_then_else (seq_expr) { $1 } - -code_insert: - "[" "%" Constr expr "]" { - let region = cover $1 $5 in - let value = { - lbracket =$1; - percent =$2; - language =$3; - code =$4; - rbracket =$5} - in {region; value} } diff --git a/src/passes/01-parser/cameligo/error.messages.checked-in b/src/passes/01-parser/cameligo/error.messages.checked-in index 8ac839bf3..78d9bc815 100644 --- a/src/passes/01-parser/cameligo/error.messages.checked-in +++ b/src/passes/01-parser/cameligo/error.messages.checked-in @@ -1,20 +1,40 @@ -interactive_expr: Begin Fun WILD ARROW Bytes SEMI With +interactive_expr: Begin Fun WILD ARROW Bytes SEMI ## -## Ends in an error in state: 488. +## Ends in an error in state: 497. ## ## sequence -> Begin option(series) . End [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## Begin option(series) ## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 227, spurious reduction of production call_expr_level -> core_expr +## In state 234, spurious reduction of production unary_expr_level -> call_expr_level +## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 224, spurious reduction of production add_expr_level -> mult_expr_level +## In state 314, spurious reduction of production cons_expr_level -> add_expr_level +## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 477, spurious reduction of production seq_expr -> disj_expr_level +## In state 441, spurious reduction of production last_expr -> seq_expr +## In state 444, spurious reduction of production fun_expr(last_expr) -> Fun nseq(irrefutable) ARROW last_expr +## In state 445, spurious reduction of production last_expr -> fun_expr(last_expr) +## In state 481, spurious reduction of production series -> last_expr +## In state 496, spurious reduction of production option(series) -> series +## interactive_expr: Begin Fun WILD ARROW With ## -## Ends in an error in state: 470. +## Ends in an error in state: 480. ## -## fun_expr(seq_expr) -> Fun nseq(irrefutable) ARROW . seq_expr [ SEMI End ] +## fun_expr(last_expr) -> Fun nseq(irrefutable) ARROW . last_expr [ End ] ## ## The known suffix of the stack is as follows: ## Fun nseq(irrefutable) ARROW @@ -24,9 +44,9 @@ interactive_expr: Begin Fun WILD ARROW With interactive_expr: Begin Fun With ## -## Ends in an error in state: 468. +## Ends in an error in state: 478. ## -## fun_expr(seq_expr) -> Fun . nseq(irrefutable) ARROW seq_expr [ SEMI End ] +## fun_expr(last_expr) -> Fun . nseq(irrefutable) ARROW last_expr [ End ] ## ## The known suffix of the stack is as follows: ## Fun @@ -36,7 +56,7 @@ interactive_expr: Begin Fun With interactive_expr: Begin If Verbatim Then Fun WILD ARROW With ## -## Ends in an error in state: 457. +## Ends in an error in state: 467. ## ## fun_expr(closed_if) -> Fun nseq(irrefutable) ARROW . closed_if [ Else ] ## @@ -48,7 +68,7 @@ interactive_expr: Begin If Verbatim Then Fun WILD ARROW With interactive_expr: Begin If Verbatim Then Fun With ## -## Ends in an error in state: 455. +## Ends in an error in state: 465. ## ## fun_expr(closed_if) -> Fun . nseq(irrefutable) ARROW closed_if [ Else ] ## @@ -60,7 +80,7 @@ interactive_expr: Begin If Verbatim Then Fun With interactive_expr: Begin If Verbatim Then If Verbatim Then Verbatim COMMA Bytes With ## -## Ends in an error in state: 460. +## Ends in an error in state: 470. ## ## if_then_else(closed_if) -> If expr Then closed_if . Else closed_if [ Else ] ## @@ -83,7 +103,7 @@ interactive_expr: Begin If Verbatim Then If Verbatim Then Verbatim COMMA Bytes W ## In state 347, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level ## In state 346, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA) ## In state 223, spurious reduction of production tuple_expr -> tuple(disj_expr_level) -## In state 458, spurious reduction of production base_expr(closed_if) -> tuple_expr +## In state 468, spurious reduction of production base_expr(closed_if) -> tuple_expr ## In state 358, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr(closed_if) ## In state 357, spurious reduction of production closed_if -> base_if_then_else__open(closed_if) ## @@ -92,7 +112,7 @@ interactive_expr: Begin If Verbatim Then If Verbatim Then Verbatim COMMA Bytes W interactive_expr: Begin If Verbatim Then If Verbatim Then Verbatim Else With ## -## Ends in an error in state: 461. +## Ends in an error in state: 471. ## ## if_then_else(closed_if) -> If expr Then closed_if Else . closed_if [ Else ] ## @@ -104,7 +124,7 @@ interactive_expr: Begin If Verbatim Then If Verbatim Then Verbatim Else With interactive_expr: Begin If Verbatim Then If Verbatim Then With ## -## Ends in an error in state: 454. +## Ends in an error in state: 464. ## ## if_then_else(closed_if) -> If expr Then . closed_if Else closed_if [ Else ] ## @@ -116,7 +136,7 @@ interactive_expr: Begin If Verbatim Then If Verbatim Then With interactive_expr: Begin If Verbatim Then If Verbatim With ## -## Ends in an error in state: 453. +## Ends in an error in state: 463. ## ## if_then_else(closed_if) -> If expr . Then closed_if Else closed_if [ Else ] ## @@ -145,7 +165,7 @@ interactive_expr: Begin If Verbatim Then If Verbatim With interactive_expr: Begin If Verbatim Then If With ## -## Ends in an error in state: 452. +## Ends in an error in state: 462. ## ## if_then_else(closed_if) -> If . expr Then closed_if Else closed_if [ Else ] ## @@ -157,7 +177,7 @@ interactive_expr: Begin If Verbatim Then If With interactive_expr: Begin If Verbatim Then Let Rec WILD EQ Bytes Attr Type ## -## Ends in an error in state: 450. +## Ends in an error in state: 460. ## ## let_expr(closed_if) -> Let Rec let_binding seq(Attr) . In closed_if [ Else ] ## @@ -176,7 +196,7 @@ interactive_expr: Begin If Verbatim Then Let Rec WILD EQ Bytes Attr Type interactive_expr: Begin If Verbatim Then Let Rec WILD EQ Bytes In With ## -## Ends in an error in state: 451. +## Ends in an error in state: 461. ## ## let_expr(closed_if) -> Let Rec let_binding seq(Attr) In . closed_if [ Else ] ## @@ -188,7 +208,7 @@ interactive_expr: Begin If Verbatim Then Let Rec WILD EQ Bytes In With interactive_expr: Begin If Verbatim Then Let Rec WILD EQ Bytes With ## -## Ends in an error in state: 449. +## Ends in an error in state: 459. ## ## let_expr(closed_if) -> Let Rec let_binding . seq(Attr) In closed_if [ Else ] ## @@ -218,7 +238,7 @@ interactive_expr: Begin If Verbatim Then Let Rec WILD EQ Bytes With interactive_expr: Begin If Verbatim Then Let Rec With ## -## Ends in an error in state: 448. +## Ends in an error in state: 458. ## ## let_expr(closed_if) -> Let Rec . let_binding seq(Attr) In closed_if [ Else ] ## @@ -230,7 +250,7 @@ interactive_expr: Begin If Verbatim Then Let Rec With interactive_expr: Begin If Verbatim Then Let WILD EQ Bytes Attr Type ## -## Ends in an error in state: 463. +## Ends in an error in state: 473. ## ## let_expr(closed_if) -> Let let_binding seq(Attr) . In closed_if [ Else ] ## @@ -249,7 +269,7 @@ interactive_expr: Begin If Verbatim Then Let WILD EQ Bytes Attr Type interactive_expr: Begin If Verbatim Then Let WILD EQ Bytes In With ## -## Ends in an error in state: 464. +## Ends in an error in state: 474. ## ## let_expr(closed_if) -> Let let_binding seq(Attr) In . closed_if [ Else ] ## @@ -261,7 +281,7 @@ interactive_expr: Begin If Verbatim Then Let WILD EQ Bytes In With interactive_expr: Begin If Verbatim Then Let WILD EQ Bytes With ## -## Ends in an error in state: 462. +## Ends in an error in state: 472. ## ## let_expr(closed_if) -> Let let_binding . seq(Attr) In closed_if [ Else ] ## @@ -291,7 +311,7 @@ interactive_expr: Begin If Verbatim Then Let WILD EQ Bytes With interactive_expr: Begin If Verbatim Then Let With ## -## Ends in an error in state: 447. +## Ends in an error in state: 457. ## ## let_expr(closed_if) -> Let . let_binding seq(Attr) In closed_if [ Else ] ## let_expr(closed_if) -> Let . Rec let_binding seq(Attr) In closed_if [ Else ] @@ -401,7 +421,7 @@ interactive_expr: Begin If Verbatim Then Match With interactive_expr: Begin If Verbatim Then Verbatim COMMA Bytes With ## -## Ends in an error in state: 465. +## Ends in an error in state: 475. ## ## if_then_else(seq_expr) -> If expr Then closed_if . Else seq_expr [ SEMI End ] ## @@ -424,7 +444,7 @@ interactive_expr: Begin If Verbatim Then Verbatim COMMA Bytes With ## In state 347, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level ## In state 346, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA) ## In state 223, spurious reduction of production tuple_expr -> tuple(disj_expr_level) -## In state 458, spurious reduction of production base_expr(closed_if) -> tuple_expr +## In state 468, spurious reduction of production base_expr(closed_if) -> tuple_expr ## In state 358, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr(closed_if) ## In state 357, spurious reduction of production closed_if -> base_if_then_else__open(closed_if) ## @@ -433,7 +453,7 @@ interactive_expr: Begin If Verbatim Then Verbatim COMMA Bytes With interactive_expr: Begin If Verbatim Then Verbatim Else With ## -## Ends in an error in state: 466. +## Ends in an error in state: 476. ## ## if_then_else(seq_expr) -> If expr Then closed_if Else . seq_expr [ SEMI End ] ## @@ -445,7 +465,7 @@ interactive_expr: Begin If Verbatim Then Verbatim Else With interactive_expr: Begin If Verbatim Then Verbatim With ## -## Ends in an error in state: 459. +## Ends in an error in state: 469. ## ## base_expr(closed_if) -> disj_expr_level . [ Else ] ## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ Or Else COMMA BOOL_OR ] @@ -474,7 +494,7 @@ interactive_expr: Begin If Verbatim Then Verbatim With interactive_expr: Begin If Verbatim Then With ## -## Ends in an error in state: 446. +## Ends in an error in state: 456. ## ## if_then_else(seq_expr) -> If expr Then . closed_if Else seq_expr [ SEMI End ] ## @@ -486,7 +506,7 @@ interactive_expr: Begin If Verbatim Then With interactive_expr: Begin If Verbatim With ## -## Ends in an error in state: 445. +## Ends in an error in state: 455. ## ## if_then_else(seq_expr) -> If expr . Then closed_if Else seq_expr [ SEMI End ] ## @@ -515,7 +535,7 @@ interactive_expr: Begin If Verbatim With interactive_expr: Begin If With ## -## Ends in an error in state: 444. +## Ends in an error in state: 454. ## ## if_then_else(seq_expr) -> If . expr Then closed_if Else seq_expr [ SEMI End ] ## @@ -527,9 +547,9 @@ interactive_expr: Begin If With interactive_expr: Begin Let Rec WILD EQ Bytes Attr Type ## -## Ends in an error in state: 442. +## Ends in an error in state: 452. ## -## last_expr -> Let Rec let_binding seq(Attr) . In series [ End ] +## let_in_sequence -> Let Rec let_binding seq(Attr) . In series [ End ] ## ## The known suffix of the stack is as follows: ## Let Rec let_binding seq(Attr) @@ -546,9 +566,9 @@ interactive_expr: Begin Let Rec WILD EQ Bytes Attr Type interactive_expr: Begin Let Rec WILD EQ Bytes In With ## -## Ends in an error in state: 443. +## Ends in an error in state: 453. ## -## last_expr -> Let Rec let_binding seq(Attr) In . series [ End ] +## let_in_sequence -> Let Rec let_binding seq(Attr) In . series [ End ] ## ## The known suffix of the stack is as follows: ## Let Rec let_binding seq(Attr) In @@ -558,9 +578,9 @@ interactive_expr: Begin Let Rec WILD EQ Bytes In With interactive_expr: Begin Let Rec WILD EQ Bytes With ## -## Ends in an error in state: 441. +## Ends in an error in state: 451. ## -## last_expr -> Let Rec let_binding . seq(Attr) In series [ End ] +## let_in_sequence -> Let Rec let_binding . seq(Attr) In series [ End ] ## ## The known suffix of the stack is as follows: ## Let Rec let_binding @@ -588,9 +608,9 @@ interactive_expr: Begin Let Rec WILD EQ Bytes With interactive_expr: Begin Let Rec With ## -## Ends in an error in state: 440. +## Ends in an error in state: 450. ## -## last_expr -> Let Rec . let_binding seq(Attr) In series [ End ] +## let_in_sequence -> Let Rec . let_binding seq(Attr) In series [ End ] ## ## The known suffix of the stack is as follows: ## Let Rec @@ -600,9 +620,9 @@ interactive_expr: Begin Let Rec With interactive_expr: Begin Let WILD EQ Bytes Attr Type ## -## Ends in an error in state: 484. +## Ends in an error in state: 483. ## -## last_expr -> Let let_binding seq(Attr) . In series [ End ] +## let_in_sequence -> Let let_binding seq(Attr) . In series [ End ] ## ## The known suffix of the stack is as follows: ## Let let_binding seq(Attr) @@ -619,9 +639,9 @@ interactive_expr: Begin Let WILD EQ Bytes Attr Type interactive_expr: Begin Let WILD EQ Bytes In With ## -## Ends in an error in state: 485. +## Ends in an error in state: 484. ## -## last_expr -> Let let_binding seq(Attr) In . series [ End ] +## let_in_sequence -> Let let_binding seq(Attr) In . series [ End ] ## ## The known suffix of the stack is as follows: ## Let let_binding seq(Attr) In @@ -631,9 +651,9 @@ interactive_expr: Begin Let WILD EQ Bytes In With interactive_expr: Begin Let WILD EQ Bytes With ## -## Ends in an error in state: 483. +## Ends in an error in state: 482. ## -## last_expr -> Let let_binding . seq(Attr) In series [ End ] +## let_in_sequence -> Let let_binding . seq(Attr) In series [ End ] ## ## The known suffix of the stack is as follows: ## Let let_binding @@ -661,10 +681,10 @@ interactive_expr: Begin Let WILD EQ Bytes With interactive_expr: Begin Let With ## -## Ends in an error in state: 439. +## Ends in an error in state: 449. ## -## last_expr -> Let . let_binding seq(Attr) In series [ End ] -## last_expr -> Let . Rec let_binding seq(Attr) In series [ End ] +## let_in_sequence -> Let . let_binding seq(Attr) In series [ End ] +## let_in_sequence -> Let . Rec let_binding seq(Attr) In series [ End ] ## ## The known suffix of the stack is as follows: ## Let @@ -676,7 +696,7 @@ interactive_expr: Begin Match Verbatim Type ## ## Ends in an error in state: 245. ## -## match_expr(seq_expr) -> Match expr . With option(VBAR) cases(seq_expr) [ SEMI End ] +## match_expr(last_expr) -> Match expr . With option(VBAR) cases(last_expr) [ End ] ## ## The known suffix of the stack is as follows: ## Match expr @@ -705,7 +725,7 @@ interactive_expr: Begin Match Verbatim With VBAR Begin ## ## Ends in an error in state: 248. ## -## match_expr(seq_expr) -> Match expr With option(VBAR) . cases(seq_expr) [ SEMI End ] +## match_expr(last_expr) -> Match expr With option(VBAR) . cases(last_expr) [ End ] ## ## The known suffix of the stack is as follows: ## Match expr With option(VBAR) @@ -715,10 +735,10 @@ interactive_expr: Begin Match Verbatim With VBAR Begin interactive_expr: Begin Match Verbatim With WILD ARROW Bytes VBAR With ## -## Ends in an error in state: 436. +## Ends in an error in state: 493. ## ## cases(base_cond) -> cases(base_cond) VBAR . case_clause(base_cond) [ VBAR ] -## cases(seq_expr) -> cases(base_cond) VBAR . case_clause(seq_expr) [ SEMI End ] +## cases(last_expr) -> cases(base_cond) VBAR . case_clause(last_expr) [ End ] ## ## The known suffix of the stack is as follows: ## cases(base_cond) VBAR @@ -726,9 +746,35 @@ interactive_expr: Begin Match Verbatim With WILD ARROW Bytes VBAR With +interactive_expr: Begin Match Verbatim With WILD ARROW Fun WILD ARROW With +## +## Ends in an error in state: 440. +## +## fun_expr(base_cond) -> Fun nseq(irrefutable) ARROW . base_cond [ VBAR ] +## fun_expr(last_expr) -> Fun nseq(irrefutable) ARROW . last_expr [ End ] +## +## The known suffix of the stack is as follows: +## Fun nseq(irrefutable) ARROW +## + + + +interactive_expr: Begin Match Verbatim With WILD ARROW Fun With +## +## Ends in an error in state: 438. +## +## fun_expr(base_cond) -> Fun . nseq(irrefutable) ARROW base_cond [ VBAR ] +## fun_expr(last_expr) -> Fun . nseq(irrefutable) ARROW last_expr [ End ] +## +## The known suffix of the stack is as follows: +## Fun +## + + + interactive_expr: Begin Match Verbatim With WILD ARROW If Verbatim Then Verbatim Else With ## -## Ends in an error in state: 429. +## Ends in an error in state: 416. ## ## if_then_else(base_cond) -> If expr Then closed_if Else . base_cond [ VBAR ] ## if_then_else(seq_expr) -> If expr Then closed_if Else . seq_expr [ SEMI End ] @@ -741,7 +787,7 @@ interactive_expr: Begin Match Verbatim With WILD ARROW If Verbatim Then Verbatim interactive_expr: Begin Match Verbatim With WILD ARROW If Verbatim Then With ## -## Ends in an error in state: 427. +## Ends in an error in state: 267. ## ## if_then(base_cond) -> If expr Then . base_cond [ VBAR ] ## if_then_else(base_cond) -> If expr Then . closed_if Else base_cond [ VBAR ] @@ -755,7 +801,7 @@ interactive_expr: Begin Match Verbatim With WILD ARROW If Verbatim Then With interactive_expr: Begin Match Verbatim With WILD ARROW If Verbatim With ## -## Ends in an error in state: 426. +## Ends in an error in state: 266. ## ## if_then(base_cond) -> If expr . Then base_cond [ VBAR ] ## if_then_else(base_cond) -> If expr . Then closed_if Else base_cond [ VBAR ] @@ -786,7 +832,7 @@ interactive_expr: Begin Match Verbatim With WILD ARROW If Verbatim With interactive_expr: Begin Match Verbatim With WILD ARROW If With ## -## Ends in an error in state: 425. +## Ends in an error in state: 265. ## ## if_then(base_cond) -> If . expr Then base_cond [ VBAR ] ## if_then_else(base_cond) -> If . expr Then closed_if Else base_cond [ VBAR ] @@ -798,12 +844,168 @@ interactive_expr: Begin Match Verbatim With WILD ARROW If With +interactive_expr: Begin Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes Attr Type +## +## Ends in an error in state: 263. +## +## let_expr(base_cond) -> Let Rec let_binding seq(Attr) . In base_cond [ VBAR ] +## let_in_sequence -> Let Rec let_binding seq(Attr) . In series [ End ] +## +## The known suffix of the stack is as follows: +## Let Rec let_binding seq(Attr) +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 176, spurious reduction of production seq(Attr) -> +## In state 177, spurious reduction of production seq(Attr) -> Attr seq(Attr) +## + + + +interactive_expr: Begin Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes In With +## +## Ends in an error in state: 264. +## +## let_expr(base_cond) -> Let Rec let_binding seq(Attr) In . base_cond [ VBAR ] +## let_in_sequence -> Let Rec let_binding seq(Attr) In . series [ End ] +## +## The known suffix of the stack is as follows: +## Let Rec let_binding seq(Attr) In +## + + + +interactive_expr: Begin Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes With +## +## Ends in an error in state: 262. +## +## let_expr(base_cond) -> Let Rec let_binding . seq(Attr) In base_cond [ VBAR ] +## let_in_sequence -> Let Rec let_binding . seq(Attr) In series [ End ] +## +## The known suffix of the stack is as follows: +## Let Rec let_binding +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 227, spurious reduction of production call_expr_level -> core_expr +## In state 234, spurious reduction of production unary_expr_level -> call_expr_level +## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 224, spurious reduction of production add_expr_level -> mult_expr_level +## In state 314, spurious reduction of production cons_expr_level -> add_expr_level +## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## + + + +interactive_expr: Begin Match Verbatim With WILD ARROW Let Rec With +## +## Ends in an error in state: 261. +## +## let_expr(base_cond) -> Let Rec . let_binding seq(Attr) In base_cond [ VBAR ] +## let_in_sequence -> Let Rec . let_binding seq(Attr) In series [ End ] +## +## The known suffix of the stack is as follows: +## Let Rec +## + + + +interactive_expr: Begin Match Verbatim With WILD ARROW Let WILD EQ Bytes Attr Type +## +## Ends in an error in state: 488. +## +## let_expr(base_cond) -> Let let_binding seq(Attr) . In base_cond [ VBAR ] +## let_in_sequence -> Let let_binding seq(Attr) . In series [ End ] +## +## The known suffix of the stack is as follows: +## Let let_binding seq(Attr) +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 176, spurious reduction of production seq(Attr) -> +## In state 177, spurious reduction of production seq(Attr) -> Attr seq(Attr) +## + + + +interactive_expr: Begin Match Verbatim With WILD ARROW Let WILD EQ Bytes In With +## +## Ends in an error in state: 489. +## +## let_expr(base_cond) -> Let let_binding seq(Attr) In . base_cond [ VBAR ] +## let_in_sequence -> Let let_binding seq(Attr) In . series [ End ] +## +## The known suffix of the stack is as follows: +## Let let_binding seq(Attr) In +## + + + +interactive_expr: Begin Match Verbatim With WILD ARROW Let WILD EQ Bytes With +## +## Ends in an error in state: 487. +## +## let_expr(base_cond) -> Let let_binding . seq(Attr) In base_cond [ VBAR ] +## let_in_sequence -> Let let_binding . seq(Attr) In series [ End ] +## +## The known suffix of the stack is as follows: +## Let let_binding +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 227, spurious reduction of production call_expr_level -> core_expr +## In state 234, spurious reduction of production unary_expr_level -> call_expr_level +## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 224, spurious reduction of production add_expr_level -> mult_expr_level +## In state 314, spurious reduction of production cons_expr_level -> add_expr_level +## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## + + + +interactive_expr: Begin Match Verbatim With WILD ARROW Let With +## +## Ends in an error in state: 260. +## +## let_expr(base_cond) -> Let . let_binding seq(Attr) In base_cond [ VBAR ] +## let_expr(base_cond) -> Let . Rec let_binding seq(Attr) In base_cond [ VBAR ] +## let_in_sequence -> Let . let_binding seq(Attr) In series [ End ] +## let_in_sequence -> Let . Rec let_binding seq(Attr) In series [ End ] +## +## The known suffix of the stack is as follows: +## Let +## + + + interactive_expr: Begin Match Verbatim With WILD ARROW Verbatim COMMA Bytes With ## -## Ends in an error in state: 435. +## Ends in an error in state: 492. ## ## cases(base_cond) -> cases(base_cond) . VBAR case_clause(base_cond) [ VBAR ] -## cases(seq_expr) -> cases(base_cond) . VBAR case_clause(seq_expr) [ SEMI End ] +## cases(last_expr) -> cases(base_cond) . VBAR case_clause(last_expr) [ End ] ## ## The known suffix of the stack is as follows: ## cases(base_cond) @@ -824,7 +1026,7 @@ interactive_expr: Begin Match Verbatim With WILD ARROW Verbatim COMMA Bytes With ## In state 347, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level ## In state 346, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA) ## In state 223, spurious reduction of production tuple_expr -> tuple(disj_expr_level) -## In state 420, spurious reduction of production base_expr(base_cond) -> tuple_expr +## In state 430, spurious reduction of production base_expr(base_cond) -> tuple_expr ## In state 359, spurious reduction of production base_cond__open(base_cond) -> base_expr(base_cond) ## In state 360, spurious reduction of production base_cond -> base_cond__open(base_cond) ## In state 406, spurious reduction of production case_clause(base_cond) -> pattern ARROW base_cond @@ -835,7 +1037,7 @@ interactive_expr: Begin Match Verbatim With WILD ARROW Verbatim COMMA Bytes With interactive_expr: Begin Match Verbatim With WILD ARROW Verbatim With ## -## Ends in an error in state: 432. +## Ends in an error in state: 437. ## ## base_expr(base_cond) -> disj_expr_level . [ VBAR ] ## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ VBAR SEMI Or End COMMA BOOL_OR ] @@ -868,7 +1070,7 @@ interactive_expr: Begin Match Verbatim With WILD ARROW With ## Ends in an error in state: 259. ## ## case_clause(base_cond) -> pattern ARROW . base_cond [ VBAR ] -## case_clause(seq_expr) -> pattern ARROW . seq_expr [ SEMI End ] +## case_clause(last_expr) -> pattern ARROW . last_expr [ End ] ## ## The known suffix of the stack is as follows: ## pattern ARROW @@ -881,7 +1083,7 @@ interactive_expr: Begin Match Verbatim With WILD CONS Bytes SEMI ## Ends in an error in state: 258. ## ## case_clause(base_cond) -> pattern . ARROW base_cond [ VBAR ] -## case_clause(seq_expr) -> pattern . ARROW seq_expr [ SEMI End ] +## case_clause(last_expr) -> pattern . ARROW last_expr [ End ] ## ## The known suffix of the stack is as follows: ## pattern @@ -900,7 +1102,7 @@ interactive_expr: Begin Match Verbatim With With ## ## Ends in an error in state: 246. ## -## match_expr(seq_expr) -> Match expr With . option(VBAR) cases(seq_expr) [ SEMI End ] +## match_expr(last_expr) -> Match expr With . option(VBAR) cases(last_expr) [ End ] ## ## The known suffix of the stack is as follows: ## Match expr With @@ -912,7 +1114,7 @@ interactive_expr: Begin Match With ## ## Ends in an error in state: 207. ## -## match_expr(seq_expr) -> Match . expr With option(VBAR) cases(seq_expr) [ SEMI End ] +## match_expr(last_expr) -> Match . expr With option(VBAR) cases(last_expr) [ End ] ## ## The known suffix of the stack is as follows: ## Match @@ -922,9 +1124,8 @@ interactive_expr: Begin Match With interactive_expr: Begin Verbatim SEMI With ## -## Ends in an error in state: 474. +## Ends in an error in state: 448. ## -## option(SEMI) -> SEMI . [ End ] ## series -> seq_expr SEMI . series [ End ] ## ## The known suffix of the stack is as follows: @@ -935,7 +1136,7 @@ interactive_expr: Begin Verbatim SEMI With interactive_expr: Begin Verbatim With ## -## Ends in an error in state: 467. +## Ends in an error in state: 477. ## ## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ SEMI Or End BOOL_OR ] ## bin_op(disj_expr_level,Or,conj_expr_level) -> disj_expr_level . Or conj_expr_level [ SEMI Or End BOOL_OR ] @@ -1165,7 +1366,7 @@ interactive_expr: Ident WILD interactive_expr: If Verbatim Then Fun WILD ARROW With ## -## Ends in an error in state: 509. +## Ends in an error in state: 518. ## ## fun_expr(closed_if) -> Fun nseq(irrefutable) ARROW . closed_if [ Else ] ## fun_expr(expr) -> Fun nseq(irrefutable) ARROW . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1178,7 +1379,7 @@ interactive_expr: If Verbatim Then Fun WILD ARROW With interactive_expr: If Verbatim Then Fun With ## -## Ends in an error in state: 507. +## Ends in an error in state: 516. ## ## fun_expr(closed_if) -> Fun . nseq(irrefutable) ARROW closed_if [ Else ] ## fun_expr(expr) -> Fun . nseq(irrefutable) ARROW expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1191,7 +1392,7 @@ interactive_expr: If Verbatim Then Fun With interactive_expr: If Verbatim Then If Verbatim Then Verbatim Else With ## -## Ends in an error in state: 514. +## Ends in an error in state: 523. ## ## if_then_else(closed_if) -> If expr Then closed_if Else . closed_if [ Else ] ## if_then_else(expr) -> If expr Then closed_if Else . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1204,7 +1405,7 @@ interactive_expr: If Verbatim Then If Verbatim Then Verbatim Else With interactive_expr: If Verbatim Then If Verbatim Then With ## -## Ends in an error in state: 506. +## Ends in an error in state: 515. ## ## if_then(expr) -> If expr Then . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(closed_if) -> If expr Then . closed_if Else closed_if [ Else ] @@ -1218,7 +1419,7 @@ interactive_expr: If Verbatim Then If Verbatim Then With interactive_expr: If Verbatim Then If Verbatim With ## -## Ends in an error in state: 505. +## Ends in an error in state: 514. ## ## if_then(expr) -> If expr . Then expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(closed_if) -> If expr . Then closed_if Else closed_if [ Else ] @@ -1249,7 +1450,7 @@ interactive_expr: If Verbatim Then If Verbatim With interactive_expr: If Verbatim Then If With ## -## Ends in an error in state: 504. +## Ends in an error in state: 513. ## ## if_then(expr) -> If . expr Then expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(closed_if) -> If . expr Then closed_if Else closed_if [ Else ] @@ -1263,7 +1464,7 @@ interactive_expr: If Verbatim Then If With interactive_expr: If Verbatim Then Let Rec WILD EQ Bytes Attr Type ## -## Ends in an error in state: 502. +## Ends in an error in state: 511. ## ## let_expr(closed_if) -> Let Rec let_binding seq(Attr) . In closed_if [ Else ] ## let_expr(expr) -> Let Rec let_binding seq(Attr) . In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1283,7 +1484,7 @@ interactive_expr: If Verbatim Then Let Rec WILD EQ Bytes Attr Type interactive_expr: If Verbatim Then Let Rec WILD EQ Bytes In With ## -## Ends in an error in state: 503. +## Ends in an error in state: 512. ## ## let_expr(closed_if) -> Let Rec let_binding seq(Attr) In . closed_if [ Else ] ## let_expr(expr) -> Let Rec let_binding seq(Attr) In . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1296,7 +1497,7 @@ interactive_expr: If Verbatim Then Let Rec WILD EQ Bytes In With interactive_expr: If Verbatim Then Let Rec WILD EQ Bytes With ## -## Ends in an error in state: 501. +## Ends in an error in state: 510. ## ## let_expr(closed_if) -> Let Rec let_binding . seq(Attr) In closed_if [ Else ] ## let_expr(expr) -> Let Rec let_binding . seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1327,7 +1528,7 @@ interactive_expr: If Verbatim Then Let Rec WILD EQ Bytes With interactive_expr: If Verbatim Then Let Rec With ## -## Ends in an error in state: 500. +## Ends in an error in state: 509. ## ## let_expr(closed_if) -> Let Rec . let_binding seq(Attr) In closed_if [ Else ] ## let_expr(expr) -> Let Rec . let_binding seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1340,7 +1541,7 @@ interactive_expr: If Verbatim Then Let Rec With interactive_expr: If Verbatim Then Let WILD EQ Bytes Attr Type ## -## Ends in an error in state: 518. +## Ends in an error in state: 527. ## ## let_expr(closed_if) -> Let let_binding seq(Attr) . In closed_if [ Else ] ## let_expr(expr) -> Let let_binding seq(Attr) . In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1360,7 +1561,7 @@ interactive_expr: If Verbatim Then Let WILD EQ Bytes Attr Type interactive_expr: If Verbatim Then Let WILD EQ Bytes In With ## -## Ends in an error in state: 519. +## Ends in an error in state: 528. ## ## let_expr(closed_if) -> Let let_binding seq(Attr) In . closed_if [ Else ] ## let_expr(expr) -> Let let_binding seq(Attr) In . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1373,7 +1574,7 @@ interactive_expr: If Verbatim Then Let WILD EQ Bytes In With interactive_expr: If Verbatim Then Let WILD EQ Bytes With ## -## Ends in an error in state: 517. +## Ends in an error in state: 526. ## ## let_expr(closed_if) -> Let let_binding . seq(Attr) In closed_if [ Else ] ## let_expr(expr) -> Let let_binding . seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1404,7 +1605,7 @@ interactive_expr: If Verbatim Then Let WILD EQ Bytes With interactive_expr: If Verbatim Then Let With ## -## Ends in an error in state: 499. +## Ends in an error in state: 508. ## ## let_expr(closed_if) -> Let . let_binding seq(Attr) In closed_if [ Else ] ## let_expr(closed_if) -> Let . Rec let_binding seq(Attr) In closed_if [ Else ] @@ -1419,7 +1620,7 @@ interactive_expr: If Verbatim Then Let With interactive_expr: If Verbatim Then Match Verbatim Type ## -## Ends in an error in state: 495. +## Ends in an error in state: 504. ## ## match_expr(base_cond) -> Match expr . With option(VBAR) cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## match_expr(base_if_then_else) -> Match expr . With option(VBAR) cases(base_if_then_else) [ Else ] @@ -1449,7 +1650,7 @@ interactive_expr: If Verbatim Then Match Verbatim Type interactive_expr: If Verbatim Then Match Verbatim With VBAR Begin ## -## Ends in an error in state: 497. +## Ends in an error in state: 506. ## ## match_expr(base_cond) -> Match expr With option(VBAR) . cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## match_expr(base_if_then_else) -> Match expr With option(VBAR) . cases(base_if_then_else) [ Else ] @@ -1792,7 +1993,7 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD CONS Bytes SEMI interactive_expr: If Verbatim Then Match Verbatim With With ## -## Ends in an error in state: 496. +## Ends in an error in state: 505. ## ## match_expr(base_cond) -> Match expr With . option(VBAR) cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## match_expr(base_if_then_else) -> Match expr With . option(VBAR) cases(base_if_then_else) [ Else ] @@ -1805,7 +2006,7 @@ interactive_expr: If Verbatim Then Match Verbatim With With interactive_expr: If Verbatim Then Match With ## -## Ends in an error in state: 494. +## Ends in an error in state: 503. ## ## match_expr(base_cond) -> Match . expr With option(VBAR) cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## match_expr(base_if_then_else) -> Match . expr With option(VBAR) cases(base_if_then_else) [ Else ] @@ -1818,7 +2019,7 @@ interactive_expr: If Verbatim Then Match With interactive_expr: If Verbatim Then Verbatim COMMA Bytes VBAR ## -## Ends in an error in state: 510. +## Ends in an error in state: 519. ## ## base_expr(closed_if) -> tuple_expr . [ Else ] ## base_expr(expr) -> tuple_expr . [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1848,7 +2049,7 @@ interactive_expr: If Verbatim Then Verbatim COMMA Bytes VBAR interactive_expr: If Verbatim Then Verbatim Else With ## -## Ends in an error in state: 522. +## Ends in an error in state: 531. ## ## if_then_else(expr) -> If expr Then closed_if Else . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -1860,7 +2061,7 @@ interactive_expr: If Verbatim Then Verbatim Else With interactive_expr: If Verbatim Then Verbatim VBAR ## -## Ends in an error in state: 511. +## Ends in an error in state: 520. ## ## base_expr(closed_if) -> disj_expr_level . [ Else ] ## base_expr(expr) -> disj_expr_level . [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1890,7 +2091,7 @@ interactive_expr: If Verbatim Then Verbatim VBAR interactive_expr: If Verbatim Then With ## -## Ends in an error in state: 493. +## Ends in an error in state: 502. ## ## if_then(expr) -> If expr Then . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(expr) -> If expr Then . closed_if Else expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1903,7 +2104,7 @@ interactive_expr: If Verbatim Then With interactive_expr: If Verbatim With ## -## Ends in an error in state: 492. +## Ends in an error in state: 501. ## ## if_then(expr) -> If expr . Then expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(expr) -> If expr . Then closed_if Else expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1946,7 +2147,7 @@ interactive_expr: If With interactive_expr: LBRACE Constr DOT Ident With ## -## Ends in an error in state: 526. +## Ends in an error in state: 535. ## ## projection -> Constr DOT Ident . DOT nsepseq(selection,DOT) [ With EQ ] ## @@ -1958,7 +2159,7 @@ interactive_expr: LBRACE Constr DOT Ident With interactive_expr: LBRACE Constr DOT With ## -## Ends in an error in state: 525. +## Ends in an error in state: 534. ## ## projection -> Constr DOT . Ident DOT nsepseq(selection,DOT) [ With EQ ] ## @@ -1970,7 +2171,7 @@ interactive_expr: LBRACE Constr DOT With interactive_expr: LBRACE Constr With ## -## Ends in an error in state: 524. +## Ends in an error in state: 533. ## ## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ With EQ ] ## @@ -1982,7 +2183,7 @@ interactive_expr: LBRACE Constr With interactive_expr: LBRACE Ident DOT Ident Verbatim ## -## Ends in an error in state: 530. +## Ends in an error in state: 539. ## ## update_record -> LBRACE path . With sep_or_term_list(field_path_assignment,SEMI) RBRACE [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## @@ -1995,14 +2196,14 @@ interactive_expr: LBRACE Ident DOT Ident Verbatim ## may provide an INCOMPLETE view of the future (what was expected next). ## In state 189, spurious reduction of production nsepseq(selection,DOT) -> selection ## In state 192, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT) -## In state 529, spurious reduction of production path -> projection +## In state 538, spurious reduction of production path -> projection ## interactive_expr: LBRACE Ident EQ Bytes SEMI Ident EQ Bytes SEMI With ## -## Ends in an error in state: 555. +## Ends in an error in state: 564. ## ## nsepseq(field_assignment,SEMI) -> field_assignment SEMI . nsepseq(field_assignment,SEMI) [ RBRACE ] ## seq(__anonymous_0(field_assignment,SEMI)) -> field_assignment SEMI . seq(__anonymous_0(field_assignment,SEMI)) [ RBRACE ] @@ -2015,7 +2216,7 @@ interactive_expr: LBRACE Ident EQ Bytes SEMI Ident EQ Bytes SEMI With interactive_expr: LBRACE Ident EQ Bytes SEMI Ident EQ Bytes With ## -## Ends in an error in state: 554. +## Ends in an error in state: 563. ## ## nsepseq(field_assignment,SEMI) -> field_assignment . [ RBRACE ] ## nsepseq(field_assignment,SEMI) -> field_assignment . SEMI nsepseq(field_assignment,SEMI) [ RBRACE ] @@ -2040,14 +2241,14 @@ interactive_expr: LBRACE Ident EQ Bytes SEMI Ident EQ Bytes With ## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level ## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) ## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 523, spurious reduction of production field_assignment -> Ident EQ expr +## In state 532, spurious reduction of production field_assignment -> Ident EQ expr ## interactive_expr: LBRACE Ident EQ Bytes SEMI Ident With ## -## Ends in an error in state: 551. +## Ends in an error in state: 560. ## ## field_assignment -> Ident . EQ expr [ SEMI RBRACE ] ## @@ -2059,7 +2260,7 @@ interactive_expr: LBRACE Ident EQ Bytes SEMI Ident With interactive_expr: LBRACE Ident EQ Bytes SEMI With ## -## Ends in an error in state: 550. +## Ends in an error in state: 559. ## ## nsepseq(field_assignment,SEMI) -> field_assignment SEMI . nsepseq(field_assignment,SEMI) [ RBRACE ] ## nseq(__anonymous_0(field_assignment,SEMI)) -> field_assignment SEMI . seq(__anonymous_0(field_assignment,SEMI)) [ RBRACE ] @@ -2072,7 +2273,7 @@ interactive_expr: LBRACE Ident EQ Bytes SEMI With interactive_expr: LBRACE Ident EQ Bytes With ## -## Ends in an error in state: 549. +## Ends in an error in state: 558. ## ## nsepseq(field_assignment,SEMI) -> field_assignment . [ RBRACE ] ## nsepseq(field_assignment,SEMI) -> field_assignment . SEMI nsepseq(field_assignment,SEMI) [ RBRACE ] @@ -2097,7 +2298,7 @@ interactive_expr: LBRACE Ident EQ Bytes With ## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level ## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) ## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 523, spurious reduction of production field_assignment -> Ident EQ expr +## In state 532, spurious reduction of production field_assignment -> Ident EQ expr ## @@ -2130,7 +2331,7 @@ interactive_expr: LBRACE Ident WILD interactive_expr: LBRACE Ident With Ident DOT Ident With ## -## Ends in an error in state: 535. +## Ends in an error in state: 544. ## ## field_path_assignment -> path . EQ expr [ SEMI RBRACE ] ## @@ -2143,14 +2344,14 @@ interactive_expr: LBRACE Ident With Ident DOT Ident With ## may provide an INCOMPLETE view of the future (what was expected next). ## In state 189, spurious reduction of production nsepseq(selection,DOT) -> selection ## In state 192, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT) -## In state 529, spurious reduction of production path -> projection +## In state 538, spurious reduction of production path -> projection ## interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI Ident EQ Bytes SEMI With ## -## Ends in an error in state: 545. +## Ends in an error in state: 554. ## ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment SEMI . nsepseq(field_path_assignment,SEMI) [ RBRACE ] ## seq(__anonymous_0(field_path_assignment,SEMI)) -> field_path_assignment SEMI . seq(__anonymous_0(field_path_assignment,SEMI)) [ RBRACE ] @@ -2163,7 +2364,7 @@ interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI Ident EQ Bytes SEMI With interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI Ident EQ Bytes With ## -## Ends in an error in state: 544. +## Ends in an error in state: 553. ## ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment . [ RBRACE ] ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment . SEMI nsepseq(field_path_assignment,SEMI) [ RBRACE ] @@ -2188,14 +2389,14 @@ interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI Ident EQ Bytes With ## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level ## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) ## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 537, spurious reduction of production field_path_assignment -> path EQ expr +## In state 546, spurious reduction of production field_path_assignment -> path EQ expr ## interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI With ## -## Ends in an error in state: 541. +## Ends in an error in state: 550. ## ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment SEMI . nsepseq(field_path_assignment,SEMI) [ RBRACE ] ## nseq(__anonymous_0(field_path_assignment,SEMI)) -> field_path_assignment SEMI . seq(__anonymous_0(field_path_assignment,SEMI)) [ RBRACE ] @@ -2208,7 +2409,7 @@ interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI With interactive_expr: LBRACE Ident With Ident EQ Bytes With ## -## Ends in an error in state: 540. +## Ends in an error in state: 549. ## ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment . [ RBRACE ] ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment . SEMI nsepseq(field_path_assignment,SEMI) [ RBRACE ] @@ -2233,14 +2434,14 @@ interactive_expr: LBRACE Ident With Ident EQ Bytes With ## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level ## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) ## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 537, spurious reduction of production field_path_assignment -> path EQ expr +## In state 546, spurious reduction of production field_path_assignment -> path EQ expr ## interactive_expr: LBRACE Ident With Ident EQ With ## -## Ends in an error in state: 536. +## Ends in an error in state: 545. ## ## field_path_assignment -> path EQ . expr [ SEMI RBRACE ] ## @@ -2252,7 +2453,7 @@ interactive_expr: LBRACE Ident With Ident EQ With interactive_expr: LBRACE Ident With Ident With ## -## Ends in an error in state: 532. +## Ends in an error in state: 541. ## ## path -> Ident . [ EQ ] ## projection -> Ident . DOT nsepseq(selection,DOT) [ EQ ] @@ -2265,7 +2466,7 @@ interactive_expr: LBRACE Ident With Ident With interactive_expr: LBRACE Ident With With ## -## Ends in an error in state: 531. +## Ends in an error in state: 540. ## ## update_record -> LBRACE path With . sep_or_term_list(field_path_assignment,SEMI) RBRACE [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## @@ -2290,7 +2491,7 @@ interactive_expr: LBRACE With interactive_expr: LBRACKET PERCENT Constr Verbatim With ## -## Ends in an error in state: 560. +## Ends in an error in state: 569. ## ## code_insert -> LBRACKET PERCENT Constr expr . RBRACKET [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## @@ -2343,7 +2544,7 @@ interactive_expr: LBRACKET PERCENT With interactive_expr: LBRACKET Verbatim SEMI Verbatim SEMI With ## -## Ends in an error in state: 572. +## Ends in an error in state: 581. ## ## nsepseq(expr,SEMI) -> expr SEMI . nsepseq(expr,SEMI) [ RBRACKET ] ## seq(__anonymous_0(expr,SEMI)) -> expr SEMI . seq(__anonymous_0(expr,SEMI)) [ RBRACKET ] @@ -2356,7 +2557,7 @@ interactive_expr: LBRACKET Verbatim SEMI Verbatim SEMI With interactive_expr: LBRACKET Verbatim SEMI Verbatim With ## -## Ends in an error in state: 571. +## Ends in an error in state: 580. ## ## nsepseq(expr,SEMI) -> expr . [ RBRACKET ] ## nsepseq(expr,SEMI) -> expr . SEMI nsepseq(expr,SEMI) [ RBRACKET ] @@ -2387,7 +2588,7 @@ interactive_expr: LBRACKET Verbatim SEMI Verbatim With interactive_expr: LBRACKET Verbatim SEMI With ## -## Ends in an error in state: 568. +## Ends in an error in state: 577. ## ## nsepseq(expr,SEMI) -> expr SEMI . nsepseq(expr,SEMI) [ RBRACKET ] ## nseq(__anonymous_0(expr,SEMI)) -> expr SEMI . seq(__anonymous_0(expr,SEMI)) [ RBRACKET ] @@ -2400,7 +2601,7 @@ interactive_expr: LBRACKET Verbatim SEMI With interactive_expr: LBRACKET Verbatim With ## -## Ends in an error in state: 567. +## Ends in an error in state: 576. ## ## nsepseq(expr,SEMI) -> expr . [ RBRACKET ] ## nsepseq(expr,SEMI) -> expr . SEMI nsepseq(expr,SEMI) [ RBRACKET ] @@ -2444,7 +2645,7 @@ interactive_expr: LBRACKET With interactive_expr: LPAR Verbatim COLON Ident VBAR ## -## Ends in an error in state: 586. +## Ends in an error in state: 595. ## ## par(annot_expr) -> LPAR annot_expr . RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## @@ -2458,14 +2659,14 @@ interactive_expr: LPAR Verbatim COLON Ident VBAR ## In state 28, spurious reduction of production cartesian -> core_type ## In state 36, spurious reduction of production fun_type -> cartesian ## In state 27, spurious reduction of production type_expr -> fun_type -## In state 585, spurious reduction of production annot_expr -> expr COLON type_expr +## In state 594, spurious reduction of production annot_expr -> expr COLON type_expr ## interactive_expr: LPAR Verbatim COLON With ## -## Ends in an error in state: 584. +## Ends in an error in state: 593. ## ## annot_expr -> expr COLON . type_expr [ RPAR ] ## @@ -2477,7 +2678,7 @@ interactive_expr: LPAR Verbatim COLON With interactive_expr: LPAR Verbatim With ## -## Ends in an error in state: 582. +## Ends in an error in state: 591. ## ## annot_expr -> expr . COLON type_expr [ RPAR ] ## par(expr) -> LPAR expr . RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] @@ -2594,7 +2795,7 @@ interactive_expr: Let Rec With interactive_expr: Let WILD EQ Bytes Attr Type ## -## Ends in an error in state: 558. +## Ends in an error in state: 567. ## ## let_expr(expr) -> Let let_binding seq(Attr) . In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2613,7 +2814,7 @@ interactive_expr: Let WILD EQ Bytes Attr Type interactive_expr: Let WILD EQ Bytes In With ## -## Ends in an error in state: 559. +## Ends in an error in state: 568. ## ## let_expr(expr) -> Let let_binding seq(Attr) In . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2625,7 +2826,7 @@ interactive_expr: Let WILD EQ Bytes In With interactive_expr: Let WILD EQ Bytes With ## -## Ends in an error in state: 557. +## Ends in an error in state: 566. ## ## let_expr(expr) -> Let let_binding . seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2680,7 +2881,7 @@ interactive_expr: MINUS With interactive_expr: Match Verbatim Type ## -## Ends in an error in state: 575. +## Ends in an error in state: 584. ## ## match_expr(base_cond) -> Match expr . With option(VBAR) cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2722,7 +2923,7 @@ interactive_expr: Match Verbatim With LPAR Bytes RPAR With interactive_expr: Match Verbatim With VBAR Begin ## -## Ends in an error in state: 577. +## Ends in an error in state: 586. ## ## match_expr(base_cond) -> Match expr With option(VBAR) . cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2734,7 +2935,7 @@ interactive_expr: Match Verbatim With VBAR Begin interactive_expr: Match Verbatim With WILD ARROW Bytes VBAR With ## -## Ends in an error in state: 581. +## Ends in an error in state: 590. ## ## cases(base_cond) -> cases(base_cond) VBAR . case_clause(base_cond) [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2746,7 +2947,7 @@ interactive_expr: Match Verbatim With WILD ARROW Bytes VBAR With interactive_expr: Match Verbatim With WILD ARROW Fun WILD ARROW With ## -## Ends in an error in state: 419. +## Ends in an error in state: 429. ## ## fun_expr(base_cond) -> Fun nseq(irrefutable) ARROW . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2758,7 +2959,7 @@ interactive_expr: Match Verbatim With WILD ARROW Fun WILD ARROW With interactive_expr: Match Verbatim With WILD ARROW Fun With ## -## Ends in an error in state: 417. +## Ends in an error in state: 427. ## ## fun_expr(base_cond) -> Fun . nseq(irrefutable) ARROW base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3024,7 +3225,7 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let With interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Verbatim Else With ## -## Ends in an error in state: 416. +## Ends in an error in state: 426. ## ## if_then_else(base_cond) -> If expr Then closed_if Else . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3066,7 +3267,7 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Verbatim End interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then With ## -## Ends in an error in state: 267. +## Ends in an error in state: 424. ## ## if_then(base_cond) -> If expr Then . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(base_cond) -> If expr Then . closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -3079,7 +3280,7 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then With interactive_expr: Match Verbatim With WILD ARROW If Verbatim With ## -## Ends in an error in state: 266. +## Ends in an error in state: 423. ## ## if_then(base_cond) -> If expr . Then base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(base_cond) -> If expr . Then closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -3109,7 +3310,7 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim With interactive_expr: Match Verbatim With WILD ARROW If With ## -## Ends in an error in state: 265. +## Ends in an error in state: 422. ## ## if_then(base_cond) -> If . expr Then base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(base_cond) -> If . expr Then closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -3122,7 +3323,7 @@ interactive_expr: Match Verbatim With WILD ARROW If With interactive_expr: Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes Attr Type ## -## Ends in an error in state: 263. +## Ends in an error in state: 420. ## ## let_expr(base_cond) -> Let Rec let_binding seq(Attr) . In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3141,7 +3342,7 @@ interactive_expr: Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes Attr Type interactive_expr: Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes In With ## -## Ends in an error in state: 264. +## Ends in an error in state: 421. ## ## let_expr(base_cond) -> Let Rec let_binding seq(Attr) In . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3153,7 +3354,7 @@ interactive_expr: Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes In With interactive_expr: Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes With ## -## Ends in an error in state: 262. +## Ends in an error in state: 419. ## ## let_expr(base_cond) -> Let Rec let_binding . seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3183,7 +3384,7 @@ interactive_expr: Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes With interactive_expr: Match Verbatim With WILD ARROW Let Rec With ## -## Ends in an error in state: 261. +## Ends in an error in state: 418. ## ## let_expr(base_cond) -> Let Rec . let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3195,7 +3396,7 @@ interactive_expr: Match Verbatim With WILD ARROW Let Rec With interactive_expr: Match Verbatim With WILD ARROW Let WILD EQ Bytes Attr Type ## -## Ends in an error in state: 423. +## Ends in an error in state: 433. ## ## let_expr(base_cond) -> Let let_binding seq(Attr) . In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3214,7 +3415,7 @@ interactive_expr: Match Verbatim With WILD ARROW Let WILD EQ Bytes Attr Type interactive_expr: Match Verbatim With WILD ARROW Let WILD EQ Bytes In With ## -## Ends in an error in state: 424. +## Ends in an error in state: 434. ## ## let_expr(base_cond) -> Let let_binding seq(Attr) In . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3226,7 +3427,7 @@ interactive_expr: Match Verbatim With WILD ARROW Let WILD EQ Bytes In With interactive_expr: Match Verbatim With WILD ARROW Let WILD EQ Bytes With ## -## Ends in an error in state: 422. +## Ends in an error in state: 432. ## ## let_expr(base_cond) -> Let let_binding . seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3256,7 +3457,7 @@ interactive_expr: Match Verbatim With WILD ARROW Let WILD EQ Bytes With interactive_expr: Match Verbatim With WILD ARROW Let With ## -## Ends in an error in state: 260. +## Ends in an error in state: 417. ## ## let_expr(base_cond) -> Let . let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(base_cond) -> Let . Rec let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -3269,7 +3470,7 @@ interactive_expr: Match Verbatim With WILD ARROW Let With interactive_expr: Match Verbatim With WILD ARROW Verbatim COMMA Bytes Else ## -## Ends in an error in state: 580. +## Ends in an error in state: 589. ## ## cases(base_cond) -> cases(base_cond) . VBAR case_clause(base_cond) [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## match_expr(base_cond) -> Match expr With option(VBAR) cases(base_cond) . [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -3293,7 +3494,7 @@ interactive_expr: Match Verbatim With WILD ARROW Verbatim COMMA Bytes Else ## In state 347, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level ## In state 346, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA) ## In state 223, spurious reduction of production tuple_expr -> tuple(disj_expr_level) -## In state 420, spurious reduction of production base_expr(base_cond) -> tuple_expr +## In state 430, spurious reduction of production base_expr(base_cond) -> tuple_expr ## In state 359, spurious reduction of production base_cond__open(base_cond) -> base_expr(base_cond) ## In state 360, spurious reduction of production base_cond -> base_cond__open(base_cond) ## In state 406, spurious reduction of production case_clause(base_cond) -> pattern ARROW base_cond @@ -3304,7 +3505,7 @@ interactive_expr: Match Verbatim With WILD ARROW Verbatim COMMA Bytes Else interactive_expr: Match Verbatim With WILD ARROW Verbatim End ## -## Ends in an error in state: 421. +## Ends in an error in state: 431. ## ## base_expr(base_cond) -> disj_expr_level . [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or Let In EOF COMMA COLON BOOL_OR Attr ] @@ -3333,7 +3534,7 @@ interactive_expr: Match Verbatim With WILD ARROW Verbatim End interactive_expr: Match Verbatim With WILD ARROW With ## -## Ends in an error in state: 579. +## Ends in an error in state: 588. ## ## case_clause(base_cond) -> pattern ARROW . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3382,7 +3583,7 @@ interactive_expr: Match Verbatim With WILD COMMA With interactive_expr: Match Verbatim With WILD CONS Bytes SEMI ## -## Ends in an error in state: 578. +## Ends in an error in state: 587. ## ## case_clause(base_cond) -> pattern . ARROW base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3426,7 +3627,7 @@ interactive_expr: Match Verbatim With WILD With interactive_expr: Match Verbatim With With ## -## Ends in an error in state: 576. +## Ends in an error in state: 585. ## ## match_expr(base_cond) -> Match expr With . option(VBAR) cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3816,7 +4017,7 @@ interactive_expr: Verbatim WILD interactive_expr: Verbatim With ## -## Ends in an error in state: 603. +## Ends in an error in state: 612. ## ## interactive_expr -> expr . EOF [ # ] ## @@ -3845,7 +4046,7 @@ interactive_expr: Verbatim With interactive_expr: With ## -## Ends in an error in state: 601. +## Ends in an error in state: 610. ## ## interactive_expr' -> . interactive_expr [ # ] ## @@ -4291,7 +4492,7 @@ contract: Let LPAR With contract: Let Rec WILD EQ Bytes With ## -## Ends in an error in state: 590. +## Ends in an error in state: 599. ## ## let_declaration -> Let Rec let_binding . seq(Attr) [ Type Let EOF ] ## @@ -4416,7 +4617,7 @@ contract: Let WILD EQ Bytes Attr With contract: Let WILD EQ Bytes With ## -## Ends in an error in state: 592. +## Ends in an error in state: 601. ## ## let_declaration -> Let let_binding . seq(Attr) [ Type Let EOF ] ## @@ -4552,7 +4753,7 @@ contract: Type Ident EQ Constr With contract: Type Ident EQ Ident VBAR ## -## Ends in an error in state: 598. +## Ends in an error in state: 607. ## ## declarations -> declaration . [ EOF ] ## declarations -> declaration . declarations [ EOF ] @@ -4568,7 +4769,7 @@ contract: Type Ident EQ Ident VBAR ## In state 36, spurious reduction of production fun_type -> cartesian ## In state 27, spurious reduction of production type_expr -> fun_type ## In state 61, spurious reduction of production type_decl -> Type Ident EQ type_expr -## In state 594, spurious reduction of production declaration -> type_decl +## In state 603, spurious reduction of production declaration -> type_decl ## From 92e6d55aa815c55e7e2e647bf5b75731003a01be Mon Sep 17 00:00:00 2001 From: Christian Rinderknecht Date: Fri, 12 Jun 2020 17:49:21 +0200 Subject: [PATCH 06/10] Improved code injection. Fixed a few bugs on the way. --- src/passes/01-parser/cameligo/AST.ml | 57 +- src/passes/01-parser/cameligo/LexToken.mli | 31 +- src/passes/01-parser/cameligo/LexToken.mll | 60 +- src/passes/01-parser/cameligo/ParToken.mly | 20 +- src/passes/01-parser/cameligo/Parser.mly | 15 +- src/passes/01-parser/cameligo/ParserLog.ml | 48 +- src/passes/01-parser/cameligo/Pretty.ml | 40 +- .../cameligo/error.messages.checked-in | 1921 ++++++++--------- src/passes/01-parser/pascaligo/AST.ml | 75 +- src/passes/01-parser/pascaligo/LexToken.mli | 3 +- src/passes/01-parser/pascaligo/LexToken.mll | 41 +- src/passes/01-parser/pascaligo/ParToken.mly | 18 +- src/passes/01-parser/pascaligo/Parser.mly | 15 +- src/passes/01-parser/pascaligo/ParserLog.ml | 56 +- src/passes/01-parser/pascaligo/Pretty.ml | 10 +- .../pascaligo/error.messages.checked-in | 1750 ++++++++------- src/passes/01-parser/reasonligo/LexToken.mli | 31 +- src/passes/01-parser/reasonligo/LexToken.mll | 59 +- src/passes/01-parser/reasonligo/ParToken.mly | 20 +- src/passes/01-parser/reasonligo/Parser.mly | 41 +- src/passes/01-parser/reasonligo/Pretty.ml | 12 +- .../reasonligo/error.messages.checked-in | 1372 ++++++------ src/passes/01-parser/shared/Lexer.mli | 1 + src/passes/01-parser/shared/Lexer.mll | 15 +- .../02-concrete_to_imperative/cameligo.ml | 14 +- .../02-concrete_to_imperative/pascaligo.ml | 3 +- 26 files changed, 2834 insertions(+), 2894 deletions(-) diff --git a/src/passes/01-parser/cameligo/AST.ml b/src/passes/01-parser/cameligo/AST.ml index ec8797b3e..c39a54de5 100644 --- a/src/passes/01-parser/cameligo/AST.ml +++ b/src/passes/01-parser/cameligo/AST.ml @@ -227,27 +227,27 @@ and field_pattern = { } and expr = - ECase of expr case reg -| ECond of cond_expr reg -| EAnnot of annot_expr par reg -| ELogic of logic_expr -| EArith of arith_expr -| EString of string_expr -| EList of list_expr -| EConstr of constr_expr -| ERecord of record reg -| EProj of projection reg -| EUpdate of update reg -| EVar of variable -| ECall of (expr * expr nseq) reg -| EBytes of (string * Hex.t) reg -| EUnit of the_unit reg -| ETuple of (expr, comma) nsepseq reg -| EPar of expr par reg -| ELetIn of let_in reg -| EFun of fun_expr reg -| ESeq of expr injection reg -| ECodeInsert of code_insert reg + ECase of expr case reg +| ECond of cond_expr reg +| EAnnot of annot_expr par reg +| ELogic of logic_expr +| EArith of arith_expr +| EString of string_expr +| EList of list_expr +| EConstr of constr_expr +| ERecord of record reg +| EProj of projection reg +| EUpdate of update reg +| EVar of variable +| ECall of (expr * expr nseq) reg +| EBytes of (string * Hex.t) reg +| EUnit of the_unit reg +| ETuple of (expr, comma) nsepseq reg +| EPar of expr par reg +| ELetIn of let_in reg +| EFun of fun_expr reg +| ESeq of expr injection reg +| ECodeInj of code_inj reg and annot_expr = expr * colon * type_expr @@ -400,13 +400,12 @@ and cond_expr = { ifnot : expr } -and code_insert = { - lbracket : lbracket; - percent : percent; - language : string reg; - code : expr; - rbracket : rbracket; +and code_inj = { + language : string reg reg; + code : expr; + rbracket : rbracket; } + (* Projecting regions from some nodes of the AST *) let rec last to_region = function @@ -490,8 +489,8 @@ let expr_to_region = function | ECond {region;_} | ETuple {region;_} | ECase {region;_} | ECall {region;_} | EVar {region; _} | EProj {region; _} | EUnit {region;_} | EPar {region;_} | EBytes {region; _} -| ESeq {region; _} | ERecord {region; _} | EUpdate {region; _} -| ECodeInsert {region; _} -> region +| ESeq {region; _} | ERecord {region; _} | EUpdate {region; _} +| ECodeInj {region; _} -> region let declaration_to_region = function | Let {region;_} diff --git a/src/passes/01-parser/cameligo/LexToken.mli b/src/passes/01-parser/cameligo/LexToken.mli index 55034607e..b05b94318 100644 --- a/src/passes/01-parser/cameligo/LexToken.mli +++ b/src/passes/01-parser/cameligo/LexToken.mli @@ -29,9 +29,22 @@ type lexeme = string (* TOKENS *) type t = - (* Symbols *) + (* Identifiers, labels, numbers and strings *) - ARROW of Region.t (* "->" *) + Ident of string Region.reg +| Constr of string Region.reg +| Int of (string * Z.t) Region.reg +| Nat of (string * Z.t) Region.reg +| Mutez of (string * Z.t) Region.reg +| String of string Region.reg +| Verbatim of string Region.reg +| Bytes of (string * Hex.t) Region.reg +| Attr of string Region.reg +| Lang of lexeme Region.reg Region.reg + +(* Symbols *) + +| ARROW of Region.t (* "->" *) | CONS of Region.t (* "::" *) | CAT of Region.t (* "^" *) (*| APPEND (* "@" *)*) @@ -42,7 +55,6 @@ type t = | PLUS of Region.t (* "+" *) | SLASH of Region.t (* "/" *) | TIMES of Region.t (* "*" *) -| PERCENT of Region.t (* "%" *) (* Compounds *) @@ -77,18 +89,6 @@ type t = | BOOL_OR of Region.t (* "||" *) | BOOL_AND of Region.t (* "&&" *) - (* Identifiers, labels, numbers and strings *) - -| Ident of string Region.reg -| Constr of string Region.reg -| Int of (string * Z.t) Region.reg -| Nat of (string * Z.t) Region.reg -| Mutez of (string * Z.t) Region.reg -| String of string Region.reg -| Verbatim of string Region.reg -| Bytes of (string * Hex.t) Region.reg -| Attr of string Region.reg - (* Keywords *) (*| And*) @@ -155,6 +155,7 @@ val mk_verbatim : lexeme -> Region.t -> token val mk_bytes : lexeme -> Region.t -> token val mk_constr : lexeme -> Region.t -> token val mk_attr : string -> lexeme -> Region.t -> (token, attr_err) result +val mk_lang : lexeme Region.reg -> Region.t -> token val eof : Region.t -> token (* Predicates *) diff --git a/src/passes/01-parser/cameligo/LexToken.mll b/src/passes/01-parser/cameligo/LexToken.mll index aea43edba..1c0bc389a 100644 --- a/src/passes/01-parser/cameligo/LexToken.mll +++ b/src/passes/01-parser/cameligo/LexToken.mll @@ -13,9 +13,22 @@ module SSet = Utils.String.Set (* TOKENS *) type t = + (* Identifiers, labels, numbers and strings *) + + Ident of string Region.reg +| Constr of string Region.reg +| Int of (string * Z.t) Region.reg +| Nat of (string * Z.t) Region.reg +| Mutez of (string * Z.t) Region.reg +| String of string Region.reg +| Verbatim of string Region.reg +| Bytes of (string * Hex.t) Region.reg +| Attr of string Region.reg +| Lang of lexeme Region.reg Region.reg + (* Symbols *) - ARROW of Region.t (* "->" *) +| ARROW of Region.t (* "->" *) | CONS of Region.t (* "::" *) | CAT of Region.t (* "^" *) (*| APPEND (* "@" *)*) @@ -26,7 +39,6 @@ type t = | PLUS of Region.t (* "+" *) | SLASH of Region.t (* "/" *) | TIMES of Region.t (* "*" *) -| PERCENT of Region.t (* "%" *) (* Compounds *) @@ -61,18 +73,6 @@ type t = | BOOL_OR of Region.t (* "||" *) | BOOL_AND of Region.t (* "&&" *) - (* Identifiers, labels, numbers and strings *) - -| Ident of string Region.reg -| Constr of string Region.reg -| Int of (string * Z.t) Region.reg -| Nat of (string * Z.t) Region.reg -| Mutez of (string * Z.t) Region.reg -| String of string Region.reg -| Verbatim of string Region.reg -| Bytes of (string * Hex.t) Region.reg -| Attr of string Region.reg - (* Keywords *) (*| And*) @@ -113,26 +113,28 @@ let proj_token = function (* Literals *) String Region.{region; value} -> - region, sprintf "String %s" value + region, sprintf "String %S" value | Verbatim Region.{region; value} -> - region, sprintf "Verbatim {|%s|}" value + region, sprintf "Verbatim %S" value | Bytes Region.{region; value = s,b} -> region, - sprintf "Bytes (\"%s\", \"0x%s\")" s (Hex.show b) + sprintf "Bytes (%S, \"0x%s\")" s (Hex.show b) | Int Region.{region; value = s,n} -> - region, sprintf "Int (\"%s\", %s)" s (Z.to_string n) + region, sprintf "Int (%S, %s)" s (Z.to_string n) | Nat Region.{region; value = s,n} -> - region, sprintf "Nat (\"%s\", %s)" s (Z.to_string n) + region, sprintf "Nat (%S, %s)" s (Z.to_string n) | Mutez Region.{region; value = s,n} -> - region, sprintf "Mutez (\"%s\", %s)" s (Z.to_string n) + region, sprintf "Mutez (%S, %s)" s (Z.to_string n) | Ident Region.{region; value} -> - region, sprintf "Ident %s" value + region, sprintf "Ident %S" value | Constr Region.{region; value} -> - region, sprintf "Constr %s" value + region, sprintf "Constr %S" value | Attr Region.{region; value} -> - region, sprintf "Attr \"%s\"" value + region, sprintf "Attr %S" value +| Lang Region.{region; value} -> + region, sprintf "Lang %S" (value.Region.value) - (* Symbols *) +(* Symbols *) | ARROW region -> region, "ARROW" | CONS region -> region, "CONS" @@ -141,7 +143,6 @@ let proj_token = function | PLUS region -> region, "PLUS" | SLASH region -> region, "SLASH" | TIMES region -> region, "TIMES" -| PERCENT region -> region, "PERCENT" | LPAR region -> region, "LPAR" | RPAR region -> region, "RPAR" | LBRACKET region -> region, "LBRACKET" @@ -206,6 +207,7 @@ let to_lexeme = function | Ident id -> id.Region.value | Constr id -> id.Region.value | Attr a -> a.Region.value +| Lang lang -> Region.(lang.value.value) (* Symbols *) @@ -216,7 +218,6 @@ let to_lexeme = function | PLUS _ -> "+" | SLASH _ -> "/" | TIMES _ -> "*" -| PERCENT _ -> "%" | LPAR _ -> "(" | RPAR _ -> ")" | LBRACKET _ -> "[" @@ -478,7 +479,6 @@ let mk_sym lexeme region = | "-" -> Ok (MINUS region) | "*" -> Ok (TIMES region) | "/" -> Ok (SLASH region) - | "%" -> Ok (PERCENT region) | "<" -> Ok (LT region) | "<=" -> Ok (LE region) | ">" -> Ok (GT region) @@ -512,6 +512,10 @@ let mk_attr header lexeme region = if header = "[@" then Error Invalid_attribute else Ok (Attr Region.{value=lexeme; region}) +(* Language injection *) + +let mk_lang lang region = Lang Region.{value=lang; region} + (* Predicates *) let is_string = function String _ -> true | _ -> false @@ -573,7 +577,7 @@ let check_right_context token next_token buffer : unit = else () else if is_bytes token - then if is_string next || is_ident next + then if is_string next || is_ident next then fail region Missing_break else if is_int next then fail region Odd_lengthed_bytes diff --git a/src/passes/01-parser/cameligo/ParToken.mly b/src/passes/01-parser/cameligo/ParToken.mly index 898d6f571..093968ee4 100644 --- a/src/passes/01-parser/cameligo/ParToken.mly +++ b/src/passes/01-parser/cameligo/ParToken.mly @@ -5,15 +5,16 @@ (* Literals *) -%token String "" -%token Verbatim "" -%token <(LexToken.lexeme * Hex.t) Region.reg> Bytes "" -%token <(string * Z.t) Region.reg> Int "" -%token <(string * Z.t) Region.reg> Nat "" -%token <(string * Z.t) Region.reg> Mutez "" -%token Ident "" -%token Constr "" -%token Attr "" +%token String "" +%token Verbatim "" +%token <(LexToken.lexeme * Hex.t) Region.reg> Bytes "" +%token <(string * Z.t) Region.reg> Int "" +%token <(string * Z.t) Region.reg> Nat "" +%token <(string * Z.t) Region.reg> Mutez "" +%token Ident "" +%token Constr "" +%token Attr "" +%token Lang "" (* Symbols *) @@ -21,7 +22,6 @@ %token PLUS "+" %token SLASH "/" %token TIMES "*" -%token PERCENT "%" %token LPAR "(" %token RPAR ")" diff --git a/src/passes/01-parser/cameligo/Parser.mly b/src/passes/01-parser/cameligo/Parser.mly index 9dca6a5c4..de79c2854 100644 --- a/src/passes/01-parser/cameligo/Parser.mly +++ b/src/passes/01-parser/cameligo/Parser.mly @@ -583,7 +583,7 @@ core_expr: | sequence { ESeq $1 } | record_expr { ERecord $1 } | update_record { EUpdate $1 } -| code_insert { ECodeInsert $1 } +| code_inj { ECodeInj $1 } | par(expr) { EPar $1 } | par(annot_expr) { EAnnot $1 } @@ -708,13 +708,8 @@ last_expr: seq_expr: disj_expr_level | if_then_else (seq_expr) { $1 } -code_insert: - "[" "%" Constr expr "]" { - let region = cover $1 $5 in - let value = { - lbracket =$1; - percent =$2; - language =$3; - code =$4; - rbracket =$5} +code_inj: + "" expr "]" { + let region = cover $1.region $3 + and value = {language=$1; code=$2; rbracket=$3} in {region; value} } diff --git a/src/passes/01-parser/cameligo/ParserLog.ml b/src/passes/01-parser/cameligo/ParserLog.ml index 36c8edec4..b06ac2ca3 100644 --- a/src/passes/01-parser/cameligo/ParserLog.ml +++ b/src/passes/01-parser/cameligo/ParserLog.ml @@ -89,12 +89,6 @@ let print_pvar state {region; value} = (compact state region) value in Buffer.add_string state#buffer line -let print_uident state {region; value} = - let line = - sprintf "%s: Uident %s\n" - (compact state region) value - in Buffer.add_string state#buffer line - let print_string state {region; value} = let line = sprintf "%s: String %S\n" @@ -103,7 +97,7 @@ let print_string state {region; value} = let print_verbatim state {region; value} = let line = - sprintf "%s: Verbatim {|%s|}\n" + sprintf "%s: Verbatim %S\n" (compact state region) value in Buffer.add_string state#buffer line @@ -211,7 +205,7 @@ and print_cartesian state Region.{value;_} = print_nsepseq state "*" print_type_expr value and print_variant state {value = {constr; arg}; _} = - print_uident state constr; + print_constr state constr; match arg with None -> () | Some (kwd_of, t_expr) -> @@ -340,7 +334,7 @@ and print_some_app_pattern state {value; _} = and print_constr_app_pattern state node = let {value=constr, p_opt; _} = node in - print_uident state constr; + print_constr state constr; match p_opt with None -> () | Some pattern -> print_pattern state pattern @@ -366,7 +360,7 @@ and print_expr state = function | ESeq seq -> print_sequence state seq | ERecord e -> print_record_expr state e | EConstr e -> print_constr_expr state e -| ECodeInsert e -> print_code_insert state e +| ECodeInj e -> print_code_inj state e and print_constr_expr state = function ENone e -> print_none_expr state e @@ -519,13 +513,15 @@ and print_comp_expr state = function and print_record_expr state e = print_ne_injection state print_field_assign e -and print_code_insert state {value; _} = - let {lbracket;percent;language;code;rbracket} : code_insert = value in - print_token state lbracket "["; - print_token state percent "%"; - print_string state language; - print_expr state code; - print_token state rbracket "]" +and print_code_inj state {value; _} = + let {language; code; rbracket} = value in + let {value=lang; region} = language in + let header_stop = region#start#shift_bytes 1 in + let header_reg = Region.make ~start:region#start ~stop:header_stop in + print_token state header_reg "[%"; + print_string state lang; + print_expr state code; + print_token state rbracket "]" and print_field_assign state {value; _} = let {field_name; assignment; field_expr} = value in @@ -871,9 +867,9 @@ and pp_expr state = function | ESeq {value; region} -> pp_loc_node state "ESeq" region; pp_injection pp_expr state value -| ECodeInsert {value; region} -> - pp_loc_node state "ECodeInsert" region; - pp_code_insert state value +| ECodeInj {value; region} -> + pp_loc_node state "ECodeInj" region; + pp_code_inj state value and pp_fun_expr state node = let {binders; lhs_type; body; _} = node in @@ -895,16 +891,16 @@ and pp_fun_expr state node = pp_expr (state#pad 1 0) body in () -and pp_code_insert state (rc : code_insert) = +and pp_code_inj state rc = let () = - let state = state#pad 3 0 in + let state = state#pad 2 0 in pp_node state ""; - pp_string (state#pad 1 0) rc.language in + pp_string (state#pad 1 0) rc.language.value in let () = - let state = state#pad 3 1 in + let state = state#pad 2 1 in pp_node state ""; - pp_expr (state#pad 1 0) rc.code in - () + pp_expr (state#pad 1 0) rc.code + in () and pp_let_in state node = let {binding; body; attributes; kwd_rec; _} = node in diff --git a/src/passes/01-parser/cameligo/Pretty.ml b/src/passes/01-parser/cameligo/Pretty.ml index 650e03ef3..7ab17d516 100644 --- a/src/passes/01-parser/cameligo/Pretty.ml +++ b/src/passes/01-parser/cameligo/Pretty.ml @@ -52,22 +52,22 @@ and pp_let_binding (binding : let_binding) = in prefix 2 1 (lhs ^^ string " =") (pp_expr let_rhs) and pp_pattern = function - PConstr p -> pp_pconstr p -| PUnit _ -> string "()" -| PFalse _ -> string "false" -| PTrue _ -> string "true" -| PVar v -> pp_ident v -| PInt i -> pp_int i -| PNat n -> pp_nat n -| PBytes b -> pp_bytes b -| PString s -> pp_string s + PConstr p -> pp_pconstr p +| PUnit _ -> string "()" +| PFalse _ -> string "false" +| PTrue _ -> string "true" +| PVar v -> pp_ident v +| PInt i -> pp_int i +| PNat n -> pp_nat n +| PBytes b -> pp_bytes b +| PString s -> pp_string s | PVerbatim s -> pp_verbatim s -| PWild _ -> string "_" -| PList l -> pp_plist l -| PTuple t -> pp_ptuple t -| PPar p -> pp_ppar p -| PRecord r -> pp_precord r -| PTyped t -> pp_ptyped t +| PWild _ -> string "_" +| PList l -> pp_plist l +| PTuple t -> pp_ptuple t +| PPar p -> pp_ppar p +| PRecord r -> pp_precord r +| PTyped t -> pp_ptyped t and pp_pconstr = function PNone _ -> string "None" @@ -152,7 +152,7 @@ and pp_expr = function | ELetIn e -> pp_let_in e | EFun e -> pp_fun e | ESeq e -> pp_seq e -| ECodeInsert e -> pp_code_insert e +| ECodeInj e -> pp_code_inj e and pp_case_expr {value; _} = let {expr; cases; _} = value in @@ -314,11 +314,11 @@ and pp_update {value; _} = string "{" ^^ record ^^ string " with" ^^ nest 2 (break 1 ^^ updates ^^ string "}") -and pp_code_insert {value; _} = +and pp_code_inj {value; _} = let {language; code; _} = value in - let language = pp_string language - and code = pp_expr code in - string "[%" ^^ language ^^ string " " ^^ code ^^ string " ]" + let language = pp_string language.value + and code = pp_expr code in + string "[%" ^^ language ^/^ code ^^ string "]" and pp_field_path_assign {value; _} = let {field_path; field_expr; _} = value in diff --git a/src/passes/01-parser/cameligo/error.messages.checked-in b/src/passes/01-parser/cameligo/error.messages.checked-in index 8ac839bf3..24b134bc3 100644 --- a/src/passes/01-parser/cameligo/error.messages.checked-in +++ b/src/passes/01-parser/cameligo/error.messages.checked-in @@ -1,8 +1,8 @@ interactive_expr: Begin Fun WILD ARROW Bytes SEMI With ## -## Ends in an error in state: 488. +## Ends in an error in state: 487. ## -## sequence -> Begin option(series) . End [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## sequence -> Begin option(series) . End [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## Begin option(series) @@ -12,7 +12,7 @@ interactive_expr: Begin Fun WILD ARROW Bytes SEMI With interactive_expr: Begin Fun WILD ARROW With ## -## Ends in an error in state: 470. +## Ends in an error in state: 469. ## ## fun_expr(seq_expr) -> Fun nseq(irrefutable) ARROW . seq_expr [ SEMI End ] ## @@ -24,7 +24,7 @@ interactive_expr: Begin Fun WILD ARROW With interactive_expr: Begin Fun With ## -## Ends in an error in state: 468. +## Ends in an error in state: 467. ## ## fun_expr(seq_expr) -> Fun . nseq(irrefutable) ARROW seq_expr [ SEMI End ] ## @@ -36,7 +36,7 @@ interactive_expr: Begin Fun With interactive_expr: Begin If Verbatim Then Fun WILD ARROW With ## -## Ends in an error in state: 457. +## Ends in an error in state: 456. ## ## fun_expr(closed_if) -> Fun nseq(irrefutable) ARROW . closed_if [ Else ] ## @@ -48,7 +48,7 @@ interactive_expr: Begin If Verbatim Then Fun WILD ARROW With interactive_expr: Begin If Verbatim Then Fun With ## -## Ends in an error in state: 455. +## Ends in an error in state: 454. ## ## fun_expr(closed_if) -> Fun . nseq(irrefutable) ARROW closed_if [ Else ] ## @@ -60,7 +60,7 @@ interactive_expr: Begin If Verbatim Then Fun With interactive_expr: Begin If Verbatim Then If Verbatim Then Verbatim COMMA Bytes With ## -## Ends in an error in state: 460. +## Ends in an error in state: 459. ## ## if_then_else(closed_if) -> If expr Then closed_if . Else closed_if [ Else ] ## @@ -71,28 +71,28 @@ interactive_expr: Begin If Verbatim Then If Verbatim Then Verbatim COMMA Bytes W ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 347, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level -## In state 346, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA) -## In state 223, spurious reduction of production tuple_expr -> tuple(disj_expr_level) -## In state 458, spurious reduction of production base_expr(closed_if) -> tuple_expr -## In state 358, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr(closed_if) -## In state 357, spurious reduction of production closed_if -> base_if_then_else__open(closed_if) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 346, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level +## In state 345, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA) +## In state 222, spurious reduction of production tuple_expr -> tuple(disj_expr_level) +## In state 457, spurious reduction of production base_expr(closed_if) -> tuple_expr +## In state 357, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr(closed_if) +## In state 356, spurious reduction of production closed_if -> base_if_then_else__open(closed_if) ## interactive_expr: Begin If Verbatim Then If Verbatim Then Verbatim Else With ## -## Ends in an error in state: 461. +## Ends in an error in state: 460. ## ## if_then_else(closed_if) -> If expr Then closed_if Else . closed_if [ Else ] ## @@ -104,7 +104,7 @@ interactive_expr: Begin If Verbatim Then If Verbatim Then Verbatim Else With interactive_expr: Begin If Verbatim Then If Verbatim Then With ## -## Ends in an error in state: 454. +## Ends in an error in state: 453. ## ## if_then_else(closed_if) -> If expr Then . closed_if Else closed_if [ Else ] ## @@ -116,7 +116,7 @@ interactive_expr: Begin If Verbatim Then If Verbatim Then With interactive_expr: Begin If Verbatim Then If Verbatim With ## -## Ends in an error in state: 453. +## Ends in an error in state: 452. ## ## if_then_else(closed_if) -> If expr . Then closed_if Else closed_if [ Else ] ## @@ -127,25 +127,25 @@ interactive_expr: Begin If Verbatim Then If Verbatim With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) ## interactive_expr: Begin If Verbatim Then If With ## -## Ends in an error in state: 452. +## Ends in an error in state: 451. ## ## if_then_else(closed_if) -> If . expr Then closed_if Else closed_if [ Else ] ## @@ -157,7 +157,7 @@ interactive_expr: Begin If Verbatim Then If With interactive_expr: Begin If Verbatim Then Let Rec WILD EQ Bytes Attr Type ## -## Ends in an error in state: 450. +## Ends in an error in state: 449. ## ## let_expr(closed_if) -> Let Rec let_binding seq(Attr) . In closed_if [ Else ] ## @@ -168,15 +168,15 @@ interactive_expr: Begin If Verbatim Then Let Rec WILD EQ Bytes Attr Type ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 176, spurious reduction of production seq(Attr) -> -## In state 177, spurious reduction of production seq(Attr) -> Attr seq(Attr) +## In state 174, spurious reduction of production seq(Attr) -> +## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr) ## interactive_expr: Begin If Verbatim Then Let Rec WILD EQ Bytes In With ## -## Ends in an error in state: 451. +## Ends in an error in state: 450. ## ## let_expr(closed_if) -> Let Rec let_binding seq(Attr) In . closed_if [ Else ] ## @@ -188,7 +188,7 @@ interactive_expr: Begin If Verbatim Then Let Rec WILD EQ Bytes In With interactive_expr: Begin If Verbatim Then Let Rec WILD EQ Bytes With ## -## Ends in an error in state: 449. +## Ends in an error in state: 448. ## ## let_expr(closed_if) -> Let Rec let_binding . seq(Attr) In closed_if [ Else ] ## @@ -199,26 +199,26 @@ interactive_expr: Begin If Verbatim Then Let Rec WILD EQ Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 379, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr ## interactive_expr: Begin If Verbatim Then Let Rec With ## -## Ends in an error in state: 448. +## Ends in an error in state: 447. ## ## let_expr(closed_if) -> Let Rec . let_binding seq(Attr) In closed_if [ Else ] ## @@ -230,7 +230,7 @@ interactive_expr: Begin If Verbatim Then Let Rec With interactive_expr: Begin If Verbatim Then Let WILD EQ Bytes Attr Type ## -## Ends in an error in state: 463. +## Ends in an error in state: 462. ## ## let_expr(closed_if) -> Let let_binding seq(Attr) . In closed_if [ Else ] ## @@ -241,15 +241,15 @@ interactive_expr: Begin If Verbatim Then Let WILD EQ Bytes Attr Type ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 176, spurious reduction of production seq(Attr) -> -## In state 177, spurious reduction of production seq(Attr) -> Attr seq(Attr) +## In state 174, spurious reduction of production seq(Attr) -> +## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr) ## interactive_expr: Begin If Verbatim Then Let WILD EQ Bytes In With ## -## Ends in an error in state: 464. +## Ends in an error in state: 463. ## ## let_expr(closed_if) -> Let let_binding seq(Attr) In . closed_if [ Else ] ## @@ -261,7 +261,7 @@ interactive_expr: Begin If Verbatim Then Let WILD EQ Bytes In With interactive_expr: Begin If Verbatim Then Let WILD EQ Bytes With ## -## Ends in an error in state: 462. +## Ends in an error in state: 461. ## ## let_expr(closed_if) -> Let let_binding . seq(Attr) In closed_if [ Else ] ## @@ -272,26 +272,26 @@ interactive_expr: Begin If Verbatim Then Let WILD EQ Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 379, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr ## interactive_expr: Begin If Verbatim Then Let With ## -## Ends in an error in state: 447. +## Ends in an error in state: 446. ## ## let_expr(closed_if) -> Let . let_binding seq(Attr) In closed_if [ Else ] ## let_expr(closed_if) -> Let . Rec let_binding seq(Attr) In closed_if [ Else ] @@ -304,7 +304,7 @@ interactive_expr: Begin If Verbatim Then Let With interactive_expr: Begin If Verbatim Then Match Verbatim Type ## -## Ends in an error in state: 269. +## Ends in an error in state: 268. ## ## match_expr(base_if_then_else) -> Match expr . With option(VBAR) cases(base_if_then_else) [ Else ] ## @@ -315,25 +315,25 @@ interactive_expr: Begin If Verbatim Then Match Verbatim Type ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) ## interactive_expr: Begin If Verbatim Then Match Verbatim With VBAR Begin ## -## Ends in an error in state: 271. +## Ends in an error in state: 270. ## ## match_expr(base_if_then_else) -> Match expr With option(VBAR) . cases(base_if_then_else) [ Else ] ## @@ -345,7 +345,7 @@ interactive_expr: Begin If Verbatim Then Match Verbatim With VBAR Begin interactive_expr: Begin If Verbatim Then Match Verbatim With WILD ARROW Bytes With ## -## Ends in an error in state: 409. +## Ends in an error in state: 408. ## ## cases(base_cond) -> cases(base_cond) . VBAR case_clause(base_cond) [ VBAR ] ## cases(base_if_then_else) -> cases(base_cond) . VBAR case_clause(base_if_then_else) [ Else ] @@ -357,27 +357,27 @@ interactive_expr: Begin If Verbatim Then Match Verbatim With WILD ARROW Bytes Wi ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 395, spurious reduction of production base_expr(base_cond) -> disj_expr_level -## In state 359, spurious reduction of production base_cond__open(base_cond) -> base_expr(base_cond) -## In state 360, spurious reduction of production base_cond -> base_cond__open(base_cond) -## In state 406, spurious reduction of production case_clause(base_cond) -> pattern ARROW base_cond -## In state 414, spurious reduction of production cases(base_cond) -> case_clause(base_cond) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 394, spurious reduction of production base_expr(base_cond) -> disj_expr_level +## In state 358, spurious reduction of production base_cond__open(base_cond) -> base_expr(base_cond) +## In state 359, spurious reduction of production base_cond -> base_cond__open(base_cond) +## In state 405, spurious reduction of production case_clause(base_cond) -> pattern ARROW base_cond +## In state 413, spurious reduction of production cases(base_cond) -> case_clause(base_cond) ## interactive_expr: Begin If Verbatim Then Match Verbatim With With ## -## Ends in an error in state: 270. +## Ends in an error in state: 269. ## ## match_expr(base_if_then_else) -> Match expr With . option(VBAR) cases(base_if_then_else) [ Else ] ## @@ -389,7 +389,7 @@ interactive_expr: Begin If Verbatim Then Match Verbatim With With interactive_expr: Begin If Verbatim Then Match With ## -## Ends in an error in state: 268. +## Ends in an error in state: 267. ## ## match_expr(base_if_then_else) -> Match . expr With option(VBAR) cases(base_if_then_else) [ Else ] ## @@ -401,7 +401,7 @@ interactive_expr: Begin If Verbatim Then Match With interactive_expr: Begin If Verbatim Then Verbatim COMMA Bytes With ## -## Ends in an error in state: 465. +## Ends in an error in state: 464. ## ## if_then_else(seq_expr) -> If expr Then closed_if . Else seq_expr [ SEMI End ] ## @@ -412,28 +412,28 @@ interactive_expr: Begin If Verbatim Then Verbatim COMMA Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 347, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level -## In state 346, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA) -## In state 223, spurious reduction of production tuple_expr -> tuple(disj_expr_level) -## In state 458, spurious reduction of production base_expr(closed_if) -> tuple_expr -## In state 358, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr(closed_if) -## In state 357, spurious reduction of production closed_if -> base_if_then_else__open(closed_if) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 346, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level +## In state 345, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA) +## In state 222, spurious reduction of production tuple_expr -> tuple(disj_expr_level) +## In state 457, spurious reduction of production base_expr(closed_if) -> tuple_expr +## In state 357, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr(closed_if) +## In state 356, spurious reduction of production closed_if -> base_if_then_else__open(closed_if) ## interactive_expr: Begin If Verbatim Then Verbatim Else With ## -## Ends in an error in state: 466. +## Ends in an error in state: 465. ## ## if_then_else(seq_expr) -> If expr Then closed_if Else . seq_expr [ SEMI End ] ## @@ -445,7 +445,7 @@ interactive_expr: Begin If Verbatim Then Verbatim Else With interactive_expr: Begin If Verbatim Then Verbatim With ## -## Ends in an error in state: 459. +## Ends in an error in state: 458. ## ## base_expr(closed_if) -> disj_expr_level . [ Else ] ## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ Or Else COMMA BOOL_OR ] @@ -459,22 +459,22 @@ interactive_expr: Begin If Verbatim Then Verbatim With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level ## interactive_expr: Begin If Verbatim Then With ## -## Ends in an error in state: 446. +## Ends in an error in state: 445. ## ## if_then_else(seq_expr) -> If expr Then . closed_if Else seq_expr [ SEMI End ] ## @@ -486,7 +486,7 @@ interactive_expr: Begin If Verbatim Then With interactive_expr: Begin If Verbatim With ## -## Ends in an error in state: 445. +## Ends in an error in state: 444. ## ## if_then_else(seq_expr) -> If expr . Then closed_if Else seq_expr [ SEMI End ] ## @@ -497,25 +497,25 @@ interactive_expr: Begin If Verbatim With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) ## interactive_expr: Begin If With ## -## Ends in an error in state: 444. +## Ends in an error in state: 443. ## ## if_then_else(seq_expr) -> If . expr Then closed_if Else seq_expr [ SEMI End ] ## @@ -527,7 +527,7 @@ interactive_expr: Begin If With interactive_expr: Begin Let Rec WILD EQ Bytes Attr Type ## -## Ends in an error in state: 442. +## Ends in an error in state: 441. ## ## last_expr -> Let Rec let_binding seq(Attr) . In series [ End ] ## @@ -538,15 +538,15 @@ interactive_expr: Begin Let Rec WILD EQ Bytes Attr Type ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 176, spurious reduction of production seq(Attr) -> -## In state 177, spurious reduction of production seq(Attr) -> Attr seq(Attr) +## In state 174, spurious reduction of production seq(Attr) -> +## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr) ## interactive_expr: Begin Let Rec WILD EQ Bytes In With ## -## Ends in an error in state: 443. +## Ends in an error in state: 442. ## ## last_expr -> Let Rec let_binding seq(Attr) In . series [ End ] ## @@ -558,7 +558,7 @@ interactive_expr: Begin Let Rec WILD EQ Bytes In With interactive_expr: Begin Let Rec WILD EQ Bytes With ## -## Ends in an error in state: 441. +## Ends in an error in state: 440. ## ## last_expr -> Let Rec let_binding . seq(Attr) In series [ End ] ## @@ -569,26 +569,26 @@ interactive_expr: Begin Let Rec WILD EQ Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 379, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr ## interactive_expr: Begin Let Rec With ## -## Ends in an error in state: 440. +## Ends in an error in state: 439. ## ## last_expr -> Let Rec . let_binding seq(Attr) In series [ End ] ## @@ -600,7 +600,7 @@ interactive_expr: Begin Let Rec With interactive_expr: Begin Let WILD EQ Bytes Attr Type ## -## Ends in an error in state: 484. +## Ends in an error in state: 483. ## ## last_expr -> Let let_binding seq(Attr) . In series [ End ] ## @@ -611,15 +611,15 @@ interactive_expr: Begin Let WILD EQ Bytes Attr Type ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 176, spurious reduction of production seq(Attr) -> -## In state 177, spurious reduction of production seq(Attr) -> Attr seq(Attr) +## In state 174, spurious reduction of production seq(Attr) -> +## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr) ## interactive_expr: Begin Let WILD EQ Bytes In With ## -## Ends in an error in state: 485. +## Ends in an error in state: 484. ## ## last_expr -> Let let_binding seq(Attr) In . series [ End ] ## @@ -631,7 +631,7 @@ interactive_expr: Begin Let WILD EQ Bytes In With interactive_expr: Begin Let WILD EQ Bytes With ## -## Ends in an error in state: 483. +## Ends in an error in state: 482. ## ## last_expr -> Let let_binding . seq(Attr) In series [ End ] ## @@ -642,26 +642,26 @@ interactive_expr: Begin Let WILD EQ Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 379, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr ## interactive_expr: Begin Let With ## -## Ends in an error in state: 439. +## Ends in an error in state: 438. ## ## last_expr -> Let . let_binding seq(Attr) In series [ End ] ## last_expr -> Let . Rec let_binding seq(Attr) In series [ End ] @@ -674,7 +674,7 @@ interactive_expr: Begin Let With interactive_expr: Begin Match Verbatim Type ## -## Ends in an error in state: 245. +## Ends in an error in state: 244. ## ## match_expr(seq_expr) -> Match expr . With option(VBAR) cases(seq_expr) [ SEMI End ] ## @@ -685,25 +685,25 @@ interactive_expr: Begin Match Verbatim Type ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) ## interactive_expr: Begin Match Verbatim With VBAR Begin ## -## Ends in an error in state: 248. +## Ends in an error in state: 247. ## ## match_expr(seq_expr) -> Match expr With option(VBAR) . cases(seq_expr) [ SEMI End ] ## @@ -715,7 +715,7 @@ interactive_expr: Begin Match Verbatim With VBAR Begin interactive_expr: Begin Match Verbatim With WILD ARROW Bytes VBAR With ## -## Ends in an error in state: 436. +## Ends in an error in state: 435. ## ## cases(base_cond) -> cases(base_cond) VBAR . case_clause(base_cond) [ VBAR ] ## cases(seq_expr) -> cases(base_cond) VBAR . case_clause(seq_expr) [ SEMI End ] @@ -728,7 +728,7 @@ interactive_expr: Begin Match Verbatim With WILD ARROW Bytes VBAR With interactive_expr: Begin Match Verbatim With WILD ARROW If Verbatim Then Verbatim Else With ## -## Ends in an error in state: 429. +## Ends in an error in state: 428. ## ## if_then_else(base_cond) -> If expr Then closed_if Else . base_cond [ VBAR ] ## if_then_else(seq_expr) -> If expr Then closed_if Else . seq_expr [ SEMI End ] @@ -741,7 +741,7 @@ interactive_expr: Begin Match Verbatim With WILD ARROW If Verbatim Then Verbatim interactive_expr: Begin Match Verbatim With WILD ARROW If Verbatim Then With ## -## Ends in an error in state: 427. +## Ends in an error in state: 426. ## ## if_then(base_cond) -> If expr Then . base_cond [ VBAR ] ## if_then_else(base_cond) -> If expr Then . closed_if Else base_cond [ VBAR ] @@ -755,7 +755,7 @@ interactive_expr: Begin Match Verbatim With WILD ARROW If Verbatim Then With interactive_expr: Begin Match Verbatim With WILD ARROW If Verbatim With ## -## Ends in an error in state: 426. +## Ends in an error in state: 425. ## ## if_then(base_cond) -> If expr . Then base_cond [ VBAR ] ## if_then_else(base_cond) -> If expr . Then closed_if Else base_cond [ VBAR ] @@ -768,25 +768,25 @@ interactive_expr: Begin Match Verbatim With WILD ARROW If Verbatim With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) ## interactive_expr: Begin Match Verbatim With WILD ARROW If With ## -## Ends in an error in state: 425. +## Ends in an error in state: 424. ## ## if_then(base_cond) -> If . expr Then base_cond [ VBAR ] ## if_then_else(base_cond) -> If . expr Then closed_if Else base_cond [ VBAR ] @@ -800,7 +800,7 @@ interactive_expr: Begin Match Verbatim With WILD ARROW If With interactive_expr: Begin Match Verbatim With WILD ARROW Verbatim COMMA Bytes With ## -## Ends in an error in state: 435. +## Ends in an error in state: 434. ## ## cases(base_cond) -> cases(base_cond) . VBAR case_clause(base_cond) [ VBAR ] ## cases(seq_expr) -> cases(base_cond) . VBAR case_clause(seq_expr) [ SEMI End ] @@ -812,30 +812,30 @@ interactive_expr: Begin Match Verbatim With WILD ARROW Verbatim COMMA Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 347, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level -## In state 346, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA) -## In state 223, spurious reduction of production tuple_expr -> tuple(disj_expr_level) -## In state 420, spurious reduction of production base_expr(base_cond) -> tuple_expr -## In state 359, spurious reduction of production base_cond__open(base_cond) -> base_expr(base_cond) -## In state 360, spurious reduction of production base_cond -> base_cond__open(base_cond) -## In state 406, spurious reduction of production case_clause(base_cond) -> pattern ARROW base_cond -## In state 414, spurious reduction of production cases(base_cond) -> case_clause(base_cond) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 346, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level +## In state 345, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA) +## In state 222, spurious reduction of production tuple_expr -> tuple(disj_expr_level) +## In state 419, spurious reduction of production base_expr(base_cond) -> tuple_expr +## In state 358, spurious reduction of production base_cond__open(base_cond) -> base_expr(base_cond) +## In state 359, spurious reduction of production base_cond -> base_cond__open(base_cond) +## In state 405, spurious reduction of production case_clause(base_cond) -> pattern ARROW base_cond +## In state 413, spurious reduction of production cases(base_cond) -> case_clause(base_cond) ## interactive_expr: Begin Match Verbatim With WILD ARROW Verbatim With ## -## Ends in an error in state: 432. +## Ends in an error in state: 431. ## ## base_expr(base_cond) -> disj_expr_level . [ VBAR ] ## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ VBAR SEMI Or End COMMA BOOL_OR ] @@ -850,22 +850,22 @@ interactive_expr: Begin Match Verbatim With WILD ARROW Verbatim With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level ## interactive_expr: Begin Match Verbatim With WILD ARROW With ## -## Ends in an error in state: 259. +## Ends in an error in state: 258. ## ## case_clause(base_cond) -> pattern ARROW . base_cond [ VBAR ] ## case_clause(seq_expr) -> pattern ARROW . seq_expr [ SEMI End ] @@ -878,7 +878,7 @@ interactive_expr: Begin Match Verbatim With WILD ARROW With interactive_expr: Begin Match Verbatim With WILD CONS Bytes SEMI ## -## Ends in an error in state: 258. +## Ends in an error in state: 257. ## ## case_clause(base_cond) -> pattern . ARROW base_cond [ VBAR ] ## case_clause(seq_expr) -> pattern . ARROW seq_expr [ SEMI End ] @@ -891,14 +891,14 @@ interactive_expr: Begin Match Verbatim With WILD CONS Bytes SEMI ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). ## In state 97, spurious reduction of production tail -> sub_pattern -## In state 252, spurious reduction of production pattern -> sub_pattern CONS tail +## In state 251, spurious reduction of production pattern -> sub_pattern CONS tail ## interactive_expr: Begin Match Verbatim With With ## -## Ends in an error in state: 246. +## Ends in an error in state: 245. ## ## match_expr(seq_expr) -> Match expr With . option(VBAR) cases(seq_expr) [ SEMI End ] ## @@ -910,7 +910,7 @@ interactive_expr: Begin Match Verbatim With With interactive_expr: Begin Match With ## -## Ends in an error in state: 207. +## Ends in an error in state: 206. ## ## match_expr(seq_expr) -> Match . expr With option(VBAR) cases(seq_expr) [ SEMI End ] ## @@ -922,7 +922,7 @@ interactive_expr: Begin Match With interactive_expr: Begin Verbatim SEMI With ## -## Ends in an error in state: 474. +## Ends in an error in state: 473. ## ## option(SEMI) -> SEMI . [ End ] ## series -> seq_expr SEMI . series [ End ] @@ -935,7 +935,7 @@ interactive_expr: Begin Verbatim SEMI With interactive_expr: Begin Verbatim With ## -## Ends in an error in state: 467. +## Ends in an error in state: 466. ## ## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ SEMI Or End BOOL_OR ] ## bin_op(disj_expr_level,Or,conj_expr_level) -> disj_expr_level . Or conj_expr_level [ SEMI Or End BOOL_OR ] @@ -948,24 +948,24 @@ interactive_expr: Begin Verbatim With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level ## interactive_expr: Begin With ## -## Ends in an error in state: 206. +## Ends in an error in state: 205. ## -## sequence -> Begin . option(series) End [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## sequence -> Begin . option(series) End [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## Begin @@ -975,7 +975,7 @@ interactive_expr: Begin With interactive_expr: C_None WILD ## -## Ends in an error in state: 224. +## Ends in an error in state: 223. ## ## add_expr_level -> mult_expr_level . [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE PLUS Or NE MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] ## bin_op(mult_expr_level,Mod,unary_expr_level) -> mult_expr_level . Mod unary_expr_level [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] @@ -990,7 +990,7 @@ interactive_expr: C_None WILD interactive_expr: C_Some With ## -## Ends in an error in state: 208. +## Ends in an error in state: 207. ## ## constr_expr -> C_Some . core_expr [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] ## @@ -1002,9 +1002,9 @@ interactive_expr: C_Some With interactive_expr: Constr DOT Ident DOT With ## -## Ends in an error in state: 201. +## Ends in an error in state: 200. ## -## projection -> Constr DOT Ident DOT . nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## projection -> Constr DOT Ident DOT . nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## Constr DOT Ident DOT @@ -1014,10 +1014,10 @@ interactive_expr: Constr DOT Ident DOT With interactive_expr: Constr DOT Ident WILD ## -## Ends in an error in state: 200. +## Ends in an error in state: 199. ## -## module_fun -> Ident . [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] -## projection -> Constr DOT Ident . DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## module_fun -> Ident . [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## projection -> Constr DOT Ident . DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## Constr DOT Ident @@ -1027,10 +1027,10 @@ interactive_expr: Constr DOT Ident WILD interactive_expr: Constr DOT With ## -## Ends in an error in state: 198. +## Ends in an error in state: 197. ## -## module_field -> Constr DOT . module_fun [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] -## projection -> Constr DOT . Ident DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## module_field -> Constr DOT . module_fun [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## projection -> Constr DOT . Ident DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## Constr DOT @@ -1040,12 +1040,12 @@ interactive_expr: Constr DOT With interactive_expr: Constr WILD ## -## Ends in an error in state: 197. +## Ends in an error in state: 196. ## ## constr_expr -> Constr . core_expr [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] ## constr_expr -> Constr . [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] -## module_field -> Constr . DOT module_fun [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] -## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## module_field -> Constr . DOT module_fun [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## Constr @@ -1055,7 +1055,7 @@ interactive_expr: Constr WILD interactive_expr: Fun WILD ARROW With ## -## Ends in an error in state: 195. +## Ends in an error in state: 194. ## ## fun_expr(expr) -> Fun nseq(irrefutable) ARROW . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -1067,7 +1067,7 @@ interactive_expr: Fun WILD ARROW With interactive_expr: Fun WILD RPAR ## -## Ends in an error in state: 362. +## Ends in an error in state: 361. ## ## nseq(irrefutable) -> irrefutable . seq(irrefutable) [ ARROW ] ## @@ -1085,7 +1085,7 @@ interactive_expr: Fun WILD RPAR interactive_expr: Fun WILD WILD RPAR ## -## Ends in an error in state: 364. +## Ends in an error in state: 363. ## ## seq(irrefutable) -> irrefutable . seq(irrefutable) [ ARROW ] ## @@ -1103,7 +1103,7 @@ interactive_expr: Fun WILD WILD RPAR interactive_expr: Fun With ## -## Ends in an error in state: 193. +## Ends in an error in state: 192. ## ## fun_expr(expr) -> Fun . nseq(irrefutable) ARROW expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -1115,9 +1115,9 @@ interactive_expr: Fun With interactive_expr: Ident DOT Int DOT With ## -## Ends in an error in state: 190. +## Ends in an error in state: 189. ## -## nsepseq(selection,DOT) -> selection DOT . nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## nsepseq(selection,DOT) -> selection DOT . nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## selection DOT @@ -1127,10 +1127,10 @@ interactive_expr: Ident DOT Int DOT With interactive_expr: Ident DOT Int WILD ## -## Ends in an error in state: 189. +## Ends in an error in state: 188. ## -## nsepseq(selection,DOT) -> selection . [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] -## nsepseq(selection,DOT) -> selection . DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## nsepseq(selection,DOT) -> selection . [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## nsepseq(selection,DOT) -> selection . DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## selection @@ -1140,9 +1140,9 @@ interactive_expr: Ident DOT Int WILD interactive_expr: Ident DOT With ## -## Ends in an error in state: 186. +## Ends in an error in state: 185. ## -## projection -> Ident DOT . nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## projection -> Ident DOT . nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## Ident DOT @@ -1152,10 +1152,10 @@ interactive_expr: Ident DOT With interactive_expr: Ident WILD ## -## Ends in an error in state: 185. +## Ends in an error in state: 184. ## -## core_expr -> Ident . [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] -## projection -> Ident . DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## core_expr -> Ident . [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## projection -> Ident . DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## Ident @@ -1165,7 +1165,7 @@ interactive_expr: Ident WILD interactive_expr: If Verbatim Then Fun WILD ARROW With ## -## Ends in an error in state: 509. +## Ends in an error in state: 508. ## ## fun_expr(closed_if) -> Fun nseq(irrefutable) ARROW . closed_if [ Else ] ## fun_expr(expr) -> Fun nseq(irrefutable) ARROW . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1178,7 +1178,7 @@ interactive_expr: If Verbatim Then Fun WILD ARROW With interactive_expr: If Verbatim Then Fun With ## -## Ends in an error in state: 507. +## Ends in an error in state: 506. ## ## fun_expr(closed_if) -> Fun . nseq(irrefutable) ARROW closed_if [ Else ] ## fun_expr(expr) -> Fun . nseq(irrefutable) ARROW expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1191,7 +1191,7 @@ interactive_expr: If Verbatim Then Fun With interactive_expr: If Verbatim Then If Verbatim Then Verbatim Else With ## -## Ends in an error in state: 514. +## Ends in an error in state: 513. ## ## if_then_else(closed_if) -> If expr Then closed_if Else . closed_if [ Else ] ## if_then_else(expr) -> If expr Then closed_if Else . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1204,7 +1204,7 @@ interactive_expr: If Verbatim Then If Verbatim Then Verbatim Else With interactive_expr: If Verbatim Then If Verbatim Then With ## -## Ends in an error in state: 506. +## Ends in an error in state: 505. ## ## if_then(expr) -> If expr Then . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(closed_if) -> If expr Then . closed_if Else closed_if [ Else ] @@ -1218,7 +1218,7 @@ interactive_expr: If Verbatim Then If Verbatim Then With interactive_expr: If Verbatim Then If Verbatim With ## -## Ends in an error in state: 505. +## Ends in an error in state: 504. ## ## if_then(expr) -> If expr . Then expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(closed_if) -> If expr . Then closed_if Else closed_if [ Else ] @@ -1231,25 +1231,25 @@ interactive_expr: If Verbatim Then If Verbatim With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) ## interactive_expr: If Verbatim Then If With ## -## Ends in an error in state: 504. +## Ends in an error in state: 503. ## ## if_then(expr) -> If . expr Then expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(closed_if) -> If . expr Then closed_if Else closed_if [ Else ] @@ -1263,7 +1263,7 @@ interactive_expr: If Verbatim Then If With interactive_expr: If Verbatim Then Let Rec WILD EQ Bytes Attr Type ## -## Ends in an error in state: 502. +## Ends in an error in state: 501. ## ## let_expr(closed_if) -> Let Rec let_binding seq(Attr) . In closed_if [ Else ] ## let_expr(expr) -> Let Rec let_binding seq(Attr) . In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1275,15 +1275,15 @@ interactive_expr: If Verbatim Then Let Rec WILD EQ Bytes Attr Type ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 176, spurious reduction of production seq(Attr) -> -## In state 177, spurious reduction of production seq(Attr) -> Attr seq(Attr) +## In state 174, spurious reduction of production seq(Attr) -> +## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr) ## interactive_expr: If Verbatim Then Let Rec WILD EQ Bytes In With ## -## Ends in an error in state: 503. +## Ends in an error in state: 502. ## ## let_expr(closed_if) -> Let Rec let_binding seq(Attr) In . closed_if [ Else ] ## let_expr(expr) -> Let Rec let_binding seq(Attr) In . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1296,7 +1296,7 @@ interactive_expr: If Verbatim Then Let Rec WILD EQ Bytes In With interactive_expr: If Verbatim Then Let Rec WILD EQ Bytes With ## -## Ends in an error in state: 501. +## Ends in an error in state: 500. ## ## let_expr(closed_if) -> Let Rec let_binding . seq(Attr) In closed_if [ Else ] ## let_expr(expr) -> Let Rec let_binding . seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1308,26 +1308,26 @@ interactive_expr: If Verbatim Then Let Rec WILD EQ Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 379, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr ## interactive_expr: If Verbatim Then Let Rec With ## -## Ends in an error in state: 500. +## Ends in an error in state: 499. ## ## let_expr(closed_if) -> Let Rec . let_binding seq(Attr) In closed_if [ Else ] ## let_expr(expr) -> Let Rec . let_binding seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1340,7 +1340,7 @@ interactive_expr: If Verbatim Then Let Rec With interactive_expr: If Verbatim Then Let WILD EQ Bytes Attr Type ## -## Ends in an error in state: 518. +## Ends in an error in state: 517. ## ## let_expr(closed_if) -> Let let_binding seq(Attr) . In closed_if [ Else ] ## let_expr(expr) -> Let let_binding seq(Attr) . In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1352,15 +1352,15 @@ interactive_expr: If Verbatim Then Let WILD EQ Bytes Attr Type ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 176, spurious reduction of production seq(Attr) -> -## In state 177, spurious reduction of production seq(Attr) -> Attr seq(Attr) +## In state 174, spurious reduction of production seq(Attr) -> +## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr) ## interactive_expr: If Verbatim Then Let WILD EQ Bytes In With ## -## Ends in an error in state: 519. +## Ends in an error in state: 518. ## ## let_expr(closed_if) -> Let let_binding seq(Attr) In . closed_if [ Else ] ## let_expr(expr) -> Let let_binding seq(Attr) In . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1373,7 +1373,7 @@ interactive_expr: If Verbatim Then Let WILD EQ Bytes In With interactive_expr: If Verbatim Then Let WILD EQ Bytes With ## -## Ends in an error in state: 517. +## Ends in an error in state: 516. ## ## let_expr(closed_if) -> Let let_binding . seq(Attr) In closed_if [ Else ] ## let_expr(expr) -> Let let_binding . seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1385,26 +1385,26 @@ interactive_expr: If Verbatim Then Let WILD EQ Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 379, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr ## interactive_expr: If Verbatim Then Let With ## -## Ends in an error in state: 499. +## Ends in an error in state: 498. ## ## let_expr(closed_if) -> Let . let_binding seq(Attr) In closed_if [ Else ] ## let_expr(closed_if) -> Let . Rec let_binding seq(Attr) In closed_if [ Else ] @@ -1419,7 +1419,7 @@ interactive_expr: If Verbatim Then Let With interactive_expr: If Verbatim Then Match Verbatim Type ## -## Ends in an error in state: 495. +## Ends in an error in state: 494. ## ## match_expr(base_cond) -> Match expr . With option(VBAR) cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## match_expr(base_if_then_else) -> Match expr . With option(VBAR) cases(base_if_then_else) [ Else ] @@ -1431,25 +1431,25 @@ interactive_expr: If Verbatim Then Match Verbatim Type ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) ## interactive_expr: If Verbatim Then Match Verbatim With VBAR Begin ## -## Ends in an error in state: 497. +## Ends in an error in state: 496. ## ## match_expr(base_cond) -> Match expr With option(VBAR) . cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## match_expr(base_if_then_else) -> Match expr With option(VBAR) . cases(base_if_then_else) [ Else ] @@ -1462,7 +1462,7 @@ interactive_expr: If Verbatim Then Match Verbatim With VBAR Begin interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Bytes VBAR With ## -## Ends in an error in state: 410. +## Ends in an error in state: 409. ## ## cases(base_cond) -> cases(base_cond) VBAR . case_clause(base_cond) [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## cases(base_if_then_else) -> cases(base_cond) VBAR . case_clause(base_if_then_else) [ Else ] @@ -1475,7 +1475,7 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Bytes VBAR Wit interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Fun WILD ARROW With ## -## Ends in an error in state: 390. +## Ends in an error in state: 389. ## ## fun_expr(base_cond) -> Fun nseq(irrefutable) ARROW . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## fun_expr(base_if_then_else) -> Fun nseq(irrefutable) ARROW . base_if_then_else [ Else ] @@ -1488,7 +1488,7 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Fun WILD ARROW interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Fun With ## -## Ends in an error in state: 388. +## Ends in an error in state: 387. ## ## fun_expr(base_cond) -> Fun . nseq(irrefutable) ARROW base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## fun_expr(base_if_then_else) -> Fun . nseq(irrefutable) ARROW base_if_then_else [ Else ] @@ -1501,7 +1501,7 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Fun With interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW If Verbatim Then Verbatim Else With ## -## Ends in an error in state: 387. +## Ends in an error in state: 386. ## ## if_then_else(base_cond) -> If expr Then closed_if Else . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(base_if_then_else) -> If expr Then closed_if Else . base_if_then_else [ Else ] @@ -1514,7 +1514,7 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW If Verbatim Th interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW If Verbatim Then With ## -## Ends in an error in state: 281. +## Ends in an error in state: 280. ## ## if_then(base_cond) -> If expr Then . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(base_cond) -> If expr Then . closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1528,7 +1528,7 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW If Verbatim Th interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW If Verbatim With ## -## Ends in an error in state: 280. +## Ends in an error in state: 279. ## ## if_then(base_cond) -> If expr . Then base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(base_cond) -> If expr . Then closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1541,25 +1541,25 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW If Verbatim Wi ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) ## interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW If With ## -## Ends in an error in state: 279. +## Ends in an error in state: 278. ## ## if_then(base_cond) -> If . expr Then base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(base_cond) -> If . expr Then closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1573,7 +1573,7 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW If With interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes Attr Type ## -## Ends in an error in state: 277. +## Ends in an error in state: 276. ## ## let_expr(base_cond) -> Let Rec let_binding seq(Attr) . In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(base_if_then_else) -> Let Rec let_binding seq(Attr) . In base_if_then_else [ Else ] @@ -1585,15 +1585,15 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let Rec WILD E ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 176, spurious reduction of production seq(Attr) -> -## In state 177, spurious reduction of production seq(Attr) -> Attr seq(Attr) +## In state 174, spurious reduction of production seq(Attr) -> +## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr) ## interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes In With ## -## Ends in an error in state: 278. +## Ends in an error in state: 277. ## ## let_expr(base_cond) -> Let Rec let_binding seq(Attr) In . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(base_if_then_else) -> Let Rec let_binding seq(Attr) In . base_if_then_else [ Else ] @@ -1606,7 +1606,7 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let Rec WILD E interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes With ## -## Ends in an error in state: 276. +## Ends in an error in state: 275. ## ## let_expr(base_cond) -> Let Rec let_binding . seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(base_if_then_else) -> Let Rec let_binding . seq(Attr) In base_if_then_else [ Else ] @@ -1618,26 +1618,26 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let Rec WILD E ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 379, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr ## interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let Rec With ## -## Ends in an error in state: 275. +## Ends in an error in state: 274. ## ## let_expr(base_cond) -> Let Rec . let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(base_if_then_else) -> Let Rec . let_binding seq(Attr) In base_if_then_else [ Else ] @@ -1650,7 +1650,7 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let Rec With interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let WILD EQ Bytes Attr Type ## -## Ends in an error in state: 402. +## Ends in an error in state: 401. ## ## let_expr(base_cond) -> Let let_binding seq(Attr) . In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(base_if_then_else) -> Let let_binding seq(Attr) . In base_if_then_else [ Else ] @@ -1662,15 +1662,15 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let WILD EQ By ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 176, spurious reduction of production seq(Attr) -> -## In state 177, spurious reduction of production seq(Attr) -> Attr seq(Attr) +## In state 174, spurious reduction of production seq(Attr) -> +## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr) ## interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let WILD EQ Bytes In With ## -## Ends in an error in state: 403. +## Ends in an error in state: 402. ## ## let_expr(base_cond) -> Let let_binding seq(Attr) In . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(base_if_then_else) -> Let let_binding seq(Attr) In . base_if_then_else [ Else ] @@ -1683,7 +1683,7 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let WILD EQ By interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let WILD EQ Bytes With ## -## Ends in an error in state: 401. +## Ends in an error in state: 400. ## ## let_expr(base_cond) -> Let let_binding . seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(base_if_then_else) -> Let let_binding . seq(Attr) In base_if_then_else [ Else ] @@ -1695,26 +1695,26 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let WILD EQ By ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 379, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr ## interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let With ## -## Ends in an error in state: 274. +## Ends in an error in state: 273. ## ## let_expr(base_cond) -> Let . let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(base_cond) -> Let . Rec let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1729,7 +1729,7 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let With interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Verbatim End ## -## Ends in an error in state: 395. +## Ends in an error in state: 394. ## ## base_expr(base_cond) -> disj_expr_level . [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## base_expr(base_if_then_else) -> disj_expr_level . [ Else ] @@ -1744,22 +1744,22 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Verbatim End ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level ## interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW With ## -## Ends in an error in state: 273. +## Ends in an error in state: 272. ## ## case_clause(base_cond) -> pattern ARROW . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## case_clause(base_if_then_else) -> pattern ARROW . base_if_then_else [ Else ] @@ -1772,7 +1772,7 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW With interactive_expr: If Verbatim Then Match Verbatim With WILD CONS Bytes SEMI ## -## Ends in an error in state: 272. +## Ends in an error in state: 271. ## ## case_clause(base_cond) -> pattern . ARROW base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## case_clause(base_if_then_else) -> pattern . ARROW base_if_then_else [ Else ] @@ -1785,14 +1785,14 @@ interactive_expr: If Verbatim Then Match Verbatim With WILD CONS Bytes SEMI ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). ## In state 97, spurious reduction of production tail -> sub_pattern -## In state 252, spurious reduction of production pattern -> sub_pattern CONS tail +## In state 251, spurious reduction of production pattern -> sub_pattern CONS tail ## interactive_expr: If Verbatim Then Match Verbatim With With ## -## Ends in an error in state: 496. +## Ends in an error in state: 495. ## ## match_expr(base_cond) -> Match expr With . option(VBAR) cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## match_expr(base_if_then_else) -> Match expr With . option(VBAR) cases(base_if_then_else) [ Else ] @@ -1805,7 +1805,7 @@ interactive_expr: If Verbatim Then Match Verbatim With With interactive_expr: If Verbatim Then Match With ## -## Ends in an error in state: 494. +## Ends in an error in state: 493. ## ## match_expr(base_cond) -> Match . expr With option(VBAR) cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## match_expr(base_if_then_else) -> Match . expr With option(VBAR) cases(base_if_then_else) [ Else ] @@ -1818,7 +1818,7 @@ interactive_expr: If Verbatim Then Match With interactive_expr: If Verbatim Then Verbatim COMMA Bytes VBAR ## -## Ends in an error in state: 510. +## Ends in an error in state: 509. ## ## base_expr(closed_if) -> tuple_expr . [ Else ] ## base_expr(expr) -> tuple_expr . [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1830,25 +1830,25 @@ interactive_expr: If Verbatim Then Verbatim COMMA Bytes VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 347, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level -## In state 346, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA) -## In state 223, spurious reduction of production tuple_expr -> tuple(disj_expr_level) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 346, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level +## In state 345, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA) +## In state 222, spurious reduction of production tuple_expr -> tuple(disj_expr_level) ## interactive_expr: If Verbatim Then Verbatim Else With ## -## Ends in an error in state: 522. +## Ends in an error in state: 521. ## ## if_then_else(expr) -> If expr Then closed_if Else . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -1860,7 +1860,7 @@ interactive_expr: If Verbatim Then Verbatim Else With interactive_expr: If Verbatim Then Verbatim VBAR ## -## Ends in an error in state: 511. +## Ends in an error in state: 510. ## ## base_expr(closed_if) -> disj_expr_level . [ Else ] ## base_expr(expr) -> disj_expr_level . [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1875,22 +1875,22 @@ interactive_expr: If Verbatim Then Verbatim VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level ## interactive_expr: If Verbatim Then With ## -## Ends in an error in state: 493. +## Ends in an error in state: 492. ## ## if_then(expr) -> If expr Then . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(expr) -> If expr Then . closed_if Else expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1903,7 +1903,7 @@ interactive_expr: If Verbatim Then With interactive_expr: If Verbatim With ## -## Ends in an error in state: 492. +## Ends in an error in state: 491. ## ## if_then(expr) -> If expr . Then expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(expr) -> If expr . Then closed_if Else expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1915,25 +1915,25 @@ interactive_expr: If Verbatim With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) ## interactive_expr: If With ## -## Ends in an error in state: 184. +## Ends in an error in state: 183. ## ## if_then(expr) -> If . expr Then expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(expr) -> If . expr Then closed_if Else expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -1946,7 +1946,7 @@ interactive_expr: If With interactive_expr: LBRACE Constr DOT Ident With ## -## Ends in an error in state: 526. +## Ends in an error in state: 525. ## ## projection -> Constr DOT Ident . DOT nsepseq(selection,DOT) [ With EQ ] ## @@ -1958,7 +1958,7 @@ interactive_expr: LBRACE Constr DOT Ident With interactive_expr: LBRACE Constr DOT With ## -## Ends in an error in state: 525. +## Ends in an error in state: 524. ## ## projection -> Constr DOT . Ident DOT nsepseq(selection,DOT) [ With EQ ] ## @@ -1970,7 +1970,7 @@ interactive_expr: LBRACE Constr DOT With interactive_expr: LBRACE Constr With ## -## Ends in an error in state: 524. +## Ends in an error in state: 523. ## ## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ With EQ ] ## @@ -1982,9 +1982,9 @@ interactive_expr: LBRACE Constr With interactive_expr: LBRACE Ident DOT Ident Verbatim ## -## Ends in an error in state: 530. +## Ends in an error in state: 529. ## -## update_record -> LBRACE path . With sep_or_term_list(field_path_assignment,SEMI) RBRACE [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## update_record -> LBRACE path . With sep_or_term_list(field_path_assignment,SEMI) RBRACE [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## LBRACE path @@ -1993,16 +1993,16 @@ interactive_expr: LBRACE Ident DOT Ident Verbatim ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 189, spurious reduction of production nsepseq(selection,DOT) -> selection -## In state 192, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT) -## In state 529, spurious reduction of production path -> projection +## In state 188, spurious reduction of production nsepseq(selection,DOT) -> selection +## In state 191, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT) +## In state 528, spurious reduction of production path -> projection ## interactive_expr: LBRACE Ident EQ Bytes SEMI Ident EQ Bytes SEMI With ## -## Ends in an error in state: 555. +## Ends in an error in state: 554. ## ## nsepseq(field_assignment,SEMI) -> field_assignment SEMI . nsepseq(field_assignment,SEMI) [ RBRACE ] ## seq(__anonymous_0(field_assignment,SEMI)) -> field_assignment SEMI . seq(__anonymous_0(field_assignment,SEMI)) [ RBRACE ] @@ -2015,7 +2015,7 @@ interactive_expr: LBRACE Ident EQ Bytes SEMI Ident EQ Bytes SEMI With interactive_expr: LBRACE Ident EQ Bytes SEMI Ident EQ Bytes With ## -## Ends in an error in state: 554. +## Ends in an error in state: 553. ## ## nsepseq(field_assignment,SEMI) -> field_assignment . [ RBRACE ] ## nsepseq(field_assignment,SEMI) -> field_assignment . SEMI nsepseq(field_assignment,SEMI) [ RBRACE ] @@ -2028,26 +2028,26 @@ interactive_expr: LBRACE Ident EQ Bytes SEMI Ident EQ Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 523, spurious reduction of production field_assignment -> Ident EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 522, spurious reduction of production field_assignment -> Ident EQ expr ## interactive_expr: LBRACE Ident EQ Bytes SEMI Ident With ## -## Ends in an error in state: 551. +## Ends in an error in state: 550. ## ## field_assignment -> Ident . EQ expr [ SEMI RBRACE ] ## @@ -2059,7 +2059,7 @@ interactive_expr: LBRACE Ident EQ Bytes SEMI Ident With interactive_expr: LBRACE Ident EQ Bytes SEMI With ## -## Ends in an error in state: 550. +## Ends in an error in state: 549. ## ## nsepseq(field_assignment,SEMI) -> field_assignment SEMI . nsepseq(field_assignment,SEMI) [ RBRACE ] ## nseq(__anonymous_0(field_assignment,SEMI)) -> field_assignment SEMI . seq(__anonymous_0(field_assignment,SEMI)) [ RBRACE ] @@ -2072,7 +2072,7 @@ interactive_expr: LBRACE Ident EQ Bytes SEMI With interactive_expr: LBRACE Ident EQ Bytes With ## -## Ends in an error in state: 549. +## Ends in an error in state: 548. ## ## nsepseq(field_assignment,SEMI) -> field_assignment . [ RBRACE ] ## nsepseq(field_assignment,SEMI) -> field_assignment . SEMI nsepseq(field_assignment,SEMI) [ RBRACE ] @@ -2085,26 +2085,26 @@ interactive_expr: LBRACE Ident EQ Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 523, spurious reduction of production field_assignment -> Ident EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 522, spurious reduction of production field_assignment -> Ident EQ expr ## interactive_expr: LBRACE Ident EQ With ## -## Ends in an error in state: 182. +## Ends in an error in state: 181. ## ## field_assignment -> Ident EQ . expr [ SEMI RBRACE ] ## @@ -2116,7 +2116,7 @@ interactive_expr: LBRACE Ident EQ With interactive_expr: LBRACE Ident WILD ## -## Ends in an error in state: 181. +## Ends in an error in state: 180. ## ## field_assignment -> Ident . EQ expr [ SEMI RBRACE ] ## path -> Ident . [ With ] @@ -2130,7 +2130,7 @@ interactive_expr: LBRACE Ident WILD interactive_expr: LBRACE Ident With Ident DOT Ident With ## -## Ends in an error in state: 535. +## Ends in an error in state: 534. ## ## field_path_assignment -> path . EQ expr [ SEMI RBRACE ] ## @@ -2141,16 +2141,16 @@ interactive_expr: LBRACE Ident With Ident DOT Ident With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 189, spurious reduction of production nsepseq(selection,DOT) -> selection -## In state 192, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT) -## In state 529, spurious reduction of production path -> projection +## In state 188, spurious reduction of production nsepseq(selection,DOT) -> selection +## In state 191, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT) +## In state 528, spurious reduction of production path -> projection ## interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI Ident EQ Bytes SEMI With ## -## Ends in an error in state: 545. +## Ends in an error in state: 544. ## ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment SEMI . nsepseq(field_path_assignment,SEMI) [ RBRACE ] ## seq(__anonymous_0(field_path_assignment,SEMI)) -> field_path_assignment SEMI . seq(__anonymous_0(field_path_assignment,SEMI)) [ RBRACE ] @@ -2163,7 +2163,7 @@ interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI Ident EQ Bytes SEMI With interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI Ident EQ Bytes With ## -## Ends in an error in state: 544. +## Ends in an error in state: 543. ## ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment . [ RBRACE ] ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment . SEMI nsepseq(field_path_assignment,SEMI) [ RBRACE ] @@ -2176,26 +2176,26 @@ interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI Ident EQ Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 537, spurious reduction of production field_path_assignment -> path EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 536, spurious reduction of production field_path_assignment -> path EQ expr ## interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI With ## -## Ends in an error in state: 541. +## Ends in an error in state: 540. ## ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment SEMI . nsepseq(field_path_assignment,SEMI) [ RBRACE ] ## nseq(__anonymous_0(field_path_assignment,SEMI)) -> field_path_assignment SEMI . seq(__anonymous_0(field_path_assignment,SEMI)) [ RBRACE ] @@ -2208,7 +2208,7 @@ interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI With interactive_expr: LBRACE Ident With Ident EQ Bytes With ## -## Ends in an error in state: 540. +## Ends in an error in state: 539. ## ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment . [ RBRACE ] ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment . SEMI nsepseq(field_path_assignment,SEMI) [ RBRACE ] @@ -2221,26 +2221,26 @@ interactive_expr: LBRACE Ident With Ident EQ Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 537, spurious reduction of production field_path_assignment -> path EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 536, spurious reduction of production field_path_assignment -> path EQ expr ## interactive_expr: LBRACE Ident With Ident EQ With ## -## Ends in an error in state: 536. +## Ends in an error in state: 535. ## ## field_path_assignment -> path EQ . expr [ SEMI RBRACE ] ## @@ -2252,7 +2252,7 @@ interactive_expr: LBRACE Ident With Ident EQ With interactive_expr: LBRACE Ident With Ident With ## -## Ends in an error in state: 532. +## Ends in an error in state: 531. ## ## path -> Ident . [ EQ ] ## projection -> Ident . DOT nsepseq(selection,DOT) [ EQ ] @@ -2265,9 +2265,9 @@ interactive_expr: LBRACE Ident With Ident With interactive_expr: LBRACE Ident With With ## -## Ends in an error in state: 531. +## Ends in an error in state: 530. ## -## update_record -> LBRACE path With . sep_or_term_list(field_path_assignment,SEMI) RBRACE [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## update_record -> LBRACE path With . sep_or_term_list(field_path_assignment,SEMI) RBRACE [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## LBRACE path With @@ -2277,10 +2277,10 @@ interactive_expr: LBRACE Ident With With interactive_expr: LBRACE With ## -## Ends in an error in state: 180. +## Ends in an error in state: 179. ## -## record_expr -> LBRACE . sep_or_term_list(field_assignment,SEMI) RBRACE [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] -## update_record -> LBRACE . path With sep_or_term_list(field_path_assignment,SEMI) RBRACE [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## record_expr -> LBRACE . sep_or_term_list(field_assignment,SEMI) RBRACE [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## update_record -> LBRACE . path With sep_or_term_list(field_path_assignment,SEMI) RBRACE [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## LBRACE @@ -2288,62 +2288,9 @@ interactive_expr: LBRACE With -interactive_expr: LBRACKET PERCENT Constr Verbatim With -## -## Ends in an error in state: 560. -## -## code_insert -> LBRACKET PERCENT Constr expr . RBRACKET [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] -## -## The known suffix of the stack is as follows: -## LBRACKET PERCENT Constr expr -## -## WARNING: This example involves spurious reductions. -## This implies that, although the LR(1) items shown above provide an -## accurate view of the past (what has been recognized so far), they -## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## - - - -interactive_expr: LBRACKET PERCENT Constr With -## -## Ends in an error in state: 172. -## -## code_insert -> LBRACKET PERCENT Constr . expr RBRACKET [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] -## -## The known suffix of the stack is as follows: -## LBRACKET PERCENT Constr -## - - - -interactive_expr: LBRACKET PERCENT With -## -## Ends in an error in state: 171. -## -## code_insert -> LBRACKET PERCENT . Constr expr RBRACKET [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] -## -## The known suffix of the stack is as follows: -## LBRACKET PERCENT -## - - - interactive_expr: LBRACKET Verbatim SEMI Verbatim SEMI With ## -## Ends in an error in state: 572. +## Ends in an error in state: 566. ## ## nsepseq(expr,SEMI) -> expr SEMI . nsepseq(expr,SEMI) [ RBRACKET ] ## seq(__anonymous_0(expr,SEMI)) -> expr SEMI . seq(__anonymous_0(expr,SEMI)) [ RBRACKET ] @@ -2356,7 +2303,7 @@ interactive_expr: LBRACKET Verbatim SEMI Verbatim SEMI With interactive_expr: LBRACKET Verbatim SEMI Verbatim With ## -## Ends in an error in state: 571. +## Ends in an error in state: 565. ## ## nsepseq(expr,SEMI) -> expr . [ RBRACKET ] ## nsepseq(expr,SEMI) -> expr . SEMI nsepseq(expr,SEMI) [ RBRACKET ] @@ -2369,25 +2316,25 @@ interactive_expr: LBRACKET Verbatim SEMI Verbatim With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) ## interactive_expr: LBRACKET Verbatim SEMI With ## -## Ends in an error in state: 568. +## Ends in an error in state: 562. ## ## nsepseq(expr,SEMI) -> expr SEMI . nsepseq(expr,SEMI) [ RBRACKET ] ## nseq(__anonymous_0(expr,SEMI)) -> expr SEMI . seq(__anonymous_0(expr,SEMI)) [ RBRACKET ] @@ -2400,7 +2347,7 @@ interactive_expr: LBRACKET Verbatim SEMI With interactive_expr: LBRACKET Verbatim With ## -## Ends in an error in state: 567. +## Ends in an error in state: 561. ## ## nsepseq(expr,SEMI) -> expr . [ RBRACKET ] ## nsepseq(expr,SEMI) -> expr . SEMI nsepseq(expr,SEMI) [ RBRACKET ] @@ -2413,28 +2360,27 @@ interactive_expr: LBRACKET Verbatim With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) ## interactive_expr: LBRACKET With ## -## Ends in an error in state: 170. +## Ends in an error in state: 178. ## -## code_insert -> LBRACKET . PERCENT Constr expr RBRACKET [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] -## list__(expr) -> LBRACKET . option(sep_or_term_list(expr,SEMI)) RBRACKET [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## list__(expr) -> LBRACKET . option(sep_or_term_list(expr,SEMI)) RBRACKET [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## LBRACKET @@ -2444,9 +2390,9 @@ interactive_expr: LBRACKET With interactive_expr: LPAR Verbatim COLON Ident VBAR ## -## Ends in an error in state: 586. +## Ends in an error in state: 575. ## -## par(annot_expr) -> LPAR annot_expr . RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## par(annot_expr) -> LPAR annot_expr . RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## LPAR annot_expr @@ -2458,14 +2404,14 @@ interactive_expr: LPAR Verbatim COLON Ident VBAR ## In state 28, spurious reduction of production cartesian -> core_type ## In state 36, spurious reduction of production fun_type -> cartesian ## In state 27, spurious reduction of production type_expr -> fun_type -## In state 585, spurious reduction of production annot_expr -> expr COLON type_expr +## In state 574, spurious reduction of production annot_expr -> expr COLON type_expr ## interactive_expr: LPAR Verbatim COLON With ## -## Ends in an error in state: 584. +## Ends in an error in state: 573. ## ## annot_expr -> expr COLON . type_expr [ RPAR ] ## @@ -2477,10 +2423,10 @@ interactive_expr: LPAR Verbatim COLON With interactive_expr: LPAR Verbatim With ## -## Ends in an error in state: 582. +## Ends in an error in state: 571. ## ## annot_expr -> expr . COLON type_expr [ RPAR ] -## par(expr) -> LPAR expr . RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## par(expr) -> LPAR expr . RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## LPAR expr @@ -2489,29 +2435,29 @@ interactive_expr: LPAR Verbatim With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) ## interactive_expr: LPAR With ## -## Ends in an error in state: 167. +## Ends in an error in state: 170. ## -## par(annot_expr) -> LPAR . annot_expr RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] -## par(expr) -> LPAR . expr RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] -## unit -> LPAR . RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## par(annot_expr) -> LPAR . annot_expr RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## par(expr) -> LPAR . expr RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## unit -> LPAR . RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## LPAR @@ -2519,9 +2465,50 @@ interactive_expr: LPAR With +interactive_expr: Lang Verbatim With +## +## Ends in an error in state: 585. +## +## code_inj -> Lang expr . RBRACKET [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## +## The known suffix of the stack is as follows: +## Lang expr +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## + + + +interactive_expr: Lang With +## +## Ends in an error in state: 167. +## +## code_inj -> Lang . expr RBRACKET [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## +## The known suffix of the stack is as follows: +## Lang +## + + + interactive_expr: Let Rec WILD EQ Bytes Attr Type ## -## Ends in an error in state: 178. +## Ends in an error in state: 176. ## ## let_expr(expr) -> Let Rec let_binding seq(Attr) . In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2532,15 +2519,15 @@ interactive_expr: Let Rec WILD EQ Bytes Attr Type ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 176, spurious reduction of production seq(Attr) -> -## In state 177, spurious reduction of production seq(Attr) -> Attr seq(Attr) +## In state 174, spurious reduction of production seq(Attr) -> +## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr) ## interactive_expr: Let Rec WILD EQ Bytes In With ## -## Ends in an error in state: 179. +## Ends in an error in state: 177. ## ## let_expr(expr) -> Let Rec let_binding seq(Attr) In . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2552,7 +2539,7 @@ interactive_expr: Let Rec WILD EQ Bytes In With interactive_expr: Let Rec WILD EQ Bytes With ## -## Ends in an error in state: 175. +## Ends in an error in state: 173. ## ## let_expr(expr) -> Let Rec let_binding . seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2563,26 +2550,26 @@ interactive_expr: Let Rec WILD EQ Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 379, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr ## interactive_expr: Let Rec With ## -## Ends in an error in state: 174. +## Ends in an error in state: 172. ## ## let_expr(expr) -> Let Rec . let_binding seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2594,7 +2581,7 @@ interactive_expr: Let Rec With interactive_expr: Let WILD EQ Bytes Attr Type ## -## Ends in an error in state: 558. +## Ends in an error in state: 569. ## ## let_expr(expr) -> Let let_binding seq(Attr) . In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2605,15 +2592,15 @@ interactive_expr: Let WILD EQ Bytes Attr Type ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 176, spurious reduction of production seq(Attr) -> -## In state 177, spurious reduction of production seq(Attr) -> Attr seq(Attr) +## In state 174, spurious reduction of production seq(Attr) -> +## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr) ## interactive_expr: Let WILD EQ Bytes In With ## -## Ends in an error in state: 559. +## Ends in an error in state: 570. ## ## let_expr(expr) -> Let let_binding seq(Attr) In . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2625,7 +2612,7 @@ interactive_expr: Let WILD EQ Bytes In With interactive_expr: Let WILD EQ Bytes With ## -## Ends in an error in state: 557. +## Ends in an error in state: 568. ## ## let_expr(expr) -> Let let_binding . seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2636,26 +2623,26 @@ interactive_expr: Let WILD EQ Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 379, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr ## interactive_expr: Let With ## -## Ends in an error in state: 173. +## Ends in an error in state: 171. ## ## let_expr(expr) -> Let . let_binding seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(expr) -> Let . Rec let_binding seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -2680,7 +2667,7 @@ interactive_expr: MINUS With interactive_expr: Match Verbatim Type ## -## Ends in an error in state: 575. +## Ends in an error in state: 578. ## ## match_expr(base_cond) -> Match expr . With option(VBAR) cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2691,25 +2678,25 @@ interactive_expr: Match Verbatim Type ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) ## interactive_expr: Match Verbatim With LPAR Bytes RPAR With ## -## Ends in an error in state: 250. +## Ends in an error in state: 249. ## ## pattern -> sub_pattern . CONS tail [ ARROW ] ## tuple(sub_pattern) -> sub_pattern . COMMA nsepseq(sub_pattern,COMMA) [ ARROW ] @@ -2722,7 +2709,7 @@ interactive_expr: Match Verbatim With LPAR Bytes RPAR With interactive_expr: Match Verbatim With VBAR Begin ## -## Ends in an error in state: 577. +## Ends in an error in state: 580. ## ## match_expr(base_cond) -> Match expr With option(VBAR) . cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2734,7 +2721,7 @@ interactive_expr: Match Verbatim With VBAR Begin interactive_expr: Match Verbatim With WILD ARROW Bytes VBAR With ## -## Ends in an error in state: 581. +## Ends in an error in state: 584. ## ## cases(base_cond) -> cases(base_cond) VBAR . case_clause(base_cond) [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2746,7 +2733,7 @@ interactive_expr: Match Verbatim With WILD ARROW Bytes VBAR With interactive_expr: Match Verbatim With WILD ARROW Fun WILD ARROW With ## -## Ends in an error in state: 419. +## Ends in an error in state: 418. ## ## fun_expr(base_cond) -> Fun nseq(irrefutable) ARROW . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2758,7 +2745,7 @@ interactive_expr: Match Verbatim With WILD ARROW Fun WILD ARROW With interactive_expr: Match Verbatim With WILD ARROW Fun With ## -## Ends in an error in state: 417. +## Ends in an error in state: 416. ## ## fun_expr(base_cond) -> Fun . nseq(irrefutable) ARROW base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -2770,7 +2757,7 @@ interactive_expr: Match Verbatim With WILD ARROW Fun With interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Fun WILD ARROW With ## -## Ends in an error in state: 292. +## Ends in an error in state: 291. ## ## fun_expr(base_cond) -> Fun nseq(irrefutable) ARROW . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## fun_expr(closed_if) -> Fun nseq(irrefutable) ARROW . closed_if [ Else ] @@ -2783,7 +2770,7 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Fun WILD ARROW interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Fun With ## -## Ends in an error in state: 290. +## Ends in an error in state: 289. ## ## fun_expr(base_cond) -> Fun . nseq(irrefutable) ARROW base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## fun_expr(closed_if) -> Fun . nseq(irrefutable) ARROW closed_if [ Else ] @@ -2796,7 +2783,7 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Fun With interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then If Verbatim Then Verbatim Else With ## -## Ends in an error in state: 367. +## Ends in an error in state: 366. ## ## if_then_else(base_cond) -> If expr Then closed_if Else . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(closed_if) -> If expr Then closed_if Else . closed_if [ Else ] @@ -2809,7 +2796,7 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then If Verbatim Th interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then If Verbatim Then With ## -## Ends in an error in state: 289. +## Ends in an error in state: 288. ## ## if_then(base_cond) -> If expr Then . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(base_cond) -> If expr Then . closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -2823,7 +2810,7 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then If Verbatim Th interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then If Verbatim With ## -## Ends in an error in state: 288. +## Ends in an error in state: 287. ## ## if_then(base_cond) -> If expr . Then base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(base_cond) -> If expr . Then closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -2836,25 +2823,25 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then If Verbatim Wi ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) ## interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then If With ## -## Ends in an error in state: 287. +## Ends in an error in state: 286. ## ## if_then(base_cond) -> If . expr Then base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(base_cond) -> If . expr Then closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -2868,7 +2855,7 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then If With interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let Rec WILD EQ Bytes Attr Type ## -## Ends in an error in state: 285. +## Ends in an error in state: 284. ## ## let_expr(base_cond) -> Let Rec let_binding seq(Attr) . In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(closed_if) -> Let Rec let_binding seq(Attr) . In closed_if [ Else ] @@ -2880,15 +2867,15 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let Rec WILD E ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 176, spurious reduction of production seq(Attr) -> -## In state 177, spurious reduction of production seq(Attr) -> Attr seq(Attr) +## In state 174, spurious reduction of production seq(Attr) -> +## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr) ## interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let Rec WILD EQ Bytes In With ## -## Ends in an error in state: 286. +## Ends in an error in state: 285. ## ## let_expr(base_cond) -> Let Rec let_binding seq(Attr) In . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(closed_if) -> Let Rec let_binding seq(Attr) In . closed_if [ Else ] @@ -2901,7 +2888,7 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let Rec WILD E interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let Rec WILD EQ Bytes With ## -## Ends in an error in state: 284. +## Ends in an error in state: 283. ## ## let_expr(base_cond) -> Let Rec let_binding . seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(closed_if) -> Let Rec let_binding . seq(Attr) In closed_if [ Else ] @@ -2913,26 +2900,26 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let Rec WILD E ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 379, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr ## interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let Rec With ## -## Ends in an error in state: 283. +## Ends in an error in state: 282. ## ## let_expr(base_cond) -> Let Rec . let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(closed_if) -> Let Rec . let_binding seq(Attr) In closed_if [ Else ] @@ -2945,7 +2932,7 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let Rec With interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let WILD EQ Bytes Attr Type ## -## Ends in an error in state: 382. +## Ends in an error in state: 381. ## ## let_expr(base_cond) -> Let let_binding seq(Attr) . In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(closed_if) -> Let let_binding seq(Attr) . In closed_if [ Else ] @@ -2957,15 +2944,15 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let WILD EQ By ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 176, spurious reduction of production seq(Attr) -> -## In state 177, spurious reduction of production seq(Attr) -> Attr seq(Attr) +## In state 174, spurious reduction of production seq(Attr) -> +## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr) ## interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let WILD EQ Bytes In With ## -## Ends in an error in state: 383. +## Ends in an error in state: 382. ## ## let_expr(base_cond) -> Let let_binding seq(Attr) In . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(closed_if) -> Let let_binding seq(Attr) In . closed_if [ Else ] @@ -2978,7 +2965,7 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let WILD EQ By interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let WILD EQ Bytes With ## -## Ends in an error in state: 381. +## Ends in an error in state: 380. ## ## let_expr(base_cond) -> Let let_binding . seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(closed_if) -> Let let_binding . seq(Attr) In closed_if [ Else ] @@ -2990,26 +2977,26 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let WILD EQ By ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 379, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr ## interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let With ## -## Ends in an error in state: 282. +## Ends in an error in state: 281. ## ## let_expr(base_cond) -> Let . let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(base_cond) -> Let . Rec let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -3024,7 +3011,7 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let With interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Verbatim Else With ## -## Ends in an error in state: 416. +## Ends in an error in state: 415. ## ## if_then_else(base_cond) -> If expr Then closed_if Else . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3036,7 +3023,7 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Verbatim Else interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Verbatim End ## -## Ends in an error in state: 302. +## Ends in an error in state: 301. ## ## base_expr(base_cond) -> disj_expr_level . [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## base_expr(closed_if) -> disj_expr_level . [ Else ] @@ -3051,22 +3038,22 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Verbatim End ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level ## interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then With ## -## Ends in an error in state: 267. +## Ends in an error in state: 266. ## ## if_then(base_cond) -> If expr Then . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(base_cond) -> If expr Then . closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -3079,7 +3066,7 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then With interactive_expr: Match Verbatim With WILD ARROW If Verbatim With ## -## Ends in an error in state: 266. +## Ends in an error in state: 265. ## ## if_then(base_cond) -> If expr . Then base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(base_cond) -> If expr . Then closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -3091,25 +3078,25 @@ interactive_expr: Match Verbatim With WILD ARROW If Verbatim With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) ## interactive_expr: Match Verbatim With WILD ARROW If With ## -## Ends in an error in state: 265. +## Ends in an error in state: 264. ## ## if_then(base_cond) -> If . expr Then base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## if_then_else(base_cond) -> If . expr Then closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -3122,7 +3109,7 @@ interactive_expr: Match Verbatim With WILD ARROW If With interactive_expr: Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes Attr Type ## -## Ends in an error in state: 263. +## Ends in an error in state: 262. ## ## let_expr(base_cond) -> Let Rec let_binding seq(Attr) . In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3133,15 +3120,15 @@ interactive_expr: Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes Attr Type ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 176, spurious reduction of production seq(Attr) -> -## In state 177, spurious reduction of production seq(Attr) -> Attr seq(Attr) +## In state 174, spurious reduction of production seq(Attr) -> +## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr) ## interactive_expr: Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes In With ## -## Ends in an error in state: 264. +## Ends in an error in state: 263. ## ## let_expr(base_cond) -> Let Rec let_binding seq(Attr) In . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3153,7 +3140,7 @@ interactive_expr: Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes In With interactive_expr: Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes With ## -## Ends in an error in state: 262. +## Ends in an error in state: 261. ## ## let_expr(base_cond) -> Let Rec let_binding . seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3164,26 +3151,26 @@ interactive_expr: Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 379, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr ## interactive_expr: Match Verbatim With WILD ARROW Let Rec With ## -## Ends in an error in state: 261. +## Ends in an error in state: 260. ## ## let_expr(base_cond) -> Let Rec . let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3195,7 +3182,7 @@ interactive_expr: Match Verbatim With WILD ARROW Let Rec With interactive_expr: Match Verbatim With WILD ARROW Let WILD EQ Bytes Attr Type ## -## Ends in an error in state: 423. +## Ends in an error in state: 422. ## ## let_expr(base_cond) -> Let let_binding seq(Attr) . In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3206,15 +3193,15 @@ interactive_expr: Match Verbatim With WILD ARROW Let WILD EQ Bytes Attr Type ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 176, spurious reduction of production seq(Attr) -> -## In state 177, spurious reduction of production seq(Attr) -> Attr seq(Attr) +## In state 174, spurious reduction of production seq(Attr) -> +## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr) ## interactive_expr: Match Verbatim With WILD ARROW Let WILD EQ Bytes In With ## -## Ends in an error in state: 424. +## Ends in an error in state: 423. ## ## let_expr(base_cond) -> Let let_binding seq(Attr) In . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3226,7 +3213,7 @@ interactive_expr: Match Verbatim With WILD ARROW Let WILD EQ Bytes In With interactive_expr: Match Verbatim With WILD ARROW Let WILD EQ Bytes With ## -## Ends in an error in state: 422. +## Ends in an error in state: 421. ## ## let_expr(base_cond) -> Let let_binding . seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3237,26 +3224,26 @@ interactive_expr: Match Verbatim With WILD ARROW Let WILD EQ Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 379, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr ## interactive_expr: Match Verbatim With WILD ARROW Let With ## -## Ends in an error in state: 260. +## Ends in an error in state: 259. ## ## let_expr(base_cond) -> Let . let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## let_expr(base_cond) -> Let . Rec let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -3269,7 +3256,7 @@ interactive_expr: Match Verbatim With WILD ARROW Let With interactive_expr: Match Verbatim With WILD ARROW Verbatim COMMA Bytes Else ## -## Ends in an error in state: 580. +## Ends in an error in state: 583. ## ## cases(base_cond) -> cases(base_cond) . VBAR case_clause(base_cond) [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## match_expr(base_cond) -> Match expr With option(VBAR) cases(base_cond) . [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] @@ -3281,30 +3268,30 @@ interactive_expr: Match Verbatim With WILD ARROW Verbatim COMMA Bytes Else ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 347, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level -## In state 346, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA) -## In state 223, spurious reduction of production tuple_expr -> tuple(disj_expr_level) -## In state 420, spurious reduction of production base_expr(base_cond) -> tuple_expr -## In state 359, spurious reduction of production base_cond__open(base_cond) -> base_expr(base_cond) -## In state 360, spurious reduction of production base_cond -> base_cond__open(base_cond) -## In state 406, spurious reduction of production case_clause(base_cond) -> pattern ARROW base_cond -## In state 414, spurious reduction of production cases(base_cond) -> case_clause(base_cond) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 346, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level +## In state 345, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA) +## In state 222, spurious reduction of production tuple_expr -> tuple(disj_expr_level) +## In state 419, spurious reduction of production base_expr(base_cond) -> tuple_expr +## In state 358, spurious reduction of production base_cond__open(base_cond) -> base_expr(base_cond) +## In state 359, spurious reduction of production base_cond -> base_cond__open(base_cond) +## In state 405, spurious reduction of production case_clause(base_cond) -> pattern ARROW base_cond +## In state 413, spurious reduction of production cases(base_cond) -> case_clause(base_cond) ## interactive_expr: Match Verbatim With WILD ARROW Verbatim End ## -## Ends in an error in state: 421. +## Ends in an error in state: 420. ## ## base_expr(base_cond) -> disj_expr_level . [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or Let In EOF COMMA COLON BOOL_OR Attr ] @@ -3318,22 +3305,22 @@ interactive_expr: Match Verbatim With WILD ARROW Verbatim End ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level ## interactive_expr: Match Verbatim With WILD ARROW With ## -## Ends in an error in state: 579. +## Ends in an error in state: 582. ## ## case_clause(base_cond) -> pattern ARROW . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3345,7 +3332,7 @@ interactive_expr: Match Verbatim With WILD ARROW With interactive_expr: Match Verbatim With WILD COMMA WILD COMMA With ## -## Ends in an error in state: 255. +## Ends in an error in state: 254. ## ## nsepseq(sub_pattern,COMMA) -> sub_pattern COMMA . nsepseq(sub_pattern,COMMA) [ ARROW ] ## @@ -3357,7 +3344,7 @@ interactive_expr: Match Verbatim With WILD COMMA WILD COMMA With interactive_expr: Match Verbatim With WILD COMMA WILD With ## -## Ends in an error in state: 254. +## Ends in an error in state: 253. ## ## nsepseq(sub_pattern,COMMA) -> sub_pattern . [ ARROW ] ## nsepseq(sub_pattern,COMMA) -> sub_pattern . COMMA nsepseq(sub_pattern,COMMA) [ ARROW ] @@ -3370,7 +3357,7 @@ interactive_expr: Match Verbatim With WILD COMMA WILD With interactive_expr: Match Verbatim With WILD COMMA With ## -## Ends in an error in state: 253. +## Ends in an error in state: 252. ## ## tuple(sub_pattern) -> sub_pattern COMMA . nsepseq(sub_pattern,COMMA) [ ARROW ] ## @@ -3382,7 +3369,7 @@ interactive_expr: Match Verbatim With WILD COMMA With interactive_expr: Match Verbatim With WILD CONS Bytes SEMI ## -## Ends in an error in state: 578. +## Ends in an error in state: 581. ## ## case_clause(base_cond) -> pattern . ARROW base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3394,14 +3381,14 @@ interactive_expr: Match Verbatim With WILD CONS Bytes SEMI ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). ## In state 97, spurious reduction of production tail -> sub_pattern -## In state 252, spurious reduction of production pattern -> sub_pattern CONS tail +## In state 251, spurious reduction of production pattern -> sub_pattern CONS tail ## interactive_expr: Match Verbatim With WILD CONS With ## -## Ends in an error in state: 251. +## Ends in an error in state: 250. ## ## pattern -> sub_pattern CONS . tail [ ARROW ] ## @@ -3413,7 +3400,7 @@ interactive_expr: Match Verbatim With WILD CONS With interactive_expr: Match Verbatim With WILD With ## -## Ends in an error in state: 407. +## Ends in an error in state: 406. ## ## pattern -> core_pattern . [ ARROW ] ## sub_pattern -> core_pattern . [ CONS COMMA ] @@ -3426,7 +3413,7 @@ interactive_expr: Match Verbatim With WILD With interactive_expr: Match Verbatim With With ## -## Ends in an error in state: 576. +## Ends in an error in state: 579. ## ## match_expr(base_cond) -> Match expr With . option(VBAR) cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## @@ -3462,7 +3449,7 @@ interactive_expr: Not With interactive_expr: Verbatim BOOL_AND With ## -## Ends in an error in state: 322. +## Ends in an error in state: 321. ## ## bin_op(conj_expr_level,BOOL_AND,comp_expr_level) -> conj_expr_level BOOL_AND . comp_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or Let In End Else EOF COMMA COLON BOOL_OR BOOL_AND Attr ] ## @@ -3474,7 +3461,7 @@ interactive_expr: Verbatim BOOL_AND With interactive_expr: Verbatim BOOL_OR With ## -## Ends in an error in state: 353. +## Ends in an error in state: 352. ## ## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level BOOL_OR . conj_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or Let In End Else EOF COMMA COLON BOOL_OR Attr ] ## @@ -3486,7 +3473,7 @@ interactive_expr: Verbatim BOOL_OR With interactive_expr: Verbatim CAT With ## -## Ends in an error in state: 305. +## Ends in an error in state: 304. ## ## bin_op(cons_expr_level,CAT,cat_expr_level) -> cons_expr_level CAT . cat_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or NE Let LT LE In GT GE End Else EQ EOF COMMA COLON BOOL_OR BOOL_AND Attr ] ## @@ -3498,7 +3485,7 @@ interactive_expr: Verbatim CAT With interactive_expr: Verbatim COMMA Verbatim COMMA With ## -## Ends in an error in state: 348. +## Ends in an error in state: 347. ## ## nsepseq(disj_expr_level,COMMA) -> disj_expr_level COMMA . nsepseq(disj_expr_level,COMMA) [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In Else EOF COLON Attr ] ## @@ -3510,7 +3497,7 @@ interactive_expr: Verbatim COMMA Verbatim COMMA With interactive_expr: Verbatim COMMA Verbatim End ## -## Ends in an error in state: 347. +## Ends in an error in state: 346. ## ## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or Let In Else EOF COMMA COLON BOOL_OR Attr ] ## bin_op(disj_expr_level,Or,conj_expr_level) -> disj_expr_level . Or conj_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or Let In Else EOF COMMA COLON BOOL_OR Attr ] @@ -3524,22 +3511,22 @@ interactive_expr: Verbatim COMMA Verbatim End ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level ## interactive_expr: Verbatim COMMA With ## -## Ends in an error in state: 345. +## Ends in an error in state: 344. ## ## tuple(disj_expr_level) -> disj_expr_level COMMA . nsepseq(disj_expr_level,COMMA) [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In Else EOF COLON Attr ] ## @@ -3551,7 +3538,7 @@ interactive_expr: Verbatim COMMA With interactive_expr: Verbatim CONS With ## -## Ends in an error in state: 319. +## Ends in an error in state: 318. ## ## bin_op(add_expr_level,CONS,cons_expr_level) -> add_expr_level CONS . cons_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or NE Let LT LE In GT GE End Else EQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ] ## @@ -3563,10 +3550,10 @@ interactive_expr: Verbatim CONS With interactive_expr: Verbatim Constr With ## -## Ends in an error in state: 204. +## Ends in an error in state: 203. ## -## module_field -> Constr . DOT module_fun [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] -## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## module_field -> Constr . DOT module_fun [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] +## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let Lang LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ] ## ## The known suffix of the stack is as follows: ## Constr @@ -3576,7 +3563,7 @@ interactive_expr: Verbatim Constr With interactive_expr: Verbatim EQ With ## -## Ends in an error in state: 334. +## Ends in an error in state: 333. ## ## bin_op(comp_expr_level,EQ,cat_expr_level) -> comp_expr_level EQ . cat_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or NE Let LT LE In GT GE End Else EQ EOF COMMA COLON BOOL_OR BOOL_AND Attr ] ## @@ -3588,7 +3575,7 @@ interactive_expr: Verbatim EQ With interactive_expr: Verbatim GE With ## -## Ends in an error in state: 332. +## Ends in an error in state: 331. ## ## bin_op(comp_expr_level,GE,cat_expr_level) -> comp_expr_level GE . cat_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or NE Let LT LE In GT GE End Else EQ EOF COMMA COLON BOOL_OR BOOL_AND Attr ] ## @@ -3600,7 +3587,7 @@ interactive_expr: Verbatim GE With interactive_expr: Verbatim GT With ## -## Ends in an error in state: 330. +## Ends in an error in state: 329. ## ## bin_op(comp_expr_level,GT,cat_expr_level) -> comp_expr_level GT . cat_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or NE Let LT LE In GT GE End Else EQ EOF COMMA COLON BOOL_OR BOOL_AND Attr ] ## @@ -3612,7 +3599,7 @@ interactive_expr: Verbatim GT With interactive_expr: Verbatim LE With ## -## Ends in an error in state: 328. +## Ends in an error in state: 327. ## ## bin_op(comp_expr_level,LE,cat_expr_level) -> comp_expr_level LE . cat_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or NE Let LT LE In GT GE End Else EQ EOF COMMA COLON BOOL_OR BOOL_AND Attr ] ## @@ -3624,7 +3611,7 @@ interactive_expr: Verbatim LE With interactive_expr: Verbatim LT With ## -## Ends in an error in state: 326. +## Ends in an error in state: 325. ## ## bin_op(comp_expr_level,LT,cat_expr_level) -> comp_expr_level LT . cat_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or NE Let LT LE In GT GE End Else EQ EOF COMMA COLON BOOL_OR BOOL_AND Attr ] ## @@ -3636,7 +3623,7 @@ interactive_expr: Verbatim LT With interactive_expr: Verbatim MINUS C_None WILD ## -## Ends in an error in state: 318. +## Ends in an error in state: 317. ## ## bin_op(add_expr_level,MINUS,mult_expr_level) -> add_expr_level MINUS mult_expr_level . [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE PLUS Or NE MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] ## bin_op(mult_expr_level,Mod,unary_expr_level) -> mult_expr_level . Mod unary_expr_level [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] @@ -3651,7 +3638,7 @@ interactive_expr: Verbatim MINUS C_None WILD interactive_expr: Verbatim MINUS With ## -## Ends in an error in state: 317. +## Ends in an error in state: 316. ## ## bin_op(add_expr_level,MINUS,mult_expr_level) -> add_expr_level MINUS . mult_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE PLUS Or NE MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] ## @@ -3663,7 +3650,7 @@ interactive_expr: Verbatim MINUS With interactive_expr: Verbatim Mod With ## -## Ends in an error in state: 238. +## Ends in an error in state: 237. ## ## bin_op(mult_expr_level,Mod,unary_expr_level) -> mult_expr_level Mod . unary_expr_level [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] ## @@ -3675,7 +3662,7 @@ interactive_expr: Verbatim Mod With interactive_expr: Verbatim NE With ## -## Ends in an error in state: 324. +## Ends in an error in state: 323. ## ## bin_op(comp_expr_level,NE,cat_expr_level) -> comp_expr_level NE . cat_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or NE Let LT LE In GT GE End Else EQ EOF COMMA COLON BOOL_OR BOOL_AND Attr ] ## @@ -3687,7 +3674,7 @@ interactive_expr: Verbatim NE With interactive_expr: Verbatim Or With ## -## Ends in an error in state: 303. +## Ends in an error in state: 302. ## ## bin_op(disj_expr_level,Or,conj_expr_level) -> disj_expr_level Or . conj_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or Let In End Else EOF COMMA COLON BOOL_OR Attr ] ## @@ -3699,7 +3686,7 @@ interactive_expr: Verbatim Or With interactive_expr: Verbatim PLUS C_None WILD ## -## Ends in an error in state: 316. +## Ends in an error in state: 315. ## ## bin_op(add_expr_level,PLUS,mult_expr_level) -> add_expr_level PLUS mult_expr_level . [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE PLUS Or NE MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] ## bin_op(mult_expr_level,Mod,unary_expr_level) -> mult_expr_level . Mod unary_expr_level [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] @@ -3714,7 +3701,7 @@ interactive_expr: Verbatim PLUS C_None WILD interactive_expr: Verbatim PLUS With ## -## Ends in an error in state: 315. +## Ends in an error in state: 314. ## ## bin_op(add_expr_level,PLUS,mult_expr_level) -> add_expr_level PLUS . mult_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE PLUS Or NE MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] ## @@ -3726,7 +3713,7 @@ interactive_expr: Verbatim PLUS With interactive_expr: Verbatim SLASH With ## -## Ends in an error in state: 236. +## Ends in an error in state: 235. ## ## bin_op(mult_expr_level,SLASH,unary_expr_level) -> mult_expr_level SLASH . unary_expr_level [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] ## @@ -3738,7 +3725,7 @@ interactive_expr: Verbatim SLASH With interactive_expr: Verbatim TIMES With ## -## Ends in an error in state: 225. +## Ends in an error in state: 224. ## ## bin_op(mult_expr_level,TIMES,unary_expr_level) -> mult_expr_level TIMES . unary_expr_level [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] ## @@ -3750,7 +3737,7 @@ interactive_expr: Verbatim TIMES With interactive_expr: Verbatim VBAR ## -## Ends in an error in state: 371. +## Ends in an error in state: 370. ## ## base_expr(expr) -> disj_expr_level . [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ] ## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ With Type Then SEMI RPAR RBRACKET RBRACE Or Let In EOF COMMA COLON BOOL_OR Attr ] @@ -3764,22 +3751,22 @@ interactive_expr: Verbatim VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level ## interactive_expr: Verbatim Verbatim Verbatim WILD ## -## Ends in an error in state: 231. +## Ends in an error in state: 230. ## ## seq(core_expr) -> core_expr . seq(core_expr) [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] ## @@ -3791,7 +3778,7 @@ interactive_expr: Verbatim Verbatim Verbatim WILD interactive_expr: Verbatim Verbatim WILD ## -## Ends in an error in state: 229. +## Ends in an error in state: 228. ## ## nseq(core_expr) -> core_expr . seq(core_expr) [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] ## @@ -3803,7 +3790,7 @@ interactive_expr: Verbatim Verbatim WILD interactive_expr: Verbatim WILD ## -## Ends in an error in state: 227. +## Ends in an error in state: 226. ## ## call_expr -> core_expr . nseq(core_expr) [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] ## call_expr_level -> core_expr . [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ] @@ -3816,7 +3803,7 @@ interactive_expr: Verbatim WILD interactive_expr: Verbatim With ## -## Ends in an error in state: 603. +## Ends in an error in state: 602. ## ## interactive_expr -> expr . EOF [ # ] ## @@ -3827,25 +3814,25 @@ interactive_expr: Verbatim With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) ## interactive_expr: With ## -## Ends in an error in state: 601. +## Ends in an error in state: 600. ## ## interactive_expr' -> . interactive_expr [ # ] ## @@ -4291,7 +4278,7 @@ contract: Let LPAR With contract: Let Rec WILD EQ Bytes With ## -## Ends in an error in state: 590. +## Ends in an error in state: 589. ## ## let_declaration -> Let Rec let_binding . seq(Attr) [ Type Let EOF ] ## @@ -4302,19 +4289,19 @@ contract: Let Rec WILD EQ Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 379, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr ## @@ -4333,7 +4320,7 @@ contract: Let Rec With contract: Let WILD COLON Ident VBAR ## -## Ends in an error in state: 378. +## Ends in an error in state: 377. ## ## let_binding -> irrefutable option(type_annotation) . EQ expr [ Type Let In EOF Attr ] ## @@ -4404,7 +4391,7 @@ contract: Let WILD COMMA With contract: Let WILD EQ Bytes Attr With ## -## Ends in an error in state: 176. +## Ends in an error in state: 174. ## ## seq(Attr) -> Attr . seq(Attr) [ Type Let In EOF ] ## @@ -4416,7 +4403,7 @@ contract: Let WILD EQ Bytes Attr With contract: Let WILD EQ Bytes With ## -## Ends in an error in state: 592. +## Ends in an error in state: 591. ## ## let_declaration -> Let let_binding . seq(Attr) [ Type Let EOF ] ## @@ -4427,26 +4414,26 @@ contract: Let WILD EQ Bytes With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 227, spurious reduction of production call_expr_level -> core_expr -## In state 234, spurious reduction of production unary_expr_level -> call_expr_level -## In state 221, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 224, spurious reduction of production add_expr_level -> mult_expr_level -## In state 314, spurious reduction of production cons_expr_level -> add_expr_level -## In state 304, spurious reduction of production cat_expr_level -> cons_expr_level -## In state 336, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 343, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 350, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 371, spurious reduction of production base_expr(expr) -> disj_expr_level -## In state 373, spurious reduction of production base_cond__open(expr) -> base_expr(expr) -## In state 374, spurious reduction of production expr -> base_cond__open(expr) -## In state 380, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr +## In state 226, spurious reduction of production call_expr_level -> core_expr +## In state 233, spurious reduction of production unary_expr_level -> call_expr_level +## In state 220, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 223, spurious reduction of production add_expr_level -> mult_expr_level +## In state 313, spurious reduction of production cons_expr_level -> add_expr_level +## In state 303, spurious reduction of production cat_expr_level -> cons_expr_level +## In state 335, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 342, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 349, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 370, spurious reduction of production base_expr(expr) -> disj_expr_level +## In state 372, spurious reduction of production base_cond__open(expr) -> base_expr(expr) +## In state 373, spurious reduction of production expr -> base_cond__open(expr) +## In state 379, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr ## contract: Let WILD EQ With ## -## Ends in an error in state: 379. +## Ends in an error in state: 378. ## ## let_binding -> irrefutable option(type_annotation) EQ . expr [ Type Let In EOF Attr ] ## @@ -4458,7 +4445,7 @@ contract: Let WILD EQ With contract: Let WILD WILD ## -## Ends in an error in state: 377. +## Ends in an error in state: 376. ## ## let_binding -> irrefutable . option(type_annotation) EQ expr [ Type Let In EOF Attr ] ## @@ -4552,7 +4539,7 @@ contract: Type Ident EQ Constr With contract: Type Ident EQ Ident VBAR ## -## Ends in an error in state: 598. +## Ends in an error in state: 597. ## ## declarations -> declaration . [ EOF ] ## declarations -> declaration . declarations [ EOF ] @@ -4568,7 +4555,7 @@ contract: Type Ident EQ Ident VBAR ## In state 36, spurious reduction of production fun_type -> cartesian ## In state 27, spurious reduction of production type_expr -> fun_type ## In state 61, spurious reduction of production type_decl -> Type Ident EQ type_expr -## In state 594, spurious reduction of production declaration -> type_decl +## In state 593, spurious reduction of production declaration -> type_decl ## diff --git a/src/passes/01-parser/pascaligo/AST.ml b/src/passes/01-parser/pascaligo/AST.ml index b43bf227d..f5ab7c61c 100644 --- a/src/passes/01-parser/pascaligo/AST.ml +++ b/src/passes/01-parser/pascaligo/AST.ml @@ -82,7 +82,6 @@ type rbrace = Region.t (* "}" *) type lbracket = Region.t (* "[" *) type rbracket = Region.t (* "]" *) type cons = Region.t (* "#" *) -type percent = Region.t (* "%" *) type vbar = Region.t (* "|" *) type arrow = Region.t (* "->" *) type assign = Region.t (* ":=" *) @@ -427,12 +426,10 @@ and for_collect = { block : block reg } -and code_insert = { - lbracket : lbracket; - percent : percent; - language : string reg; - code : expr; - rbracket : rbracket; +and code_inj = { + language : string reg reg; + code : expr; + rbracket : rbracket; } and collection = @@ -443,27 +440,27 @@ and collection = (* Expressions *) and expr = - ECase of expr case reg -| ECond of cond_expr reg -| EAnnot of annot_expr par reg -| ELogic of logic_expr -| EArith of arith_expr -| EString of string_expr -| EList of list_expr -| ESet of set_expr -| EConstr of constr_expr -| ERecord of record reg -| EProj of projection reg -| EUpdate of update reg -| EMap of map_expr -| EVar of Lexer.lexeme reg -| ECall of fun_call -| EBytes of (Lexer.lexeme * Hex.t) reg -| EUnit of c_Unit -| ETuple of tuple_expr -| EPar of expr par reg -| EFun of fun_expr reg -| ECodeInsert of code_insert reg + ECase of expr case reg +| ECond of cond_expr reg +| EAnnot of annot_expr par reg +| ELogic of logic_expr +| EArith of arith_expr +| EString of string_expr +| EList of list_expr +| ESet of set_expr +| EConstr of constr_expr +| ERecord of record reg +| EProj of projection reg +| EUpdate of update reg +| EMap of map_expr +| EVar of Lexer.lexeme reg +| ECall of fun_call +| EBytes of (Lexer.lexeme * Hex.t) reg +| EUnit of c_Unit +| ETuple of tuple_expr +| EPar of expr par reg +| EFun of fun_expr reg +| ECodeInj of code_inj reg and annot_expr = expr * colon * type_expr @@ -680,17 +677,17 @@ let rec expr_to_region = function | ERecord e -> record_expr_to_region e | EMap e -> map_expr_to_region e | ETuple e -> tuple_expr_to_region e -| EUpdate {region; _} -| EProj {region; _} -| EVar {region; _} -| ECall {region; _} -| EBytes {region; _} -| EUnit region -| ECase {region;_} -| ECond {region; _} -| EPar {region; _} -| EFun {region; _} -| ECodeInsert {region; _} -> region +| EUpdate {region; _} +| EProj {region; _} +| EVar {region; _} +| ECall {region; _} +| EBytes {region; _} +| EUnit region +| ECase {region;_} +| ECond {region; _} +| EPar {region; _} +| EFun {region; _} +| ECodeInj {region; _} -> region and tuple_expr_to_region {region; _} = region diff --git a/src/passes/01-parser/pascaligo/LexToken.mli b/src/passes/01-parser/pascaligo/LexToken.mli index 86c28c4a3..6c445e4b9 100644 --- a/src/passes/01-parser/pascaligo/LexToken.mli +++ b/src/passes/01-parser/pascaligo/LexToken.mli @@ -44,6 +44,7 @@ type t = | Mutez of (lexeme * Z.t) Region.reg | Ident of lexeme Region.reg | Constr of lexeme Region.reg +| Lang of lexeme Region.reg Region.reg (* Symbols *) @@ -73,7 +74,6 @@ type t = | DOT of Region.t (* "." *) | WILD of Region.t (* "_" *) | CAT of Region.t (* "^" *) -| PERCENT of Region.t (* "%" *) (* Keywords *) @@ -162,6 +162,7 @@ val mk_verbatim : lexeme -> Region.t -> token val mk_bytes : lexeme -> Region.t -> token val mk_constr : lexeme -> Region.t -> token val mk_attr : string -> lexeme -> Region.t -> (token, attr_err) result +val mk_lang : lexeme Region.reg -> Region.t -> token val eof : Region.t -> token (* Predicates *) diff --git a/src/passes/01-parser/pascaligo/LexToken.mll b/src/passes/01-parser/pascaligo/LexToken.mll index 33e0bf937..e037f252e 100644 --- a/src/passes/01-parser/pascaligo/LexToken.mll +++ b/src/passes/01-parser/pascaligo/LexToken.mll @@ -32,6 +32,7 @@ type t = | Mutez of (lexeme * Z.t) Region.reg | Ident of lexeme Region.reg | Constr of lexeme Region.reg +| Lang of lexeme Region.reg Region.reg (* Symbols *) @@ -61,7 +62,6 @@ type t = | DOT of Region.t | WILD of Region.t | CAT of Region.t -| PERCENT of Region.t (* "%" *) (* Keywords *) @@ -126,26 +126,23 @@ let proj_token = function region, sprintf "String %S" value | Verbatim Region.{region; value} -> - region, sprintf "Verbatim {|%s|}" value + region, sprintf "Verbatim %S" value | Bytes Region.{region; value = s,b} -> region, - sprintf "Bytes (\"%s\", \"0x%s\")" s (Hex.show b) + sprintf "Bytes (%S, \"0x%s\")" s (Hex.show b) | Int Region.{region; value = s,n} -> - region, sprintf "Int (\"%s\", %s)" s (Z.to_string n) + region, sprintf "Int (%S, %s)" s (Z.to_string n) | Nat Region.{region; value = s,n} -> - region, sprintf "Nat (\"%s\", %s)" s (Z.to_string n) + region, sprintf "Nat (%S, %s)" s (Z.to_string n) | Mutez Region.{region; value = s,n} -> - region, sprintf "Mutez (\"%s\", %s)" s (Z.to_string n) + region, sprintf "Mutez (%S, %s)" s (Z.to_string n) | Ident Region.{region; value} -> - region, sprintf "Ident \"%s\"" value + region, sprintf "Ident %S" value | Constr Region.{region; value} -> - region, sprintf "Constr \"%s\"" value - -(* -| Attr {header; string={region; value}} -> - region, sprintf "Attr (\"%s\",\"%s\")" header value - *) + region, sprintf "Constr %S" value +| Lang Region.{region; value} -> + region, sprintf "Lang %S" (value.Region.value) (* Symbols *) @@ -175,7 +172,6 @@ let proj_token = function | DOT region -> region, "DOT" | WILD region -> region, "WILD" | CAT region -> region, "CAT" -| PERCENT region -> region, "PERCENT" (* Keywords *) @@ -232,14 +228,15 @@ let proj_token = function let to_lexeme = function (* Literals *) - String s -> String.escaped s.Region.value + String s -> String.escaped s.Region.value | Verbatim v -> String.escaped v.Region.value -| Bytes b -> fst b.Region.value +| Bytes b -> fst b.Region.value | Int i | Nat i -| Mutez i -> fst i.Region.value +| Mutez i -> fst i.Region.value | Ident id -| Constr id -> id.Region.value +| Constr id -> id.Region.value +| Lang lang -> Region.(lang.value.value) (* Symbols *) @@ -269,7 +266,6 @@ let to_lexeme = function | DOT _ -> "." | WILD _ -> "_" | CAT _ -> "^" -| PERCENT _ -> "%" (* Keywords *) @@ -521,7 +517,6 @@ let mk_sym lexeme region = | "-" -> Ok (MINUS region) | "*" -> Ok (TIMES region) | "/" -> Ok (SLASH region) - | "%" -> Ok (PERCENT region) | "<" -> Ok (LT region) | "<=" -> Ok (LE region) | ">" -> Ok (GT region) @@ -552,6 +547,10 @@ type attr_err = Invalid_attribute let mk_attr _ _ _ = Error Invalid_attribute +(* Language injection *) + +let mk_lang lang region = Lang Region.{value=lang; region} + (* Predicates *) let is_string = function String _ -> true | _ -> false @@ -613,7 +612,7 @@ let check_right_context token next_token buffer : unit = else () else if is_bytes token - then if is_string next || is_ident next + then if is_string next || is_ident next then fail region Missing_break else if is_int next then fail region Odd_lengthed_bytes diff --git a/src/passes/01-parser/pascaligo/ParToken.mly b/src/passes/01-parser/pascaligo/ParToken.mly index 1fc3de168..2ed734bb7 100644 --- a/src/passes/01-parser/pascaligo/ParToken.mly +++ b/src/passes/01-parser/pascaligo/ParToken.mly @@ -5,14 +5,15 @@ (* Literals *) -%token String "" -%token Verbatim "" -%token <(LexToken.lexeme * Hex.t) Region.reg> Bytes "" -%token <(LexToken.lexeme * Z.t) Region.reg> Int "" -%token <(LexToken.lexeme * Z.t) Region.reg> Nat "" -%token <(LexToken.lexeme * Z.t) Region.reg> Mutez "" -%token Ident "" -%token Constr "" +%token String "" +%token Verbatim "" +%token <(LexToken.lexeme * Hex.t) Region.reg> Bytes "" +%token <(LexToken.lexeme * Z.t) Region.reg> Int "" +%token <(LexToken.lexeme * Z.t) Region.reg> Nat "" +%token <(LexToken.lexeme * Z.t) Region.reg> Mutez "" +%token Ident "" +%token Constr "" +%token Lang "" (* Symbols *) @@ -42,7 +43,6 @@ %token DOT "." %token WILD "_" %token CAT "^" -%token PERCENT "%" (* Keywords *) diff --git a/src/passes/01-parser/pascaligo/Parser.mly b/src/passes/01-parser/pascaligo/Parser.mly index afd3a80f9..a6043a26c 100644 --- a/src/passes/01-parser/pascaligo/Parser.mly +++ b/src/passes/01-parser/pascaligo/Parser.mly @@ -846,7 +846,7 @@ core_expr: | set_expr { ESet $1 } | record_expr { ERecord $1 } | update_record { EUpdate $1 } -| code_insert_expr { ECodeInsert $1 } +| code_inj { ECodeInj $1 } | "" arguments { let region = cover $1.region $2.region in EConstr (ConstrApp {region; value = $1, Some $2}) @@ -965,15 +965,10 @@ update_record: let value = {record=$1; kwd_with=$2; updates} in {region; value} } -code_insert_expr: - "[" "%" Constr expr "]" { - let region = cover $1 $5 in - let value = { - lbracket =$1; - percent =$2; - language =$3; - code =$4; - rbracket =$5} +code_inj: + "" expr "]" { + let region = cover $1.region $3 + and value = {language=$1; code=$2; rbracket=$3} in {region; value} } field_assignment: diff --git a/src/passes/01-parser/pascaligo/ParserLog.ml b/src/passes/01-parser/pascaligo/ParserLog.ml index 3c5b75fa7..511140ea7 100644 --- a/src/passes/01-parser/pascaligo/ParserLog.ml +++ b/src/passes/01-parser/pascaligo/ParserLog.ml @@ -76,26 +76,32 @@ let print_token state region lexeme = let print_var state {region; value} = let line = - sprintf "%s: Ident \"%s\"\n" + sprintf "%s: Ident %S\n" (compact state region) value in Buffer.add_string state#buffer line let print_constr state {region; value} = let line = - sprintf "%s: Constr \"%s\"\n" + sprintf "%s: Constr %S\n" (compact state region) value in Buffer.add_string state#buffer line let print_string state {region; value} = let line = - sprintf "%s: String %s\n" + sprintf "%s: String %S\n" + (compact state region) value + in Buffer.add_string state#buffer line + +let print_verbatim state {region; value} = + let line = + sprintf "%s: Verbatim %S\n" (compact state region) value in Buffer.add_string state#buffer line let print_bytes state {region; value} = let lexeme, abstract = value in let line = - sprintf "%s: Bytes (\"%s\", \"0x%s\")\n" + sprintf "%s: Bytes (%S, \"0x%s\")\n" (compact state region) lexeme (Hex.show abstract) in Buffer.add_string state#buffer line @@ -103,7 +109,7 @@ let print_bytes state {region; value} = let print_int state {region; value} = let lexeme, abstract = value in let line = - sprintf "%s: Int (\"%s\", %s)\n" + sprintf "%s: Int (%S, %s)\n" (compact state region) lexeme (Z.to_string abstract) in Buffer.add_string state#buffer line @@ -111,7 +117,7 @@ let print_int state {region; value} = let print_nat state {region; value} = let lexeme, abstract = value in let line = - sprintf "%s: Nat (\"%s\", %s)\n" + sprintf "%s: Nat (%S, %s)\n" (compact state region) lexeme (Z.to_string abstract) in Buffer.add_string state#buffer line @@ -236,13 +242,15 @@ and print_fun_expr state {value; _} = print_token state kwd_is "is"; print_expr state return -and print_code_insert state {value; _} = - let {lbracket;percent;language;code;rbracket} : code_insert = value in - print_token state lbracket "["; - print_token state percent "%"; - print_string state language; - print_expr state code; - print_token state rbracket "]" +and print_code_inj state {value; _} = + let {language; code; rbracket} = value in + let {value=lang; region} = language in + let header_stop = region#start#shift_bytes 1 in + let header_reg = Region.make ~start:region#start ~stop:header_stop in + print_token state header_reg "[%"; + print_string state lang; + print_expr state code; + print_token state rbracket "]" and print_parameters state {value; _} = let {lpar; inside; rpar} = value in @@ -466,7 +474,7 @@ and print_expr state = function | ETuple e -> print_tuple_expr state e | EPar e -> print_par_expr state e | EFun e -> print_fun_expr state e -| ECodeInsert e -> print_code_insert state e +| ECodeInj e -> print_code_inj state e and print_annot_expr state node = let {inside; _} : annot_expr par = node in @@ -608,7 +616,7 @@ and print_string_expr state = function | String s -> print_string state s | Verbatim v -> - print_string state v + print_verbatim state v and print_list_expr state = function ECons {value = {arg1; op; arg2}; _} -> @@ -1020,16 +1028,16 @@ and pp_fun_expr state (expr: fun_expr) = pp_expr (state#pad 1 0) expr.return in () -and pp_code_insert state (rc : code_insert) = +and pp_code_inj state rc = let () = - let state = state#pad 3 0 in + let state = state#pad 2 0 in pp_node state ""; - pp_string (state#pad 1 0) rc.language in + pp_string (state#pad 1 0) rc.language.value in let () = - let state = state#pad 3 1 in + let state = state#pad 2 1 in pp_node state ""; - pp_expr (state#pad 1 0) rc.code in - () + pp_expr (state#pad 1 0) rc.code + in () and pp_parameters state {value; _} = let params = Utils.nsepseq_to_list value.inside in @@ -1510,9 +1518,9 @@ and pp_expr state = function | EFun {value; region} -> pp_loc_node state "EFun" region; pp_fun_expr state value; -| ECodeInsert {value; region} -> - pp_loc_node state "ECodeInsert" region; - pp_code_insert state value; +| ECodeInj {value; region} -> + pp_loc_node state "ECodeInj" region; + pp_code_inj state value; and pp_list_expr state = function ECons {value; region} -> diff --git a/src/passes/01-parser/pascaligo/Pretty.ml b/src/passes/01-parser/pascaligo/Pretty.ml index 59a921587..52e1b1b7a 100644 --- a/src/passes/01-parser/pascaligo/Pretty.ml +++ b/src/passes/01-parser/pascaligo/Pretty.ml @@ -377,7 +377,7 @@ and pp_expr = function | ETuple e -> pp_tuple_expr e | EPar e -> pp_par pp_expr e | EFun e -> pp_fun_expr e -| ECodeInsert e -> pp_code_insert e +| ECodeInj e -> pp_code_inj e and pp_annot_expr {value; _} = let expr, _, type_expr = value.inside in @@ -492,11 +492,11 @@ and pp_update {value; _} = and record = pp_path record in record ^^ string " with" ^^ nest 2 (break 1 ^^ updates) -and pp_code_insert {value; _} = +and pp_code_inj {value; _} = let {language; code; _} = value in - let language = pp_string language - and code = pp_expr code in - string "[%" ^^ language ^^ string " " ^^ code ^^ string " ]" + let language = pp_string language.value + and code = pp_expr code in + string "[%" ^^ language ^/^ code ^^ string "]" and pp_field_path_assign {value; _} = let {field_path; field_expr; _} = value in diff --git a/src/passes/01-parser/pascaligo/error.messages.checked-in b/src/passes/01-parser/pascaligo/error.messages.checked-in index e72d8ffee..cdc032911 100644 --- a/src/passes/01-parser/pascaligo/error.messages.checked-in +++ b/src/passes/01-parser/pascaligo/error.messages.checked-in @@ -1,6 +1,6 @@ interactive_expr: BigMap LBRACKET Verbatim ARROW Bytes End ## -## Ends in an error in state: 150. +## Ends in an error in state: 148. ## ## injection(BigMap,binding) -> BigMap LBRACKET sep_or_term_list(binding,SEMI) . RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -11,28 +11,27 @@ interactive_expr: BigMap LBRACKET Verbatim ARROW Bytes End ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 252, spurious reduction of production binding -> expr ARROW expr -## In state 253, spurious reduction of production nsepseq(binding,SEMI) -> binding -## In state 249, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 250, spurious reduction of production binding -> expr ARROW expr +## In state 251, spurious reduction of production nsepseq(binding,SEMI) -> binding +## In state 247, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI) ## interactive_expr: BigMap LBRACKET With ## -## Ends in an error in state: 143. +## Ends in an error in state: 141. ## -## code_insert_expr -> LBRACKET . PERCENT Constr expr RBRACKET [ TIMES SLASH PLUS Or NE Mod MINUS LT LE GT GE EQ Contains CONS CAT And ARROW ] ## injection(BigMap,binding) -> BigMap LBRACKET . sep_or_term_list(binding,SEMI) RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## injection(BigMap,binding) -> BigMap LBRACKET . RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -44,7 +43,7 @@ interactive_expr: BigMap LBRACKET With interactive_expr: BigMap Verbatim ARROW Bytes RBRACKET ## -## Ends in an error in state: 261. +## Ends in an error in state: 259. ## ## injection(BigMap,binding) -> BigMap sep_or_term_list(binding,SEMI) . End [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -55,26 +54,26 @@ interactive_expr: BigMap Verbatim ARROW Bytes RBRACKET ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 252, spurious reduction of production binding -> expr ARROW expr -## In state 253, spurious reduction of production nsepseq(binding,SEMI) -> binding -## In state 249, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 250, spurious reduction of production binding -> expr ARROW expr +## In state 251, spurious reduction of production nsepseq(binding,SEMI) -> binding +## In state 247, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI) ## interactive_expr: BigMap With ## -## Ends in an error in state: 142. +## Ends in an error in state: 140. ## ## injection(BigMap,binding) -> BigMap . sep_or_term_list(binding,SEMI) End [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## injection(BigMap,binding) -> BigMap . End [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] @@ -89,7 +88,7 @@ interactive_expr: BigMap With interactive_expr: C_Some With ## -## Ends in an error in state: 138. +## Ends in an error in state: 136. ## ## core_expr -> C_Some . arguments [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -101,7 +100,7 @@ interactive_expr: C_Some With interactive_expr: Case Verbatim Of C_Some LPAR WILD With ## -## Ends in an error in state: 289. +## Ends in an error in state: 287. ## ## par(core_pattern) -> LPAR core_pattern . RPAR [ SEMI RPAR RBRACKET End CONS COMMA ARROW ] ## @@ -113,7 +112,7 @@ interactive_expr: Case Verbatim Of C_Some LPAR WILD With interactive_expr: Case Verbatim Of C_Some LPAR With ## -## Ends in an error in state: 281. +## Ends in an error in state: 279. ## ## par(core_pattern) -> LPAR . core_pattern RPAR [ SEMI RPAR RBRACKET End CONS COMMA ARROW ] ## @@ -125,7 +124,7 @@ interactive_expr: Case Verbatim Of C_Some LPAR With interactive_expr: Case Verbatim Of C_Some With ## -## Ends in an error in state: 280. +## Ends in an error in state: 278. ## ## constr_pattern -> C_Some . par(core_pattern) [ SEMI RPAR RBRACKET End CONS COMMA ARROW ] ## @@ -137,7 +136,7 @@ interactive_expr: Case Verbatim Of C_Some With interactive_expr: Case Verbatim Of Constr LPAR WILD With ## -## Ends in an error in state: 295. +## Ends in an error in state: 293. ## ## nsepseq(core_pattern,COMMA) -> core_pattern . [ RPAR ] ## nsepseq(core_pattern,COMMA) -> core_pattern . COMMA nsepseq(core_pattern,COMMA) [ RPAR ] @@ -150,7 +149,7 @@ interactive_expr: Case Verbatim Of Constr LPAR WILD With interactive_expr: Case Verbatim Of Constr LPAR With ## -## Ends in an error in state: 279. +## Ends in an error in state: 277. ## ## par(nsepseq(core_pattern,COMMA)) -> LPAR . nsepseq(core_pattern,COMMA) RPAR [ SEMI RPAR RBRACKET End CONS COMMA ARROW ] ## @@ -162,7 +161,7 @@ interactive_expr: Case Verbatim Of Constr LPAR With interactive_expr: Case Verbatim Of Constr With ## -## Ends in an error in state: 278. +## Ends in an error in state: 276. ## ## constr_pattern -> Constr . tuple_pattern [ SEMI RPAR RBRACKET End CONS COMMA ARROW ] ## constr_pattern -> Constr . [ SEMI RPAR RBRACKET End CONS COMMA ARROW ] @@ -175,7 +174,7 @@ interactive_expr: Case Verbatim Of Constr With interactive_expr: Case Verbatim Of LBRACKET VBAR Block ## -## Ends in an error in state: 266. +## Ends in an error in state: 264. ## ## case(expr) -> Case expr Of LBRACKET option(VBAR) . cases(expr) RBRACKET [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## @@ -187,7 +186,7 @@ interactive_expr: Case Verbatim Of LBRACKET VBAR Block interactive_expr: Case Verbatim Of LBRACKET WILD ARROW Bytes End ## -## Ends in an error in state: 330. +## Ends in an error in state: 328. ## ## case(expr) -> Case expr Of LBRACKET option(VBAR) cases(expr) . RBRACKET [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## @@ -198,26 +197,26 @@ interactive_expr: Case Verbatim Of LBRACKET WILD ARROW Bytes End ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 328, spurious reduction of production case_clause(expr) -> pattern ARROW expr -## In state 332, spurious reduction of production nsepseq(case_clause(expr),VBAR) -> case_clause(expr) -## In state 329, spurious reduction of production cases(expr) -> nsepseq(case_clause(expr),VBAR) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 326, spurious reduction of production case_clause(expr) -> pattern ARROW expr +## In state 330, spurious reduction of production nsepseq(case_clause(expr),VBAR) -> case_clause(expr) +## In state 327, spurious reduction of production cases(expr) -> nsepseq(case_clause(expr),VBAR) ## interactive_expr: Case Verbatim Of LBRACKET With ## -## Ends in an error in state: 265. +## Ends in an error in state: 263. ## ## case(expr) -> Case expr Of LBRACKET . option(VBAR) cases(expr) RBRACKET [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## @@ -229,7 +228,7 @@ interactive_expr: Case Verbatim Of LBRACKET With interactive_expr: Case Verbatim Of LPAR WILD COMMA With ## -## Ends in an error in state: 296. +## Ends in an error in state: 294. ## ## nsepseq(core_pattern,COMMA) -> core_pattern COMMA . nsepseq(core_pattern,COMMA) [ RPAR ] ## @@ -241,7 +240,7 @@ interactive_expr: Case Verbatim Of LPAR WILD COMMA With interactive_expr: Case Verbatim Of LPAR WILD CONS Bytes ARROW ## -## Ends in an error in state: 308. +## Ends in an error in state: 306. ## ## par(cons_pattern) -> LPAR cons_pattern . RPAR [ SEMI RPAR RBRACKET End CONS COMMA ARROW ] ## @@ -252,15 +251,15 @@ interactive_expr: Case Verbatim Of LPAR WILD CONS Bytes ARROW ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 302, spurious reduction of production pattern -> core_pattern -## In state 301, spurious reduction of production cons_pattern -> core_pattern CONS pattern +## In state 300, spurious reduction of production pattern -> core_pattern +## In state 299, spurious reduction of production cons_pattern -> core_pattern CONS pattern ## interactive_expr: Case Verbatim Of LPAR WILD CONS With ## -## Ends in an error in state: 300. +## Ends in an error in state: 298. ## ## cons_pattern -> core_pattern CONS . pattern [ RPAR ] ## @@ -272,7 +271,7 @@ interactive_expr: Case Verbatim Of LPAR WILD CONS With interactive_expr: Case Verbatim Of LPAR WILD With ## -## Ends in an error in state: 299. +## Ends in an error in state: 297. ## ## cons_pattern -> core_pattern . CONS pattern [ RPAR ] ## nsepseq(core_pattern,COMMA) -> core_pattern . [ RPAR ] @@ -286,7 +285,7 @@ interactive_expr: Case Verbatim Of LPAR WILD With interactive_expr: Case Verbatim Of LPAR With ## -## Ends in an error in state: 274. +## Ends in an error in state: 272. ## ## par(cons_pattern) -> LPAR . cons_pattern RPAR [ SEMI RPAR RBRACKET End CONS COMMA ARROW ] ## par(nsepseq(core_pattern,COMMA)) -> LPAR . nsepseq(core_pattern,COMMA) RPAR [ SEMI RPAR RBRACKET End CONS COMMA ARROW ] @@ -299,7 +298,7 @@ interactive_expr: Case Verbatim Of LPAR With interactive_expr: Case Verbatim Of List LBRACKET WILD End ## -## Ends in an error in state: 312. +## Ends in an error in state: 310. ## ## injection(List,core_pattern) -> List LBRACKET sep_or_term_list(core_pattern,SEMI) . RBRACKET [ SEMI RPAR RBRACKET End CONS COMMA ARROW ] ## @@ -310,15 +309,15 @@ interactive_expr: Case Verbatim Of List LBRACKET WILD End ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 316, spurious reduction of production nsepseq(core_pattern,SEMI) -> core_pattern -## In state 315, spurious reduction of production sep_or_term_list(core_pattern,SEMI) -> nsepseq(core_pattern,SEMI) +## In state 314, spurious reduction of production nsepseq(core_pattern,SEMI) -> core_pattern +## In state 313, spurious reduction of production sep_or_term_list(core_pattern,SEMI) -> nsepseq(core_pattern,SEMI) ## interactive_expr: Case Verbatim Of List LBRACKET With ## -## Ends in an error in state: 310. +## Ends in an error in state: 308. ## ## injection(List,core_pattern) -> List LBRACKET . sep_or_term_list(core_pattern,SEMI) RBRACKET [ SEMI RPAR RBRACKET End CONS COMMA ARROW ] ## injection(List,core_pattern) -> List LBRACKET . RBRACKET [ SEMI RPAR RBRACKET End CONS COMMA ARROW ] @@ -331,7 +330,7 @@ interactive_expr: Case Verbatim Of List LBRACKET With interactive_expr: Case Verbatim Of List WILD RBRACKET ## -## Ends in an error in state: 324. +## Ends in an error in state: 322. ## ## injection(List,core_pattern) -> List sep_or_term_list(core_pattern,SEMI) . End [ SEMI RPAR RBRACKET End CONS COMMA ARROW ] ## @@ -342,15 +341,15 @@ interactive_expr: Case Verbatim Of List WILD RBRACKET ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 316, spurious reduction of production nsepseq(core_pattern,SEMI) -> core_pattern -## In state 315, spurious reduction of production sep_or_term_list(core_pattern,SEMI) -> nsepseq(core_pattern,SEMI) +## In state 314, spurious reduction of production nsepseq(core_pattern,SEMI) -> core_pattern +## In state 313, spurious reduction of production sep_or_term_list(core_pattern,SEMI) -> nsepseq(core_pattern,SEMI) ## interactive_expr: Case Verbatim Of List WILD SEMI WILD SEMI With ## -## Ends in an error in state: 321. +## Ends in an error in state: 319. ## ## nsepseq(core_pattern,SEMI) -> core_pattern SEMI . nsepseq(core_pattern,SEMI) [ RBRACKET End ] ## seq(__anonymous_0(core_pattern,SEMI)) -> core_pattern SEMI . seq(__anonymous_0(core_pattern,SEMI)) [ RBRACKET End ] @@ -363,7 +362,7 @@ interactive_expr: Case Verbatim Of List WILD SEMI WILD SEMI With interactive_expr: Case Verbatim Of List WILD SEMI WILD With ## -## Ends in an error in state: 320. +## Ends in an error in state: 318. ## ## nsepseq(core_pattern,SEMI) -> core_pattern . [ RBRACKET End ] ## nsepseq(core_pattern,SEMI) -> core_pattern . SEMI nsepseq(core_pattern,SEMI) [ RBRACKET End ] @@ -377,7 +376,7 @@ interactive_expr: Case Verbatim Of List WILD SEMI WILD With interactive_expr: Case Verbatim Of List WILD SEMI With ## -## Ends in an error in state: 317. +## Ends in an error in state: 315. ## ## nsepseq(core_pattern,SEMI) -> core_pattern SEMI . nsepseq(core_pattern,SEMI) [ RBRACKET End ] ## nseq(__anonymous_0(core_pattern,SEMI)) -> core_pattern SEMI . seq(__anonymous_0(core_pattern,SEMI)) [ RBRACKET End ] @@ -390,7 +389,7 @@ interactive_expr: Case Verbatim Of List WILD SEMI With interactive_expr: Case Verbatim Of List WILD With ## -## Ends in an error in state: 316. +## Ends in an error in state: 314. ## ## nsepseq(core_pattern,SEMI) -> core_pattern . [ RBRACKET End ] ## nsepseq(core_pattern,SEMI) -> core_pattern . SEMI nsepseq(core_pattern,SEMI) [ RBRACKET End ] @@ -404,7 +403,7 @@ interactive_expr: Case Verbatim Of List WILD With interactive_expr: Case Verbatim Of List With ## -## Ends in an error in state: 273. +## Ends in an error in state: 271. ## ## injection(List,core_pattern) -> List . sep_or_term_list(core_pattern,SEMI) End [ SEMI RPAR RBRACKET End CONS COMMA ARROW ] ## injection(List,core_pattern) -> List . End [ SEMI RPAR RBRACKET End CONS COMMA ARROW ] @@ -419,7 +418,7 @@ interactive_expr: Case Verbatim Of List With interactive_expr: Case Verbatim Of VBAR Block ## -## Ends in an error in state: 335. +## Ends in an error in state: 333. ## ## case(expr) -> Case expr Of option(VBAR) . cases(expr) End [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## @@ -431,7 +430,7 @@ interactive_expr: Case Verbatim Of VBAR Block interactive_expr: Case Verbatim Of WILD ARROW Bytes RBRACKET ## -## Ends in an error in state: 336. +## Ends in an error in state: 334. ## ## case(expr) -> Case expr Of option(VBAR) cases(expr) . End [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## @@ -442,26 +441,26 @@ interactive_expr: Case Verbatim Of WILD ARROW Bytes RBRACKET ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 328, spurious reduction of production case_clause(expr) -> pattern ARROW expr -## In state 332, spurious reduction of production nsepseq(case_clause(expr),VBAR) -> case_clause(expr) -## In state 329, spurious reduction of production cases(expr) -> nsepseq(case_clause(expr),VBAR) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 326, spurious reduction of production case_clause(expr) -> pattern ARROW expr +## In state 330, spurious reduction of production nsepseq(case_clause(expr),VBAR) -> case_clause(expr) +## In state 327, spurious reduction of production cases(expr) -> nsepseq(case_clause(expr),VBAR) ## interactive_expr: Case Verbatim Of WILD ARROW Bytes Type ## -## Ends in an error in state: 332. +## Ends in an error in state: 330. ## ## nsepseq(case_clause(expr),VBAR) -> case_clause(expr) . [ RBRACKET End ] ## nsepseq(case_clause(expr),VBAR) -> case_clause(expr) . VBAR nsepseq(case_clause(expr),VBAR) [ RBRACKET End ] @@ -473,24 +472,24 @@ interactive_expr: Case Verbatim Of WILD ARROW Bytes Type ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 328, spurious reduction of production case_clause(expr) -> pattern ARROW expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 326, spurious reduction of production case_clause(expr) -> pattern ARROW expr ## interactive_expr: Case Verbatim Of WILD ARROW Bytes VBAR With ## -## Ends in an error in state: 333. +## Ends in an error in state: 331. ## ## nsepseq(case_clause(expr),VBAR) -> case_clause(expr) VBAR . nsepseq(case_clause(expr),VBAR) [ RBRACKET End ] ## @@ -502,7 +501,7 @@ interactive_expr: Case Verbatim Of WILD ARROW Bytes VBAR With interactive_expr: Case Verbatim Of WILD ARROW With ## -## Ends in an error in state: 327. +## Ends in an error in state: 325. ## ## case_clause(expr) -> pattern ARROW . expr [ VBAR RBRACKET End ] ## @@ -514,7 +513,7 @@ interactive_expr: Case Verbatim Of WILD ARROW With interactive_expr: Case Verbatim Of WILD CONS WILD CONS With ## -## Ends in an error in state: 306. +## Ends in an error in state: 304. ## ## nsepseq(core_pattern,CONS) -> core_pattern CONS . nsepseq(core_pattern,CONS) [ RPAR ARROW ] ## @@ -526,7 +525,7 @@ interactive_expr: Case Verbatim Of WILD CONS WILD CONS With interactive_expr: Case Verbatim Of WILD CONS WILD With ## -## Ends in an error in state: 305. +## Ends in an error in state: 303. ## ## nsepseq(core_pattern,CONS) -> core_pattern . [ RPAR ARROW ] ## nsepseq(core_pattern,CONS) -> core_pattern . CONS nsepseq(core_pattern,CONS) [ RPAR ARROW ] @@ -539,7 +538,7 @@ interactive_expr: Case Verbatim Of WILD CONS WILD With interactive_expr: Case Verbatim Of WILD CONS With ## -## Ends in an error in state: 303. +## Ends in an error in state: 301. ## ## pattern -> core_pattern CONS . nsepseq(core_pattern,CONS) [ RPAR ARROW ] ## @@ -551,7 +550,7 @@ interactive_expr: Case Verbatim Of WILD CONS With interactive_expr: Case Verbatim Of WILD RPAR ## -## Ends in an error in state: 326. +## Ends in an error in state: 324. ## ## case_clause(expr) -> pattern . ARROW expr [ VBAR RBRACKET End ] ## @@ -562,14 +561,14 @@ interactive_expr: Case Verbatim Of WILD RPAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 302, spurious reduction of production pattern -> core_pattern +## In state 300, spurious reduction of production pattern -> core_pattern ## interactive_expr: Case Verbatim Of WILD With ## -## Ends in an error in state: 302. +## Ends in an error in state: 300. ## ## pattern -> core_pattern . [ RPAR ARROW ] ## pattern -> core_pattern . CONS nsepseq(core_pattern,CONS) [ RPAR ARROW ] @@ -582,7 +581,7 @@ interactive_expr: Case Verbatim Of WILD With interactive_expr: Case Verbatim Of With ## -## Ends in an error in state: 264. +## Ends in an error in state: 262. ## ## case(expr) -> Case expr Of . option(VBAR) cases(expr) End [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## case(expr) -> Case expr Of . LBRACKET option(VBAR) cases(expr) RBRACKET [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] @@ -595,7 +594,7 @@ interactive_expr: Case Verbatim Of With interactive_expr: Case Verbatim VBAR ## -## Ends in an error in state: 263. +## Ends in an error in state: 261. ## ## case(expr) -> Case expr . Of option(VBAR) cases(expr) End [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## case(expr) -> Case expr . Of LBRACKET option(VBAR) cases(expr) RBRACKET [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] @@ -607,23 +606,23 @@ interactive_expr: Case Verbatim VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr ## interactive_expr: Case With ## -## Ends in an error in state: 137. +## Ends in an error in state: 135. ## ## case(expr) -> Case . expr Of option(VBAR) cases(expr) End [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## case(expr) -> Case . expr Of LBRACKET option(VBAR) cases(expr) RBRACKET [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] @@ -636,7 +635,7 @@ interactive_expr: Case With interactive_expr: Constr DOT And With ## -## Ends in an error in state: 178. +## Ends in an error in state: 176. ## ## core_expr -> module_field . [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## fun_call -> module_field . arguments [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] @@ -649,7 +648,7 @@ interactive_expr: Constr DOT And With interactive_expr: Constr DOT Ident DOT With ## -## Ends in an error in state: 126. +## Ends in an error in state: 124. ## ## projection -> Constr DOT Ident DOT . nsepseq(selection,DOT) [ With VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ] ## @@ -661,7 +660,7 @@ interactive_expr: Constr DOT Ident DOT With interactive_expr: Constr DOT Ident With ## -## Ends in an error in state: 125. +## Ends in an error in state: 123. ## ## module_fun -> Ident . [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## projection -> Constr DOT Ident . DOT nsepseq(selection,DOT) [ With VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ] @@ -674,7 +673,7 @@ interactive_expr: Constr DOT Ident With interactive_expr: Constr DOT With ## -## Ends in an error in state: 121. +## Ends in an error in state: 119. ## ## module_field -> Constr DOT . module_fun [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## projection -> Constr DOT . Ident DOT nsepseq(selection,DOT) [ With VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ] @@ -687,7 +686,7 @@ interactive_expr: Constr DOT With interactive_expr: Constr With ## -## Ends in an error in state: 120. +## Ends in an error in state: 118. ## ## core_expr -> Constr . arguments [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## core_expr -> Constr . [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] @@ -702,7 +701,7 @@ interactive_expr: Constr With interactive_expr: Function LPAR Const Ident COLON Ident RPAR COLON String Is With ## -## Ends in an error in state: 118. +## Ends in an error in state: 116. ## ## fun_expr -> Function parameters COLON type_expr Is . expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## @@ -714,7 +713,7 @@ interactive_expr: Function LPAR Const Ident COLON Ident RPAR COLON String Is Wit interactive_expr: Function LPAR Const Ident COLON Ident RPAR COLON String VBAR ## -## Ends in an error in state: 117. +## Ends in an error in state: 115. ## ## fun_expr -> Function parameters COLON type_expr . Is expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## @@ -734,7 +733,7 @@ interactive_expr: Function LPAR Const Ident COLON Ident RPAR COLON String VBAR interactive_expr: Function LPAR Const Ident COLON Ident RPAR COLON With ## -## Ends in an error in state: 116. +## Ends in an error in state: 114. ## ## fun_expr -> Function parameters COLON . type_expr Is expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## @@ -746,7 +745,7 @@ interactive_expr: Function LPAR Const Ident COLON Ident RPAR COLON With interactive_expr: Function LPAR Const Ident COLON Ident RPAR With ## -## Ends in an error in state: 115. +## Ends in an error in state: 113. ## ## fun_expr -> Function parameters . COLON type_expr Is expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## @@ -865,7 +864,7 @@ interactive_expr: Function LPAR With interactive_expr: Function With ## -## Ends in an error in state: 114. +## Ends in an error in state: 112. ## ## fun_expr -> Function . parameters COLON type_expr Is expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## @@ -877,7 +876,7 @@ interactive_expr: Function With interactive_expr: Ident DOT Ident ASS ## -## Ends in an error in state: 153. +## Ends in an error in state: 151. ## ## fun_call_or_par_or_projection -> projection . option(arguments) [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## path -> projection . [ With LBRACKET ] @@ -889,15 +888,15 @@ interactive_expr: Ident DOT Ident ASS ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 129, spurious reduction of production nsepseq(selection,DOT) -> selection -## In state 162, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT) +## In state 127, spurious reduction of production nsepseq(selection,DOT) -> selection +## In state 160, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT) ## interactive_expr: Ident DOT Int DOT With ## -## Ends in an error in state: 130. +## Ends in an error in state: 128. ## ## nsepseq(selection,DOT) -> selection DOT . nsepseq(selection,DOT) [ With VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ] ## @@ -909,7 +908,7 @@ interactive_expr: Ident DOT Int DOT With interactive_expr: Ident DOT Int While ## -## Ends in an error in state: 129. +## Ends in an error in state: 127. ## ## nsepseq(selection,DOT) -> selection . [ With VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ] ## nsepseq(selection,DOT) -> selection . DOT nsepseq(selection,DOT) [ With VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ] @@ -922,7 +921,7 @@ interactive_expr: Ident DOT Int While interactive_expr: Ident DOT With ## -## Ends in an error in state: 161. +## Ends in an error in state: 159. ## ## projection -> Ident DOT . nsepseq(selection,DOT) [ With VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ] ## @@ -934,7 +933,7 @@ interactive_expr: Ident DOT With interactive_expr: Ident LBRACKET Verbatim VBAR ## -## Ends in an error in state: 245. +## Ends in an error in state: 243. ## ## brackets(expr) -> LBRACKET expr . RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ] ## @@ -945,23 +944,23 @@ interactive_expr: Ident LBRACKET Verbatim VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr ## interactive_expr: Ident LBRACKET With ## -## Ends in an error in state: 244. +## Ends in an error in state: 242. ## ## brackets(expr) -> LBRACKET . expr RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ] ## @@ -973,7 +972,7 @@ interactive_expr: Ident LBRACKET With interactive_expr: Ident LPAR Verbatim COMMA With ## -## Ends in an error in state: 343. +## Ends in an error in state: 341. ## ## nsepseq(expr,COMMA) -> expr COMMA . nsepseq(expr,COMMA) [ RPAR ] ## @@ -985,7 +984,7 @@ interactive_expr: Ident LPAR Verbatim COMMA With interactive_expr: Ident LPAR Verbatim VBAR ## -## Ends in an error in state: 342. +## Ends in an error in state: 340. ## ## nsepseq(expr,COMMA) -> expr . [ RPAR ] ## nsepseq(expr,COMMA) -> expr . COMMA nsepseq(expr,COMMA) [ RPAR ] @@ -997,23 +996,23 @@ interactive_expr: Ident LPAR Verbatim VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr ## interactive_expr: Ident LPAR With ## -## Ends in an error in state: 113. +## Ends in an error in state: 111. ## ## par(nsepseq(expr,COMMA)) -> LPAR . nsepseq(expr,COMMA) RPAR [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -1025,7 +1024,7 @@ interactive_expr: Ident LPAR With interactive_expr: Ident While ## -## Ends in an error in state: 112. +## Ends in an error in state: 110. ## ## core_expr -> Ident . [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## fun_call -> Ident . arguments [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] @@ -1040,7 +1039,7 @@ interactive_expr: Ident While interactive_expr: Ident With Record Constr DOT Ident With ## -## Ends in an error in state: 165. +## Ends in an error in state: 163. ## ## projection -> Constr DOT Ident . DOT nsepseq(selection,DOT) [ With VBAR SEMI RBRACKET RBRACE End Else EQ ] ## @@ -1052,7 +1051,7 @@ interactive_expr: Ident With Record Constr DOT Ident With interactive_expr: Ident With Record Constr DOT With ## -## Ends in an error in state: 164. +## Ends in an error in state: 162. ## ## projection -> Constr DOT . Ident DOT nsepseq(selection,DOT) [ With VBAR SEMI RBRACKET RBRACE End Else EQ ] ## @@ -1064,7 +1063,7 @@ interactive_expr: Ident With Record Constr DOT With interactive_expr: Ident With Record Constr With ## -## Ends in an error in state: 163. +## Ends in an error in state: 161. ## ## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ With VBAR SEMI RBRACKET RBRACE End Else EQ ] ## @@ -1076,7 +1075,7 @@ interactive_expr: Ident With Record Constr With interactive_expr: Ident With Record Ident EQ Bytes RBRACKET ## -## Ends in an error in state: 241. +## Ends in an error in state: 239. ## ## ne_injection(Record,field_path_assignment) -> Record sep_or_term_list(field_path_assignment,SEMI) . End [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -1087,26 +1086,26 @@ interactive_expr: Ident With Record Ident EQ Bytes RBRACKET ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 196, spurious reduction of production field_path_assignment -> path EQ expr -## In state 234, spurious reduction of production nsepseq(field_path_assignment,SEMI) -> field_path_assignment -## In state 233, spurious reduction of production sep_or_term_list(field_path_assignment,SEMI) -> nsepseq(field_path_assignment,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 194, spurious reduction of production field_path_assignment -> path EQ expr +## In state 232, spurious reduction of production nsepseq(field_path_assignment,SEMI) -> field_path_assignment +## In state 231, spurious reduction of production sep_or_term_list(field_path_assignment,SEMI) -> nsepseq(field_path_assignment,SEMI) ## interactive_expr: Ident With Record Ident EQ Bytes SEMI Ident EQ Bytes SEMI With ## -## Ends in an error in state: 239. +## Ends in an error in state: 237. ## ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment SEMI . nsepseq(field_path_assignment,SEMI) [ RBRACKET End ] ## seq(__anonymous_0(field_path_assignment,SEMI)) -> field_path_assignment SEMI . seq(__anonymous_0(field_path_assignment,SEMI)) [ RBRACKET End ] @@ -1119,7 +1118,7 @@ interactive_expr: Ident With Record Ident EQ Bytes SEMI Ident EQ Bytes SEMI With interactive_expr: Ident With Record Ident EQ Bytes SEMI Ident EQ Bytes VBAR ## -## Ends in an error in state: 238. +## Ends in an error in state: 236. ## ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment . [ RBRACKET End ] ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment . SEMI nsepseq(field_path_assignment,SEMI) [ RBRACKET End ] @@ -1132,24 +1131,24 @@ interactive_expr: Ident With Record Ident EQ Bytes SEMI Ident EQ Bytes VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 196, spurious reduction of production field_path_assignment -> path EQ expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 194, spurious reduction of production field_path_assignment -> path EQ expr ## interactive_expr: Ident With Record Ident EQ Bytes SEMI With ## -## Ends in an error in state: 235. +## Ends in an error in state: 233. ## ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment SEMI . nsepseq(field_path_assignment,SEMI) [ RBRACKET End ] ## nseq(__anonymous_0(field_path_assignment,SEMI)) -> field_path_assignment SEMI . seq(__anonymous_0(field_path_assignment,SEMI)) [ RBRACKET End ] @@ -1162,7 +1161,7 @@ interactive_expr: Ident With Record Ident EQ Bytes SEMI With interactive_expr: Ident With Record Ident EQ Bytes VBAR ## -## Ends in an error in state: 234. +## Ends in an error in state: 232. ## ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment . [ RBRACKET End ] ## nsepseq(field_path_assignment,SEMI) -> field_path_assignment . SEMI nsepseq(field_path_assignment,SEMI) [ RBRACKET End ] @@ -1175,24 +1174,24 @@ interactive_expr: Ident With Record Ident EQ Bytes VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 196, spurious reduction of production field_path_assignment -> path EQ expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 194, spurious reduction of production field_path_assignment -> path EQ expr ## interactive_expr: Ident With Record Ident EQ With ## -## Ends in an error in state: 170. +## Ends in an error in state: 168. ## ## field_path_assignment -> path EQ . expr [ SEMI RBRACKET End ] ## @@ -1204,7 +1203,7 @@ interactive_expr: Ident With Record Ident EQ With interactive_expr: Ident With Record Ident While ## -## Ends in an error in state: 160. +## Ends in an error in state: 158. ## ## path -> Ident . [ With VBAR SEMI RBRACKET RBRACE End Else EQ ] ## projection -> Ident . DOT nsepseq(selection,DOT) [ With VBAR SEMI RBRACKET RBRACE End Else EQ ] @@ -1217,7 +1216,7 @@ interactive_expr: Ident With Record Ident While interactive_expr: Ident With Record Ident With ## -## Ends in an error in state: 169. +## Ends in an error in state: 167. ## ## field_path_assignment -> path . EQ expr [ SEMI RBRACKET End ] ## @@ -1228,14 +1227,14 @@ interactive_expr: Ident With Record Ident With ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 160, spurious reduction of production path -> Ident +## In state 158, spurious reduction of production path -> Ident ## interactive_expr: Ident With Record LBRACKET Ident EQ Bytes End ## -## Ends in an error in state: 166. +## Ends in an error in state: 164. ## ## ne_injection(Record,field_path_assignment) -> Record LBRACKET sep_or_term_list(field_path_assignment,SEMI) . RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -1246,26 +1245,26 @@ interactive_expr: Ident With Record LBRACKET Ident EQ Bytes End ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 196, spurious reduction of production field_path_assignment -> path EQ expr -## In state 234, spurious reduction of production nsepseq(field_path_assignment,SEMI) -> field_path_assignment -## In state 233, spurious reduction of production sep_or_term_list(field_path_assignment,SEMI) -> nsepseq(field_path_assignment,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 194, spurious reduction of production field_path_assignment -> path EQ expr +## In state 232, spurious reduction of production nsepseq(field_path_assignment,SEMI) -> field_path_assignment +## In state 231, spurious reduction of production sep_or_term_list(field_path_assignment,SEMI) -> nsepseq(field_path_assignment,SEMI) ## interactive_expr: Ident With Record LBRACKET With ## -## Ends in an error in state: 159. +## Ends in an error in state: 157. ## ## ne_injection(Record,field_path_assignment) -> Record LBRACKET . sep_or_term_list(field_path_assignment,SEMI) RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -1277,7 +1276,7 @@ interactive_expr: Ident With Record LBRACKET With interactive_expr: Ident With Record With ## -## Ends in an error in state: 158. +## Ends in an error in state: 156. ## ## ne_injection(Record,field_path_assignment) -> Record . sep_or_term_list(field_path_assignment,SEMI) End [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## ne_injection(Record,field_path_assignment) -> Record . LBRACKET sep_or_term_list(field_path_assignment,SEMI) RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] @@ -1290,7 +1289,7 @@ interactive_expr: Ident With Record With interactive_expr: Ident With With ## -## Ends in an error in state: 157. +## Ends in an error in state: 155. ## ## update_record -> path With . ne_injection(Record,field_path_assignment) [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -1302,7 +1301,7 @@ interactive_expr: Ident With With interactive_expr: If Verbatim Then Verbatim Else With ## -## Ends in an error in state: 350. +## Ends in an error in state: 348. ## ## cond_expr -> If expr Then expr option(SEMI) Else . expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## @@ -1314,7 +1313,7 @@ interactive_expr: If Verbatim Then Verbatim Else With interactive_expr: If Verbatim Then Verbatim SEMI EQ ## -## Ends in an error in state: 349. +## Ends in an error in state: 347. ## ## cond_expr -> If expr Then expr option(SEMI) . Else expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## @@ -1326,7 +1325,7 @@ interactive_expr: If Verbatim Then Verbatim SEMI EQ interactive_expr: If Verbatim Then Verbatim VBAR ## -## Ends in an error in state: 348. +## Ends in an error in state: 346. ## ## cond_expr -> If expr Then expr . option(SEMI) Else expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## @@ -1337,23 +1336,23 @@ interactive_expr: If Verbatim Then Verbatim VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr ## interactive_expr: If Verbatim Then With ## -## Ends in an error in state: 347. +## Ends in an error in state: 345. ## ## cond_expr -> If expr Then . expr option(SEMI) Else expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## @@ -1365,7 +1364,7 @@ interactive_expr: If Verbatim Then With interactive_expr: If Verbatim VBAR ## -## Ends in an error in state: 346. +## Ends in an error in state: 344. ## ## cond_expr -> If expr . Then expr option(SEMI) Else expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## @@ -1376,23 +1375,23 @@ interactive_expr: If Verbatim VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr ## interactive_expr: If With ## -## Ends in an error in state: 111. +## Ends in an error in state: 109. ## ## cond_expr -> If . expr Then expr option(SEMI) Else expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## @@ -1402,72 +1401,9 @@ interactive_expr: If With -interactive_expr: LBRACKET PERCENT Constr Verbatim VBAR -## -## Ends in an error in state: 352. -## -## code_insert_expr -> LBRACKET PERCENT Constr expr . RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] -## -## The known suffix of the stack is as follows: -## LBRACKET PERCENT Constr expr -## -## WARNING: This example involves spurious reductions. -## This implies that, although the LR(1) items shown above provide an -## accurate view of the past (what has been recognized so far), they -## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## - - - -interactive_expr: LBRACKET PERCENT Constr With -## -## Ends in an error in state: 109. -## -## code_insert_expr -> LBRACKET PERCENT Constr . expr RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] -## -## The known suffix of the stack is as follows: -## LBRACKET PERCENT Constr -## - - - -interactive_expr: LBRACKET PERCENT With -## -## Ends in an error in state: 108. -## -## code_insert_expr -> LBRACKET PERCENT . Constr expr RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] -## -## The known suffix of the stack is as follows: -## LBRACKET PERCENT -## - - - -interactive_expr: LBRACKET With -## -## Ends in an error in state: 107. -## -## code_insert_expr -> LBRACKET . PERCENT Constr expr RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] -## -## The known suffix of the stack is as follows: -## LBRACKET -## - - - interactive_expr: LPAR Bytes RPAR With ## -## Ends in an error in state: 172. +## Ends in an error in state: 170. ## ## fun_call_or_par_or_projection -> par(expr) . option(arguments) [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -1479,7 +1415,7 @@ interactive_expr: LPAR Bytes RPAR With interactive_expr: LPAR If Verbatim Then Bytes Else Bytes VBAR ## -## Ends in an error in state: 356. +## Ends in an error in state: 352. ## ## par(expr) -> LPAR expr . RPAR [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## tuple_comp -> expr . COMMA nsepseq(expr,COMMA) [ RPAR ] @@ -1491,25 +1427,25 @@ interactive_expr: LPAR If Verbatim Then Bytes Else Bytes VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 351, spurious reduction of production cond_expr -> If expr Then expr option(SEMI) Else expr -## In state 230, spurious reduction of production expr -> cond_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 349, spurious reduction of production cond_expr -> If expr Then expr option(SEMI) Else expr +## In state 228, spurious reduction of production expr -> cond_expr ## interactive_expr: LPAR Verbatim COLON Ident VBAR ## -## Ends in an error in state: 363. +## Ends in an error in state: 359. ## ## par(annot_expr) -> LPAR annot_expr . RPAR [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -1524,14 +1460,14 @@ interactive_expr: LPAR Verbatim COLON Ident VBAR ## In state 30, spurious reduction of production cartesian -> core_type ## In state 36, spurious reduction of production fun_type -> cartesian ## In state 44, spurious reduction of production type_expr -> fun_type -## In state 362, spurious reduction of production annot_expr -> disj_expr COLON type_expr +## In state 358, spurious reduction of production annot_expr -> disj_expr COLON type_expr ## interactive_expr: LPAR Verbatim COLON With ## -## Ends in an error in state: 361. +## Ends in an error in state: 357. ## ## annot_expr -> disj_expr COLON . type_expr [ RPAR ] ## @@ -1543,7 +1479,7 @@ interactive_expr: LPAR Verbatim COLON With interactive_expr: LPAR Verbatim COMMA With ## -## Ends in an error in state: 358. +## Ends in an error in state: 354. ## ## tuple_comp -> expr COMMA . nsepseq(expr,COMMA) [ RPAR ] ## @@ -1555,7 +1491,7 @@ interactive_expr: LPAR Verbatim COMMA With interactive_expr: LPAR Verbatim VBAR ## -## Ends in an error in state: 360. +## Ends in an error in state: 356. ## ## annot_expr -> disj_expr . COLON type_expr [ RPAR ] ## disj_expr -> disj_expr . Or conj_expr [ RPAR Or COMMA COLON ] @@ -1568,22 +1504,22 @@ interactive_expr: LPAR Verbatim VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr ## interactive_expr: LPAR With ## -## Ends in an error in state: 106. +## Ends in an error in state: 107. ## ## par(annot_expr) -> LPAR . annot_expr RPAR [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## par(expr) -> LPAR . expr RPAR [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] @@ -1595,9 +1531,48 @@ interactive_expr: LPAR With +interactive_expr: Lang Verbatim VBAR +## +## Ends in an error in state: 361. +## +## code_inj -> Lang expr . RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] +## +## The known suffix of the stack is as follows: +## Lang expr +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## + + + +interactive_expr: Lang With +## +## Ends in an error in state: 106. +## +## code_inj -> Lang . expr RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] +## +## The known suffix of the stack is as follows: +## Lang +## + + + interactive_expr: List LBRACKET Verbatim End ## -## Ends in an error in state: 367. +## Ends in an error in state: 365. ## ## injection(List,expr) -> List LBRACKET sep_or_term_list(expr,SEMI) . RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -1608,27 +1583,26 @@ interactive_expr: List LBRACKET Verbatim End ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 371, spurious reduction of production nsepseq(expr,SEMI) -> expr -## In state 370, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 369, spurious reduction of production nsepseq(expr,SEMI) -> expr +## In state 368, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI) ## interactive_expr: List LBRACKET With ## -## Ends in an error in state: 365. +## Ends in an error in state: 363. ## -## code_insert_expr -> LBRACKET . PERCENT Constr expr RBRACKET [ TIMES SLASH SEMI PLUS Or NE Mod MINUS LT LE GT GE End EQ Contains CONS CAT And ] ## injection(List,expr) -> List LBRACKET . sep_or_term_list(expr,SEMI) RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## injection(List,expr) -> List LBRACKET . RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -1640,7 +1614,7 @@ interactive_expr: List LBRACKET With interactive_expr: List Verbatim RBRACKET ## -## Ends in an error in state: 379. +## Ends in an error in state: 377. ## ## injection(List,expr) -> List sep_or_term_list(expr,SEMI) . End [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -1651,18 +1625,18 @@ interactive_expr: List Verbatim RBRACKET ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 371, spurious reduction of production nsepseq(expr,SEMI) -> expr -## In state 370, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 369, spurious reduction of production nsepseq(expr,SEMI) -> expr +## In state 368, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI) ## @@ -1696,7 +1670,7 @@ interactive_expr: MINUS With interactive_expr: Map LBRACKET Verbatim ARROW Bytes End ## -## Ends in an error in state: 384. +## Ends in an error in state: 382. ## ## injection(Map,binding) -> Map LBRACKET sep_or_term_list(binding,SEMI) . RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -1707,28 +1681,27 @@ interactive_expr: Map LBRACKET Verbatim ARROW Bytes End ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 252, spurious reduction of production binding -> expr ARROW expr -## In state 253, spurious reduction of production nsepseq(binding,SEMI) -> binding -## In state 249, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 250, spurious reduction of production binding -> expr ARROW expr +## In state 251, spurious reduction of production nsepseq(binding,SEMI) -> binding +## In state 247, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI) ## interactive_expr: Map LBRACKET With ## -## Ends in an error in state: 382. +## Ends in an error in state: 380. ## -## code_insert_expr -> LBRACKET . PERCENT Constr expr RBRACKET [ TIMES SLASH PLUS Or NE Mod MINUS LT LE GT GE EQ Contains CONS CAT And ARROW ] ## injection(Map,binding) -> Map LBRACKET . sep_or_term_list(binding,SEMI) RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## injection(Map,binding) -> Map LBRACKET . RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -1740,7 +1713,7 @@ interactive_expr: Map LBRACKET With interactive_expr: Map Verbatim ARROW Bytes RBRACKET ## -## Ends in an error in state: 387. +## Ends in an error in state: 385. ## ## injection(Map,binding) -> Map sep_or_term_list(binding,SEMI) . End [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -1751,26 +1724,26 @@ interactive_expr: Map Verbatim ARROW Bytes RBRACKET ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 252, spurious reduction of production binding -> expr ARROW expr -## In state 253, spurious reduction of production nsepseq(binding,SEMI) -> binding -## In state 249, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 250, spurious reduction of production binding -> expr ARROW expr +## In state 251, spurious reduction of production nsepseq(binding,SEMI) -> binding +## In state 247, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI) ## interactive_expr: Map Verbatim ARROW Bytes SEMI Verbatim ARROW Bytes SEMI With ## -## Ends in an error in state: 258. +## Ends in an error in state: 256. ## ## nsepseq(binding,SEMI) -> binding SEMI . nsepseq(binding,SEMI) [ RBRACKET End ] ## seq(__anonymous_0(binding,SEMI)) -> binding SEMI . seq(__anonymous_0(binding,SEMI)) [ RBRACKET End ] @@ -1783,7 +1756,7 @@ interactive_expr: Map Verbatim ARROW Bytes SEMI Verbatim ARROW Bytes SEMI With interactive_expr: Map Verbatim ARROW Bytes SEMI Verbatim ARROW Bytes VBAR ## -## Ends in an error in state: 257. +## Ends in an error in state: 255. ## ## nsepseq(binding,SEMI) -> binding . [ RBRACKET End ] ## nsepseq(binding,SEMI) -> binding . SEMI nsepseq(binding,SEMI) [ RBRACKET End ] @@ -1796,24 +1769,24 @@ interactive_expr: Map Verbatim ARROW Bytes SEMI Verbatim ARROW Bytes VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 252, spurious reduction of production binding -> expr ARROW expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 250, spurious reduction of production binding -> expr ARROW expr ## interactive_expr: Map Verbatim ARROW Bytes SEMI With ## -## Ends in an error in state: 254. +## Ends in an error in state: 252. ## ## nsepseq(binding,SEMI) -> binding SEMI . nsepseq(binding,SEMI) [ RBRACKET End ] ## nseq(__anonymous_0(binding,SEMI)) -> binding SEMI . seq(__anonymous_0(binding,SEMI)) [ RBRACKET End ] @@ -1826,7 +1799,7 @@ interactive_expr: Map Verbatim ARROW Bytes SEMI With interactive_expr: Map Verbatim ARROW Bytes VBAR ## -## Ends in an error in state: 253. +## Ends in an error in state: 251. ## ## nsepseq(binding,SEMI) -> binding . [ RBRACKET End ] ## nsepseq(binding,SEMI) -> binding . SEMI nsepseq(binding,SEMI) [ RBRACKET End ] @@ -1839,24 +1812,24 @@ interactive_expr: Map Verbatim ARROW Bytes VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 252, spurious reduction of production binding -> expr ARROW expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 250, spurious reduction of production binding -> expr ARROW expr ## interactive_expr: Map Verbatim ARROW With ## -## Ends in an error in state: 251. +## Ends in an error in state: 249. ## ## binding -> expr ARROW . expr [ SEMI RBRACKET End ] ## @@ -1868,7 +1841,7 @@ interactive_expr: Map Verbatim ARROW With interactive_expr: Map Verbatim VBAR ## -## Ends in an error in state: 250. +## Ends in an error in state: 248. ## ## binding -> expr . ARROW expr [ SEMI RBRACKET End ] ## @@ -1879,16 +1852,16 @@ interactive_expr: Map Verbatim VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr ## @@ -1910,7 +1883,7 @@ interactive_expr: Map With interactive_expr: Not Bytes With ## -## Ends in an error in state: 175. +## Ends in an error in state: 173. ## ## add_expr -> mult_expr . [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## mult_expr -> mult_expr . TIMES unary_expr [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] @@ -1937,7 +1910,7 @@ interactive_expr: Not With interactive_expr: Record Ident EQ Bytes RBRACKET ## -## Ends in an error in state: 402. +## Ends in an error in state: 400. ## ## record_expr -> Record sep_or_term_list(field_assignment,SEMI) . End [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -1948,26 +1921,26 @@ interactive_expr: Record Ident EQ Bytes RBRACKET ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 390, spurious reduction of production field_assignment -> Ident EQ expr -## In state 395, spurious reduction of production nsepseq(field_assignment,SEMI) -> field_assignment -## In state 394, spurious reduction of production sep_or_term_list(field_assignment,SEMI) -> nsepseq(field_assignment,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 388, spurious reduction of production field_assignment -> Ident EQ expr +## In state 393, spurious reduction of production nsepseq(field_assignment,SEMI) -> field_assignment +## In state 392, spurious reduction of production sep_or_term_list(field_assignment,SEMI) -> nsepseq(field_assignment,SEMI) ## interactive_expr: Record Ident EQ Bytes SEMI Ident EQ Bytes SEMI With ## -## Ends in an error in state: 400. +## Ends in an error in state: 398. ## ## nsepseq(field_assignment,SEMI) -> field_assignment SEMI . nsepseq(field_assignment,SEMI) [ RBRACKET End ] ## seq(__anonymous_0(field_assignment,SEMI)) -> field_assignment SEMI . seq(__anonymous_0(field_assignment,SEMI)) [ RBRACKET End ] @@ -1980,7 +1953,7 @@ interactive_expr: Record Ident EQ Bytes SEMI Ident EQ Bytes SEMI With interactive_expr: Record Ident EQ Bytes SEMI Ident EQ Bytes VBAR ## -## Ends in an error in state: 399. +## Ends in an error in state: 397. ## ## nsepseq(field_assignment,SEMI) -> field_assignment . [ RBRACKET End ] ## nsepseq(field_assignment,SEMI) -> field_assignment . SEMI nsepseq(field_assignment,SEMI) [ RBRACKET End ] @@ -1993,24 +1966,24 @@ interactive_expr: Record Ident EQ Bytes SEMI Ident EQ Bytes VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 390, spurious reduction of production field_assignment -> Ident EQ expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 388, spurious reduction of production field_assignment -> Ident EQ expr ## interactive_expr: Record Ident EQ Bytes SEMI With ## -## Ends in an error in state: 396. +## Ends in an error in state: 394. ## ## nsepseq(field_assignment,SEMI) -> field_assignment SEMI . nsepseq(field_assignment,SEMI) [ RBRACKET End ] ## nseq(__anonymous_0(field_assignment,SEMI)) -> field_assignment SEMI . seq(__anonymous_0(field_assignment,SEMI)) [ RBRACKET End ] @@ -2023,7 +1996,7 @@ interactive_expr: Record Ident EQ Bytes SEMI With interactive_expr: Record Ident EQ Bytes VBAR ## -## Ends in an error in state: 395. +## Ends in an error in state: 393. ## ## nsepseq(field_assignment,SEMI) -> field_assignment . [ RBRACKET End ] ## nsepseq(field_assignment,SEMI) -> field_assignment . SEMI nsepseq(field_assignment,SEMI) [ RBRACKET End ] @@ -2036,17 +2009,17 @@ interactive_expr: Record Ident EQ Bytes VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 390, spurious reduction of production field_assignment -> Ident EQ expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 388, spurious reduction of production field_assignment -> Ident EQ expr ## @@ -2077,7 +2050,7 @@ interactive_expr: Record Ident With interactive_expr: Record LBRACKET Ident EQ Bytes End ## -## Ends in an error in state: 391. +## Ends in an error in state: 389. ## ## record_expr -> Record LBRACKET sep_or_term_list(field_assignment,SEMI) . RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -2088,19 +2061,19 @@ interactive_expr: Record LBRACKET Ident EQ Bytes End ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 390, spurious reduction of production field_assignment -> Ident EQ expr -## In state 395, spurious reduction of production nsepseq(field_assignment,SEMI) -> field_assignment -## In state 394, spurious reduction of production sep_or_term_list(field_assignment,SEMI) -> nsepseq(field_assignment,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 388, spurious reduction of production field_assignment -> Ident EQ expr +## In state 393, spurious reduction of production nsepseq(field_assignment,SEMI) -> field_assignment +## In state 392, spurious reduction of production sep_or_term_list(field_assignment,SEMI) -> nsepseq(field_assignment,SEMI) ## @@ -2132,7 +2105,7 @@ interactive_expr: Record With interactive_expr: Set LBRACKET Verbatim End ## -## Ends in an error in state: 406. +## Ends in an error in state: 404. ## ## injection(Set,expr) -> Set LBRACKET sep_or_term_list(expr,SEMI) . RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -2143,27 +2116,26 @@ interactive_expr: Set LBRACKET Verbatim End ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 371, spurious reduction of production nsepseq(expr,SEMI) -> expr -## In state 370, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 369, spurious reduction of production nsepseq(expr,SEMI) -> expr +## In state 368, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI) ## interactive_expr: Set LBRACKET With ## -## Ends in an error in state: 404. +## Ends in an error in state: 402. ## -## code_insert_expr -> LBRACKET . PERCENT Constr expr RBRACKET [ TIMES SLASH SEMI PLUS Or NE Mod MINUS LT LE GT GE End EQ Contains CONS CAT And ] ## injection(Set,expr) -> Set LBRACKET . sep_or_term_list(expr,SEMI) RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## injection(Set,expr) -> Set LBRACKET . RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -2175,7 +2147,7 @@ interactive_expr: Set LBRACKET With interactive_expr: Set Verbatim RBRACKET ## -## Ends in an error in state: 409. +## Ends in an error in state: 407. ## ## injection(Set,expr) -> Set sep_or_term_list(expr,SEMI) . End [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -2186,25 +2158,25 @@ interactive_expr: Set Verbatim RBRACKET ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 371, spurious reduction of production nsepseq(expr,SEMI) -> expr -## In state 370, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 369, spurious reduction of production nsepseq(expr,SEMI) -> expr +## In state 368, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI) ## interactive_expr: Set Verbatim SEMI Verbatim SEMI With ## -## Ends in an error in state: 376. +## Ends in an error in state: 374. ## ## nsepseq(expr,SEMI) -> expr SEMI . nsepseq(expr,SEMI) [ RBRACKET End ] ## seq(__anonymous_0(expr,SEMI)) -> expr SEMI . seq(__anonymous_0(expr,SEMI)) [ RBRACKET End ] @@ -2217,7 +2189,7 @@ interactive_expr: Set Verbatim SEMI Verbatim SEMI With interactive_expr: Set Verbatim SEMI Verbatim VBAR ## -## Ends in an error in state: 375. +## Ends in an error in state: 373. ## ## nsepseq(expr,SEMI) -> expr . [ RBRACKET End ] ## nsepseq(expr,SEMI) -> expr . SEMI nsepseq(expr,SEMI) [ RBRACKET End ] @@ -2230,23 +2202,23 @@ interactive_expr: Set Verbatim SEMI Verbatim VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr ## interactive_expr: Set Verbatim SEMI With ## -## Ends in an error in state: 372. +## Ends in an error in state: 370. ## ## nsepseq(expr,SEMI) -> expr SEMI . nsepseq(expr,SEMI) [ RBRACKET End ] ## nseq(__anonymous_0(expr,SEMI)) -> expr SEMI . seq(__anonymous_0(expr,SEMI)) [ RBRACKET End ] @@ -2259,7 +2231,7 @@ interactive_expr: Set Verbatim SEMI With interactive_expr: Set Verbatim VBAR ## -## Ends in an error in state: 371. +## Ends in an error in state: 369. ## ## nsepseq(expr,SEMI) -> expr . [ RBRACKET End ] ## nsepseq(expr,SEMI) -> expr . SEMI nsepseq(expr,SEMI) [ RBRACKET End ] @@ -2272,16 +2244,16 @@ interactive_expr: Set Verbatim VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr ## @@ -2303,7 +2275,7 @@ interactive_expr: Set With interactive_expr: Verbatim And With ## -## Ends in an error in state: 227. +## Ends in an error in state: 225. ## ## conj_expr -> conj_expr And . set_membership [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Or Of Function From End Else EOF Const COMMA COLON Block Begin Attributes And ARROW ] ## @@ -2315,7 +2287,7 @@ interactive_expr: Verbatim And With interactive_expr: Verbatim CAT With ## -## Ends in an error in state: 203. +## Ends in an error in state: 201. ## ## cat_expr -> cons_expr CAT . cat_expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Or Of NE LT LE GT GE Function From End Else EQ EOF Const COMMA COLON Block Begin Attributes And ARROW ] ## @@ -2327,7 +2299,7 @@ interactive_expr: Verbatim CAT With interactive_expr: Verbatim COLON ## -## Ends in an error in state: 197. +## Ends in an error in state: 195. ## ## disj_expr -> disj_expr . Or conj_expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Or Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] ## expr -> disj_expr . [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ] @@ -2339,22 +2311,22 @@ interactive_expr: Verbatim COLON ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr ## interactive_expr: Verbatim CONS With ## -## Ends in an error in state: 210. +## Ends in an error in state: 208. ## ## cons_expr -> add_expr CONS . cons_expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Or Of NE LT LE GT GE Function From End Else EQ EOF Const COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -2366,7 +2338,7 @@ interactive_expr: Verbatim CONS With interactive_expr: Verbatim Contains With ## -## Ends in an error in state: 200. +## Ends in an error in state: 198. ## ## set_membership -> core_expr Contains . set_membership [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Or Of Function From End Else EOF Const COMMA COLON Block Begin Attributes And ARROW ] ## @@ -2378,7 +2350,7 @@ interactive_expr: Verbatim Contains With interactive_expr: Verbatim EQ With ## -## Ends in an error in state: 223. +## Ends in an error in state: 221. ## ## comp_expr -> comp_expr EQ . cat_expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Or Of NE LT LE GT GE Function From End Else EQ EOF Const COMMA COLON Block Begin Attributes And ARROW ] ## @@ -2390,7 +2362,7 @@ interactive_expr: Verbatim EQ With interactive_expr: Verbatim GE With ## -## Ends in an error in state: 221. +## Ends in an error in state: 219. ## ## comp_expr -> comp_expr GE . cat_expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Or Of NE LT LE GT GE Function From End Else EQ EOF Const COMMA COLON Block Begin Attributes And ARROW ] ## @@ -2402,7 +2374,7 @@ interactive_expr: Verbatim GE With interactive_expr: Verbatim GT With ## -## Ends in an error in state: 219. +## Ends in an error in state: 217. ## ## comp_expr -> comp_expr GT . cat_expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Or Of NE LT LE GT GE Function From End Else EQ EOF Const COMMA COLON Block Begin Attributes And ARROW ] ## @@ -2414,7 +2386,7 @@ interactive_expr: Verbatim GT With interactive_expr: Verbatim LE With ## -## Ends in an error in state: 217. +## Ends in an error in state: 215. ## ## comp_expr -> comp_expr LE . cat_expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Or Of NE LT LE GT GE Function From End Else EQ EOF Const COMMA COLON Block Begin Attributes And ARROW ] ## @@ -2426,7 +2398,7 @@ interactive_expr: Verbatim LE With interactive_expr: Verbatim LT With ## -## Ends in an error in state: 215. +## Ends in an error in state: 213. ## ## comp_expr -> comp_expr LT . cat_expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Or Of NE LT LE GT GE Function From End Else EQ EOF Const COMMA COLON Block Begin Attributes And ARROW ] ## @@ -2438,7 +2410,7 @@ interactive_expr: Verbatim LT With interactive_expr: Verbatim MINUS Verbatim With ## -## Ends in an error in state: 209. +## Ends in an error in state: 207. ## ## add_expr -> add_expr MINUS mult_expr . [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## mult_expr -> mult_expr . TIMES unary_expr [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] @@ -2453,7 +2425,7 @@ interactive_expr: Verbatim MINUS Verbatim With interactive_expr: Verbatim MINUS With ## -## Ends in an error in state: 208. +## Ends in an error in state: 206. ## ## add_expr -> add_expr MINUS . mult_expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -2465,7 +2437,7 @@ interactive_expr: Verbatim MINUS With interactive_expr: Verbatim Mod With ## -## Ends in an error in state: 193. +## Ends in an error in state: 191. ## ## mult_expr -> mult_expr Mod . unary_expr [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -2477,7 +2449,7 @@ interactive_expr: Verbatim Mod With interactive_expr: Verbatim NE With ## -## Ends in an error in state: 213. +## Ends in an error in state: 211. ## ## comp_expr -> comp_expr NE . cat_expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Or Of NE LT LE GT GE Function From End Else EQ EOF Const COMMA COLON Block Begin Attributes And ARROW ] ## @@ -2489,7 +2461,7 @@ interactive_expr: Verbatim NE With interactive_expr: Verbatim Or With ## -## Ends in an error in state: 198. +## Ends in an error in state: 196. ## ## disj_expr -> disj_expr Or . conj_expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Or Of Function From End Else EOF Const COMMA COLON Block Begin Attributes ARROW ] ## @@ -2501,7 +2473,7 @@ interactive_expr: Verbatim Or With interactive_expr: Verbatim PLUS Verbatim With ## -## Ends in an error in state: 207. +## Ends in an error in state: 205. ## ## add_expr -> add_expr PLUS mult_expr . [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## mult_expr -> mult_expr . TIMES unary_expr [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] @@ -2516,7 +2488,7 @@ interactive_expr: Verbatim PLUS Verbatim With interactive_expr: Verbatim PLUS With ## -## Ends in an error in state: 206. +## Ends in an error in state: 204. ## ## add_expr -> add_expr PLUS . mult_expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -2528,7 +2500,7 @@ interactive_expr: Verbatim PLUS With interactive_expr: Verbatim SLASH With ## -## Ends in an error in state: 191. +## Ends in an error in state: 189. ## ## mult_expr -> mult_expr SLASH . unary_expr [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -2540,7 +2512,7 @@ interactive_expr: Verbatim SLASH With interactive_expr: Verbatim TIMES With ## -## Ends in an error in state: 176. +## Ends in an error in state: 174. ## ## mult_expr -> mult_expr TIMES . unary_expr [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] ## @@ -2552,7 +2524,7 @@ interactive_expr: Verbatim TIMES With interactive_expr: Verbatim VBAR ## -## Ends in an error in state: 606. +## Ends in an error in state: 604. ## ## interactive_expr -> expr . EOF [ # ] ## @@ -2563,23 +2535,23 @@ interactive_expr: Verbatim VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr ## interactive_expr: Verbatim With ## -## Ends in an error in state: 199. +## Ends in an error in state: 197. ## ## set_membership -> core_expr . Contains set_membership [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Or Of Function From End Else EOF Const COMMA COLON Block Begin Attributes And ARROW ] ## unary_expr -> core_expr . [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ] @@ -2592,7 +2564,7 @@ interactive_expr: Verbatim With interactive_expr: With ## -## Ends in an error in state: 604. +## Ends in an error in state: 602. ## ## interactive_expr' -> . interactive_expr [ # ] ## @@ -2604,7 +2576,7 @@ interactive_expr: With contract: Attributes LBRACKET String End ## -## Ends in an error in state: 550. +## Ends in an error in state: 548. ## ## ne_injection(Attributes,String) -> Attributes LBRACKET sep_or_term_list(String,SEMI) . RBRACKET [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## @@ -2615,15 +2587,15 @@ contract: Attributes LBRACKET String End ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 542, spurious reduction of production nsepseq(String,SEMI) -> String -## In state 553, spurious reduction of production sep_or_term_list(String,SEMI) -> nsepseq(String,SEMI) +## In state 540, spurious reduction of production nsepseq(String,SEMI) -> String +## In state 551, spurious reduction of production sep_or_term_list(String,SEMI) -> nsepseq(String,SEMI) ## contract: Attributes LBRACKET With ## -## Ends in an error in state: 549. +## Ends in an error in state: 547. ## ## ne_injection(Attributes,String) -> Attributes LBRACKET . sep_or_term_list(String,SEMI) RBRACKET [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## @@ -2635,7 +2607,7 @@ contract: Attributes LBRACKET With contract: Attributes String End Attributes String End SEMI With ## -## Ends in an error in state: 599. +## Ends in an error in state: 597. ## ## seq(declaration) -> declaration . seq(declaration) [ EOF ] ## @@ -2647,7 +2619,7 @@ contract: Attributes String End Attributes String End SEMI With contract: Attributes String End SEMI With ## -## Ends in an error in state: 597. +## Ends in an error in state: 595. ## ## nseq(declaration) -> declaration . seq(declaration) [ EOF ] ## @@ -2659,7 +2631,7 @@ contract: Attributes String End SEMI With contract: Attributes String End With ## -## Ends in an error in state: 592. +## Ends in an error in state: 590. ## ## attr_decl -> open_attr_decl . option(SEMI) [ Type Recursive Function EOF Const Attributes ] ## @@ -2671,7 +2643,7 @@ contract: Attributes String End With contract: Attributes String RBRACKET ## -## Ends in an error in state: 554. +## Ends in an error in state: 552. ## ## ne_injection(Attributes,String) -> Attributes sep_or_term_list(String,SEMI) . End [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## @@ -2682,15 +2654,15 @@ contract: Attributes String RBRACKET ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 542, spurious reduction of production nsepseq(String,SEMI) -> String -## In state 553, spurious reduction of production sep_or_term_list(String,SEMI) -> nsepseq(String,SEMI) +## In state 540, spurious reduction of production nsepseq(String,SEMI) -> String +## In state 551, spurious reduction of production sep_or_term_list(String,SEMI) -> nsepseq(String,SEMI) ## contract: Attributes String SEMI String SEMI With ## -## Ends in an error in state: 545. +## Ends in an error in state: 543. ## ## nsepseq(String,SEMI) -> String SEMI . nsepseq(String,SEMI) [ RBRACKET End ] ## seq(__anonymous_0(String,SEMI)) -> String SEMI . seq(__anonymous_0(String,SEMI)) [ RBRACKET End ] @@ -2703,7 +2675,7 @@ contract: Attributes String SEMI String SEMI With contract: Attributes String SEMI String With ## -## Ends in an error in state: 544. +## Ends in an error in state: 542. ## ## nsepseq(String,SEMI) -> String . [ RBRACKET End ] ## nsepseq(String,SEMI) -> String . SEMI nsepseq(String,SEMI) [ RBRACKET End ] @@ -2717,7 +2689,7 @@ contract: Attributes String SEMI String With contract: Attributes String SEMI With ## -## Ends in an error in state: 543. +## Ends in an error in state: 541. ## ## nsepseq(String,SEMI) -> String SEMI . nsepseq(String,SEMI) [ RBRACKET End ] ## nseq(__anonymous_0(String,SEMI)) -> String SEMI . seq(__anonymous_0(String,SEMI)) [ RBRACKET End ] @@ -2730,7 +2702,7 @@ contract: Attributes String SEMI With contract: Attributes String With ## -## Ends in an error in state: 542. +## Ends in an error in state: 540. ## ## nsepseq(String,SEMI) -> String . [ RBRACKET End ] ## nsepseq(String,SEMI) -> String . SEMI nsepseq(String,SEMI) [ RBRACKET End ] @@ -2744,7 +2716,7 @@ contract: Attributes String With contract: Attributes With ## -## Ends in an error in state: 541. +## Ends in an error in state: 539. ## ## ne_injection(Attributes,String) -> Attributes . sep_or_term_list(String,SEMI) End [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## ne_injection(Attributes,String) -> Attributes . LBRACKET sep_or_term_list(String,SEMI) RBRACKET [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] @@ -2757,7 +2729,7 @@ contract: Attributes With contract: Const Ident COLON Ident EQ Bytes VBAR ## -## Ends in an error in state: 590. +## Ends in an error in state: 588. ## ## const_decl -> open_const_decl . option(SEMI) [ Type Recursive Function EOF Const Attributes ] ## @@ -2768,25 +2740,25 @@ contract: Const Ident COLON Ident EQ Bytes VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 498, spurious reduction of production unqualified_decl(EQ) -> Ident COLON type_expr EQ expr -## In state 499, spurious reduction of production open_const_decl -> Const unqualified_decl(EQ) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 496, spurious reduction of production unqualified_decl(EQ) -> Ident COLON type_expr EQ expr +## In state 497, spurious reduction of production open_const_decl -> Const unqualified_decl(EQ) ## contract: Const Ident COLON String EQ With ## -## Ends in an error in state: 497. +## Ends in an error in state: 495. ## ## unqualified_decl(EQ) -> Ident COLON type_expr EQ . expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## @@ -2798,7 +2770,7 @@ contract: Const Ident COLON String EQ With contract: Const Ident COLON String VBAR ## -## Ends in an error in state: 496. +## Ends in an error in state: 494. ## ## unqualified_decl(EQ) -> Ident COLON type_expr . EQ expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## @@ -2818,7 +2790,7 @@ contract: Const Ident COLON String VBAR contract: Const Ident With ## -## Ends in an error in state: 494. +## Ends in an error in state: 492. ## ## unqualified_decl(EQ) -> Ident . COLON type_expr EQ expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## @@ -2830,7 +2802,7 @@ contract: Const Ident With contract: Const With ## -## Ends in an error in state: 493. +## Ends in an error in state: 491. ## ## open_const_decl -> Const . unqualified_decl(EQ) [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## @@ -2842,7 +2814,7 @@ contract: Const With contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Bytes VBAR ## -## Ends in an error in state: 588. +## Ends in an error in state: 586. ## ## fun_decl -> open_fun_decl . option(SEMI) [ Type Recursive Function EOF Const Attributes ] ## @@ -2853,24 +2825,24 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Bytes ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 466, spurious reduction of production open_fun_decl -> Function Ident parameters COLON type_expr Is expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 464, spurious reduction of production open_fun_decl -> Function Ident parameters COLON type_expr Is expr ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Case Verbatim Of LBRACKET VBAR Block ## -## Ends in an error in state: 504. +## Ends in an error in state: 502. ## ## case(if_clause) -> Case expr Of LBRACKET option(VBAR) . cases(if_clause) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -2882,7 +2854,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Case Verbatim Of LBRACKET WILD ARROW Skip End ## -## Ends in an error in state: 533. +## Ends in an error in state: 531. ## ## case(if_clause) -> Case expr Of LBRACKET option(VBAR) cases(if_clause) . RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -2893,15 +2865,15 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 535, spurious reduction of production nsepseq(case_clause(if_clause),VBAR) -> case_clause(if_clause) -## In state 532, spurious reduction of production cases(if_clause) -> nsepseq(case_clause(if_clause),VBAR) +## In state 533, spurious reduction of production nsepseq(case_clause(if_clause),VBAR) -> case_clause(if_clause) +## In state 530, spurious reduction of production cases(if_clause) -> nsepseq(case_clause(if_clause),VBAR) ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Case Verbatim Of LBRACKET With ## -## Ends in an error in state: 503. +## Ends in an error in state: 501. ## ## case(if_clause) -> Case expr Of LBRACKET . option(VBAR) cases(if_clause) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -2913,7 +2885,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Case Verbatim Of VBAR Block ## -## Ends in an error in state: 538. +## Ends in an error in state: 536. ## ## case(if_clause) -> Case expr Of option(VBAR) . cases(if_clause) End [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -2925,7 +2897,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Case Verbatim Of WILD ARROW Skip RBRACKET ## -## Ends in an error in state: 539. +## Ends in an error in state: 537. ## ## case(if_clause) -> Case expr Of option(VBAR) cases(if_clause) . End [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -2936,15 +2908,15 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 535, spurious reduction of production nsepseq(case_clause(if_clause),VBAR) -> case_clause(if_clause) -## In state 532, spurious reduction of production cases(if_clause) -> nsepseq(case_clause(if_clause),VBAR) +## In state 533, spurious reduction of production nsepseq(case_clause(if_clause),VBAR) -> case_clause(if_clause) +## In state 530, spurious reduction of production cases(if_clause) -> nsepseq(case_clause(if_clause),VBAR) ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Case Verbatim Of WILD ARROW Skip VBAR With ## -## Ends in an error in state: 536. +## Ends in an error in state: 534. ## ## nsepseq(case_clause(if_clause),VBAR) -> case_clause(if_clause) VBAR . nsepseq(case_clause(if_clause),VBAR) [ RBRACKET End ] ## @@ -2956,7 +2928,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Case Verbatim Of WILD ARROW Skip With ## -## Ends in an error in state: 535. +## Ends in an error in state: 533. ## ## nsepseq(case_clause(if_clause),VBAR) -> case_clause(if_clause) . [ RBRACKET End ] ## nsepseq(case_clause(if_clause),VBAR) -> case_clause(if_clause) . VBAR nsepseq(case_clause(if_clause),VBAR) [ RBRACKET End ] @@ -2969,7 +2941,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Case Verbatim Of WILD ARROW With ## -## Ends in an error in state: 506. +## Ends in an error in state: 504. ## ## case_clause(if_clause) -> pattern ARROW . if_clause [ VBAR RBRACKET End ] ## @@ -2981,7 +2953,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Case Verbatim Of WILD RPAR ## -## Ends in an error in state: 505. +## Ends in an error in state: 503. ## ## case_clause(if_clause) -> pattern . ARROW if_clause [ VBAR RBRACKET End ] ## @@ -2992,14 +2964,14 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 302, spurious reduction of production pattern -> core_pattern +## In state 300, spurious reduction of production pattern -> core_pattern ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Case Verbatim Of With ## -## Ends in an error in state: 502. +## Ends in an error in state: 500. ## ## case(if_clause) -> Case expr Of . option(VBAR) cases(if_clause) End [ VBAR SEMI RBRACKET RBRACE End Else ] ## case(if_clause) -> Case expr Of . LBRACKET option(VBAR) cases(if_clause) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ] @@ -3012,7 +2984,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Case Verbatim VBAR ## -## Ends in an error in state: 501. +## Ends in an error in state: 499. ## ## case(if_clause) -> Case expr . Of option(VBAR) cases(if_clause) End [ VBAR SEMI RBRACKET RBRACE End Else ] ## case(if_clause) -> Case expr . Of LBRACKET option(VBAR) cases(if_clause) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ] @@ -3024,23 +2996,23 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Case With ## -## Ends in an error in state: 500. +## Ends in an error in state: 498. ## ## case(if_clause) -> Case . expr Of option(VBAR) cases(if_clause) End [ VBAR SEMI RBRACKET RBRACE End Else ] ## case(if_clause) -> Case . expr Of LBRACKET option(VBAR) cases(if_clause) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ] @@ -3053,7 +3025,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Constr DOT And With ## -## Ends in an error in state: 513. +## Ends in an error in state: 511. ## ## fun_call -> module_field . arguments [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3065,7 +3037,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Constr With ## -## Ends in an error in state: 492. +## Ends in an error in state: 490. ## ## module_field -> Constr . DOT module_fun [ LPAR ] ## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ LBRACKET ASS ] @@ -3078,7 +3050,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin For Ident ARROW Ident With ## -## Ends in an error in state: 476. +## Ends in an error in state: 474. ## ## for_loop -> For Ident option(arrow_clause) . In collection expr block [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3090,7 +3062,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin For Ident ARROW With ## -## Ends in an error in state: 474. +## Ends in an error in state: 472. ## ## arrow_clause -> ARROW . Ident [ In ] ## @@ -3102,7 +3074,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin For Ident ASS Bytes To Verbatim Step Verbatim VBAR ## -## Ends in an error in state: 489. +## Ends in an error in state: 487. ## ## for_loop -> For var_assign To expr Step expr . block [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3113,23 +3085,23 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin For Ident ASS Bytes To Verbatim Step With ## -## Ends in an error in state: 488. +## Ends in an error in state: 486. ## ## for_loop -> For var_assign To expr Step . expr block [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3141,7 +3113,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin For Ident ASS Bytes To Verbatim VBAR ## -## Ends in an error in state: 487. +## Ends in an error in state: 485. ## ## for_loop -> For var_assign To expr . block [ VBAR SEMI RBRACKET RBRACE End Else ] ## for_loop -> For var_assign To expr . Step expr block [ VBAR SEMI RBRACKET RBRACE End Else ] @@ -3153,23 +3125,23 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin For Ident ASS Bytes To With ## -## Ends in an error in state: 486. +## Ends in an error in state: 484. ## ## for_loop -> For var_assign To . expr block [ VBAR SEMI RBRACKET RBRACE End Else ] ## for_loop -> For var_assign To . expr Step expr block [ VBAR SEMI RBRACKET RBRACE End Else ] @@ -3182,7 +3154,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin For Ident ASS Bytes VBAR ## -## Ends in an error in state: 485. +## Ends in an error in state: 483. ## ## for_loop -> For var_assign . To expr block [ VBAR SEMI RBRACKET RBRACE End Else ] ## for_loop -> For var_assign . To expr Step expr block [ VBAR SEMI RBRACKET RBRACE End Else ] @@ -3194,24 +3166,24 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 473, spurious reduction of production var_assign -> Ident ASS expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 471, spurious reduction of production var_assign -> Ident ASS expr ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin For Ident ASS With ## -## Ends in an error in state: 472. +## Ends in an error in state: 470. ## ## var_assign -> Ident ASS . expr [ To ] ## @@ -3223,7 +3195,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin For Ident In Set Verbatim VBAR ## -## Ends in an error in state: 482. +## Ends in an error in state: 480. ## ## for_loop -> For Ident option(arrow_clause) In collection expr . block [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3234,23 +3206,23 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin For Ident In Set With ## -## Ends in an error in state: 481. +## Ends in an error in state: 479. ## ## for_loop -> For Ident option(arrow_clause) In collection . expr block [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3262,7 +3234,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin For Ident In With ## -## Ends in an error in state: 477. +## Ends in an error in state: 475. ## ## for_loop -> For Ident option(arrow_clause) In . collection expr block [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3274,7 +3246,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin For Ident With ## -## Ends in an error in state: 471. +## Ends in an error in state: 469. ## ## for_loop -> For Ident . option(arrow_clause) In collection expr block [ VBAR SEMI RBRACKET RBRACE End Else ] ## var_assign -> Ident . ASS expr [ To ] @@ -3287,7 +3259,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin For With ## -## Ends in an error in state: 470. +## Ends in an error in state: 468. ## ## for_loop -> For . var_assign To expr block [ VBAR SEMI RBRACKET RBRACE End Else ] ## for_loop -> For . var_assign To expr Step expr block [ VBAR SEMI RBRACKET RBRACE End Else ] @@ -3301,7 +3273,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Ident ASS With ## -## Ends in an error in state: 519. +## Ends in an error in state: 517. ## ## assignment -> lhs ASS . rhs [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3313,7 +3285,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Ident DOT Ident With ## -## Ends in an error in state: 512. +## Ends in an error in state: 510. ## ## lhs -> path . [ ASS ] ## map_lookup -> path . brackets(expr) [ ASS ] @@ -3325,16 +3297,16 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 129, spurious reduction of production nsepseq(selection,DOT) -> selection -## In state 162, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT) -## In state 168, spurious reduction of production path -> projection +## In state 127, spurious reduction of production nsepseq(selection,DOT) -> selection +## In state 160, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT) +## In state 166, spurious reduction of production path -> projection ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Ident LBRACKET Bytes RBRACKET With ## -## Ends in an error in state: 518. +## Ends in an error in state: 516. ## ## assignment -> lhs . ASS rhs [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3346,7 +3318,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Ident With ## -## Ends in an error in state: 459. +## Ends in an error in state: 457. ## ## fun_call -> Ident . arguments [ VBAR SEMI RBRACKET RBRACE End Else ] ## path -> Ident . [ LBRACKET ASS ] @@ -3360,7 +3332,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin If Verbatim Then LBRACE Skip End ## -## Ends in an error in state: 570. +## Ends in an error in state: 568. ## ## clause_block -> LBRACE sep_or_term_list(statement,SEMI) . RBRACE [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3371,15 +3343,15 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 556, spurious reduction of production nsepseq(statement,SEMI) -> statement -## In state 573, spurious reduction of production sep_or_term_list(statement,SEMI) -> nsepseq(statement,SEMI) +## In state 554, spurious reduction of production nsepseq(statement,SEMI) -> statement +## In state 571, spurious reduction of production sep_or_term_list(statement,SEMI) -> nsepseq(statement,SEMI) ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin If Verbatim Then LBRACE With ## -## Ends in an error in state: 458. +## Ends in an error in state: 456. ## ## clause_block -> LBRACE . sep_or_term_list(statement,SEMI) RBRACE [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3391,7 +3363,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin If Verbatim Then Skip Else With ## -## Ends in an error in state: 576. +## Ends in an error in state: 574. ## ## conditional -> If expr Then if_clause option(SEMI) Else . if_clause [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3403,7 +3375,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin If Verbatim Then Skip SEMI EQ ## -## Ends in an error in state: 575. +## Ends in an error in state: 573. ## ## conditional -> If expr Then if_clause option(SEMI) . Else if_clause [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3415,7 +3387,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin If Verbatim Then Skip With ## -## Ends in an error in state: 574. +## Ends in an error in state: 572. ## ## conditional -> If expr Then if_clause . option(SEMI) Else if_clause [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3427,7 +3399,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin If Verbatim Then With ## -## Ends in an error in state: 457. +## Ends in an error in state: 455. ## ## conditional -> If expr Then . if_clause option(SEMI) Else if_clause [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3439,7 +3411,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin If Verbatim VBAR ## -## Ends in an error in state: 456. +## Ends in an error in state: 454. ## ## conditional -> If expr . Then if_clause option(SEMI) Else if_clause [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3450,23 +3422,23 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin If With ## -## Ends in an error in state: 455. +## Ends in an error in state: 453. ## ## conditional -> If . expr Then if_clause option(SEMI) Else if_clause [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3478,7 +3450,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Patch Ident VBAR ## -## Ends in an error in state: 432. +## Ends in an error in state: 430. ## ## map_patch -> Patch path . With ne_injection(Map,binding) [ VBAR SEMI RBRACKET RBRACE End Else ] ## record_patch -> Patch path . With ne_injection(Record,field_assignment) [ VBAR SEMI RBRACKET RBRACE End Else ] @@ -3491,14 +3463,14 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 160, spurious reduction of production path -> Ident +## In state 158, spurious reduction of production path -> Ident ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Patch Ident With Map LBRACKET Verbatim ARROW Bytes End ## -## Ends in an error in state: 448. +## Ends in an error in state: 446. ## ## ne_injection(Map,binding) -> Map LBRACKET sep_or_term_list(binding,SEMI) . RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3509,28 +3481,27 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 252, spurious reduction of production binding -> expr ARROW expr -## In state 253, spurious reduction of production nsepseq(binding,SEMI) -> binding -## In state 249, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 250, spurious reduction of production binding -> expr ARROW expr +## In state 251, spurious reduction of production nsepseq(binding,SEMI) -> binding +## In state 247, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI) ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Patch Ident With Map LBRACKET With ## -## Ends in an error in state: 447. +## Ends in an error in state: 445. ## -## code_insert_expr -> LBRACKET . PERCENT Constr expr RBRACKET [ TIMES SLASH PLUS Or NE Mod MINUS LT LE GT GE EQ Contains CONS CAT And ARROW ] ## ne_injection(Map,binding) -> Map LBRACKET . sep_or_term_list(binding,SEMI) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ] ## ## The known suffix of the stack is as follows: @@ -3541,7 +3512,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Patch Ident With Map Verbatim ARROW Bytes RBRACKET ## -## Ends in an error in state: 450. +## Ends in an error in state: 448. ## ## ne_injection(Map,binding) -> Map sep_or_term_list(binding,SEMI) . End [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3552,26 +3523,26 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 252, spurious reduction of production binding -> expr ARROW expr -## In state 253, spurious reduction of production nsepseq(binding,SEMI) -> binding -## In state 249, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 250, spurious reduction of production binding -> expr ARROW expr +## In state 251, spurious reduction of production nsepseq(binding,SEMI) -> binding +## In state 247, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI) ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Patch Ident With Map With ## -## Ends in an error in state: 446. +## Ends in an error in state: 444. ## ## ne_injection(Map,binding) -> Map . sep_or_term_list(binding,SEMI) End [ VBAR SEMI RBRACKET RBRACE End Else ] ## ne_injection(Map,binding) -> Map . LBRACKET sep_or_term_list(binding,SEMI) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ] @@ -3584,7 +3555,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Patch Ident With Record Ident EQ Bytes RBRACKET ## -## Ends in an error in state: 444. +## Ends in an error in state: 442. ## ## ne_injection(Record,field_assignment) -> Record sep_or_term_list(field_assignment,SEMI) . End [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3595,26 +3566,26 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 390, spurious reduction of production field_assignment -> Ident EQ expr -## In state 395, spurious reduction of production nsepseq(field_assignment,SEMI) -> field_assignment -## In state 394, spurious reduction of production sep_or_term_list(field_assignment,SEMI) -> nsepseq(field_assignment,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 388, spurious reduction of production field_assignment -> Ident EQ expr +## In state 393, spurious reduction of production nsepseq(field_assignment,SEMI) -> field_assignment +## In state 392, spurious reduction of production sep_or_term_list(field_assignment,SEMI) -> nsepseq(field_assignment,SEMI) ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Patch Ident With Record LBRACKET Ident EQ Bytes End ## -## Ends in an error in state: 442. +## Ends in an error in state: 440. ## ## ne_injection(Record,field_assignment) -> Record LBRACKET sep_or_term_list(field_assignment,SEMI) . RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3625,26 +3596,26 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 390, spurious reduction of production field_assignment -> Ident EQ expr -## In state 395, spurious reduction of production nsepseq(field_assignment,SEMI) -> field_assignment -## In state 394, spurious reduction of production sep_or_term_list(field_assignment,SEMI) -> nsepseq(field_assignment,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 388, spurious reduction of production field_assignment -> Ident EQ expr +## In state 393, spurious reduction of production nsepseq(field_assignment,SEMI) -> field_assignment +## In state 392, spurious reduction of production sep_or_term_list(field_assignment,SEMI) -> nsepseq(field_assignment,SEMI) ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Patch Ident With Record LBRACKET With ## -## Ends in an error in state: 441. +## Ends in an error in state: 439. ## ## ne_injection(Record,field_assignment) -> Record LBRACKET . sep_or_term_list(field_assignment,SEMI) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3656,7 +3627,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Patch Ident With Record With ## -## Ends in an error in state: 440. +## Ends in an error in state: 438. ## ## ne_injection(Record,field_assignment) -> Record . sep_or_term_list(field_assignment,SEMI) End [ VBAR SEMI RBRACKET RBRACE End Else ] ## ne_injection(Record,field_assignment) -> Record . LBRACKET sep_or_term_list(field_assignment,SEMI) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ] @@ -3669,7 +3640,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Patch Ident With Set LBRACKET Verbatim End ## -## Ends in an error in state: 436. +## Ends in an error in state: 434. ## ## ne_injection(Set,expr) -> Set LBRACKET sep_or_term_list(expr,SEMI) . RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3680,27 +3651,26 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 371, spurious reduction of production nsepseq(expr,SEMI) -> expr -## In state 370, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 369, spurious reduction of production nsepseq(expr,SEMI) -> expr +## In state 368, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI) ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Patch Ident With Set LBRACKET With ## -## Ends in an error in state: 435. +## Ends in an error in state: 433. ## -## code_insert_expr -> LBRACKET . PERCENT Constr expr RBRACKET [ TIMES SLASH SEMI PLUS Or NE Mod MINUS LT LE GT GE End EQ Contains CONS CAT And ] ## ne_injection(Set,expr) -> Set LBRACKET . sep_or_term_list(expr,SEMI) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ] ## ## The known suffix of the stack is as follows: @@ -3711,7 +3681,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Patch Ident With Set Verbatim RBRACKET ## -## Ends in an error in state: 438. +## Ends in an error in state: 436. ## ## ne_injection(Set,expr) -> Set sep_or_term_list(expr,SEMI) . End [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3722,25 +3692,25 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr -## In state 371, spurious reduction of production nsepseq(expr,SEMI) -> expr -## In state 370, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI) +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr +## In state 369, spurious reduction of production nsepseq(expr,SEMI) -> expr +## In state 368, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI) ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Patch Ident With Set With ## -## Ends in an error in state: 434. +## Ends in an error in state: 432. ## ## ne_injection(Set,expr) -> Set . sep_or_term_list(expr,SEMI) End [ VBAR SEMI RBRACKET RBRACE End Else ] ## ne_injection(Set,expr) -> Set . LBRACKET sep_or_term_list(expr,SEMI) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ] @@ -3753,7 +3723,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Patch Ident With With ## -## Ends in an error in state: 433. +## Ends in an error in state: 431. ## ## map_patch -> Patch path With . ne_injection(Map,binding) [ VBAR SEMI RBRACKET RBRACE End Else ] ## record_patch -> Patch path With . ne_injection(Record,field_assignment) [ VBAR SEMI RBRACKET RBRACE End Else ] @@ -3767,7 +3737,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Patch With ## -## Ends in an error in state: 431. +## Ends in an error in state: 429. ## ## map_patch -> Patch . path With ne_injection(Map,binding) [ VBAR SEMI RBRACKET RBRACE End Else ] ## record_patch -> Patch . path With ne_injection(Record,field_assignment) [ VBAR SEMI RBRACKET RBRACE End Else ] @@ -3781,7 +3751,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Remove Verbatim From Map With ## -## Ends in an error in state: 429. +## Ends in an error in state: 427. ## ## map_remove -> Remove expr From Map . path [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3793,7 +3763,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Remove Verbatim From Set With ## -## Ends in an error in state: 427. +## Ends in an error in state: 425. ## ## set_remove -> Remove expr From Set . path [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3805,7 +3775,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Remove Verbatim From With ## -## Ends in an error in state: 426. +## Ends in an error in state: 424. ## ## map_remove -> Remove expr From . Map path [ VBAR SEMI RBRACKET RBRACE End Else ] ## set_remove -> Remove expr From . Set path [ VBAR SEMI RBRACKET RBRACE End Else ] @@ -3818,7 +3788,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Remove Verbatim VBAR ## -## Ends in an error in state: 425. +## Ends in an error in state: 423. ## ## map_remove -> Remove expr . From Map path [ VBAR SEMI RBRACKET RBRACE End Else ] ## set_remove -> Remove expr . From Set path [ VBAR SEMI RBRACKET RBRACE End Else ] @@ -3830,23 +3800,23 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Remove With ## -## Ends in an error in state: 424. +## Ends in an error in state: 422. ## ## map_remove -> Remove . expr From Map path [ VBAR SEMI RBRACKET RBRACE End Else ] ## set_remove -> Remove . expr From Set path [ VBAR SEMI RBRACKET RBRACE End Else ] @@ -3859,7 +3829,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Skip End While ## -## Ends in an error in state: 467. +## Ends in an error in state: 465. ## ## open_fun_decl -> Function Ident parameters COLON type_expr Is block . With expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## @@ -3871,7 +3841,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Skip End With With ## -## Ends in an error in state: 468. +## Ends in an error in state: 466. ## ## open_fun_decl -> Function Ident parameters COLON type_expr Is block With . expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## @@ -3883,7 +3853,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Skip RBRACE ## -## Ends in an error in state: 578. +## Ends in an error in state: 576. ## ## block -> Begin sep_or_term_list(statement,SEMI) . End [ With VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -3894,15 +3864,15 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 556, spurious reduction of production nsepseq(statement,SEMI) -> statement -## In state 573, spurious reduction of production sep_or_term_list(statement,SEMI) -> nsepseq(statement,SEMI) +## In state 554, spurious reduction of production nsepseq(statement,SEMI) -> statement +## In state 571, spurious reduction of production sep_or_term_list(statement,SEMI) -> nsepseq(statement,SEMI) ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Skip SEMI Skip SEMI With ## -## Ends in an error in state: 559. +## Ends in an error in state: 557. ## ## nsepseq(statement,SEMI) -> statement SEMI . nsepseq(statement,SEMI) [ RBRACE End ] ## seq(__anonymous_0(statement,SEMI)) -> statement SEMI . seq(__anonymous_0(statement,SEMI)) [ RBRACE End ] @@ -3915,7 +3885,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Skip SEMI Skip With ## -## Ends in an error in state: 558. +## Ends in an error in state: 556. ## ## nsepseq(statement,SEMI) -> statement . [ RBRACE End ] ## nsepseq(statement,SEMI) -> statement . SEMI nsepseq(statement,SEMI) [ RBRACE End ] @@ -3929,7 +3899,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Skip SEMI With ## -## Ends in an error in state: 557. +## Ends in an error in state: 555. ## ## nsepseq(statement,SEMI) -> statement SEMI . nsepseq(statement,SEMI) [ RBRACE End ] ## nseq(__anonymous_0(statement,SEMI)) -> statement SEMI . seq(__anonymous_0(statement,SEMI)) [ RBRACE End ] @@ -3942,7 +3912,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Skip With ## -## Ends in an error in state: 556. +## Ends in an error in state: 554. ## ## nsepseq(statement,SEMI) -> statement . [ RBRACE End ] ## nsepseq(statement,SEMI) -> statement . SEMI nsepseq(statement,SEMI) [ RBRACE End ] @@ -3956,7 +3926,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Var Ident COLON String ASS With ## -## Ends in an error in state: 420. +## Ends in an error in state: 418. ## ## unqualified_decl(ASS) -> Ident COLON type_expr ASS . expr [ SEMI RBRACE End ] ## @@ -3968,7 +3938,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Var Ident COLON String VBAR ## -## Ends in an error in state: 419. +## Ends in an error in state: 417. ## ## unqualified_decl(ASS) -> Ident COLON type_expr . ASS expr [ SEMI RBRACE End ] ## @@ -3988,7 +3958,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Var Ident With ## -## Ends in an error in state: 417. +## Ends in an error in state: 415. ## ## unqualified_decl(ASS) -> Ident . COLON type_expr ASS expr [ SEMI RBRACE End ] ## @@ -4000,7 +3970,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Var With ## -## Ends in an error in state: 416. +## Ends in an error in state: 414. ## ## open_var_decl -> Var . unqualified_decl(ASS) [ SEMI RBRACE End ] ## @@ -4012,7 +3982,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin While Verbatim VBAR ## -## Ends in an error in state: 414. +## Ends in an error in state: 412. ## ## while_loop -> While expr . block [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -4023,23 +3993,23 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 199, spurious reduction of production unary_expr -> core_expr -## In state 146, spurious reduction of production mult_expr -> unary_expr -## In state 175, spurious reduction of production add_expr -> mult_expr -## In state 205, spurious reduction of production cons_expr -> add_expr -## In state 202, spurious reduction of production cat_expr -> cons_expr -## In state 225, spurious reduction of production comp_expr -> cat_expr -## In state 212, spurious reduction of production set_membership -> comp_expr -## In state 148, spurious reduction of production conj_expr -> set_membership -## In state 229, spurious reduction of production disj_expr -> conj_expr -## In state 197, spurious reduction of production expr -> disj_expr +## In state 197, spurious reduction of production unary_expr -> core_expr +## In state 144, spurious reduction of production mult_expr -> unary_expr +## In state 173, spurious reduction of production add_expr -> mult_expr +## In state 203, spurious reduction of production cons_expr -> add_expr +## In state 200, spurious reduction of production cat_expr -> cons_expr +## In state 223, spurious reduction of production comp_expr -> cat_expr +## In state 210, spurious reduction of production set_membership -> comp_expr +## In state 146, spurious reduction of production conj_expr -> set_membership +## In state 227, spurious reduction of production disj_expr -> conj_expr +## In state 195, spurious reduction of production expr -> disj_expr ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin While With ## -## Ends in an error in state: 413. +## Ends in an error in state: 411. ## ## while_loop -> While . expr block [ VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -4051,7 +4021,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin With ## -## Ends in an error in state: 415. +## Ends in an error in state: 413. ## ## block -> Begin . sep_or_term_list(statement,SEMI) End [ With VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -4063,7 +4033,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Block LBRACE Skip End ## -## Ends in an error in state: 581. +## Ends in an error in state: 579. ## ## block -> Block LBRACE sep_or_term_list(statement,SEMI) . RBRACE [ With VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -4074,15 +4044,15 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Block ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 556, spurious reduction of production nsepseq(statement,SEMI) -> statement -## In state 573, spurious reduction of production sep_or_term_list(statement,SEMI) -> nsepseq(statement,SEMI) +## In state 554, spurious reduction of production nsepseq(statement,SEMI) -> statement +## In state 571, spurious reduction of production sep_or_term_list(statement,SEMI) -> nsepseq(statement,SEMI) ## contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Block LBRACE With ## -## Ends in an error in state: 412. +## Ends in an error in state: 410. ## ## block -> Block LBRACE . sep_or_term_list(statement,SEMI) RBRACE [ With VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -4094,7 +4064,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Block contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Block With ## -## Ends in an error in state: 411. +## Ends in an error in state: 409. ## ## block -> Block . LBRACE sep_or_term_list(statement,SEMI) RBRACE [ With VBAR SEMI RBRACKET RBRACE End Else ] ## @@ -4106,7 +4076,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Block contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is With ## -## Ends in an error in state: 465. +## Ends in an error in state: 463. ## ## open_fun_decl -> Function Ident parameters COLON type_expr Is . block With expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## open_fun_decl -> Function Ident parameters COLON type_expr Is . expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] @@ -4119,7 +4089,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is With contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String VBAR ## -## Ends in an error in state: 464. +## Ends in an error in state: 462. ## ## open_fun_decl -> Function Ident parameters COLON type_expr . Is block With expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## open_fun_decl -> Function Ident parameters COLON type_expr . Is expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] @@ -4140,7 +4110,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON String VBAR contract: Function Ident LPAR Const Ident COLON Ident RPAR With ## -## Ends in an error in state: 462. +## Ends in an error in state: 460. ## ## open_fun_decl -> Function Ident parameters . COLON type_expr Is block With expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## open_fun_decl -> Function Ident parameters . COLON type_expr Is expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] @@ -4153,7 +4123,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR With contract: Function Ident With ## -## Ends in an error in state: 461. +## Ends in an error in state: 459. ## ## open_fun_decl -> Function Ident . parameters COLON type_expr Is block With expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## open_fun_decl -> Function Ident . parameters COLON type_expr Is expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] @@ -4166,7 +4136,7 @@ contract: Function Ident With contract: Function With ## -## Ends in an error in state: 460. +## Ends in an error in state: 458. ## ## open_fun_decl -> Function . Ident parameters COLON type_expr Is block With expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## open_fun_decl -> Function . Ident parameters COLON type_expr Is expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] @@ -4179,7 +4149,7 @@ contract: Function With contract: Recursive Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Skip End While ## -## Ends in an error in state: 584. +## Ends in an error in state: 582. ## ## open_fun_decl -> Recursive Function Ident parameters COLON type_expr Is block . With expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## @@ -4191,7 +4161,7 @@ contract: Recursive Function Ident LPAR Const Ident COLON Ident RPAR COLON Strin contract: Recursive Function Ident LPAR Const Ident COLON Ident RPAR COLON String Is Begin Skip End With With ## -## Ends in an error in state: 585. +## Ends in an error in state: 583. ## ## open_fun_decl -> Recursive Function Ident parameters COLON type_expr Is block With . expr [ Type SEMI Recursive RBRACE Function End EOF Const Attributes ] ## diff --git a/src/passes/01-parser/reasonligo/LexToken.mli b/src/passes/01-parser/reasonligo/LexToken.mli index 7a5de35d3..3f91a0f71 100644 --- a/src/passes/01-parser/reasonligo/LexToken.mli +++ b/src/passes/01-parser/reasonligo/LexToken.mli @@ -29,9 +29,22 @@ type lexeme = string (* TOKENS *) type t = + (* Identifiers, labels, numbers and strings *) + +| Ident of string Region.reg +| Constr of string Region.reg +| Int of (string * Z.t) Region.reg +| Nat of (string * Z.t) Region.reg +| Mutez of (string * Z.t) Region.reg +| String of string Region.reg +| Verbatim of string Region.reg +| Bytes of (string * Hex.t) Region.reg +| Attr of string Region.reg +| Lang of lexeme Region.reg Region.reg + (* Symbols *) - CAT of Region.t (* "++" *) +| CAT of Region.t (* "++" *) (* Arithmetics *) @@ -39,7 +52,6 @@ type t = | PLUS of Region.t (* "+" *) | SLASH of Region.t (* "/" *) | TIMES of Region.t (* "*" *) -| PERCENT of Region.t (* "%" *) (* Compounds *) @@ -80,18 +92,6 @@ type t = | BOOL_AND of Region.t (* "&&" *) | NOT of Region.t (* ! *) - (* Identifiers, labels, numbers and strings *) - -| Ident of string Region.reg -| Constr of string Region.reg -| Int of (string * Z.t) Region.reg -| Nat of (string * Z.t) Region.reg -| Mutez of (string * Z.t) Region.reg -| String of string Region.reg -| Verbatim of string Region.reg -| Bytes of (string * Hex.t) Region.reg -| Attr of string Region.reg - (* Keywords *) | Else of Region.t @@ -147,13 +147,14 @@ val mk_int : lexeme -> Region.t -> (token, int_err) result val mk_nat : lexeme -> Region.t -> (token, nat_err) result val mk_mutez : lexeme -> Region.t -> (token, int_err) result val mk_ident : lexeme -> Region.t -> (token, ident_err) result -val mk_attr : string -> lexeme -> Region.t -> (token, attr_err) result val mk_sym : lexeme -> Region.t -> (token, sym_err) result val mk_kwd : lexeme -> Region.t -> (token, kwd_err) result val mk_string : lexeme -> Region.t -> token val mk_verbatim : lexeme -> Region.t -> token val mk_bytes : lexeme -> Region.t -> token val mk_constr : lexeme -> Region.t -> token +val mk_attr : string -> lexeme -> Region.t -> (token, attr_err) result +val mk_lang : lexeme Region.reg -> Region.t -> token val eof : Region.t -> token (* Predicates *) diff --git a/src/passes/01-parser/reasonligo/LexToken.mll b/src/passes/01-parser/reasonligo/LexToken.mll index 360c23a7a..4e7fa6079 100644 --- a/src/passes/01-parser/reasonligo/LexToken.mll +++ b/src/passes/01-parser/reasonligo/LexToken.mll @@ -15,9 +15,22 @@ let sprintf = Printf.sprintf (* TOKENS *) type t = + (* Identifiers, labels, numbers and strings *) + +| Ident of string Region.reg +| Constr of string Region.reg +| Int of (string * Z.t) Region.reg +| Nat of (string * Z.t) Region.reg +| Mutez of (string * Z.t) Region.reg +| String of string Region.reg +| Verbatim of string Region.reg +| Bytes of (string * Hex.t) Region.reg +| Attr of string Region.reg +| Lang of lexeme Region.reg Region.reg + (* Symbols *) - CAT of Region.t (* "++" *) +| CAT of Region.t (* "++" *) (* Arithmetics *) @@ -25,7 +38,6 @@ type t = | PLUS of Region.t (* "+" *) | SLASH of Region.t (* "/" *) | TIMES of Region.t (* "*" *) -| PERCENT of Region.t (* "%" *) (* Compounds *) @@ -66,18 +78,6 @@ type t = | BOOL_AND of Region.t (* "&&" *) | NOT of Region.t (* ! *) - (* Identifiers, labels, numbers and strings *) - -| Ident of string Region.reg -| Constr of string Region.reg -| Int of (string * Z.t) Region.reg -| Nat of (string * Z.t) Region.reg -| Mutez of (string * Z.t) Region.reg -| String of string Region.reg -| Verbatim of string Region.reg -| Bytes of (string * Hex.t) Region.reg -| Attr of string Region.reg - (* Keywords *) | Else of Region.t @@ -109,22 +109,26 @@ let proj_token = function (* Literals *) String Region.{region; value} -> - region, sprintf "String %s" value + region, sprintf "String %S" value | Verbatim Region.{region; value} -> - region, sprintf "Verbatim {|%s|}" value + region, sprintf "Verbatim %S" value | Bytes Region.{region; value = s,b} -> region, - sprintf "Bytes (\"%s\", \"0x%s\")" s (Hex.show b) + sprintf "Bytes (%S, \"0x%s\")" s (Hex.show b) | Int Region.{region; value = s,n} -> - region, sprintf "Int (\"%s\", %s)" s (Z.to_string n) + region, sprintf "Int (%S, %s)" s (Z.to_string n) | Nat Region.{region; value = s,n} -> - region, sprintf "Nat (\"%s\", %s)" s (Z.to_string n) + region, sprintf "Nat (%S, %s)" s (Z.to_string n) | Mutez Region.{region; value = s,n} -> - region, sprintf "Mutez (\"%s\", %s)" s (Z.to_string n) + region, sprintf "Mutez (%S, %s)" s (Z.to_string n) | Ident Region.{region; value} -> - region, sprintf "Ident %s" value + region, sprintf "Ident %S" value | Constr Region.{region; value} -> - region, sprintf "Constr %s" value + region, sprintf "Constr %S" value +| Attr Region.{region; value} -> + region, sprintf "Attr %S" value +| Lang Region.{region; value} -> + region, sprintf "Lang %S" (value.Region.value) (* Symbols *) @@ -133,7 +137,6 @@ let proj_token = function | PLUS region -> region, "PLUS" | SLASH region -> region, "SLASH" | TIMES region -> region, "TIMES" -| PERCENT region -> region, "PERCENT" | LPAR region -> region, "LPAR" | RPAR region -> region, "RPAR" | LBRACKET region -> region, "LBRACKET" @@ -170,7 +173,6 @@ let proj_token = function | Type region -> region, "Type" | C_None region -> region, "C_None" | C_Some region -> region, "C_Some" -| Attr Region.{region; value} -> region, sprintf "Attr %s" value | EOF region -> region, "EOF" let to_lexeme = function @@ -185,6 +187,7 @@ let to_lexeme = function | Ident id -> id.Region.value | Constr id -> id.Region.value | Attr a -> a.Region.value +| Lang lang -> Region.(lang.value.value) (* Symbols *) @@ -193,7 +196,6 @@ let to_lexeme = function | PLUS _ -> "+" | SLASH _ -> "/" | TIMES _ -> "*" -| PERCENT _ -> "%" | LPAR _ -> "(" | RPAR _ -> ")" | LBRACKET _ -> "[" @@ -432,7 +434,6 @@ let mk_sym lexeme region = | "+" -> Ok (PLUS region) | "/" -> Ok (SLASH region) | "*" -> Ok (TIMES region) - | "%" -> Ok (PERCENT region) | "[" -> Ok (LBRACKET region) | "]" -> Ok (RBRACKET region) | "{" -> Ok (LBRACE region) @@ -488,6 +489,10 @@ let mk_attr header lexeme region = Ok (Attr Region.{value=lexeme; region}) else Error Invalid_attribute +(* Language injection *) + +let mk_lang lang region = Lang Region.{value=lang; region} + (* Predicates *) let is_string = function String _ -> true | _ -> false @@ -549,7 +554,7 @@ let check_right_context token next_token buffer : unit = else () else if is_bytes token - then if is_string next || is_ident next + then if is_string next || is_ident next then fail region Missing_break else if is_int next then fail region Odd_lengthed_bytes diff --git a/src/passes/01-parser/reasonligo/ParToken.mly b/src/passes/01-parser/reasonligo/ParToken.mly index 13b56efb8..01bbc839c 100644 --- a/src/passes/01-parser/reasonligo/ParToken.mly +++ b/src/passes/01-parser/reasonligo/ParToken.mly @@ -5,15 +5,16 @@ (* Literals *) -%token String "" -%token Verbatim "" -%token <(LexToken.lexeme * Hex.t) Region.reg> Bytes "" -%token <(string * Z.t) Region.reg> Int "" -%token <(string * Z.t) Region.reg> Nat "" -%token <(string * Z.t) Region.reg> Mutez "" -%token Ident "" -%token Constr "" -%token Attr "" +%token String "" +%token Verbatim "" +%token <(LexToken.lexeme * Hex.t) Region.reg> Bytes "" +%token <(string * Z.t) Region.reg> Int "" +%token <(string * Z.t) Region.reg> Nat "" +%token <(string * Z.t) Region.reg> Mutez "" +%token Ident "" +%token Constr "" +%token Attr "" +%token Lang "" (* Symbols *) @@ -21,7 +22,6 @@ %token PLUS "+" %token SLASH "/" %token TIMES "*" -%token PERCENT "%" %token LPAR "(" %token RPAR ")" diff --git a/src/passes/01-parser/reasonligo/Parser.mly b/src/passes/01-parser/reasonligo/Parser.mly index a564c9152..003128f61 100644 --- a/src/passes/01-parser/reasonligo/Parser.mly +++ b/src/passes/01-parser/reasonligo/Parser.mly @@ -801,20 +801,20 @@ call_expr: in ECall {region; value} } common_expr: - "" { EArith (Int $1) } -| "" { EArith (Mutez $1) } -| "" { EArith (Nat $1) } -| "" { EBytes $1 } -| "" | module_field { EVar $1 } -| projection { EProj $1 } -| "_" { EVar {value = "_"; region = $1} } -| update_record { EUpdate $1 } -| "" { EString (String $1) } -| "" { EString (Verbatim $1) } -| unit { EUnit $1 } -| "false" { ELogic (BoolExpr (False $1)) } -| "true" { ELogic (BoolExpr (True $1)) } -| code_insert { ECodeInsert $1 } + "" { EArith (Int $1) } +| "" { EArith (Mutez $1) } +| "" { EArith (Nat $1) } +| "" { EBytes $1 } +| "" | module_field { EVar $1 } +| projection { EProj $1 } +| "_" { EVar {value = "_"; region = $1} } +| update_record { EUpdate $1 } +| "" { EString (String $1) } +| "" { EString (Verbatim $1) } +| unit { EUnit $1 } +| "false" { ELogic (BoolExpr (False $1)) } +| "true" { ELogic (BoolExpr (True $1)) } +| code_inj { ECodeInj $1 } core_expr_2: common_expr { $1 } @@ -920,15 +920,10 @@ update_record: rbrace = $6} in {region; value} } -code_insert: - "[" "%" Constr expr "]" { - let region = cover $1 $5 in - let value = { - lbracket =$1; - percent =$2; - language =$3; - code =$4; - rbracket =$5} +code_inj: + "" expr "]" { + let region = cover $1.region $3 + and value = {language=$1; code=$2; rbracket=$3} in {region; value} } expr_with_let_expr: diff --git a/src/passes/01-parser/reasonligo/Pretty.ml b/src/passes/01-parser/reasonligo/Pretty.ml index 284a00360..a9e566c47 100644 --- a/src/passes/01-parser/reasonligo/Pretty.ml +++ b/src/passes/01-parser/reasonligo/Pretty.ml @@ -159,7 +159,7 @@ and pp_expr = function | ELetIn e -> pp_let_in e | EFun e -> pp_fun e | ESeq e -> pp_seq e -| ECodeInsert e -> pp_code_insert e +| ECodeInj e -> pp_code_inj e and pp_case_expr {value; _} = let {expr; cases; _} = value in @@ -180,7 +180,7 @@ and pp_clause {value; _} = and pp_cond_expr {value; _} = let {test; ifso; kwd_else; ifnot; _} = value in let if_then = - string "if" ^^ string " (" ^^ pp_expr test ^^ string ")" ^^ string " {" ^^ break 0 + string "if" ^^ string " (" ^^ pp_expr test ^^ string ")" ^^ string " {" ^^ break 0 ^^ group (nest 2 (break 2 ^^ pp_expr ifso)) ^^ hardline ^^ string "}" in if kwd_else#is_ghost then if_then @@ -320,11 +320,11 @@ and pp_update {value; _} = string "{..." ^^ record ^^ string "," ^^ nest 2 (break 1 ^^ updates ^^ string "}") -and pp_code_insert {value; _} = +and pp_code_inj {value; _} = let {language; code; _} = value in - let language = pp_string language - and code = pp_expr code in - string "[%" ^^ language ^^ string " " ^^ code ^^ string " ]" + let language = pp_string language.value + and code = pp_expr code in + string "[%" ^^ language ^/^ code ^^ string "]" and pp_field_path_assign {value; _} = let {field_path; field_expr; _} = value in diff --git a/src/passes/01-parser/reasonligo/error.messages.checked-in b/src/passes/01-parser/reasonligo/error.messages.checked-in index 80ce7b399..3b0ab3715 100644 --- a/src/passes/01-parser/reasonligo/error.messages.checked-in +++ b/src/passes/01-parser/reasonligo/error.messages.checked-in @@ -1,6 +1,6 @@ interactive_expr: C_None WILD ## -## Ends in an error in state: 179. +## Ends in an error in state: 178. ## ## call_expr_level -> call_expr_level_in . option(type_annotation_simple) [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -12,7 +12,7 @@ interactive_expr: C_None WILD interactive_expr: C_Some VBAR ## -## Ends in an error in state: 131. +## Ends in an error in state: 130. ## ## constr_expr -> C_Some . core_expr [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -24,7 +24,7 @@ interactive_expr: C_Some VBAR interactive_expr: Constr DOT Ident WILD ## -## Ends in an error in state: 113. +## Ends in an error in state: 114. ## ## module_fun -> Ident . [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## projection -> Constr DOT Ident . selection [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -37,7 +37,7 @@ interactive_expr: Constr DOT Ident WILD interactive_expr: Constr DOT WILD ## -## Ends in an error in state: 111. +## Ends in an error in state: 112. ## ## module_field -> Constr DOT . module_fun [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## projection -> Constr DOT . Ident selection [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -50,7 +50,7 @@ interactive_expr: Constr DOT WILD interactive_expr: Constr Switch ## -## Ends in an error in state: 110. +## Ends in an error in state: 111. ## ## constr_expr -> Constr . core_expr [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## constr_expr -> Constr . [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -65,7 +65,7 @@ interactive_expr: Constr Switch interactive_expr: Ident DOT Ident WILD ## -## Ends in an error in state: 105. +## Ends in an error in state: 106. ## ## selection -> DOT Ident . selection [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## selection -> DOT Ident . [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -78,7 +78,7 @@ interactive_expr: Ident DOT Ident WILD interactive_expr: Ident DOT WILD ## -## Ends in an error in state: 104. +## Ends in an error in state: 105. ## ## selection -> DOT . Ident selection [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## selection -> DOT . Ident [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -91,7 +91,7 @@ interactive_expr: Ident DOT WILD interactive_expr: Ident LBRACKET Int RBRACKET WILD ## -## Ends in an error in state: 103. +## Ends in an error in state: 104. ## ## selection -> LBRACKET Int RBRACKET . selection [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## selection -> LBRACKET Int RBRACKET . [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -104,7 +104,7 @@ interactive_expr: Ident LBRACKET Int RBRACKET WILD interactive_expr: Ident LBRACKET Int WILD ## -## Ends in an error in state: 102. +## Ends in an error in state: 103. ## ## selection -> LBRACKET Int . RBRACKET selection [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## selection -> LBRACKET Int . RBRACKET [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -117,7 +117,7 @@ interactive_expr: Ident LBRACKET Int WILD interactive_expr: Ident LBRACKET WILD ## -## Ends in an error in state: 101. +## Ends in an error in state: 102. ## ## selection -> LBRACKET . Int RBRACKET selection [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## selection -> LBRACKET . Int RBRACKET [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -130,7 +130,7 @@ interactive_expr: Ident LBRACKET WILD interactive_expr: Ident WILD ## -## Ends in an error in state: 100. +## Ends in an error in state: 101. ## ## common_expr -> Ident . [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## projection -> Ident . selection [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -143,7 +143,7 @@ interactive_expr: Ident WILD interactive_expr: If LBRACE VBAR ## -## Ends in an error in state: 233. +## Ends in an error in state: 232. ## ## parenthesized_expr -> LBRACE . expr RBRACE [ LBRACE ] ## @@ -155,7 +155,7 @@ interactive_expr: If LBRACE VBAR interactive_expr: If LBRACE WILD VBAR ## -## Ends in an error in state: 234. +## Ends in an error in state: 233. ## ## parenthesized_expr -> LBRACE expr . RBRACE [ LBRACE ] ## @@ -166,26 +166,26 @@ interactive_expr: If LBRACE WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond ## interactive_expr: If LPAR VBAR ## -## Ends in an error in state: 99. +## Ends in an error in state: 100. ## ## parenthesized_expr -> LPAR . expr RPAR [ LBRACE ] ## @@ -197,7 +197,7 @@ interactive_expr: If LPAR VBAR interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR LBRACE VBAR ## -## Ends in an error in state: 357. +## Ends in an error in state: 352. ## ## if_then_else(closed_if) -> If parenthesized_expr LBRACE . closed_if option(SEMI) RBRACE Else LBRACE closed_if option(SEMI) RBRACE [ SEMI RBRACE ] ## @@ -209,7 +209,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR LBRACE VBAR interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR LBRACE WILD RBRACE Else LBRACE VBAR ## -## Ends in an error in state: 417. +## Ends in an error in state: 412. ## ## if_then_else(closed_if) -> If parenthesized_expr LBRACE closed_if option(SEMI) RBRACE Else LBRACE . closed_if option(SEMI) RBRACE [ SEMI RBRACE ] ## @@ -221,7 +221,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR LBRACE WILD RBRACE interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR LBRACE WILD RBRACE Else LBRACE WILD SEMI PLUS ## -## Ends in an error in state: 419. +## Ends in an error in state: 414. ## ## if_then_else(closed_if) -> If parenthesized_expr LBRACE closed_if option(SEMI) RBRACE Else LBRACE closed_if option(SEMI) . RBRACE [ SEMI RBRACE ] ## @@ -233,7 +233,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR LBRACE WILD RBRACE interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR LBRACE WILD RBRACE Else LBRACE WILD VBAR ## -## Ends in an error in state: 418. +## Ends in an error in state: 413. ## ## if_then_else(closed_if) -> If parenthesized_expr LBRACE closed_if option(SEMI) RBRACE Else LBRACE closed_if . option(SEMI) RBRACE [ SEMI RBRACE ] ## @@ -244,26 +244,26 @@ interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR LBRACE WILD RBRACE ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 422, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr -## In state 421, spurious reduction of production closed_if -> base_if_then_else__open(closed_if) +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 417, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr +## In state 416, spurious reduction of production closed_if -> base_if_then_else__open(closed_if) ## interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR LBRACE WILD RBRACE Else WILD ## -## Ends in an error in state: 416. +## Ends in an error in state: 411. ## ## if_then_else(closed_if) -> If parenthesized_expr LBRACE closed_if option(SEMI) RBRACE Else . LBRACE closed_if option(SEMI) RBRACE [ SEMI RBRACE ] ## @@ -275,7 +275,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR LBRACE WILD RBRACE interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR LBRACE WILD RBRACE WILD ## -## Ends in an error in state: 415. +## Ends in an error in state: 410. ## ## if_then_else(closed_if) -> If parenthesized_expr LBRACE closed_if option(SEMI) RBRACE . Else LBRACE closed_if option(SEMI) RBRACE [ SEMI RBRACE ] ## @@ -287,7 +287,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR LBRACE WILD RBRACE interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR LBRACE WILD SEMI PLUS ## -## Ends in an error in state: 414. +## Ends in an error in state: 409. ## ## if_then_else(closed_if) -> If parenthesized_expr LBRACE closed_if option(SEMI) . RBRACE Else LBRACE closed_if option(SEMI) RBRACE [ SEMI RBRACE ] ## @@ -299,7 +299,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR LBRACE WILD SEMI P interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR LBRACE WILD VBAR ## -## Ends in an error in state: 413. +## Ends in an error in state: 408. ## ## if_then_else(closed_if) -> If parenthesized_expr LBRACE closed_if . option(SEMI) RBRACE Else LBRACE closed_if option(SEMI) RBRACE [ SEMI RBRACE ] ## @@ -310,26 +310,26 @@ interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR LBRACE WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 422, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr -## In state 421, spurious reduction of production closed_if -> base_if_then_else__open(closed_if) +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 417, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr +## In state 416, spurious reduction of production closed_if -> base_if_then_else__open(closed_if) ## interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR WILD ## -## Ends in an error in state: 356. +## Ends in an error in state: 351. ## ## if_then_else(closed_if) -> If parenthesized_expr . LBRACE closed_if option(SEMI) RBRACE Else LBRACE closed_if option(SEMI) RBRACE [ SEMI RBRACE ] ## @@ -341,7 +341,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE If LPAR Bytes RPAR WILD interactive_expr: If LPAR WILD RPAR LBRACE If WILD ## -## Ends in an error in state: 355. +## Ends in an error in state: 350. ## ## if_then_else(closed_if) -> If . parenthesized_expr LBRACE closed_if option(SEMI) RBRACE Else LBRACE closed_if option(SEMI) RBRACE [ SEMI RBRACE ] ## @@ -353,7 +353,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE If WILD interactive_expr: If LPAR WILD RPAR LBRACE Switch VBAR ## -## Ends in an error in state: 238. +## Ends in an error in state: 237. ## ## switch_expr(base_if_then_else) -> Switch . switch_expr_ LBRACE cases(base_if_then_else) RBRACE [ SEMI RBRACE ] ## @@ -365,7 +365,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch VBAR interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR VBAR ## -## Ends in an error in state: 281. +## Ends in an error in state: 276. ## ## case_clause(base_if_then_else) -> VBAR . pattern ARROW base_if_then_else option(SEMI) [ VBAR RBRACE ] ## @@ -377,7 +377,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR VBAR interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW Bytes SEMI WILD ## -## Ends in an error in state: 440. +## Ends in an error in state: 435. ## ## nseq(case_clause(base_if_then_else)) -> case_clause(base_if_then_else) . seq(case_clause(base_if_then_else)) [ RBRACE ] ## @@ -389,7 +389,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW By interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW Bytes VBAR Bytes ARROW Bytes SEMI WILD ## -## Ends in an error in state: 442. +## Ends in an error in state: 437. ## ## seq(case_clause(base_if_then_else)) -> case_clause(base_if_then_else) . seq(case_clause(base_if_then_else)) [ RBRACE ] ## @@ -401,7 +401,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW By interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If LPAR Bytes RPAR LBRACE VBAR ## -## Ends in an error in state: 354. +## Ends in an error in state: 349. ## ## if_then_else(base_if_then_else) -> If parenthesized_expr LBRACE . closed_if option(SEMI) RBRACE Else LBRACE base_if_then_else option(SEMI) RBRACE [ VBAR SEMI RBRACE ] ## @@ -413,7 +413,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If LPAR Bytes RPAR LBRACE WILD RBRACE Else LBRACE VBAR ## -## Ends in an error in state: 427. +## Ends in an error in state: 422. ## ## if_then_else(base_if_then_else) -> If parenthesized_expr LBRACE closed_if option(SEMI) RBRACE Else LBRACE . base_if_then_else option(SEMI) RBRACE [ VBAR SEMI RBRACE ] ## @@ -425,7 +425,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If LPAR Bytes RPAR LBRACE WILD RBRACE Else LBRACE WILD SEMI PLUS ## -## Ends in an error in state: 431. +## Ends in an error in state: 426. ## ## if_then_else(base_if_then_else) -> If parenthesized_expr LBRACE closed_if option(SEMI) RBRACE Else LBRACE base_if_then_else option(SEMI) . RBRACE [ VBAR SEMI RBRACE ] ## @@ -437,7 +437,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If LPAR Bytes RPAR LBRACE WILD RBRACE Else LBRACE WILD VBAR ## -## Ends in an error in state: 430. +## Ends in an error in state: 425. ## ## if_then_else(base_if_then_else) -> If parenthesized_expr LBRACE closed_if option(SEMI) RBRACE Else LBRACE base_if_then_else . option(SEMI) RBRACE [ VBAR SEMI RBRACE ] ## @@ -448,26 +448,26 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 433, spurious reduction of production base_if_then_else__open(base_if_then_else) -> base_expr -## In state 429, spurious reduction of production base_if_then_else -> base_if_then_else__open(base_if_then_else) +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 428, spurious reduction of production base_if_then_else__open(base_if_then_else) -> base_expr +## In state 424, spurious reduction of production base_if_then_else -> base_if_then_else__open(base_if_then_else) ## interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If LPAR Bytes RPAR LBRACE WILD RBRACE Else WILD ## -## Ends in an error in state: 426. +## Ends in an error in state: 421. ## ## if_then_else(base_if_then_else) -> If parenthesized_expr LBRACE closed_if option(SEMI) RBRACE Else . LBRACE base_if_then_else option(SEMI) RBRACE [ VBAR SEMI RBRACE ] ## @@ -479,7 +479,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If LPAR Bytes RPAR LBRACE WILD RBRACE WILD ## -## Ends in an error in state: 425. +## Ends in an error in state: 420. ## ## if_then_else(base_if_then_else) -> If parenthesized_expr LBRACE closed_if option(SEMI) RBRACE . Else LBRACE base_if_then_else option(SEMI) RBRACE [ VBAR SEMI RBRACE ] ## @@ -491,7 +491,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If LPAR Bytes RPAR LBRACE WILD SEMI PLUS ## -## Ends in an error in state: 424. +## Ends in an error in state: 419. ## ## if_then_else(base_if_then_else) -> If parenthesized_expr LBRACE closed_if option(SEMI) . RBRACE Else LBRACE base_if_then_else option(SEMI) RBRACE [ VBAR SEMI RBRACE ] ## @@ -503,7 +503,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If LPAR Bytes RPAR LBRACE WILD VBAR ## -## Ends in an error in state: 423. +## Ends in an error in state: 418. ## ## if_then_else(base_if_then_else) -> If parenthesized_expr LBRACE closed_if . option(SEMI) RBRACE Else LBRACE base_if_then_else option(SEMI) RBRACE [ VBAR SEMI RBRACE ] ## @@ -514,26 +514,26 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 422, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr -## In state 421, spurious reduction of production closed_if -> base_if_then_else__open(closed_if) +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 417, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr +## In state 416, spurious reduction of production closed_if -> base_if_then_else__open(closed_if) ## interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If LPAR Bytes RPAR WILD ## -## Ends in an error in state: 353. +## Ends in an error in state: 348. ## ## if_then_else(base_if_then_else) -> If parenthesized_expr . LBRACE closed_if option(SEMI) RBRACE Else LBRACE base_if_then_else option(SEMI) RBRACE [ VBAR SEMI RBRACE ] ## @@ -545,7 +545,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If WILD ## -## Ends in an error in state: 352. +## Ends in an error in state: 347. ## ## if_then_else(base_if_then_else) -> If . parenthesized_expr LBRACE closed_if option(SEMI) RBRACE Else LBRACE base_if_then_else option(SEMI) RBRACE [ VBAR SEMI RBRACE ] ## @@ -557,7 +557,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW If interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW VBAR ## -## Ends in an error in state: 351. +## Ends in an error in state: 346. ## ## case_clause(base_if_then_else) -> VBAR pattern ARROW . base_if_then_else option(SEMI) [ VBAR RBRACE ] ## @@ -569,7 +569,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW VB interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW WILD Type ## -## Ends in an error in state: 434. +## Ends in an error in state: 429. ## ## case_clause(base_if_then_else) -> VBAR pattern ARROW base_if_then_else . option(SEMI) [ VBAR RBRACE ] ## @@ -580,26 +580,26 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD ARROW WI ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 433, spurious reduction of production base_if_then_else__open(base_if_then_else) -> base_expr -## In state 429, spurious reduction of production base_if_then_else -> base_if_then_else__open(base_if_then_else) +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 428, spurious reduction of production base_if_then_else__open(base_if_then_else) -> base_expr +## In state 424, spurious reduction of production base_if_then_else -> base_if_then_else__open(base_if_then_else) ## interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD COMMA Bytes RPAR ## -## Ends in an error in state: 350. +## Ends in an error in state: 345. ## ## case_clause(base_if_then_else) -> VBAR pattern . ARROW base_if_then_else option(SEMI) [ VBAR RBRACE ] ## @@ -610,16 +610,16 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE VBAR WILD COMMA By ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 336, spurious reduction of production nsepseq(sub_pattern,COMMA) -> sub_pattern -## In state 339, spurious reduction of production tuple(sub_pattern) -> sub_pattern COMMA nsepseq(sub_pattern,COMMA) -## In state 348, spurious reduction of production pattern -> tuple(sub_pattern) +## In state 331, spurious reduction of production nsepseq(sub_pattern,COMMA) -> sub_pattern +## In state 334, spurious reduction of production tuple(sub_pattern) -> sub_pattern COMMA nsepseq(sub_pattern,COMMA) +## In state 343, spurious reduction of production pattern -> tuple(sub_pattern) ## interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE WILD ## -## Ends in an error in state: 280. +## Ends in an error in state: 275. ## ## switch_expr(base_if_then_else) -> Switch switch_expr_ LBRACE . cases(base_if_then_else) RBRACE [ SEMI RBRACE ] ## @@ -631,7 +631,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD LBRACE WILD interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD WILD ## -## Ends in an error in state: 279. +## Ends in an error in state: 274. ## ## switch_expr(base_if_then_else) -> Switch switch_expr_ . LBRACE cases(base_if_then_else) RBRACE [ SEMI RBRACE ] ## @@ -643,7 +643,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE Switch WILD WILD interactive_expr: If LPAR WILD RPAR LBRACE VBAR ## -## Ends in an error in state: 237. +## Ends in an error in state: 236. ## ## if_then(expr_with_let_expr) -> If parenthesized_expr LBRACE . closed_if option(SEMI) RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] ## if_then_else(expr_with_let_expr) -> If parenthesized_expr LBRACE . closed_if option(SEMI) RBRACE Else LBRACE expr_with_let_expr option(SEMI) RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] @@ -656,7 +656,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE VBAR interactive_expr: If LPAR WILD RPAR LBRACE WILD RBRACE Else LBRACE VBAR ## -## Ends in an error in state: 452. +## Ends in an error in state: 447. ## ## if_then_else(expr_with_let_expr) -> If parenthesized_expr LBRACE closed_if option(SEMI) RBRACE Else LBRACE . expr_with_let_expr option(SEMI) RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] ## @@ -668,7 +668,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE WILD RBRACE Else LBRACE VBAR interactive_expr: If LPAR WILD RPAR LBRACE WILD RBRACE Else LBRACE WILD SEMI PLUS ## -## Ends in an error in state: 454. +## Ends in an error in state: 449. ## ## if_then_else(expr_with_let_expr) -> If parenthesized_expr LBRACE closed_if option(SEMI) RBRACE Else LBRACE expr_with_let_expr option(SEMI) . RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] ## @@ -680,7 +680,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE WILD RBRACE Else LBRACE WILD SEMI PLU interactive_expr: If LPAR WILD RPAR LBRACE WILD RBRACE Else LBRACE WILD VBAR ## -## Ends in an error in state: 453. +## Ends in an error in state: 448. ## ## if_then_else(expr_with_let_expr) -> If parenthesized_expr LBRACE closed_if option(SEMI) RBRACE Else LBRACE expr_with_let_expr . option(SEMI) RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] ## @@ -691,27 +691,27 @@ interactive_expr: If LPAR WILD RPAR LBRACE WILD RBRACE Else LBRACE WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond -## In state 407, spurious reduction of production expr_with_let_expr -> expr +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond +## In state 402, spurious reduction of production expr_with_let_expr -> expr ## interactive_expr: If LPAR WILD RPAR LBRACE WILD RBRACE Else WILD ## -## Ends in an error in state: 451. +## Ends in an error in state: 446. ## ## if_then_else(expr_with_let_expr) -> If parenthesized_expr LBRACE closed_if option(SEMI) RBRACE Else . LBRACE expr_with_let_expr option(SEMI) RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] ## @@ -723,7 +723,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE WILD RBRACE Else WILD interactive_expr: If LPAR WILD RPAR LBRACE WILD RBRACE WILD ## -## Ends in an error in state: 450. +## Ends in an error in state: 445. ## ## if_then(expr_with_let_expr) -> If parenthesized_expr LBRACE closed_if option(SEMI) RBRACE . [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] ## if_then_else(expr_with_let_expr) -> If parenthesized_expr LBRACE closed_if option(SEMI) RBRACE . Else LBRACE expr_with_let_expr option(SEMI) RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] @@ -736,7 +736,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE WILD RBRACE WILD interactive_expr: If LPAR WILD RPAR LBRACE WILD SEMI PLUS ## -## Ends in an error in state: 449. +## Ends in an error in state: 444. ## ## if_then(expr_with_let_expr) -> If parenthesized_expr LBRACE closed_if option(SEMI) . RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] ## if_then_else(expr_with_let_expr) -> If parenthesized_expr LBRACE closed_if option(SEMI) . RBRACE Else LBRACE expr_with_let_expr option(SEMI) RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] @@ -749,7 +749,7 @@ interactive_expr: If LPAR WILD RPAR LBRACE WILD SEMI PLUS interactive_expr: If LPAR WILD RPAR LBRACE WILD VBAR ## -## Ends in an error in state: 448. +## Ends in an error in state: 443. ## ## if_then(expr_with_let_expr) -> If parenthesized_expr LBRACE closed_if . option(SEMI) RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] ## if_then_else(expr_with_let_expr) -> If parenthesized_expr LBRACE closed_if . option(SEMI) RBRACE Else LBRACE expr_with_let_expr option(SEMI) RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] @@ -761,26 +761,26 @@ interactive_expr: If LPAR WILD RPAR LBRACE WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 422, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr -## In state 421, spurious reduction of production closed_if -> base_if_then_else__open(closed_if) +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 417, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr +## In state 416, spurious reduction of production closed_if -> base_if_then_else__open(closed_if) ## interactive_expr: If LPAR WILD RPAR WILD ## -## Ends in an error in state: 236. +## Ends in an error in state: 235. ## ## if_then(expr_with_let_expr) -> If parenthesized_expr . LBRACE closed_if option(SEMI) RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] ## if_then_else(expr_with_let_expr) -> If parenthesized_expr . LBRACE closed_if option(SEMI) RBRACE Else LBRACE expr_with_let_expr option(SEMI) RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] @@ -793,7 +793,7 @@ interactive_expr: If LPAR WILD RPAR WILD interactive_expr: If LPAR WILD VBAR ## -## Ends in an error in state: 231. +## Ends in an error in state: 230. ## ## parenthesized_expr -> LPAR expr . RPAR [ LBRACE ] ## @@ -804,26 +804,26 @@ interactive_expr: If LPAR WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond ## interactive_expr: If WILD ## -## Ends in an error in state: 98. +## Ends in an error in state: 99. ## ## if_then(expr_with_let_expr) -> If . parenthesized_expr LBRACE closed_if option(SEMI) RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] ## if_then_else(expr_with_let_expr) -> If . parenthesized_expr LBRACE closed_if option(SEMI) RBRACE Else LBRACE expr_with_let_expr option(SEMI) RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] @@ -836,7 +836,7 @@ interactive_expr: If WILD interactive_expr: LBRACE ELLIPSIS Constr DOT Ident WILD ## -## Ends in an error in state: 257. +## Ends in an error in state: 256. ## ## projection -> Constr DOT Ident . selection [ COMMA COLON ] ## @@ -848,7 +848,7 @@ interactive_expr: LBRACE ELLIPSIS Constr DOT Ident WILD interactive_expr: LBRACE ELLIPSIS Constr DOT WILD ## -## Ends in an error in state: 256. +## Ends in an error in state: 255. ## ## projection -> Constr DOT . Ident selection [ COMMA COLON ] ## @@ -860,7 +860,7 @@ interactive_expr: LBRACE ELLIPSIS Constr DOT WILD interactive_expr: LBRACE ELLIPSIS Constr WILD ## -## Ends in an error in state: 255. +## Ends in an error in state: 254. ## ## projection -> Constr . DOT Ident selection [ COMMA COLON ] ## @@ -872,7 +872,7 @@ interactive_expr: LBRACE ELLIPSIS Constr WILD interactive_expr: LBRACE ELLIPSIS Ident COLON ## -## Ends in an error in state: 272. +## Ends in an error in state: 258. ## ## update_record -> LBRACE ELLIPSIS path . COMMA sep_or_term_list(field_path_assignment,COMMA) RBRACE [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -883,27 +883,14 @@ interactive_expr: LBRACE ELLIPSIS Ident COLON ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond -## In state 271, spurious reduction of production field_path_assignment -> nsepseq(field_name,DOT) COLON expr +## In state 253, spurious reduction of production path -> Ident ## interactive_expr: LBRACE ELLIPSIS Ident COMMA Ident COLON Bytes COMMA Ident COLON Bytes COMMA WILD ## -## Ends in an error in state: 270. +## Ends in an error in state: 272. ## ## nsepseq(field_path_assignment,COMMA) -> field_path_assignment COMMA . nsepseq(field_path_assignment,COMMA) [ RBRACE ] ## seq(__anonymous_0(field_path_assignment,COMMA)) -> field_path_assignment COMMA . seq(__anonymous_0(field_path_assignment,COMMA)) [ RBRACE ] @@ -916,7 +903,7 @@ interactive_expr: LBRACE ELLIPSIS Ident COMMA Ident COLON Bytes COMMA Ident COLO interactive_expr: LBRACE ELLIPSIS Ident COMMA Ident COLON Bytes COMMA Ident COLON Bytes VBAR ## -## Ends in an error in state: 276. +## Ends in an error in state: 271. ## ## nsepseq(field_path_assignment,COMMA) -> field_path_assignment . [ RBRACE ] ## nsepseq(field_path_assignment,COMMA) -> field_path_assignment . COMMA nsepseq(field_path_assignment,COMMA) [ RBRACE ] @@ -929,27 +916,27 @@ interactive_expr: LBRACE ELLIPSIS Ident COMMA Ident COLON Bytes COMMA Ident COLO ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond -## In state 271, spurious reduction of production field_path_assignment -> nsepseq(field_name,DOT) COLON expr +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond +## In state 264, spurious reduction of production field_path_assignment -> path COLON expr ## interactive_expr: LBRACE ELLIPSIS Ident COMMA Ident COLON Bytes COMMA WILD ## -## Ends in an error in state: 273. +## Ends in an error in state: 268. ## ## nsepseq(field_path_assignment,COMMA) -> field_path_assignment COMMA . nsepseq(field_path_assignment,COMMA) [ RBRACE ] ## nseq(__anonymous_0(field_path_assignment,COMMA)) -> field_path_assignment COMMA . seq(__anonymous_0(field_path_assignment,COMMA)) [ RBRACE ] @@ -962,7 +949,7 @@ interactive_expr: LBRACE ELLIPSIS Ident COMMA Ident COLON Bytes COMMA WILD interactive_expr: LBRACE ELLIPSIS Ident COMMA Ident COLON Bytes VBAR ## -## Ends in an error in state: 263. +## Ends in an error in state: 267. ## ## nsepseq(field_path_assignment,COMMA) -> field_path_assignment . [ RBRACE ] ## nsepseq(field_path_assignment,COMMA) -> field_path_assignment . COMMA nsepseq(field_path_assignment,COMMA) [ RBRACE ] @@ -975,27 +962,27 @@ interactive_expr: LBRACE ELLIPSIS Ident COMMA Ident COLON Bytes VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 158, spurious reduction of production call_expr_level_in -> core_expr -## In state 176, spurious reduction of production option(type_annotation_simple) -> -## In state 177, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 178, spurious reduction of production unary_expr_level -> call_expr_level -## In state 131, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 155, spurious reduction of production add_expr_level -> mult_expr_level -## In state 186, spurious reduction of production cat_expr_level -> add_expr_level -## In state 207, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 214, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 221, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 168, spurious reduction of production base_expr -> disj_expr_level -## In state 225, spurious reduction of production base_cond -> base_expr -## In state 226, spurious reduction of production expr -> base_cond -## In state 262, spurious reduction of production field_path_assignment -> path COLON expr +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond +## In state 264, spurious reduction of production field_path_assignment -> path COLON expr ## interactive_expr: LBRACE ELLIPSIS Ident COMMA Ident COLON VBAR ## -## Ends in an error in state: 262. +## Ends in an error in state: 263. ## ## field_path_assignment -> path COLON . expr [ RBRACE COMMA ] ## @@ -1007,7 +994,7 @@ interactive_expr: LBRACE ELLIPSIS Ident COMMA Ident COLON VBAR interactive_expr: LBRACE ELLIPSIS Ident COMMA Ident COMMA ## -## Ends in an error in state: 261. +## Ends in an error in state: 262. ## ## field_path_assignment -> path . COLON expr [ RBRACE COMMA ] ## @@ -1018,14 +1005,14 @@ interactive_expr: LBRACE ELLIPSIS Ident COMMA Ident COMMA ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 251, spurious reduction of production path -> Ident +## In state 253, spurious reduction of production path -> Ident ## interactive_expr: LBRACE ELLIPSIS Ident COMMA WILD ## -## Ends in an error in state: 260. +## Ends in an error in state: 259. ## ## update_record -> LBRACE ELLIPSIS path COMMA . sep_or_term_list(field_path_assignment,COMMA) RBRACE [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -1037,7 +1024,7 @@ interactive_expr: LBRACE ELLIPSIS Ident COMMA WILD interactive_expr: LBRACE ELLIPSIS Ident WILD ## -## Ends in an error in state: 254. +## Ends in an error in state: 253. ## ## path -> Ident . [ COMMA COLON ] ## projection -> Ident . selection [ COMMA COLON ] @@ -1050,7 +1037,7 @@ interactive_expr: LBRACE ELLIPSIS Ident WILD interactive_expr: LBRACE ELLIPSIS WILD ## -## Ends in an error in state: 253. +## Ends in an error in state: 252. ## ## update_record -> LBRACE ELLIPSIS . path COMMA sep_or_term_list(field_path_assignment,COMMA) RBRACE [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -1062,7 +1049,7 @@ interactive_expr: LBRACE ELLIPSIS WILD interactive_expr: LBRACE Ident COLON Bytes VBAR ## -## Ends in an error in state: 484. +## Ends in an error in state: 469. ## ## record -> LBRACE field_assignment . option(more_field_assignments) RBRACE [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -1073,27 +1060,27 @@ interactive_expr: LBRACE Ident COLON Bytes VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond -## In state 470, spurious reduction of production field_assignment -> Ident COLON expr +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond +## In state 455, spurious reduction of production field_assignment -> Ident COLON expr ## interactive_expr: LBRACE Ident COLON VBAR ## -## Ends in an error in state: 469. +## Ends in an error in state: 454. ## ## field_assignment -> Ident COLON . expr [ RBRACE COMMA ] ## @@ -1105,7 +1092,7 @@ interactive_expr: LBRACE Ident COLON VBAR interactive_expr: LBRACE Ident COMMA Ident COLON Bytes VBAR ## -## Ends in an error in state: 474. +## Ends in an error in state: 459. ## ## nsepseq(field_assignment_punning,COMMA) -> field_assignment_punning . [ RBRACE ] ## nsepseq(field_assignment_punning,COMMA) -> field_assignment_punning . COMMA nsepseq(field_assignment_punning,COMMA) [ RBRACE ] @@ -1118,28 +1105,28 @@ interactive_expr: LBRACE Ident COMMA Ident COLON Bytes VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond -## In state 470, spurious reduction of production field_assignment -> Ident COLON expr -## In state 481, spurious reduction of production field_assignment_punning -> field_assignment +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond +## In state 455, spurious reduction of production field_assignment -> Ident COLON expr +## In state 466, spurious reduction of production field_assignment_punning -> field_assignment ## interactive_expr: LBRACE Ident COMMA Ident COMMA Ident COLON Bytes VBAR ## -## Ends in an error in state: 478. +## Ends in an error in state: 463. ## ## nsepseq(field_assignment_punning,COMMA) -> field_assignment_punning . [ RBRACE ] ## nsepseq(field_assignment_punning,COMMA) -> field_assignment_punning . COMMA nsepseq(field_assignment_punning,COMMA) [ RBRACE ] @@ -1152,28 +1139,28 @@ interactive_expr: LBRACE Ident COMMA Ident COMMA Ident COLON Bytes VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond -## In state 470, spurious reduction of production field_assignment -> Ident COLON expr -## In state 481, spurious reduction of production field_assignment_punning -> field_assignment +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond +## In state 455, spurious reduction of production field_assignment -> Ident COLON expr +## In state 466, spurious reduction of production field_assignment_punning -> field_assignment ## interactive_expr: LBRACE Ident COMMA Ident COMMA Ident COMMA WILD ## -## Ends in an error in state: 479. +## Ends in an error in state: 464. ## ## nsepseq(field_assignment_punning,COMMA) -> field_assignment_punning COMMA . nsepseq(field_assignment_punning,COMMA) [ RBRACE ] ## seq(__anonymous_0(field_assignment_punning,COMMA)) -> field_assignment_punning COMMA . seq(__anonymous_0(field_assignment_punning,COMMA)) [ RBRACE ] @@ -1186,7 +1173,7 @@ interactive_expr: LBRACE Ident COMMA Ident COMMA Ident COMMA WILD interactive_expr: LBRACE Ident COMMA Ident COMMA WILD ## -## Ends in an error in state: 475. +## Ends in an error in state: 460. ## ## nsepseq(field_assignment_punning,COMMA) -> field_assignment_punning COMMA . nsepseq(field_assignment_punning,COMMA) [ RBRACE ] ## nseq(__anonymous_0(field_assignment_punning,COMMA)) -> field_assignment_punning COMMA . seq(__anonymous_0(field_assignment_punning,COMMA)) [ RBRACE ] @@ -1199,7 +1186,7 @@ interactive_expr: LBRACE Ident COMMA Ident COMMA WILD interactive_expr: LBRACE Ident COMMA Ident WILD ## -## Ends in an error in state: 468. +## Ends in an error in state: 453. ## ## field_assignment -> Ident . COLON expr [ RBRACE COMMA ] ## field_assignment_punning -> Ident . [ RBRACE COMMA ] @@ -1212,7 +1199,7 @@ interactive_expr: LBRACE Ident COMMA Ident WILD interactive_expr: LBRACE Ident COMMA WILD ## -## Ends in an error in state: 467. +## Ends in an error in state: 452. ## ## more_field_assignments -> COMMA . sep_or_term_list(field_assignment_punning,COMMA) [ RBRACE ] ## @@ -1224,7 +1211,7 @@ interactive_expr: LBRACE Ident COMMA WILD interactive_expr: LBRACE Ident WILD ## -## Ends in an error in state: 466. +## Ends in an error in state: 451. ## ## common_expr -> Ident . [ TIMES SLASH SEMI RBRACE PLUS Or NE Mod MINUS LT LPAR LE GT GE EQEQ COLON CAT BOOL_OR BOOL_AND ARROW ] ## field_assignment -> Ident . COLON expr [ RBRACE COMMA ] @@ -1239,7 +1226,7 @@ interactive_expr: LBRACE Ident WILD interactive_expr: LBRACE VBAR ## -## Ends in an error in state: 95. +## Ends in an error in state: 97. ## ## record -> LBRACE . field_assignment option(more_field_assignments) RBRACE [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## record -> LBRACE . Ident more_field_assignments RBRACE [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -1254,7 +1241,7 @@ interactive_expr: LBRACE VBAR interactive_expr: LBRACE WILD SEMI VBAR ## -## Ends in an error in state: 491. +## Ends in an error in state: 476. ## ## exprs -> expr_with_let_expr SEMI . exprs [ RBRACE ] ## option(SEMI) -> SEMI . [ RBRACE ] @@ -1267,7 +1254,7 @@ interactive_expr: LBRACE WILD SEMI VBAR interactive_expr: LBRACE WILD VBAR ## -## Ends in an error in state: 490. +## Ends in an error in state: 475. ## ## exprs -> expr_with_let_expr . option(SEMI) [ RBRACE ] ## exprs -> expr_with_let_expr . SEMI exprs [ RBRACE ] @@ -1279,81 +1266,27 @@ interactive_expr: LBRACE WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond -## In state 407, spurious reduction of production expr_with_let_expr -> expr -## - - - -interactive_expr: LBRACKET PERCENT Constr VBAR -## -## Ends in an error in state: 95. -## -## code_insert -> LBRACKET PERCENT Constr . expr RBRACKET [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] -## -## The known suffix of the stack is as follows: -## LBRACKET PERCENT Constr -## - - - -interactive_expr: LBRACKET PERCENT Constr WILD VBAR -## -## Ends in an error in state: 495. -## -## code_insert -> LBRACKET PERCENT Constr expr . RBRACKET [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] -## -## The known suffix of the stack is as follows: -## LBRACKET PERCENT Constr expr -## -## WARNING: This example involves spurious reductions. -## This implies that, although the LR(1) items shown above provide an -## accurate view of the past (what has been recognized so far), they -## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond -## - - - -interactive_expr: LBRACKET PERCENT WILD -## -## Ends in an error in state: 94. -## -## code_insert -> LBRACKET PERCENT . Constr expr RBRACKET [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] -## -## The known suffix of the stack is as follows: -## LBRACKET PERCENT +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond +## In state 402, spurious reduction of production expr_with_let_expr -> expr ## interactive_expr: LBRACKET VBAR ## -## Ends in an error in state: 93. +## Ends in an error in state: 95. ## ## list_or_spread -> LBRACKET . expr COMMA sep_or_term_list(expr,COMMA) RBRACKET [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## list_or_spread -> LBRACKET . expr COMMA ELLIPSIS expr RBRACKET [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -1367,7 +1300,7 @@ interactive_expr: LBRACKET VBAR interactive_expr: LBRACKET WILD COMMA ELLIPSIS VBAR ## -## Ends in an error in state: 501. +## Ends in an error in state: 493. ## ## list_or_spread -> LBRACKET expr COMMA ELLIPSIS . expr RBRACKET [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -1379,7 +1312,7 @@ interactive_expr: LBRACKET WILD COMMA ELLIPSIS VBAR interactive_expr: LBRACKET WILD COMMA ELLIPSIS WILD VBAR ## -## Ends in an error in state: 502. +## Ends in an error in state: 494. ## ## list_or_spread -> LBRACKET expr COMMA ELLIPSIS expr . RBRACKET [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -1390,26 +1323,26 @@ interactive_expr: LBRACKET WILD COMMA ELLIPSIS WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond ## interactive_expr: LBRACKET WILD COMMA VBAR ## -## Ends in an error in state: 500. +## Ends in an error in state: 492. ## ## list_or_spread -> LBRACKET expr COMMA . sep_or_term_list(expr,COMMA) RBRACKET [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## list_or_spread -> LBRACKET expr COMMA . ELLIPSIS expr RBRACKET [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -1422,7 +1355,7 @@ interactive_expr: LBRACKET WILD COMMA VBAR interactive_expr: LBRACKET WILD COMMA WILD COMMA VBAR ## -## Ends in an error in state: 509. +## Ends in an error in state: 501. ## ## nsepseq(expr,COMMA) -> expr COMMA . nsepseq(expr,COMMA) [ RBRACKET ] ## nseq(__anonymous_0(expr,COMMA)) -> expr COMMA . seq(__anonymous_0(expr,COMMA)) [ RBRACKET ] @@ -1435,7 +1368,7 @@ interactive_expr: LBRACKET WILD COMMA WILD COMMA VBAR interactive_expr: LBRACKET WILD COMMA WILD COMMA WILD COMMA VBAR ## -## Ends in an error in state: 512. +## Ends in an error in state: 504. ## ## nsepseq(expr,COMMA) -> expr COMMA . nsepseq(expr,COMMA) [ RBRACKET ] ## seq(__anonymous_0(expr,COMMA)) -> expr COMMA . seq(__anonymous_0(expr,COMMA)) [ RBRACKET ] @@ -1448,7 +1381,7 @@ interactive_expr: LBRACKET WILD COMMA WILD COMMA WILD COMMA VBAR interactive_expr: LBRACKET WILD COMMA WILD COMMA WILD VBAR ## -## Ends in an error in state: 511. +## Ends in an error in state: 503. ## ## nsepseq(expr,COMMA) -> expr . [ RBRACKET ] ## nsepseq(expr,COMMA) -> expr . COMMA nsepseq(expr,COMMA) [ RBRACKET ] @@ -1461,26 +1394,26 @@ interactive_expr: LBRACKET WILD COMMA WILD COMMA WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond ## interactive_expr: LBRACKET WILD COMMA WILD VBAR ## -## Ends in an error in state: 508. +## Ends in an error in state: 500. ## ## nsepseq(expr,COMMA) -> expr . [ RBRACKET ] ## nsepseq(expr,COMMA) -> expr . COMMA nsepseq(expr,COMMA) [ RBRACKET ] @@ -1493,26 +1426,26 @@ interactive_expr: LBRACKET WILD COMMA WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond ## interactive_expr: LBRACKET WILD VBAR ## -## Ends in an error in state: 499. +## Ends in an error in state: 491. ## ## list_or_spread -> LBRACKET expr . COMMA sep_or_term_list(expr,COMMA) RBRACKET [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## list_or_spread -> LBRACKET expr . COMMA ELLIPSIS expr RBRACKET [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -1525,19 +1458,19 @@ interactive_expr: LBRACKET WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond ## @@ -1558,7 +1491,7 @@ interactive_expr: LPAR VBAR interactive_expr: LPAR WILD COMMA Bytes RPAR COLON Ident TIMES ## -## Ends in an error in state: 171. +## Ends in an error in state: 170. ## ## base_expr -> disj_expr_level . [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] ## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ VBAR Type SEMI RPAR RBRACKET RBRACE Or Let EOF COMMA BOOL_OR Attr ARROW ] @@ -1572,18 +1505,18 @@ interactive_expr: LPAR WILD COMMA Bytes RPAR COLON Ident TIMES ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 136, spurious reduction of production option(type_expr_simple_args) -> -## In state 145, spurious reduction of production type_expr_simple -> Ident option(type_expr_simple_args) -## In state 152, spurious reduction of production type_annotation_simple -> COLON type_expr_simple -## In state 153, spurious reduction of production option(type_annotation_simple) -> type_annotation_simple -## In state 154, spurious reduction of production disj_expr_level -> par(tuple(disj_expr_level)) option(type_annotation_simple) +## In state 138, spurious reduction of production option(type_expr_simple_args) -> +## In state 147, spurious reduction of production type_expr_simple -> Ident option(type_expr_simple_args) +## In state 154, spurious reduction of production type_annotation_simple -> COLON type_expr_simple +## In state 155, spurious reduction of production option(type_annotation_simple) -> type_annotation_simple +## In state 156, spurious reduction of production disj_expr_level -> par(tuple(disj_expr_level)) option(type_annotation_simple) ## interactive_expr: LPAR WILD COMMA Bytes RPAR WILD ## -## Ends in an error in state: 133. +## Ends in an error in state: 135. ## ## disj_expr_level -> par(tuple(disj_expr_level)) . option(type_annotation_simple) [ VBAR Type SEMI RPAR RBRACKET RBRACE Or Let EOF COMMA BOOL_OR Attr ARROW ] ## @@ -1595,7 +1528,7 @@ interactive_expr: LPAR WILD COMMA Bytes RPAR WILD interactive_expr: LPAR WILD COMMA VBAR ## -## Ends in an error in state: 454. +## Ends in an error in state: 484. ## ## tuple(disj_expr_level) -> disj_expr_level COMMA . nsepseq(disj_expr_level,COMMA) [ RPAR ] ## @@ -1607,7 +1540,7 @@ interactive_expr: LPAR WILD COMMA VBAR interactive_expr: LPAR WILD COMMA WILD COMMA VBAR ## -## Ends in an error in state: 457. +## Ends in an error in state: 487. ## ## nsepseq(disj_expr_level,COMMA) -> disj_expr_level COMMA . nsepseq(disj_expr_level,COMMA) [ RPAR ] ## @@ -1619,7 +1552,7 @@ interactive_expr: LPAR WILD COMMA WILD COMMA VBAR interactive_expr: LPAR WILD COMMA WILD VBAR ## -## Ends in an error in state: 456. +## Ends in an error in state: 486. ## ## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ RPAR Or COMMA BOOL_OR ] ## bin_op(disj_expr_level,Or,conj_expr_level) -> disj_expr_level . Or conj_expr_level [ RPAR Or COMMA BOOL_OR ] @@ -1633,23 +1566,23 @@ interactive_expr: LPAR WILD COMMA WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 158, spurious reduction of production call_expr_level_in -> core_expr -## In state 176, spurious reduction of production option(type_annotation_simple) -> -## In state 177, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 178, spurious reduction of production unary_expr_level -> call_expr_level -## In state 131, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 155, spurious reduction of production add_expr_level -> mult_expr_level -## In state 186, spurious reduction of production cat_expr_level -> add_expr_level -## In state 207, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 214, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 221, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level ## interactive_expr: LPAR WILD VBAR ## -## Ends in an error in state: 453. +## Ends in an error in state: 483. ## ## base_expr -> disj_expr_level . [ RPAR ] ## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ RPAR Or COMMA BOOL_OR ARROW ] @@ -1664,23 +1597,65 @@ interactive_expr: LPAR WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 158, spurious reduction of production call_expr_level_in -> core_expr -## In state 176, spurious reduction of production option(type_annotation_simple) -> -## In state 177, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 178, spurious reduction of production unary_expr_level -> call_expr_level -## In state 131, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 155, spurious reduction of production add_expr_level -> mult_expr_level -## In state 186, spurious reduction of production cat_expr_level -> add_expr_level -## In state 207, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 214, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 221, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## + + + +interactive_expr: Lang VBAR +## +## Ends in an error in state: 90. +## +## code_inj -> Lang . expr RBRACKET [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] +## +## The known suffix of the stack is as follows: +## Lang +## + + + +interactive_expr: Lang WILD VBAR +## +## Ends in an error in state: 508. +## +## code_inj -> Lang expr . RBRACKET [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] +## +## The known suffix of the stack is as follows: +## Lang expr +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond ## interactive_expr: Let Rec Verbatim ## -## Ends in an error in state: 354. +## Ends in an error in state: 356. ## ## let_expr(expr_with_let_expr) -> seq(Attr) Let Rec . let_binding SEMI expr_with_let_expr [ SEMI RBRACE EOF ] ## @@ -1692,7 +1667,7 @@ interactive_expr: Let Rec Verbatim interactive_expr: Let Rec WILD EQ Bytes SEMI VBAR ## -## Ends in an error in state: 397. +## Ends in an error in state: 399. ## ## let_expr(expr_with_let_expr) -> seq(Attr) Let Rec let_binding SEMI . expr_with_let_expr [ SEMI RBRACE EOF ] ## @@ -1704,7 +1679,7 @@ interactive_expr: Let Rec WILD EQ Bytes SEMI VBAR interactive_expr: Let Rec WILD EQ Bytes VBAR ## -## Ends in an error in state: 396. +## Ends in an error in state: 398. ## ## let_expr(expr_with_let_expr) -> seq(Attr) Let Rec let_binding . SEMI expr_with_let_expr [ SEMI RBRACE EOF ] ## @@ -1715,27 +1690,27 @@ interactive_expr: Let Rec WILD EQ Bytes VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 158, spurious reduction of production call_expr_level_in -> core_expr -## In state 176, spurious reduction of production option(type_annotation_simple) -> -## In state 177, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 178, spurious reduction of production unary_expr_level -> call_expr_level -## In state 131, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 155, spurious reduction of production add_expr_level -> mult_expr_level -## In state 186, spurious reduction of production cat_expr_level -> add_expr_level -## In state 207, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 214, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 221, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 168, spurious reduction of production base_expr -> disj_expr_level -## In state 225, spurious reduction of production base_cond -> base_expr -## In state 226, spurious reduction of production expr -> base_cond -## In state 520, spurious reduction of production let_binding -> WILD option(type_annotation) EQ expr +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond +## In state 524, spurious reduction of production let_binding -> WILD option(type_annotation) EQ expr ## interactive_expr: Let Verbatim ## -## Ends in an error in state: 353. +## Ends in an error in state: 355. ## ## let_expr(expr_with_let_expr) -> seq(Attr) Let . let_binding SEMI expr_with_let_expr [ SEMI RBRACE EOF ] ## let_expr(expr_with_let_expr) -> seq(Attr) Let . Rec let_binding SEMI expr_with_let_expr [ SEMI RBRACE EOF ] @@ -1748,7 +1723,7 @@ interactive_expr: Let Verbatim interactive_expr: Let WILD EQ Bytes SEMI VBAR ## -## Ends in an error in state: 409. +## Ends in an error in state: 404. ## ## let_expr(expr_with_let_expr) -> seq(Attr) Let let_binding SEMI . expr_with_let_expr [ SEMI RBRACE EOF ] ## @@ -1760,7 +1735,7 @@ interactive_expr: Let WILD EQ Bytes SEMI VBAR interactive_expr: Let WILD EQ Bytes VBAR ## -## Ends in an error in state: 408. +## Ends in an error in state: 403. ## ## let_expr(expr_with_let_expr) -> seq(Attr) Let let_binding . SEMI expr_with_let_expr [ SEMI RBRACE EOF ] ## @@ -1771,20 +1746,20 @@ interactive_expr: Let WILD EQ Bytes VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond -## In state 529, spurious reduction of production let_binding -> WILD option(type_annotation) EQ expr +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond +## In state 524, spurious reduction of production let_binding -> WILD option(type_annotation) EQ expr ## @@ -1803,7 +1778,7 @@ interactive_expr: MINUS VBAR interactive_expr: NOT VBAR ## -## Ends in an error in state: 92. +## Ends in an error in state: 91. ## ## unary_expr_level -> NOT . call_expr_level [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -1815,7 +1790,7 @@ interactive_expr: NOT VBAR interactive_expr: Switch Constr WILD ## -## Ends in an error in state: 116. +## Ends in an error in state: 117. ## ## module_field -> Constr . DOT module_fun [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## projection -> Constr . DOT Ident selection [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -1828,7 +1803,7 @@ interactive_expr: Switch Constr WILD interactive_expr: Switch LBRACE WILD ## -## Ends in an error in state: 252. +## Ends in an error in state: 251. ## ## update_record -> LBRACE . ELLIPSIS path COMMA sep_or_term_list(field_path_assignment,COMMA) RBRACE [ LBRACE ] ## @@ -1840,7 +1815,7 @@ interactive_expr: Switch LBRACE WILD interactive_expr: Switch LBRACKET VBAR ## -## Ends in an error in state: 239. +## Ends in an error in state: 238. ## ## list__(expr) -> LBRACKET . option(sep_or_term_list(expr,SEMI)) RBRACKET [ LBRACE ] ## @@ -1852,7 +1827,7 @@ interactive_expr: Switch LBRACKET VBAR interactive_expr: Switch LBRACKET WILD SEMI VBAR ## -## Ends in an error in state: 246. +## Ends in an error in state: 245. ## ## nsepseq(expr,SEMI) -> expr SEMI . nsepseq(expr,SEMI) [ RBRACKET ] ## nseq(__anonymous_0(expr,SEMI)) -> expr SEMI . seq(__anonymous_0(expr,SEMI)) [ RBRACKET ] @@ -1865,7 +1840,7 @@ interactive_expr: Switch LBRACKET WILD SEMI VBAR interactive_expr: Switch LBRACKET WILD SEMI WILD SEMI VBAR ## -## Ends in an error in state: 250. +## Ends in an error in state: 249. ## ## nsepseq(expr,SEMI) -> expr SEMI . nsepseq(expr,SEMI) [ RBRACKET ] ## seq(__anonymous_0(expr,SEMI)) -> expr SEMI . seq(__anonymous_0(expr,SEMI)) [ RBRACKET ] @@ -1878,7 +1853,7 @@ interactive_expr: Switch LBRACKET WILD SEMI WILD SEMI VBAR interactive_expr: Switch LBRACKET WILD SEMI WILD VBAR ## -## Ends in an error in state: 249. +## Ends in an error in state: 248. ## ## nsepseq(expr,SEMI) -> expr . [ RBRACKET ] ## nsepseq(expr,SEMI) -> expr . SEMI nsepseq(expr,SEMI) [ RBRACKET ] @@ -1891,26 +1866,26 @@ interactive_expr: Switch LBRACKET WILD SEMI WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond ## interactive_expr: Switch LBRACKET WILD VBAR ## -## Ends in an error in state: 245. +## Ends in an error in state: 244. ## ## nsepseq(expr,SEMI) -> expr . [ RBRACKET ] ## nsepseq(expr,SEMI) -> expr . SEMI nsepseq(expr,SEMI) [ RBRACKET ] @@ -1923,26 +1898,26 @@ interactive_expr: Switch LBRACKET WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond ## interactive_expr: Switch LPAR VBAR ## -## Ends in an error in state: 90. +## Ends in an error in state: 92. ## ## par(expr) -> LPAR . expr RPAR [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## unit -> LPAR . RPAR [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -1955,7 +1930,7 @@ interactive_expr: Switch LPAR VBAR interactive_expr: Switch LPAR WILD VBAR ## -## Ends in an error in state: 458. +## Ends in an error in state: 481. ## ## par(expr) -> LPAR expr . RPAR [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LPAR LE LBRACE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -1966,19 +1941,19 @@ interactive_expr: Switch LPAR WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond ## @@ -1997,7 +1972,7 @@ interactive_expr: Switch VBAR interactive_expr: Switch WILD LBRACE VBAR LBRACKET VBAR ## -## Ends in an error in state: 342. +## Ends in an error in state: 337. ## ## list__(sub_pattern) -> LBRACKET . option(sep_or_term_list(sub_pattern,SEMI)) RBRACKET [ COMMA ARROW ] ## pattern -> LBRACKET . sub_pattern COMMA ELLIPSIS sub_pattern RBRACKET [ ARROW ] @@ -2010,7 +1985,7 @@ interactive_expr: Switch WILD LBRACE VBAR LBRACKET VBAR interactive_expr: Switch WILD LBRACE VBAR LBRACKET WILD COMMA ELLIPSIS VBAR ## -## Ends in an error in state: 345. +## Ends in an error in state: 340. ## ## pattern -> LBRACKET sub_pattern COMMA ELLIPSIS . sub_pattern RBRACKET [ ARROW ] ## @@ -2022,7 +1997,7 @@ interactive_expr: Switch WILD LBRACE VBAR LBRACKET WILD COMMA ELLIPSIS VBAR interactive_expr: Switch WILD LBRACE VBAR LBRACKET WILD COMMA ELLIPSIS WILD WILD ## -## Ends in an error in state: 346. +## Ends in an error in state: 341. ## ## pattern -> LBRACKET sub_pattern COMMA ELLIPSIS sub_pattern . RBRACKET [ ARROW ] ## @@ -2034,7 +2009,7 @@ interactive_expr: Switch WILD LBRACE VBAR LBRACKET WILD COMMA ELLIPSIS WILD WILD interactive_expr: Switch WILD LBRACE VBAR LBRACKET WILD COMMA WILD ## -## Ends in an error in state: 344. +## Ends in an error in state: 339. ## ## pattern -> LBRACKET sub_pattern COMMA . ELLIPSIS sub_pattern RBRACKET [ ARROW ] ## @@ -2046,7 +2021,7 @@ interactive_expr: Switch WILD LBRACE VBAR LBRACKET WILD COMMA WILD interactive_expr: Switch WILD LBRACE VBAR LBRACKET WILD WILD ## -## Ends in an error in state: 343. +## Ends in an error in state: 338. ## ## nsepseq(sub_pattern,SEMI) -> sub_pattern . [ RBRACKET ] ## nsepseq(sub_pattern,SEMI) -> sub_pattern . SEMI nsepseq(sub_pattern,SEMI) [ RBRACKET ] @@ -2061,7 +2036,7 @@ interactive_expr: Switch WILD LBRACE VBAR LBRACKET WILD WILD interactive_expr: Switch WILD LBRACE VBAR LPAR Bytes RPAR WILD ## -## Ends in an error in state: 349. +## Ends in an error in state: 344. ## ## tuple(sub_pattern) -> sub_pattern . COMMA nsepseq(sub_pattern,COMMA) [ ARROW ] ## @@ -2073,7 +2048,7 @@ interactive_expr: Switch WILD LBRACE VBAR LPAR Bytes RPAR WILD interactive_expr: Switch WILD LBRACE VBAR VBAR ## -## Ends in an error in state: 517. +## Ends in an error in state: 512. ## ## case_clause(base_cond) -> VBAR . pattern ARROW base_cond option(SEMI) [ VBAR RBRACE ] ## @@ -2085,7 +2060,7 @@ interactive_expr: Switch WILD LBRACE VBAR VBAR interactive_expr: Switch WILD LBRACE VBAR WILD ARROW Bytes SEMI WILD ## -## Ends in an error in state: 525. +## Ends in an error in state: 520. ## ## nseq(case_clause(base_cond)) -> case_clause(base_cond) . seq(case_clause(base_cond)) [ RBRACE ] ## @@ -2097,7 +2072,7 @@ interactive_expr: Switch WILD LBRACE VBAR WILD ARROW Bytes SEMI WILD interactive_expr: Switch WILD LBRACE VBAR WILD ARROW Bytes VBAR Bytes ARROW Bytes SEMI WILD ## -## Ends in an error in state: 527. +## Ends in an error in state: 522. ## ## seq(case_clause(base_cond)) -> case_clause(base_cond) . seq(case_clause(base_cond)) [ RBRACE ] ## @@ -2109,7 +2084,7 @@ interactive_expr: Switch WILD LBRACE VBAR WILD ARROW Bytes VBAR Bytes ARROW Byte interactive_expr: Switch WILD LBRACE VBAR WILD ARROW VBAR ## -## Ends in an error in state: 519. +## Ends in an error in state: 514. ## ## case_clause(base_cond) -> VBAR pattern ARROW . base_cond option(SEMI) [ VBAR RBRACE ] ## @@ -2121,7 +2096,7 @@ interactive_expr: Switch WILD LBRACE VBAR WILD ARROW VBAR interactive_expr: Switch WILD LBRACE VBAR WILD ARROW WILD Type ## -## Ends in an error in state: 520. +## Ends in an error in state: 515. ## ## case_clause(base_cond) -> VBAR pattern ARROW base_cond . option(SEMI) [ VBAR RBRACE ] ## @@ -2132,25 +2107,25 @@ interactive_expr: Switch WILD LBRACE VBAR WILD ARROW WILD Type ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr ## interactive_expr: Switch WILD LBRACE VBAR WILD COMMA Bytes RPAR ## -## Ends in an error in state: 518. +## Ends in an error in state: 513. ## ## case_clause(base_cond) -> VBAR pattern . ARROW base_cond option(SEMI) [ VBAR RBRACE ] ## @@ -2161,16 +2136,16 @@ interactive_expr: Switch WILD LBRACE VBAR WILD COMMA Bytes RPAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 336, spurious reduction of production nsepseq(sub_pattern,COMMA) -> sub_pattern -## In state 339, spurious reduction of production tuple(sub_pattern) -> sub_pattern COMMA nsepseq(sub_pattern,COMMA) -## In state 348, spurious reduction of production pattern -> tuple(sub_pattern) +## In state 331, spurious reduction of production nsepseq(sub_pattern,COMMA) -> sub_pattern +## In state 334, spurious reduction of production tuple(sub_pattern) -> sub_pattern COMMA nsepseq(sub_pattern,COMMA) +## In state 343, spurious reduction of production pattern -> tuple(sub_pattern) ## interactive_expr: Switch WILD LBRACE VBAR WILD COMMA VBAR ## -## Ends in an error in state: 335. +## Ends in an error in state: 330. ## ## tuple(sub_pattern) -> sub_pattern COMMA . nsepseq(sub_pattern,COMMA) [ RPAR ARROW ] ## @@ -2182,7 +2157,7 @@ interactive_expr: Switch WILD LBRACE VBAR WILD COMMA VBAR interactive_expr: Switch WILD LBRACE VBAR WILD COMMA WILD COMMA VBAR ## -## Ends in an error in state: 337. +## Ends in an error in state: 332. ## ## nsepseq(sub_pattern,COMMA) -> sub_pattern COMMA . nsepseq(sub_pattern,COMMA) [ RPAR ARROW ] ## @@ -2194,7 +2169,7 @@ interactive_expr: Switch WILD LBRACE VBAR WILD COMMA WILD COMMA VBAR interactive_expr: Switch WILD LBRACE VBAR WILD COMMA WILD WILD ## -## Ends in an error in state: 336. +## Ends in an error in state: 331. ## ## nsepseq(sub_pattern,COMMA) -> sub_pattern . [ RPAR ARROW ] ## nsepseq(sub_pattern,COMMA) -> sub_pattern . COMMA nsepseq(sub_pattern,COMMA) [ RPAR ARROW ] @@ -2207,7 +2182,7 @@ interactive_expr: Switch WILD LBRACE VBAR WILD COMMA WILD WILD interactive_expr: Switch WILD LBRACE VBAR WILD WILD ## -## Ends in an error in state: 436. +## Ends in an error in state: 431. ## ## pattern -> core_pattern . [ ARROW ] ## sub_pattern -> core_pattern . [ COMMA ] @@ -2220,7 +2195,7 @@ interactive_expr: Switch WILD LBRACE VBAR WILD WILD interactive_expr: Switch WILD LBRACE WILD ## -## Ends in an error in state: 516. +## Ends in an error in state: 511. ## ## switch_expr(base_cond) -> Switch switch_expr_ LBRACE . cases(base_cond) RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] ## @@ -2232,7 +2207,7 @@ interactive_expr: Switch WILD LBRACE WILD interactive_expr: Switch WILD WILD ## -## Ends in an error in state: 515. +## Ends in an error in state: 510. ## ## switch_expr(base_cond) -> Switch switch_expr_ . LBRACE cases(base_cond) RBRACE [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] ## @@ -2244,7 +2219,7 @@ interactive_expr: Switch WILD WILD interactive_expr: VBAR ## -## Ends in an error in state: 540. +## Ends in an error in state: 535. ## ## interactive_expr' -> . interactive_expr [ # ] ## @@ -2256,7 +2231,7 @@ interactive_expr: VBAR interactive_expr: WILD ARROW VBAR ## -## Ends in an error in state: 221. +## Ends in an error in state: 220. ## ## fun_expr(expr) -> disj_expr_level ARROW . expr [ VBAR Type SEMI RPAR RBRACKET RBRACE Let EOF COMMA Attr ] ## @@ -2268,7 +2243,7 @@ interactive_expr: WILD ARROW VBAR interactive_expr: WILD BOOL_AND VBAR ## -## Ends in an error in state: 175. +## Ends in an error in state: 174. ## ## bin_op(conj_expr_level,BOOL_AND,comp_expr_level) -> conj_expr_level BOOL_AND . comp_expr_level [ VBAR Type SEMI RPAR RBRACKET RBRACE Or Let EOF COMMA BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2280,7 +2255,7 @@ interactive_expr: WILD BOOL_AND VBAR interactive_expr: WILD BOOL_OR VBAR ## -## Ends in an error in state: 219. +## Ends in an error in state: 218. ## ## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level BOOL_OR . conj_expr_level [ VBAR Type SEMI RPAR RBRACKET RBRACE Or Let EOF COMMA BOOL_OR Attr ARROW ] ## @@ -2292,7 +2267,7 @@ interactive_expr: WILD BOOL_OR VBAR interactive_expr: WILD CAT VBAR ## -## Ends in an error in state: 198. +## Ends in an error in state: 197. ## ## bin_op(add_expr_level,CAT,cat_expr_level) -> add_expr_level CAT . cat_expr_level [ VBAR Type SEMI RPAR RBRACKET RBRACE Or NE Let LT LE GT GE EQEQ EOF COMMA BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2304,7 +2279,7 @@ interactive_expr: WILD CAT VBAR interactive_expr: WILD COLON Ident LPAR Ident VBAR ## -## Ends in an error in state: 141. +## Ends in an error in state: 140. ## ## nsepseq(type_expr_simple,COMMA) -> type_expr_simple . [ RPAR ] ## nsepseq(type_expr_simple,COMMA) -> type_expr_simple . COMMA nsepseq(type_expr_simple,COMMA) [ RPAR ] @@ -2316,15 +2291,15 @@ interactive_expr: WILD COLON Ident LPAR Ident VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 139, spurious reduction of production option(type_expr_simple_args) -> -## In state 148, spurious reduction of production type_expr_simple -> Ident option(type_expr_simple_args) +## In state 138, spurious reduction of production option(type_expr_simple_args) -> +## In state 147, spurious reduction of production type_expr_simple -> Ident option(type_expr_simple_args) ## interactive_expr: WILD COLON Ident LPAR WILD ## -## Ends in an error in state: 140. +## Ends in an error in state: 139. ## ## par(nsepseq(type_expr_simple,COMMA)) -> LPAR . nsepseq(type_expr_simple,COMMA) RPAR [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2336,7 +2311,7 @@ interactive_expr: WILD COLON Ident LPAR WILD interactive_expr: WILD COLON Ident WILD ## -## Ends in an error in state: 139. +## Ends in an error in state: 138. ## ## type_expr_simple -> Ident . option(type_expr_simple_args) [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2348,7 +2323,7 @@ interactive_expr: WILD COLON Ident WILD interactive_expr: WILD COLON LPAR Ident ARROW Ident VBAR ## -## Ends in an error in state: 151. +## Ends in an error in state: 150. ## ## type_expr_simple -> LPAR type_expr_simple ARROW type_expr_simple . RPAR [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2359,15 +2334,15 @@ interactive_expr: WILD COLON LPAR Ident ARROW Ident VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 139, spurious reduction of production option(type_expr_simple_args) -> -## In state 148, spurious reduction of production type_expr_simple -> Ident option(type_expr_simple_args) +## In state 138, spurious reduction of production option(type_expr_simple_args) -> +## In state 147, spurious reduction of production type_expr_simple -> Ident option(type_expr_simple_args) ## interactive_expr: WILD COLON LPAR Ident ARROW WILD ## -## Ends in an error in state: 150. +## Ends in an error in state: 149. ## ## type_expr_simple -> LPAR type_expr_simple ARROW . type_expr_simple RPAR [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2379,7 +2354,7 @@ interactive_expr: WILD COLON LPAR Ident ARROW WILD interactive_expr: WILD COLON LPAR Ident COMMA WILD ## -## Ends in an error in state: 142. +## Ends in an error in state: 141. ## ## nsepseq(type_expr_simple,COMMA) -> type_expr_simple COMMA . nsepseq(type_expr_simple,COMMA) [ RPAR ] ## @@ -2391,7 +2366,7 @@ interactive_expr: WILD COLON LPAR Ident COMMA WILD interactive_expr: WILD COLON LPAR Ident RPAR WILD ## -## Ends in an error in state: 158. +## Ends in an error in state: 157. ## ## add_expr_level -> mult_expr_level . [ VBAR Type SEMI RPAR RBRACKET RBRACE PLUS Or NE MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] ## bin_op(mult_expr_level,Mod,unary_expr_level) -> mult_expr_level . Mod unary_expr_level [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -2406,7 +2381,7 @@ interactive_expr: WILD COLON LPAR Ident RPAR WILD interactive_expr: WILD COLON LPAR Ident VBAR ## -## Ends in an error in state: 149. +## Ends in an error in state: 148. ## ## nsepseq(type_expr_simple,COMMA) -> type_expr_simple . [ RPAR ] ## nsepseq(type_expr_simple,COMMA) -> type_expr_simple . COMMA nsepseq(type_expr_simple,COMMA) [ RPAR ] @@ -2419,15 +2394,15 @@ interactive_expr: WILD COLON LPAR Ident VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 139, spurious reduction of production option(type_expr_simple_args) -> -## In state 148, spurious reduction of production type_expr_simple -> Ident option(type_expr_simple_args) +## In state 138, spurious reduction of production option(type_expr_simple_args) -> +## In state 147, spurious reduction of production type_expr_simple -> Ident option(type_expr_simple_args) ## interactive_expr: WILD COLON LPAR WILD ## -## Ends in an error in state: 138. +## Ends in an error in state: 137. ## ## type_expr_simple -> LPAR . nsepseq(type_expr_simple,COMMA) RPAR [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] ## type_expr_simple -> LPAR . type_expr_simple ARROW type_expr_simple RPAR [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -2440,7 +2415,7 @@ interactive_expr: WILD COLON LPAR WILD interactive_expr: WILD COLON WILD ## -## Ends in an error in state: 137. +## Ends in an error in state: 136. ## ## type_annotation_simple -> COLON . type_expr_simple [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2452,7 +2427,7 @@ interactive_expr: WILD COLON WILD interactive_expr: WILD EQEQ VBAR ## -## Ends in an error in state: 208. +## Ends in an error in state: 207. ## ## bin_op(comp_expr_level,EQEQ,cat_expr_level) -> comp_expr_level EQEQ . cat_expr_level [ VBAR Type SEMI RPAR RBRACKET RBRACE Or NE Let LT LE GT GE EQEQ EOF COMMA BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2464,7 +2439,7 @@ interactive_expr: WILD EQEQ VBAR interactive_expr: WILD GE VBAR ## -## Ends in an error in state: 206. +## Ends in an error in state: 205. ## ## bin_op(comp_expr_level,GE,cat_expr_level) -> comp_expr_level GE . cat_expr_level [ VBAR Type SEMI RPAR RBRACKET RBRACE Or NE Let LT LE GT GE EQEQ EOF COMMA BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2476,7 +2451,7 @@ interactive_expr: WILD GE VBAR interactive_expr: WILD GT VBAR ## -## Ends in an error in state: 201. +## Ends in an error in state: 203. ## ## bin_op(comp_expr_level,GT,cat_expr_level) -> comp_expr_level GT . cat_expr_level [ VBAR Type SEMI RPAR RBRACKET RBRACE Or NE Let LT LE GT GE EQEQ EOF COMMA BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2488,7 +2463,7 @@ interactive_expr: WILD GT VBAR interactive_expr: WILD LE VBAR ## -## Ends in an error in state: 199. +## Ends in an error in state: 201. ## ## bin_op(comp_expr_level,LE,cat_expr_level) -> comp_expr_level LE . cat_expr_level [ VBAR Type SEMI RPAR RBRACKET RBRACE Or NE Let LT LE GT GE EQEQ EOF COMMA BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2500,7 +2475,7 @@ interactive_expr: WILD LE VBAR interactive_expr: WILD LPAR VBAR ## -## Ends in an error in state: 159. +## Ends in an error in state: 161. ## ## call_expr -> core_expr LPAR . nsepseq(expr,COMMA) RPAR [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## unit -> LPAR . RPAR [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -2513,7 +2488,7 @@ interactive_expr: WILD LPAR VBAR interactive_expr: WILD LPAR WILD COMMA VBAR ## -## Ends in an error in state: 166. +## Ends in an error in state: 168. ## ## nsepseq(expr,COMMA) -> expr COMMA . nsepseq(expr,COMMA) [ RPAR ] ## @@ -2525,7 +2500,7 @@ interactive_expr: WILD LPAR WILD COMMA VBAR interactive_expr: WILD LPAR WILD VBAR ## -## Ends in an error in state: 165. +## Ends in an error in state: 167. ## ## nsepseq(expr,COMMA) -> expr . [ RPAR ] ## nsepseq(expr,COMMA) -> expr . COMMA nsepseq(expr,COMMA) [ RPAR ] @@ -2537,26 +2512,26 @@ interactive_expr: WILD LPAR WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 158, spurious reduction of production call_expr_level_in -> core_expr -## In state 176, spurious reduction of production option(type_annotation_simple) -> -## In state 177, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 178, spurious reduction of production unary_expr_level -> call_expr_level -## In state 131, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 155, spurious reduction of production add_expr_level -> mult_expr_level -## In state 186, spurious reduction of production cat_expr_level -> add_expr_level -## In state 207, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 214, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 221, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 168, spurious reduction of production base_expr -> disj_expr_level -## In state 225, spurious reduction of production base_cond -> base_expr -## In state 226, spurious reduction of production expr -> base_cond +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond ## Missing `)`. interactive_expr: WILD LT VBAR ## -## Ends in an error in state: 197. +## Ends in an error in state: 199. ## ## bin_op(comp_expr_level,LT,cat_expr_level) -> comp_expr_level LT . cat_expr_level [ VBAR Type SEMI RPAR RBRACKET RBRACE Or NE Let LT LE GT GE EQEQ EOF COMMA BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2568,7 +2543,7 @@ interactive_expr: WILD LT VBAR interactive_expr: WILD MINUS VBAR ## -## Ends in an error in state: 193. +## Ends in an error in state: 195. ## ## bin_op(add_expr_level,MINUS,mult_expr_level) -> add_expr_level MINUS . mult_expr_level [ VBAR Type SEMI RPAR RBRACKET RBRACE PLUS Or NE MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2580,7 +2555,7 @@ interactive_expr: WILD MINUS VBAR interactive_expr: WILD MINUS WILD COLON LPAR Ident RPAR WILD ## -## Ends in an error in state: 194. +## Ends in an error in state: 196. ## ## bin_op(add_expr_level,MINUS,mult_expr_level) -> add_expr_level MINUS mult_expr_level . [ VBAR Type SEMI RPAR RBRACKET RBRACE PLUS Or NE MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] ## bin_op(mult_expr_level,Mod,unary_expr_level) -> mult_expr_level . Mod unary_expr_level [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -2595,7 +2570,7 @@ interactive_expr: WILD MINUS WILD COLON LPAR Ident RPAR WILD interactive_expr: WILD Mod VBAR ## -## Ends in an error in state: 191. +## Ends in an error in state: 193. ## ## bin_op(mult_expr_level,Mod,unary_expr_level) -> mult_expr_level Mod . unary_expr_level [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2607,7 +2582,7 @@ interactive_expr: WILD Mod VBAR interactive_expr: WILD NE VBAR ## -## Ends in an error in state: 177. +## Ends in an error in state: 176. ## ## bin_op(comp_expr_level,NE,cat_expr_level) -> comp_expr_level NE . cat_expr_level [ VBAR Type SEMI RPAR RBRACKET RBRACE Or NE Let LT LE GT GE EQEQ EOF COMMA BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2619,7 +2594,7 @@ interactive_expr: WILD NE VBAR interactive_expr: WILD Or VBAR ## -## Ends in an error in state: 172. +## Ends in an error in state: 171. ## ## bin_op(disj_expr_level,Or,conj_expr_level) -> disj_expr_level Or . conj_expr_level [ VBAR Type SEMI RPAR RBRACKET RBRACE Or Let EOF COMMA BOOL_OR Attr ARROW ] ## @@ -2631,7 +2606,7 @@ interactive_expr: WILD Or VBAR interactive_expr: WILD PLUS VBAR ## -## Ends in an error in state: 190. +## Ends in an error in state: 189. ## ## bin_op(add_expr_level,PLUS,mult_expr_level) -> add_expr_level PLUS . mult_expr_level [ VBAR Type SEMI RPAR RBRACKET RBRACE PLUS Or NE MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2643,7 +2618,7 @@ interactive_expr: WILD PLUS VBAR interactive_expr: WILD PLUS WILD COLON LPAR Ident RPAR WILD ## -## Ends in an error in state: 191. +## Ends in an error in state: 190. ## ## bin_op(add_expr_level,PLUS,mult_expr_level) -> add_expr_level PLUS mult_expr_level . [ VBAR Type SEMI RPAR RBRACKET RBRACE PLUS Or NE MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] ## bin_op(mult_expr_level,Mod,unary_expr_level) -> mult_expr_level . Mod unary_expr_level [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -2658,7 +2633,7 @@ interactive_expr: WILD PLUS WILD COLON LPAR Ident RPAR WILD interactive_expr: WILD SLASH VBAR ## -## Ends in an error in state: 192. +## Ends in an error in state: 191. ## ## bin_op(mult_expr_level,SLASH,unary_expr_level) -> mult_expr_level SLASH . unary_expr_level [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2670,7 +2645,7 @@ interactive_expr: WILD SLASH VBAR interactive_expr: WILD TIMES VBAR ## -## Ends in an error in state: 159. +## Ends in an error in state: 158. ## ## bin_op(mult_expr_level,TIMES,unary_expr_level) -> mult_expr_level TIMES . unary_expr_level [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA CAT BOOL_OR BOOL_AND Attr ARROW ] ## @@ -2682,7 +2657,7 @@ interactive_expr: WILD TIMES VBAR interactive_expr: WILD VBAR ## -## Ends in an error in state: 542. +## Ends in an error in state: 537. ## ## interactive_expr -> expr_with_let_expr . EOF [ # ] ## @@ -2693,27 +2668,27 @@ interactive_expr: WILD VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond -## In state 407, spurious reduction of production expr_with_let_expr -> expr +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond +## In state 402, spurious reduction of production expr_with_let_expr -> expr ## interactive_expr: WILD WILD ## -## Ends in an error in state: 161. +## Ends in an error in state: 160. ## ## call_expr -> core_expr . LPAR nsepseq(expr,COMMA) RPAR [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] ## call_expr -> core_expr . unit [ VBAR Type TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE GT GE EQEQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ARROW ] @@ -2739,7 +2714,7 @@ contract: Attr WILD contract: Let Ident COLON String WILD ## -## Ends in an error in state: 383. +## Ends in an error in state: 378. ## ## let_binding -> Ident option(type_annotation) . EQ expr [ Type SEMI Let EOF Attr ] ## @@ -2751,7 +2726,7 @@ contract: Let Ident COLON String WILD contract: Let Ident EQ VBAR ## -## Ends in an error in state: 384. +## Ends in an error in state: 379. ## ## let_binding -> Ident option(type_annotation) EQ . expr [ Type SEMI Let EOF Attr ] ## @@ -2768,7 +2743,7 @@ let func = (a: int, b: int) => a + b; contract: Let Ident WILD ## -## Ends in an error in state: 382. +## Ends in an error in state: 377. ## ## let_binding -> Ident . option(type_annotation) EQ expr [ Type SEMI Let EOF Attr ] ## sub_irrefutable -> Ident . [ COMMA ] @@ -2781,7 +2756,7 @@ contract: Let Ident WILD contract: Let LBRACE Ident EQ Bytes COMMA Ident EQ Bytes COMMA WILD ## -## Ends in an error in state: 318. +## Ends in an error in state: 313. ## ## nsepseq(field_pattern,COMMA) -> field_pattern COMMA . nsepseq(field_pattern,COMMA) [ RBRACE ] ## seq(__anonymous_0(field_pattern,COMMA)) -> field_pattern COMMA . seq(__anonymous_0(field_pattern,COMMA)) [ RBRACE ] @@ -2794,7 +2769,7 @@ contract: Let LBRACE Ident EQ Bytes COMMA Ident EQ Bytes COMMA WILD contract: Let LBRACE Ident EQ Bytes COMMA Ident EQ Bytes WILD ## -## Ends in an error in state: 310. +## Ends in an error in state: 312. ## ## nsepseq(field_pattern,COMMA) -> field_pattern . [ RBRACE ] ## nsepseq(field_pattern,COMMA) -> field_pattern . COMMA nsepseq(field_pattern,COMMA) [ RBRACE ] @@ -2808,7 +2783,7 @@ contract: Let LBRACE Ident EQ Bytes COMMA Ident EQ Bytes WILD contract: Let LBRACE Ident EQ Bytes COMMA WILD ## -## Ends in an error in state: 307. +## Ends in an error in state: 309. ## ## nsepseq(field_pattern,COMMA) -> field_pattern COMMA . nsepseq(field_pattern,COMMA) [ RBRACE ] ## nseq(__anonymous_0(field_pattern,COMMA)) -> field_pattern COMMA . seq(__anonymous_0(field_pattern,COMMA)) [ RBRACE ] @@ -2821,7 +2796,7 @@ contract: Let LBRACE Ident EQ Bytes COMMA WILD contract: Let LBRACE Ident EQ Bytes RBRACE COLON String WILD ## -## Ends in an error in state: 389. +## Ends in an error in state: 391. ## ## let_binding -> record_pattern option(type_annotation) . EQ expr [ Type SEMI Let EOF Attr ] ## @@ -2833,7 +2808,7 @@ contract: Let LBRACE Ident EQ Bytes RBRACE COLON String WILD contract: Let LBRACE Ident EQ Bytes RBRACE EQ VBAR ## -## Ends in an error in state: 390. +## Ends in an error in state: 392. ## ## let_binding -> record_pattern option(type_annotation) EQ . expr [ Type SEMI Let EOF Attr ] ## @@ -2845,7 +2820,7 @@ contract: Let LBRACE Ident EQ Bytes RBRACE EQ VBAR contract: Let LBRACE Ident EQ Bytes RBRACE WILD ## -## Ends in an error in state: 388. +## Ends in an error in state: 390. ## ## let_binding -> record_pattern . option(type_annotation) EQ expr [ Type SEMI Let EOF Attr ] ## sub_irrefutable -> record_pattern . [ COMMA ] @@ -2858,7 +2833,7 @@ contract: Let LBRACE Ident EQ Bytes RBRACE WILD contract: Let LBRACE Ident EQ Bytes WILD ## -## Ends in an error in state: 306. +## Ends in an error in state: 308. ## ## nsepseq(field_pattern,COMMA) -> field_pattern . [ RBRACE ] ## nsepseq(field_pattern,COMMA) -> field_pattern . COMMA nsepseq(field_pattern,COMMA) [ RBRACE ] @@ -2872,7 +2847,7 @@ contract: Let LBRACE Ident EQ Bytes WILD contract: Let LBRACE Ident EQ VBAR ## -## Ends in an error in state: 284. +## Ends in an error in state: 286. ## ## field_pattern -> Ident EQ . sub_pattern [ RBRACE COMMA ] ## @@ -2884,7 +2859,7 @@ contract: Let LBRACE Ident EQ VBAR contract: Let LBRACE Ident WILD ## -## Ends in an error in state: 283. +## Ends in an error in state: 285. ## ## field_pattern -> Ident . EQ sub_pattern [ RBRACE COMMA ] ## @@ -2896,7 +2871,7 @@ contract: Let LBRACE Ident WILD contract: Let LBRACE WILD ## -## Ends in an error in state: 282. +## Ends in an error in state: 284. ## ## record_pattern -> LBRACE . sep_or_term_list(field_pattern,COMMA) RBRACE [ SEMI RPAR RBRACKET RBRACE EQ COMMA COLON ARROW ] ## @@ -2908,7 +2883,7 @@ contract: Let LBRACE WILD contract: Let LPAR C_Some VBAR ## -## Ends in an error in state: 289. +## Ends in an error in state: 291. ## ## constr_pattern -> C_Some . sub_pattern [ SEMI RPAR RBRACKET RBRACE COMMA ARROW ] ## @@ -2920,7 +2895,7 @@ contract: Let LPAR C_Some VBAR contract: Let LPAR Constr LBRACKET VBAR ## -## Ends in an error in state: 281. +## Ends in an error in state: 283. ## ## list__(sub_pattern) -> LBRACKET . option(sep_or_term_list(sub_pattern,SEMI)) RBRACKET [ SEMI RPAR RBRACKET RBRACE COMMA ARROW ] ## @@ -2932,7 +2907,7 @@ contract: Let LPAR Constr LBRACKET VBAR contract: Let LPAR Constr LBRACKET WILD SEMI VBAR ## -## Ends in an error in state: 314. +## Ends in an error in state: 316. ## ## nsepseq(sub_pattern,SEMI) -> sub_pattern SEMI . nsepseq(sub_pattern,SEMI) [ RBRACKET ] ## nseq(__anonymous_0(sub_pattern,SEMI)) -> sub_pattern SEMI . seq(__anonymous_0(sub_pattern,SEMI)) [ RBRACKET ] @@ -2945,7 +2920,7 @@ contract: Let LPAR Constr LBRACKET WILD SEMI VBAR contract: Let LPAR Constr LBRACKET WILD SEMI WILD SEMI VBAR ## -## Ends in an error in state: 323. +## Ends in an error in state: 318. ## ## nsepseq(sub_pattern,SEMI) -> sub_pattern SEMI . nsepseq(sub_pattern,SEMI) [ RBRACKET ] ## seq(__anonymous_0(sub_pattern,SEMI)) -> sub_pattern SEMI . seq(__anonymous_0(sub_pattern,SEMI)) [ RBRACKET ] @@ -2958,7 +2933,7 @@ contract: Let LPAR Constr LBRACKET WILD SEMI WILD SEMI VBAR contract: Let LPAR Constr LBRACKET WILD SEMI WILD WILD ## -## Ends in an error in state: 322. +## Ends in an error in state: 317. ## ## nsepseq(sub_pattern,SEMI) -> sub_pattern . [ RBRACKET ] ## nsepseq(sub_pattern,SEMI) -> sub_pattern . SEMI nsepseq(sub_pattern,SEMI) [ RBRACKET ] @@ -2972,7 +2947,7 @@ contract: Let LPAR Constr LBRACKET WILD SEMI WILD WILD contract: Let LPAR Constr LBRACKET WILD WILD ## -## Ends in an error in state: 320. +## Ends in an error in state: 315. ## ## nsepseq(sub_pattern,SEMI) -> sub_pattern . [ RBRACKET ] ## nsepseq(sub_pattern,SEMI) -> sub_pattern . SEMI nsepseq(sub_pattern,SEMI) [ RBRACKET ] @@ -2986,7 +2961,7 @@ contract: Let LPAR Constr LBRACKET WILD WILD contract: Let LPAR Constr LPAR VBAR ## -## Ends in an error in state: 287. +## Ends in an error in state: 282. ## ## par(ptuple) -> LPAR . ptuple RPAR [ SEMI RPAR RBRACKET RBRACE COMMA ARROW ] ## par(sub_pattern) -> LPAR . sub_pattern RPAR [ SEMI RPAR RBRACKET RBRACE COMMA ARROW ] @@ -3000,7 +2975,7 @@ contract: Let LPAR Constr LPAR VBAR contract: Let LPAR Constr LPAR WILD COMMA Bytes ARROW ## -## Ends in an error in state: 340. +## Ends in an error in state: 335. ## ## par(ptuple) -> LPAR ptuple . RPAR [ SEMI RPAR RBRACKET RBRACE COMMA ARROW ] ## @@ -3011,16 +2986,16 @@ contract: Let LPAR Constr LPAR WILD COMMA Bytes ARROW ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 336, spurious reduction of production nsepseq(sub_pattern,COMMA) -> sub_pattern -## In state 339, spurious reduction of production tuple(sub_pattern) -> sub_pattern COMMA nsepseq(sub_pattern,COMMA) -## In state 332, spurious reduction of production ptuple -> tuple(sub_pattern) +## In state 331, spurious reduction of production nsepseq(sub_pattern,COMMA) -> sub_pattern +## In state 334, spurious reduction of production tuple(sub_pattern) -> sub_pattern COMMA nsepseq(sub_pattern,COMMA) +## In state 327, spurious reduction of production ptuple -> tuple(sub_pattern) ## contract: Let LPAR Constr LPAR WILD WILD ## -## Ends in an error in state: 333. +## Ends in an error in state: 328. ## ## par(sub_pattern) -> LPAR sub_pattern . RPAR [ SEMI RPAR RBRACKET RBRACE COMMA ARROW ] ## tuple(sub_pattern) -> sub_pattern . COMMA nsepseq(sub_pattern,COMMA) [ RPAR ] @@ -3033,7 +3008,7 @@ contract: Let LPAR Constr LPAR WILD WILD contract: Let LPAR Constr SEMI ## -## Ends in an error in state: 380. +## Ends in an error in state: 375. ## ## par(closed_irrefutable) -> LPAR closed_irrefutable . RPAR [ RPAR EQ COMMA COLON ] ## @@ -3044,15 +3019,15 @@ contract: Let LPAR Constr SEMI ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 295, spurious reduction of production constr_pattern -> Constr -## In state 379, spurious reduction of production closed_irrefutable -> constr_pattern +## In state 290, spurious reduction of production constr_pattern -> Constr +## In state 374, spurious reduction of production closed_irrefutable -> constr_pattern ## contract: Let LPAR Constr VBAR ## -## Ends in an error in state: 295. +## Ends in an error in state: 290. ## ## constr_pattern -> Constr . sub_pattern [ SEMI RPAR RBRACKET RBRACE COMMA ARROW ] ## constr_pattern -> Constr . [ SEMI RPAR RBRACKET RBRACE COMMA ARROW ] @@ -3065,7 +3040,7 @@ contract: Let LPAR Constr VBAR contract: Let LPAR RPAR COLON String WILD ## -## Ends in an error in state: 387. +## Ends in an error in state: 382. ## ## let_binding -> unit option(type_annotation) . EQ expr [ Type SEMI Let EOF Attr ] ## @@ -3077,7 +3052,7 @@ contract: Let LPAR RPAR COLON String WILD contract: Let LPAR RPAR EQ VBAR ## -## Ends in an error in state: 388. +## Ends in an error in state: 383. ## ## let_binding -> unit option(type_annotation) EQ . expr [ Type SEMI Let EOF Attr ] ## @@ -3089,7 +3064,7 @@ contract: Let LPAR RPAR EQ VBAR contract: Let LPAR RPAR WILD ## -## Ends in an error in state: 386. +## Ends in an error in state: 381. ## ## let_binding -> unit . option(type_annotation) EQ expr [ Type SEMI Let EOF Attr ] ## sub_irrefutable -> unit . [ COMMA ] @@ -3102,7 +3077,7 @@ contract: Let LPAR RPAR WILD contract: Let LPAR Verbatim ## -## Ends in an error in state: 362. +## Ends in an error in state: 357. ## ## par(closed_irrefutable) -> LPAR . closed_irrefutable RPAR [ RPAR EQ COMMA COLON ] ## unit -> LPAR . RPAR [ RPAR EQ COMMA COLON ] @@ -3115,7 +3090,7 @@ contract: Let LPAR Verbatim contract: Let LPAR WILD COLON WILD ## -## Ends in an error in state: 377. +## Ends in an error in state: 372. ## ## typed_pattern -> irrefutable COLON . type_expr [ RPAR ] ## @@ -3127,7 +3102,7 @@ contract: Let LPAR WILD COLON WILD contract: Let LPAR WILD COMMA Ident EQ ## -## Ends in an error in state: 376. +## Ends in an error in state: 371. ## ## closed_irrefutable -> irrefutable . [ RPAR ] ## typed_pattern -> irrefutable . COLON type_expr [ RPAR ] @@ -3139,16 +3114,16 @@ contract: Let LPAR WILD COMMA Ident EQ ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 370, spurious reduction of production nsepseq(sub_irrefutable,COMMA) -> sub_irrefutable -## In state 375, spurious reduction of production tuple(sub_irrefutable) -> sub_irrefutable COMMA nsepseq(sub_irrefutable,COMMA) -## In state 367, spurious reduction of production irrefutable -> tuple(sub_irrefutable) +## In state 365, spurious reduction of production nsepseq(sub_irrefutable,COMMA) -> sub_irrefutable +## In state 370, spurious reduction of production tuple(sub_irrefutable) -> sub_irrefutable COMMA nsepseq(sub_irrefutable,COMMA) +## In state 362, spurious reduction of production irrefutable -> tuple(sub_irrefutable) ## contract: Let LPAR WILD RPAR COLON String WILD ## -## Ends in an error in state: 400. +## Ends in an error in state: 395. ## ## let_binding -> par(closed_irrefutable) option(type_annotation) . EQ expr [ Type SEMI Let EOF Attr ] ## @@ -3160,7 +3135,7 @@ contract: Let LPAR WILD RPAR COLON String WILD contract: Let LPAR WILD RPAR EQ VBAR ## -## Ends in an error in state: 401. +## Ends in an error in state: 396. ## ## let_binding -> par(closed_irrefutable) option(type_annotation) EQ . expr [ Type SEMI Let EOF Attr ] ## @@ -3172,7 +3147,7 @@ contract: Let LPAR WILD RPAR EQ VBAR contract: Let LPAR WILD RPAR WILD ## -## Ends in an error in state: 399. +## Ends in an error in state: 394. ## ## let_binding -> par(closed_irrefutable) . option(type_annotation) EQ expr [ Type SEMI Let EOF Attr ] ## sub_irrefutable -> par(closed_irrefutable) . [ COMMA ] @@ -3185,7 +3160,7 @@ contract: Let LPAR WILD RPAR WILD contract: Let LPAR WILD WILD ## -## Ends in an error in state: 368. +## Ends in an error in state: 363. ## ## irrefutable -> sub_irrefutable . [ RPAR COLON ] ## tuple(sub_irrefutable) -> sub_irrefutable . COMMA nsepseq(sub_irrefutable,COMMA) [ RPAR COLON ] @@ -3198,7 +3173,7 @@ contract: Let LPAR WILD WILD contract: Let Rec Verbatim ## -## Ends in an error in state: 530. +## Ends in an error in state: 525. ## ## let_declaration -> seq(Attr) Let Rec . let_binding [ Type SEMI Let EOF Attr ] ## @@ -3247,7 +3222,7 @@ contract: Let WILD COLON WILD contract: Let WILD COMMA Ident COLON String WILD ## -## Ends in an error in state: 391. +## Ends in an error in state: 386. ## ## let_binding -> tuple(sub_irrefutable) option(type_annotation) . EQ expr [ Type SEMI Let EOF Attr ] ## @@ -3259,7 +3234,7 @@ contract: Let WILD COMMA Ident COLON String WILD contract: Let WILD COMMA Ident EQ VBAR ## -## Ends in an error in state: 392. +## Ends in an error in state: 387. ## ## let_binding -> tuple(sub_irrefutable) option(type_annotation) EQ . expr [ Type SEMI Let EOF Attr ] ## @@ -3271,7 +3246,7 @@ contract: Let WILD COMMA Ident EQ VBAR contract: Let WILD COMMA Ident RPAR ## -## Ends in an error in state: 390. +## Ends in an error in state: 385. ## ## let_binding -> tuple(sub_irrefutable) . option(type_annotation) EQ expr [ Type SEMI Let EOF Attr ] ## @@ -3282,15 +3257,15 @@ contract: Let WILD COMMA Ident RPAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 370, spurious reduction of production nsepseq(sub_irrefutable,COMMA) -> sub_irrefutable -## In state 375, spurious reduction of production tuple(sub_irrefutable) -> sub_irrefutable COMMA nsepseq(sub_irrefutable,COMMA) +## In state 365, spurious reduction of production nsepseq(sub_irrefutable,COMMA) -> sub_irrefutable +## In state 370, spurious reduction of production tuple(sub_irrefutable) -> sub_irrefutable COMMA nsepseq(sub_irrefutable,COMMA) ## contract: Let WILD COMMA Verbatim ## -## Ends in an error in state: 369. +## Ends in an error in state: 364. ## ## tuple(sub_irrefutable) -> sub_irrefutable COMMA . nsepseq(sub_irrefutable,COMMA) [ RPAR EQ COLON ] ## @@ -3302,7 +3277,7 @@ contract: Let WILD COMMA Verbatim contract: Let WILD COMMA WILD COMMA Verbatim ## -## Ends in an error in state: 371. +## Ends in an error in state: 366. ## ## nsepseq(sub_irrefutable,COMMA) -> sub_irrefutable COMMA . nsepseq(sub_irrefutable,COMMA) [ RPAR EQ COLON ] ## @@ -3314,7 +3289,7 @@ contract: Let WILD COMMA WILD COMMA Verbatim contract: Let WILD COMMA WILD WILD ## -## Ends in an error in state: 370. +## Ends in an error in state: 365. ## ## nsepseq(sub_irrefutable,COMMA) -> sub_irrefutable . [ RPAR EQ COLON ] ## nsepseq(sub_irrefutable,COMMA) -> sub_irrefutable . COMMA nsepseq(sub_irrefutable,COMMA) [ RPAR EQ COLON ] @@ -3327,7 +3302,7 @@ contract: Let WILD COMMA WILD WILD contract: Let WILD EQ Bytes VBAR ## -## Ends in an error in state: 533. +## Ends in an error in state: 528. ## ## declaration -> let_declaration . option(SEMI) [ Type Let EOF Attr ] ## @@ -3338,21 +3313,21 @@ contract: Let WILD EQ Bytes VBAR ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 161, spurious reduction of production call_expr_level_in -> core_expr -## In state 179, spurious reduction of production option(type_annotation_simple) -> -## In state 180, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) -## In state 181, spurious reduction of production unary_expr_level -> call_expr_level -## In state 134, spurious reduction of production mult_expr_level -> unary_expr_level -## In state 158, spurious reduction of production add_expr_level -> mult_expr_level -## In state 189, spurious reduction of production cat_expr_level -> add_expr_level -## In state 210, spurious reduction of production comp_expr_level -> cat_expr_level -## In state 217, spurious reduction of production conj_expr_level -> comp_expr_level -## In state 224, spurious reduction of production disj_expr_level -> conj_expr_level -## In state 171, spurious reduction of production base_expr -> disj_expr_level -## In state 228, spurious reduction of production base_cond -> base_expr -## In state 229, spurious reduction of production expr -> base_cond -## In state 529, spurious reduction of production let_binding -> WILD option(type_annotation) EQ expr -## In state 532, spurious reduction of production let_declaration -> seq(Attr) Let let_binding +## In state 160, spurious reduction of production call_expr_level_in -> core_expr +## In state 178, spurious reduction of production option(type_annotation_simple) -> +## In state 179, spurious reduction of production call_expr_level -> call_expr_level_in option(type_annotation_simple) +## In state 180, spurious reduction of production unary_expr_level -> call_expr_level +## In state 133, spurious reduction of production mult_expr_level -> unary_expr_level +## In state 157, spurious reduction of production add_expr_level -> mult_expr_level +## In state 188, spurious reduction of production cat_expr_level -> add_expr_level +## In state 209, spurious reduction of production comp_expr_level -> cat_expr_level +## In state 216, spurious reduction of production conj_expr_level -> comp_expr_level +## In state 223, spurious reduction of production disj_expr_level -> conj_expr_level +## In state 170, spurious reduction of production base_expr -> disj_expr_level +## In state 227, spurious reduction of production base_cond -> base_expr +## In state 228, spurious reduction of production expr -> base_cond +## In state 524, spurious reduction of production let_binding -> WILD option(type_annotation) EQ expr +## In state 527, spurious reduction of production let_declaration -> seq(Attr) Let let_binding ## @@ -3433,7 +3408,7 @@ contract: Type Ident EQ Constr LPAR WILD contract: Type Ident EQ Constr SEMI WILD ## -## Ends in an error in state: 537. +## Ends in an error in state: 532. ## ## declarations -> declaration . [ EOF ] ## declarations -> declaration . declarations [ EOF ] @@ -3861,3 +3836,4 @@ contract: WILD ## + diff --git a/src/passes/01-parser/shared/Lexer.mli b/src/passes/01-parser/shared/Lexer.mli index fd94773ed..27b7628ab 100644 --- a/src/passes/01-parser/shared/Lexer.mli +++ b/src/passes/01-parser/shared/Lexer.mli @@ -79,6 +79,7 @@ module type TOKEN = val mk_bytes : lexeme -> Region.t -> token val mk_constr : lexeme -> Region.t -> token val mk_attr : string -> lexeme -> Region.t -> (token, attr_err) result + val mk_lang : lexeme Region.reg -> Region.t -> token val eof : Region.t -> token (* Predicates *) diff --git a/src/passes/01-parser/shared/Lexer.mll b/src/passes/01-parser/shared/Lexer.mll index 2d432891a..172c957ca 100644 --- a/src/passes/01-parser/shared/Lexer.mll +++ b/src/passes/01-parser/shared/Lexer.mll @@ -43,6 +43,7 @@ module type TOKEN = val mk_bytes : lexeme -> Region.t -> token val mk_constr : lexeme -> Region.t -> token val mk_attr : string -> lexeme -> Region.t -> (token, attr_err) result + val mk_lang : lexeme Region.reg -> Region.t -> token val eof : Region.t -> token (* Predicates *) @@ -273,6 +274,15 @@ module Make (Token : TOKEN) : (S with module Token = Token) = let token = Token.mk_constr lexeme region in state#enqueue token + let mk_lang lang state buffer = + let region, _, state = state#sync buffer in + let start = region#start#shift_bytes 1 in + let stop = region#stop in + let lang_reg = Region.make ~start ~stop in + let lang = Region.{value=lang; region=lang_reg} in + let token = Token.mk_lang lang region + in state#enqueue token + let mk_sym state buffer = let region, lexeme, state = state#sync buffer in match Token.mk_sym lexeme region with @@ -314,7 +324,7 @@ let esc = "\\n" | "\\\"" | "\\\\" | "\\b" let common_sym = ';' | ',' | '(' | ')' | '[' | ']' | '{' | '}' | '=' | ':' | '|' | "->" | '.' | '_' | '^' - | '+' | '-' | '*' | '/' | '%' | '<' | "<=" | '>' | ">=" + | '+' | '-' | '*' | '/' | '<' | "<=" | '>' | ">=" let pascaligo_sym = "=/=" | '#' | ":=" let cameligo_sym = "<>" | "::" | "||" | "&&" let reasonligo_sym = '!' | "=>" | "!=" | "==" | "++" | "..." | "||" | "&&" @@ -388,6 +398,7 @@ and scan state = parse | eof { mk_eof state lexbuf } | "[@" (attr as a) "]" { mk_attr "[@" a state lexbuf } | "[@@" (attr as a) "]" { mk_attr "[@@" a state lexbuf } +| "[%" (attr as l) { mk_lang l state lexbuf } (* Management of #include preprocessing directives @@ -512,7 +523,7 @@ and scan_string thread state = parse and scan_verbatim thread state = parse | eof { fail thread#opening Unterminated_verbatim} -| "|}" { let _, _, state = state#sync lexbuf +| "|}" { let _, _, state = state#sync lexbuf in thread, state } | _ as c { let _, _, state = state#sync lexbuf in scan_verbatim (thread#push_char c) state lexbuf } diff --git a/src/passes/02-concrete_to_imperative/cameligo.ml b/src/passes/02-concrete_to_imperative/cameligo.ml index 007c70e49..2747a2fb4 100644 --- a/src/passes/02-concrete_to_imperative/cameligo.ml +++ b/src/passes/02-concrete_to_imperative/cameligo.ml @@ -487,19 +487,17 @@ in trace (abstracting_expr_tracer t) @@ return @@ e_sequence a e1' in List.fold_left apply expr' more) ) - | ECond c -> ( + | ECond c -> let (c , loc) = r_split c in let%bind expr = compile_expression c.test in let%bind match_true = compile_expression c.ifso in let%bind match_false = compile_expression c.ifnot in return @@ e_cond ~loc expr match_true match_false - ) - | ECodeInsert ci -> ( - let (ci, loc) = r_split ci in - let language = ci.language.value in - let%bind code = compile_expression ci.code in - return @@ e_raw_code ~loc language code - ) + | ECodeInj ci -> + let ci, loc = r_split ci in + let language = ci.language.value.value in + let%bind code = compile_expression ci.code + in ok @@ e_raw_code ~loc language code and compile_fun lamb' : (expr , abs_error) result = let return x = ok x in diff --git a/src/passes/02-concrete_to_imperative/pascaligo.ml b/src/passes/02-concrete_to_imperative/pascaligo.ml index 243a90b1c..09b5e5318 100644 --- a/src/passes/02-concrete_to_imperative/pascaligo.ml +++ b/src/passes/02-concrete_to_imperative/pascaligo.ml @@ -411,9 +411,10 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) let%bind map = bind_map_list aux lst in return @@ e_big_map ~loc map ) - | ECodeInsert ci -> + | ECodeInj ci -> let (ci, loc) = r_split ci in let (language, _) = r_split ci.language in + let (language, _) = r_split language in let%bind code = compile_expression ci.code in return @@ e_raw_code ~loc language code From 8f4ed1153995dc25c6afd9cc77ec552f00611476 Mon Sep 17 00:00:00 2001 From: Christian Rinderknecht Date: Mon, 15 Jun 2020 18:16:03 +0200 Subject: [PATCH 07/10] Added comments. --- src/passes/01-parser/cameligo/AST.ml | 4 ++++ src/passes/01-parser/cameligo/Parser.mly | 13 ++++++------- src/passes/01-parser/pascaligo/AST.ml | 4 ++++ 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/passes/01-parser/cameligo/AST.ml b/src/passes/01-parser/cameligo/AST.ml index c39a54de5..76654aac3 100644 --- a/src/passes/01-parser/cameligo/AST.ml +++ b/src/passes/01-parser/cameligo/AST.ml @@ -400,6 +400,10 @@ and cond_expr = { ifnot : expr } +(* Code injection. Note how the field [language] wraps a region in + another: the outermost region covers the header "[%" and + the innermost covers the . *) + and code_inj = { language : string reg reg; code : expr; diff --git a/src/passes/01-parser/cameligo/Parser.mly b/src/passes/01-parser/cameligo/Parser.mly index de79c2854..807bc6dd3 100644 --- a/src/passes/01-parser/cameligo/Parser.mly +++ b/src/passes/01-parser/cameligo/Parser.mly @@ -121,11 +121,10 @@ type_decl: "type" type_name "=" type_expr { Scoping.check_reserved_name $2; let region = cover $1 (type_expr_to_region $4) in - let value = { - kwd_type = $1; - name = $2; - eq = $3; - type_expr = $4} + let value = {kwd_type = $1; + name = $2; + eq = $3; + type_expr = $4} in {region; value} } type_expr: @@ -710,6 +709,6 @@ seq_expr: code_inj: "" expr "]" { - let region = cover $1.region $3 - and value = {language=$1; code=$2; rbracket=$3} + let region = cover $1.region $3 + and value = {language=$1; code=$2; rbracket=$3} in {region; value} } diff --git a/src/passes/01-parser/pascaligo/AST.ml b/src/passes/01-parser/pascaligo/AST.ml index f5ab7c61c..21c1d9b12 100644 --- a/src/passes/01-parser/pascaligo/AST.ml +++ b/src/passes/01-parser/pascaligo/AST.ml @@ -426,6 +426,10 @@ and for_collect = { block : block reg } +(* Code injection. Note how the field [language] wraps a region in + another: the outermost region covers the header "[%" and + the innermost covers the . *) + and code_inj = { language : string reg reg; code : expr; From bc5a5cd75b1c84b9a41790d90a913a0fc9b68f7d Mon Sep 17 00:00:00 2001 From: Christian Rinderknecht Date: Sat, 20 Jun 2020 20:03:04 +0200 Subject: [PATCH 08/10] Move ESeq back to its original semantic action. --- src/passes/01-parser/cameligo/Parser.mly | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/passes/01-parser/cameligo/Parser.mly b/src/passes/01-parser/cameligo/Parser.mly index 27a75ba61..d9ee47ba4 100644 --- a/src/passes/01-parser/cameligo/Parser.mly +++ b/src/passes/01-parser/cameligo/Parser.mly @@ -579,7 +579,7 @@ core_expr: | "false" { ELogic (BoolExpr (False $1)) } | "true" { ELogic (BoolExpr (True $1)) } | list__(expr) { EList (EListComp $1) } -| sequence { $1 } +| sequence { ESeq $1 } | record_expr { ERecord $1 } | update_record { EUpdate $1 } | code_insert { ECodeInsert $1 } @@ -678,7 +678,7 @@ sequence: and compound = BeginEnd ($1,$3) in let elements = $2 in let value = {compound; elements; terminator=None} - in ESeq {region; value} } + in {region; value} } series: seq_expr ";" series { Utils.nsepseq_cons $1 $2 $3 } From 94039c4d6557bee2788593f857f0fed84c1096d7 Mon Sep 17 00:00:00 2001 From: Christian Rinderknecht Date: Mon, 22 Jun 2020 16:29:32 +0200 Subject: [PATCH 09/10] Added back return instead of ok. --- .../02-concrete_to_imperative/pascaligo.ml | 197 +++++++++--------- 1 file changed, 97 insertions(+), 100 deletions(-) diff --git a/src/passes/02-concrete_to_imperative/pascaligo.ml b/src/passes/02-concrete_to_imperative/pascaligo.ml index 09b5e5318..9bce219b9 100644 --- a/src/passes/02-concrete_to_imperative/pascaligo.ml +++ b/src/passes/02-concrete_to_imperative/pascaligo.ml @@ -16,8 +16,9 @@ open Operators.Concrete_to_imperative.Pascaligo let r_split = Location.r_split +let return = ok + let rec compile_type_expression : CST.type_expr -> _ result = fun te -> - let return te = ok @@ te in match te with TSum sum -> let (nsepseq, loc) = r_split sum in @@ -36,7 +37,7 @@ let rec compile_type_expression : CST.type_expr -> _ result = fun te -> let aux (field : CST.field_decl CST.reg) = let (f, _) = r_split field in let%bind type_expr = compile_type_expression f.field_type in - ok @@ (f.field_name.value,type_expr) + return @@ (f.field_name.value,type_expr) in let%bind record = bind_map_list aux lst in return @@ t_record_ez ~loc record @@ -51,7 +52,7 @@ let rec compile_type_expression : CST.type_expr -> _ result = fun te -> | _ -> None in let ((operator,args), loc) = r_split app in - (* this is a bad design, michelson_or and pair should be an operator + (* this is a bad design, michelson_or and pair should be an operator see AnnotType *) (match operator.value with | "michelson_or" -> @@ -66,7 +67,7 @@ let rec compile_type_expression : CST.type_expr -> _ result = fun te -> get_t_string_singleton_opt d in let%bind a' = compile_type_expression a in let%bind c' = compile_type_expression c in - ok @@ t_michelson_or ~loc a' b' c' d' + return @@ t_michelson_or ~loc a' b' c' d' ) | _ -> fail @@ michelson_type_wrong_arity loc operator.value) | "michelson_pair" -> @@ -81,7 +82,7 @@ let rec compile_type_expression : CST.type_expr -> _ result = fun te -> get_t_string_singleton_opt d in let%bind a' = compile_type_expression a in let%bind c' = compile_type_expression c in - ok @@ t_michelson_pair ~loc a' b' c' d' + return @@ t_michelson_pair ~loc a' b' c' d' ) | _ -> fail @@ michelson_type_wrong_arity loc operator.value) | _ -> @@ -104,14 +105,14 @@ let rec compile_type_expression : CST.type_expr -> _ result = fun te -> | TVar var -> let (name,loc) = r_split var in (match type_constants name with - Some const -> return @@ t_constant ~loc const + Some const -> return @@ t_constant ~loc const | None -> return @@ t_variable_ez ~loc name ) | TString _s -> fail @@ unsupported_string_singleton te let compile_selection (selection : CST.selection) = match selection with - FieldName name -> + FieldName name -> let (name, loc) = r_split name in (Access_record name, loc) | Component comp -> @@ -119,12 +120,11 @@ let compile_selection (selection : CST.selection) = (Access_tuple index, loc) let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) result = fun e -> - let return e = ok @@ e in let compile_tuple_expression (tuple_expr : CST.tuple_expr) = let (lst, loc) = r_split tuple_expr in let%bind lst = bind_map_list compile_expression @@ npseq_to_list lst.inside in - match lst with - hd::[] -> return @@ hd + match lst with + hd::[] -> return hd | lst -> return @@ e_tuple ~loc lst in let compile_path (path : CST.path) = @@ -153,7 +153,7 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) match e with EVar var -> let (var, loc) = r_split var in - (match constants var with + (match constants var with Some const -> return @@ e_constant ~loc const [] | None -> return @@ e_variable_ez ~loc var ) @@ -187,7 +187,7 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) | Div slash -> compile_bin_op C_DIV slash | Mod mod_ -> compile_bin_op C_MOD mod_ | Neg minus -> compile_un_op C_NEG minus - | Int i -> + | Int i -> let ((_,i), loc) = r_split i in return @@ e_int_z ~loc i | Nat n -> @@ -208,7 +208,7 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) | False reg -> let loc = Location.lift reg in return @@ e_false ~loc () ) | CompExpr ce -> ( - match ce with + match ce with Lt lt -> compile_bin_op C_LT lt | Leq le -> compile_bin_op C_LE le | Gt gt -> compile_bin_op C_GT gt @@ -222,7 +222,7 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) | ECall {value=(EVar var,args);region} -> let loc = Location.lift region in let (var, loc_var) = r_split var in - (match constants var with + (match constants var with Some const -> let (args, _) = r_split args in let%bind args = bind_map_list compile_expression @@ npseq_to_list args.inside in @@ -241,15 +241,15 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) compile_tuple_expression lst | ERecord record -> let (record, loc) = r_split record in - let aux (fa : CST.field_assignment CST.reg) = + let aux (fa : CST.field_assignment CST.reg) = let (fa, _) = r_split fa in - let (name, _) = r_split fa.field_name in + let (name, _) = r_split fa.field_name in let%bind expr = compile_expression fa.field_expr in - ok @@ (name, expr) + return (name, expr) in let%bind record = bind_map_list aux @@ npseq_to_list record.ne_elements in return @@ e_record_ez ~loc record - | EProj proj -> + | EProj proj -> let (proj, loc) = r_split proj in let (var, _loc_var) = r_split proj.struct_name in let var = e_variable_ez ~loc var in @@ -270,11 +270,11 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) let (path, _) = List.split @@ List.map compile_selection @@ npseq_to_list proj.field_path in (Access_record proj.struct_name.value)::path ) - in - ok @@ (path, expr, loc) + in + return (path, expr, loc) in - let%bind updates = bind_map_list aux @@ npseq_to_list updates.ne_elements in - let aux e (path, update, loc) = e_update ~loc e path update in + let%bind updates = bind_map_list aux @@ npseq_to_list updates.ne_elements in + let aux e (path, update, loc) = e_update ~loc e path update in return @@ List.fold_left aux record updates | EFun func -> let compile_param (param : CST.param_decl) = @@ -283,12 +283,12 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) let (p, _) = r_split p in let (var, _loc) = r_split p.var in let%bind p_type = bind_map_option (compile_type_expression <@ snd) p.param_type in - ok @@ (var, p_type) + return (var, p_type) | ParamVar p -> let (p, _) = r_split p in let (var, _loc) = r_split p.var in let%bind p_type = bind_map_option (compile_type_expression <@ snd) p.param_type in - ok @@ (var, p_type) + return (var, p_type) in let (func, loc) = r_split func in let (param, loc_par) = r_split func.param in @@ -297,7 +297,7 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) let%bind ret_type = bind_map_option (compile_type_expression <@ snd )func.ret_type in let%bind body = compile_expression func.return in let (lambda, fun_type) = match param_type with - ty::[] -> + ty::[] -> e_lambda ~loc (Var.of_name @@ List.hd param) ty ret_type body, Option.map (fun (a,b) -> t_function a b)@@ Option.bind_pair (ty,ret_type) (* Cannot be empty *) @@ -305,7 +305,7 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) let lst = Option.bind_list lst in let input_type = Option.map t_tuple lst in let binder = Var.fresh ~name:"parameter" () in - e_lambda ~loc binder input_type (ret_type) @@ + e_lambda ~loc binder input_type (ret_type) @@ e_matching_tuple_ez ~loc:loc_par (e_variable binder) param lst body, Option.map (fun (a,b) -> t_function a b)@@ Option.bind_pair (input_type,ret_type) in @@ -317,7 +317,7 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) return @@ e_some ~loc args | EConstr (NoneExpr reg) -> let loc = Location.lift reg in - return @@ e_none ~loc () + return @@ e_none ~loc () | EConstr (ConstrApp constr) -> let ((constr,args_o), loc) = r_split constr in let%bind args_o = bind_map_option compile_tuple_expression args_o in @@ -341,8 +341,8 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) let%bind then_clause = compile_expression cond.ifso in let%bind else_clause = compile_expression cond.ifnot in return @@ e_cond ~loc test then_clause else_clause - | EList lst -> ( - match lst with + | EList lst -> ( + match lst with ECons cons -> let (cons, loc) = r_split cons in let%bind a = compile_expression cons.arg1 in @@ -356,7 +356,7 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) in let%bind lst = bind_map_list compile_expression lst in return @@ e_list ~loc lst - | ENil nil -> + | ENil nil -> let loc = Location.lift nil in return @@ e_list ~loc [] (* Is seems that either ENil is redondant or EListComp should be an nsepseq and not a sepseq *) @@ -368,7 +368,7 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) let set = Option.unopt ~default:[] @@ Option.map npseq_to_list si.elements - in + in let%bind set = bind_map_list compile_expression set in return @@ e_set ~loc set | SetMem sm -> @@ -394,7 +394,7 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) let (binding, _) = r_split binding in let%bind key = compile_expression binding.source in let%bind value = compile_expression binding.image in - ok @@ (key,value) + return (key,value) in let%bind map = bind_map_list aux lst in return @@ e_map ~loc map @@ -406,7 +406,7 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) let (binding, _) = r_split binding in let%bind key = compile_expression binding.source in let%bind value = compile_expression binding.image in - ok @@ (key,value) + return (key,value) in let%bind map = bind_map_list aux lst in return @@ e_big_map ~loc map @@ -420,58 +420,56 @@ let rec compile_expression : CST.expr -> (AST.expr , Errors_pascaligo.abs_error) and compile_matching_expr : type a.(a -> _ result) -> a CST.case_clause CST.reg List.Ne.t -> _ = fun compiler cases -> - let compile_pattern pattern = ok @@ pattern - in - let return e = ok @@ e in + let compile_pattern pattern = return pattern in let compile_simple_pattern (pattern : CST.pattern) = match pattern with - PVar var -> + PVar var -> let (var, _) = r_split var in - ok @@ Var.of_name var + return @@ Var.of_name var | _ -> fail @@ unsupported_non_var_pattern pattern in let compile_list_pattern (cases : (CST.pattern * _) list) = - match cases with + match cases with [(PList PNil _, match_nil);(PList PCons cons, econs)] | [(PList PCons cons, econs);(PList PNil _, match_nil)] -> let (cons,_) = r_split cons in - let%bind (hd,tl) = match snd @@ List.split (snd cons) with - tl::[] -> ok @@ (fst cons,tl) + let%bind (hd,tl) = match snd @@ List.split (snd cons) with + tl::[] -> return (fst cons,tl) | _ -> fail @@ unsupported_deep_list_patterns @@ fst cons in let%bind (hd,tl) = bind_map_pair compile_simple_pattern (hd,tl) in let match_cons = (hd,tl,econs) in - ok @@ (match_nil,match_cons) + return (match_nil,match_cons) | _ -> fail @@ unsupported_deep_list_patterns @@ fst @@ List.hd cases in let compile_simple_tuple_pattern (tuple : CST.tuple_pattern) = let (lst, _) = r_split tuple in - match lst.inside with + match lst.inside with hd,[] -> compile_simple_pattern hd | _ -> fail @@ unsupported_deep_tuple_patterns tuple in let compile_constr_pattern (constr : CST.pattern) = match constr with PConstr c -> - ( match c with + ( match c with PUnit _ -> fail @@ unsupported_pattern_type constr - | PFalse _ -> ok @@ (Constructor "false", Var.of_name "_") - | PTrue _ -> ok @@ (Constructor "true", Var.of_name "_") - | PNone _ -> ok @@ (Constructor "None", Var.of_name "_") + | PFalse _ -> return (Constructor "false", Var.of_name "_") + | PTrue _ -> return (Constructor "true", Var.of_name "_") + | PNone _ -> return (Constructor "None", Var.of_name "_") | PSomeApp some -> let (some,_) = r_split some in let (_, pattern) = some in let (pattern,_) = r_split pattern in let%bind pattern = compile_simple_pattern pattern.inside in - ok @@ (Constructor "Some", pattern) + return (Constructor "Some", pattern) | PConstrApp constr -> let (constr, _) = r_split constr in let (constr, patterns) = constr in let (constr, _) = r_split constr in let%bind pattern = bind_map_option compile_simple_tuple_pattern patterns in let pattern = Option.unopt ~default:(Var.of_name "_") pattern in - ok (Constructor constr, pattern) + return (Constructor constr, pattern) ) | _ -> fail @@ unsupported_pattern_type constr in @@ -479,7 +477,7 @@ fun compiler cases -> let (case, _loc) = r_split case in let%bind pattern = compile_pattern case.pattern in let%bind expr = compiler case.rhs in - ok (pattern, expr) + return (pattern, expr) in let%bind cases = bind_map_ne_list aux cases in match cases with @@ -489,19 +487,18 @@ fun compiler cases -> return @@ AST.Match_variable (var, None, expr) | (PTuple tuple, _expr), [] -> fail @@ unsupported_tuple_pattern @@ CST.PTuple tuple - | (PList _, _), _ -> + | (PList _, _), _ -> let%bind (match_nil,match_cons) = compile_list_pattern @@ List.Ne.to_list cases in return @@ AST.Match_list {match_nil;match_cons} - | (PConstr _,_), _ -> + | (PConstr _,_), _ -> let (pattern, lst) = List.split @@ List.Ne.to_list cases in let%bind constrs = bind_map_list compile_constr_pattern pattern in return @@ AST.Match_variant (List.combine constrs lst) | (p, _), _ -> fail @@ unsupported_pattern_type p - -let compile_attribute_declaration attributes = - match attributes with - None -> ok @@ false - | Some _ -> ok @@ true + +let compile_attribute_declaration = function + None -> return false +| Some _ -> return true let compile_parameters (params : CST.parameters) = let compile_param_decl (param : CST.param_decl) = @@ -510,38 +507,38 @@ let compile_parameters (params : CST.parameters) = let (pc, _loc) = r_split pc in let (var, _) = r_split pc.var in let%bind param_type = bind_map_option (compile_type_expression <@ snd) pc.param_type in - ok @@ (var, param_type) + return (var, param_type) | ParamVar pv -> let (pv, _loc) = r_split pv in let (var, _) = r_split pv.var in let%bind param_type = bind_map_option (compile_type_expression <@ snd) pv.param_type in - ok @@ (var, param_type) + return (var, param_type) in let (params, _loc) = r_split params in let params = npseq_to_list params.inside in bind_map_list compile_param_decl params let rec compile_instruction : ?next: AST.expression -> CST.instruction -> _ result = fun ?next instruction -> - let return expr = match next with - Some e -> ok @@ e_sequence expr e - | None -> ok @@ expr + let return expr = match next with + Some e -> return @@ e_sequence expr e + | None -> return expr in let compile_tuple_expression (tuple_expr : CST.tuple_expr) = let (lst, loc) = r_split tuple_expr in let%bind lst = bind_map_list compile_expression @@ npseq_to_list lst.inside in - match lst with - hd::[] -> ok @@ hd - | lst -> ok @@ e_tuple ~loc lst + match lst with + hd::[] -> return hd + | lst -> return @@ e_tuple ~loc lst in let compile_if_clause : ?next:AST.expression -> CST.if_clause -> _ = fun ?next if_clause -> match if_clause with ClauseInstr i -> compile_instruction ?next i | ClauseBlock (LongBlock block) -> compile_block ?next block - | ClauseBlock (ShortBlock block) -> + | ClauseBlock (ShortBlock block) -> (* This looks like it should be the job of the parser *) let CST.{lbrace; inside; rbrace} = block.value in let region = block.region in - let enclosing = CST.Block (Region.ghost, lbrace, rbrace) + let enclosing = CST.Block (Region.ghost, lbrace, rbrace) and (statements,terminator) = inside in let value = CST.{enclosing;statements;terminator} in let block : _ CST.reg = {value; region} in @@ -549,18 +546,18 @@ let rec compile_instruction : ?next: AST.expression -> CST.instruction -> _ resu in let compile_path : CST.path -> _ = fun path -> - match path with - Name var -> + match path with + Name var -> let (var,loc) = r_split var in let str = e_variable_ez ~loc var in - ok @@ (str, var, []) + ok (str, var, []) | Path proj -> let (proj, loc) = r_split proj in let (var, loc_var) = r_split proj.struct_name in - let path = List.map compile_selection @@ npseq_to_list proj.field_path in + let path = List.map compile_selection @@ npseq_to_list proj.field_path in let (path, _) = List.split path in let str = e_accessor ~loc (e_variable_ez ~loc:loc_var var) path in - ok @@ (str, var, path) + ok (str, var, path) in let compile_lhs : CST.lhs -> _ = fun lhs -> match lhs with @@ -601,20 +598,20 @@ let rec compile_instruction : ?next: AST.expression -> CST.instruction -> _ resu let (binder, _) = r_split fl.binder in let%bind start = compile_expression fl.init in let%bind bound = compile_expression fl.bound in - let%bind increment = Option.unopt ~default:(ok @@ e_int_z Z.one) @@ + let%bind increment = Option.unopt ~default:(ok @@ e_int_z Z.one) @@ Option.map (compile_expression <@ snd) fl.step in let%bind body = compile_block fl.block in - return @@ e_for_ez ~loc binder start bound increment body + return @@ e_for_ez ~loc binder start bound increment body | Loop (For (ForCollect el)) -> let (el, loc) = r_split el in - let binder = + let binder = let (key, _) = r_split el.var in let value = Option.map (fun x -> fst (r_split (snd x))) el.bind_to in (key,value) in let%bind collection = compile_expression el.expr in - let (collection_type, _) = match el.collection with + let (collection_type, _) = match el.collection with Map loc -> (Map, loc) | Set loc -> (Set, loc) | List loc -> (List, loc) in let%bind body = compile_block el.block in @@ -622,7 +619,7 @@ let rec compile_instruction : ?next: AST.expression -> CST.instruction -> _ resu | ProcCall {value=(EVar var,args);region} -> let loc = Location.lift region in let (var, loc_var) = r_split var in - (match constants var with + (match constants var with Some const -> let (args, _) = r_split args in let%bind args = bind_map_list compile_expression @@ npseq_to_list args.inside in @@ -638,7 +635,7 @@ let rec compile_instruction : ?next: AST.expression -> CST.instruction -> _ resu let%bind func = compile_expression func in let%bind args = compile_tuple_expression args in return @@ e_application ~loc func args - | Skip s -> + | Skip s -> let loc = Location.lift s in return @@ e_skip ~loc () | RecordPatch rp -> @@ -697,7 +694,7 @@ and compile_data_declaration : next:AST.expression -> ?attr:CST.attr_decl -> CST ok @@ e_let_in_ez ~loc name type_ attr init next in match data_decl with LocalConst const_decl -> - let (cd, loc) = r_split const_decl in + let (cd, loc) = r_split const_decl in let (name, _) = r_split cd.name in let%bind type_ = bind_map_option (compile_type_expression <@ snd)cd.const_type in let%bind init = compile_expression cd.init in @@ -715,41 +712,40 @@ and compile_data_declaration : next:AST.expression -> ?attr:CST.attr_decl -> CST and compile_statement : ?next:AST.expression -> CST.attr_decl option -> CST.statement -> _ result = fun ?next attr statement -> match statement with - Instr i -> + Instr i -> let%bind i = compile_instruction ?next i in - ok @@ (Some i, None) - | Data dd -> + return (Some i, None) + | Data dd -> let next = Option.unopt ~default:(e_skip ()) next in let%bind dd = compile_data_declaration ~next ?attr dd in - ok @@ (Some dd, None) - | Attr at -> ok @@ (next, Some at) - + return (Some dd, None) + | Attr at -> return (next, Some at) and compile_block : ?next:AST.expression -> CST.block CST.reg -> _ result = fun ?next block -> let (block', _loc) = r_split block in let statements = npseq_to_list block'.statements in let aux (next,attr) statement = let%bind (statement, attr) = compile_statement ?next attr statement in - ok @@ (statement,attr) + return (statement,attr) in let%bind (block', _) = bind_fold_right_list aux (next,None) statements in match block' with - Some block -> ok @@ block + Some block -> return block | None -> fail @@ block_start_with_attribute block -and compile_fun_decl ({kwd_recursive; fun_name; param; ret_type; block_with; return=r; attributes}: CST.fun_decl) = +and compile_fun_decl ({kwd_recursive; fun_name; param; ret_type; block_with; return=r; attributes}: CST.fun_decl) = let%bind attr = compile_attribute_declaration attributes in let (fun_name, loc) = r_split fun_name in let%bind ret_type = bind_map_option (compile_type_expression <@ snd) ret_type in let%bind param = compile_parameters param in let%bind r = compile_expression r in let (param, param_type) = List.split param in - let%bind body = Option.unopt ~default:(ok @@ r) @@ - Option.map (compile_block ~next:r <@ fst) block_with + let%bind body = Option.unopt ~default:(return r) @@ + Option.map (compile_block ~next:r <@ fst) block_with in (* This handle the parameter case *) let (lambda,fun_type) = (match param_type with - ty::[] -> + ty::[] -> let lambda : AST.lambda = { binder = (Var.of_name @@ List.hd param); input_type = ty ; @@ -772,18 +768,19 @@ and compile_fun_decl ({kwd_recursive; fun_name; param; ret_type; block_with; ret in (* This handle the recursion *) let%bind func = match kwd_recursive with - Some reg -> + Some reg -> let%bind fun_type = trace_option (untyped_recursive_fun loc) @@ fun_type in - ok @@ e_recursive_ez ~loc:(Location.lift reg) fun_name fun_type lambda - | None -> - ok @@ make_e ~loc @@ E_lambda lambda + return @@ e_recursive_ez ~loc:(Location.lift reg) fun_name fun_type lambda + | None -> + return @@ make_e ~loc @@ E_lambda lambda in - ok @@ (fun_name,fun_type, attr, func) + return (fun_name,fun_type, attr, func) (* Currently attributes are badly proccess, some adaptation are made to accomodate this maked as ATR *) let compile_declaration : (CST.attr_decl option * _) -> CST.declaration -> _ = fun (attr, lst) decl -> - let return ?attr reg decl = ok @@ (attr, (Location.wrap ~loc:(Location.lift reg) decl)::lst) in (*ATR*) + let return ?attr reg decl = + return (attr, (Location.wrap ~loc:(Location.lift reg) decl)::lst) in (*ATR*) match decl with TypeDecl {value={name; type_expr; _};region} -> (* Todo : if attr isn't none, send warning *) @@ -801,8 +798,8 @@ let compile_declaration : (CST.attr_decl option * _) -> CST.declaration -> _ = f let value = {value with attributes = attr} in (*ATR*) let%bind (fun_name,fun_type,attr,lambda) = compile_fun_decl value in return region @@ AST.Declaration_constant (Var.of_name fun_name, fun_type, attr, lambda) - | AttrDecl decl -> ok @@ (Some decl, lst) (*ATR*) - + | AttrDecl decl -> ok (Some decl, lst) (*ATR*) + (* This should be change to the commented function when attributes are fixed let compile_program : CST.ast -> _ result = fun t -> bind_map_list compile_declaration @@ nseq_to_list t.decl @@ -812,4 +809,4 @@ let compile_program : CST.ast -> _ result = let declarations = List.rev @@ nseq_to_list t.decl in let attr = (None, []) in let%bind (_, declarations) = bind_fold_list compile_declaration attr declarations in - ok @@ declarations + return declarations From c379d1078e0d4627b3351acf08e3be8be0d1a62d Mon Sep 17 00:00:00 2001 From: Christian Rinderknecht Date: Tue, 23 Jun 2020 00:37:57 +0200 Subject: [PATCH 10/10] Fixed builds of ParserMain.exe. Fixed parser (code_inj). --- src/passes/01-parser/cameligo/AST.ml | 1 - src/passes/01-parser/cameligo/Parser.mly | 19 +++---------- src/passes/01-parser/cameligo/dune | 36 +++++++++--------------- src/passes/01-parser/pascaligo/dune | 36 +++++++++--------------- src/passes/01-parser/reasonligo/dune | 35 +++++++++-------------- 5 files changed, 44 insertions(+), 83 deletions(-) diff --git a/src/passes/01-parser/cameligo/AST.ml b/src/passes/01-parser/cameligo/AST.ml index 76654aac3..a6002e729 100644 --- a/src/passes/01-parser/cameligo/AST.ml +++ b/src/passes/01-parser/cameligo/AST.ml @@ -56,7 +56,6 @@ type c_Some = Region.t type arrow = Region.t (* "->" *) type cons = Region.t (* "::" *) -type percent = Region.t (* "%" *) type cat = Region.t (* "^" *) type append = Region.t (* "@" *) type dot = Region.t (* "." *) diff --git a/src/passes/01-parser/cameligo/Parser.mly b/src/passes/01-parser/cameligo/Parser.mly index 6c0e0f2da..85ad87f3c 100644 --- a/src/passes/01-parser/cameligo/Parser.mly +++ b/src/passes/01-parser/cameligo/Parser.mly @@ -586,15 +586,10 @@ core_expr: | par(expr) { EPar $1 } | par(annot_expr) { EAnnot $1 } -code_insert: - "[" "%" Constr expr "]" { - let region = cover $1 $5 in - let value = { - lbracket =$1; - percent =$2; - language =$3; - code =$4; - rbracket =$5} +code_inj: + "" expr "]" { + let region = cover $1.region $3 + and value = {language=$1; code=$2; rbracket=$3} in {region; value} } annot_expr: @@ -709,9 +704,3 @@ let_in_sequence: seq_expr: disj_expr_level | if_then_else (seq_expr) { $1 } - -code_inj: - "" expr "]" { - let region = cover $1.region $3 - and value = {language=$1; code=$2; rbracket=$3} - in {region; value} } diff --git a/src/passes/01-parser/cameligo/dune b/src/passes/01-parser/cameligo/dune index ff5896de8..6c5257688 100644 --- a/src/passes/01-parser/cameligo/dune +++ b/src/passes/01-parser/cameligo/dune @@ -53,7 +53,7 @@ (executable (name ParserMain) (libraries parser_cameligo) - (modules ParserMain) + (modules ParserMain Parser_msg) (preprocess (pps bisect_ppx --conditional)) (flags (:standard -open Simple_utils -open Parser_shared -open Parser_cameligo))) @@ -65,6 +65,19 @@ (deps (:script_messages ../../../../vendors/ligo-utils/simple-utils/messages.sh) Parser.mly LexToken.mli ParToken.mly) (action (run %{script_messages} --lex-tokens=LexToken.mli --par-tokens=ParToken.mly Parser.mly))) +(rule + (targets Parser_msg.ml) + (deps Parser.mly ParToken.mly Parser.msg) + (action + (with-stdout-to %{targets} + (bash + "menhir \ + --compile-errors Parser.msg \ + --external-tokens LexToken \ + --base Parser \ + ParToken.mly \ + Parser.mly")))) + ;; Build of all the LIGO source file that cover all error states (rule @@ -74,27 +87,6 @@ ;; Error messages -;; Generate error messages from scratch -; (rule -; (targets error.messages) -; (deps Parser.mly ParToken.mly error.messages.checked-in) -; (action -; (with-stdout-to %{targets} -; (bash -; "menhir \ -; --unused-tokens \ -; --list-errors \ -; --table \ -; --strict \ -; --external-tokens LexToken.mli \ -; --base Parser.mly \ -; ParToken.mly \ -; Parser.mly -; " -; ) -; )) -; ) - (rule (targets error.messages) (mode (promote (until-clean) (only *))) diff --git a/src/passes/01-parser/pascaligo/dune b/src/passes/01-parser/pascaligo/dune index 5b2f099ca..855fb0da9 100644 --- a/src/passes/01-parser/pascaligo/dune +++ b/src/passes/01-parser/pascaligo/dune @@ -66,6 +66,19 @@ (deps (:script_messages ../../../../vendors/ligo-utils/simple-utils/messages.sh) Parser.mly LexToken.mli ParToken.mly) (action (run %{script_messages} --lex-tokens=LexToken.mli --par-tokens=ParToken.mly Parser.mly))) +(rule + (targets Parser_msg.ml) + (deps Parser.mly ParToken.mly Parser.msg) + (action + (with-stdout-to %{targets} + (bash + "menhir \ + --compile-errors Parser.msg \ + --external-tokens LexToken \ + --base Parser \ + ParToken.mly \ + Parser.mly")))) + ;; Build of all the LIGO source file that cover all error states (rule @@ -75,27 +88,6 @@ ;; Error messages -;; Generate error messages from scratch -; (rule -; (targets error.messages) -; (deps Parser.mly ParToken.mly error.messages.checked-in) -; (action -; (with-stdout-to %{targets} -; (bash -; "menhir \ -; --unused-tokens \ -; --list-errors \ -; --table \ -; --strict \ -; --external-tokens LexToken.mli \ -; --base Parser.mly \ -; ParToken.mly \ -; Parser.mly -; " -; ) -; )) -; ) - (rule (targets error.messages) (mode (promote (until-clean) (only *))) @@ -155,8 +147,6 @@ ) ) - - (rule (targets ParErr.ml) (mode (promote (until-clean) (only *))) diff --git a/src/passes/01-parser/reasonligo/dune b/src/passes/01-parser/reasonligo/dune index f41445b7d..38170a812 100644 --- a/src/passes/01-parser/reasonligo/dune +++ b/src/passes/01-parser/reasonligo/dune @@ -65,6 +65,19 @@ (deps (:script_messages ../../../../vendors/ligo-utils/simple-utils/messages.sh) Parser.mly LexToken.mli ParToken.mly) (action (run %{script_messages} --lex-tokens=LexToken.mli --par-tokens=ParToken.mly Parser.mly ))) +(rule + (targets Parser_msg.ml) + (deps Parser.mly ParToken.mly Parser.msg) + (action + (with-stdout-to %{targets} + (bash + "menhir \ + --compile-errors Parser.msg \ + --external-tokens LexToken \ + --base Parser \ + ParToken.mly \ + Parser.mly")))) + ;; Build of all the LIGO source file that cover all error states (rule @@ -72,28 +85,6 @@ (deps (:script_cover ../../../../vendors/ligo-utils/simple-utils/cover.sh) Parser.mly LexToken.mli ParToken.mly Parser.msg Unlexer.exe) (action (run %{script_cover} --lex-tokens=LexToken.mli --par-tokens=ParToken.mly --ext=religo --unlexer=./Unlexer.exe --messages=Parser.msg --dir=. --concatenate Parser.mly ))) -;; Error messages -;; Generate error messages from scratch -; (rule -; (targets error.messages) -; (deps Parser.mly ParToken.mly error.messages.checked-in) -; (action -; (with-stdout-to %{targets} -; (bash -; "menhir \ -; --unused-tokens \ -; --list-errors \ -; --table \ -; --strict \ -; --external-tokens LexToken.mli \ -; --base Parser.mly \ -; ParToken.mly \ -; Parser.mly -; " -; ) -; )) -; ) - (rule (targets error.messages) (mode (promote (until-clean) (only *)))