From 19033669f53efa6ea40be0983e1defcaf48894bd Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Wed, 4 Jan 2023 16:12:36 +0100 Subject: [PATCH] Add support for paths in the parser Using them will lead to "not supported yet" errors soon after, but it's a start to get to handling separate modules. The idea is that `foo` can now also be `Bar.foo`, `Bar.Baz.foo`, `foo.Struc.fld` can be `foo.Bar.Baz.Struc.fld`, etc. The next steps are to enable the lookups to handle this paths, and to provide ways to load the external modules to feed these lookups. --- compiler/desugared/from_surface.ml | 60 ++- compiler/desugared/name_resolution.ml | 11 +- compiler/desugared/name_resolution.mli | 4 +- compiler/surface/ast.ml | 153 +++--- compiler/surface/parser.messages | 594 ++++++++++----------- compiler/surface/parser.mly | 334 ++++++------ compiler/surface/print.ml | 23 +- examples/aides_logement/prologue.catala_fr | 5 +- 8 files changed, 618 insertions(+), 566 deletions(-) diff --git a/compiler/desugared/from_surface.ml b/compiler/desugared/from_surface.ml index 9a4faf55..d77a6873 100644 --- a/compiler/desugared/from_surface.ml +++ b/compiler/desugared/from_surface.ml @@ -122,11 +122,11 @@ let translate_unop (op : Surface.Ast.unop) pos : Ast.expr boxed = let disambiguate_constructor (ctxt : Name_resolution.context) - (constructor : (string Marked.pos option * string Marked.pos) list) + (constructor : (S.path * S.uident Marked.pos) Marked.pos list) (pos : Pos.t) : EnumName.t * EnumConstructor.t = - let enum, constructor = + let path, constructor = match constructor with - | [c] -> c + | [c] -> Marked.unmark c | _ -> Errors.raise_spanned_error pos "The deep pattern matching syntactic sugar is not yet supported" @@ -139,8 +139,8 @@ let disambiguate_constructor "The name of this constructor has not been defined before, maybe it is \ a typo?" in - match enum with - | None -> + match path with + | [] -> if EnumName.Map.cardinal possible_c_uids > 1 then Errors.raise_spanned_error (Marked.get_mark constructor) @@ -152,7 +152,7 @@ let disambiguate_constructor Format.fprintf fmt "%a" EnumName.format_t s_name)) (EnumName.Map.bindings possible_c_uids); EnumName.Map.choose possible_c_uids - | Some enum -> ( + | [enum] -> ( try (* The path is fully qualified *) let e_uid = Name_resolution.get_enum ctxt enum in @@ -166,6 +166,7 @@ let disambiguate_constructor with Not_found -> Errors.raise_spanned_error (Marked.get_mark enum) "Enum %s has not been defined before" (Marked.unmark enum)) + | _ -> Errors.raise_spanned_error pos "Qualified paths are not supported yet" let int100 = Runtime.integer_of_int 100 let rat100 = Runtime.decimal_of_integer int100 @@ -296,7 +297,7 @@ let rec translate_expr correct calendar day") in Expr.elit lit emark - | Ident x -> ( + | Ident ([], (x, pos)) -> ( (* first we check whether this is a local var, then we resort to scope-wide variables *) match IdentName.Map.find_opt x ctxt.local_var_idmap with @@ -348,9 +349,12 @@ let rec translate_expr | Some uid -> Expr.make_var uid emark (* the whole box thing is to accomodate for this case *)) - | Dotted (e, c, x) -> ( - match Marked.unmark e with - | Ident y when Name_resolution.is_subscope_uid scope ctxt y -> + | Ident (_path, _x) -> + Errors.raise_spanned_error pos "Qualified paths are not supported yet" + | Dotted (e, ((path, x), _ppos)) -> ( + match path, Marked.unmark e with + | [], Ident ([], (y, _)) when Name_resolution.is_subscope_uid scope ctxt y + -> (* In this case, y.x is a subscope variable *) let subscope_uid, subscope_real_uid = match IdentName.Map.find y scope_ctxt.var_idmap with @@ -368,17 +372,19 @@ let rec translate_expr (* In this case e.x is the struct field x access of expression e *) let e = translate_expr scope inside_definition_of ctxt e in let str = - Option.map - (fun c -> - try Name_resolution.get_struct ctxt c - with Not_found -> - Errors.raise_spanned_error (Marked.get_mark c) - "Structure %s was not declared" (Marked.unmark c)) - c + match path with + | [] -> None + | [c] -> ( + try Some (Name_resolution.get_struct ctxt c) + with Not_found -> + Errors.raise_spanned_error (Marked.get_mark c) + "Structure %s was not declared" (Marked.unmark c)) + | _ -> + Errors.raise_spanned_error pos "Qualified paths are not supported yet" in Expr.edstructaccess e (Marked.unmark x) str emark) | FunCall (f, arg) -> Expr.eapp (rec_helper f) [rec_helper arg] emark - | ScopeCall (sc_name, fields) -> + | ScopeCall ((([], sc_name), _), fields) -> let called_scope = Name_resolution.get_scope ctxt sc_name in let scope_def = ScopeName.Map.find called_scope ctxt.scopes in let in_struct = @@ -412,6 +418,8 @@ let rec translate_expr ScopeVar.Map.empty fields in Expr.escopecall called_scope in_struct emark + | ScopeCall (((_, _sc_name), _), _fields) -> + Errors.raise_spanned_error pos "Qualified paths are not supported yet" | LetIn (x, e1, e2) -> let ctxt, v = Name_resolution.add_def_local_var ctxt (Marked.unmark x) in let tau = TAny, Marked.get_mark x in @@ -422,7 +430,7 @@ let rec translate_expr [tau] pos in Expr.eapp fn [rec_helper e1] emark - | StructLit (s_name, fields) -> + | StructLit ((([], s_name), _), fields) -> let s_uid = match IdentName.Map.find_opt (Marked.unmark s_name) ctxt.typedefs with | Some (Name_resolution.TStruct s_uid) -> s_uid @@ -463,7 +471,9 @@ let rec translate_expr expected_s_fields; Expr.estruct s_uid s_fields emark - | EnumInject (enum, (constructor, pos_constructor), payload) -> ( + | StructLit (((_, _s_name), _), _fields) -> + Errors.raise_spanned_error pos "Qualified paths are not supported yet" + | EnumInject (((path, (constructor, pos_constructor)), _), payload) -> ( let possible_c_uids = try IdentName.Map.find constructor ctxt.constructor_idmap with Not_found -> @@ -473,8 +483,8 @@ let rec translate_expr in let mark_constructor = Untyped { pos = pos_constructor } in - match enum with - | None -> + match path with + | [] -> if (* No constructor name was specified *) EnumName.Map.cardinal possible_c_uids > 1 @@ -497,7 +507,7 @@ let rec translate_expr | Some e' -> e' | None -> Expr.elit LUnit mark_constructor) c_uid e_uid emark - | Some enum -> ( + | [enum] -> ( try (* The path has been fully qualified *) let e_uid = Name_resolution.get_enum ctxt enum in @@ -516,7 +526,9 @@ let rec translate_expr (Marked.unmark enum) constructor with Not_found -> Errors.raise_spanned_error (Marked.get_mark enum) - "Enum %s has not been defined before" (Marked.unmark enum))) + "Enum %s has not been defined before" (Marked.unmark enum)) + | _ -> + Errors.raise_spanned_error pos "Qualified paths are not supported yet") | MatchWith (e1, (cases, _cases_pos)) -> let e1 = translate_expr scope inside_definition_of ctxt e1 in let cases_d, e_uid = diff --git a/compiler/desugared/name_resolution.ml b/compiler/desugared/name_resolution.ml index 25d593e7..6128b675 100644 --- a/compiler/desugared/name_resolution.ml +++ b/compiler/desugared/name_resolution.ml @@ -297,7 +297,7 @@ let rec process_base_typ | Surface.Ast.Date -> TLit TDate, typ_pos | Surface.Ast.Boolean -> TLit TBool, typ_pos | Surface.Ast.Text -> raise_unsupported_feature "text type" typ_pos - | Surface.Ast.Named ident -> ( + | Surface.Ast.Named ([], (ident, _pos)) -> ( match IdentName.Map.find_opt ident ctxt.typedefs with | Some (TStruct s_uid) -> TStruct s_uid, typ_pos | Some (TEnum e_uid) -> TEnum e_uid, typ_pos @@ -307,7 +307,10 @@ let rec process_base_typ Errors.raise_spanned_error typ_pos "Unknown type \"%a\", not a struct or enum previously declared" (Cli.format_with_style [ANSITerminal.yellow]) - ident)) + ident) + | Surface.Ast.Named (_path, (_ident, _pos)) -> + Errors.raise_spanned_error typ_pos "Qualified paths are not supported yet" + ) (** Process a type (function or not) *) let process_type (ctxt : context) ((naked_typ, typ_pos) : Surface.Ast.typ) : typ @@ -671,8 +674,8 @@ let rec process_law_structure (** {1 Scope uses pass} *) let get_def_key - (name : Surface.Ast.qident) - (state : Surface.Ast.ident Marked.pos option) + (name : Surface.Ast.scope_var) + (state : Surface.Ast.lident Marked.pos option) (scope_uid : ScopeName.t) (ctxt : context) (pos : Pos.t) : Ast.ScopeDef.t = diff --git a/compiler/desugared/name_resolution.mli b/compiler/desugared/name_resolution.mli index 942fdde9..774e158c 100644 --- a/compiler/desugared/name_resolution.mli +++ b/compiler/desugared/name_resolution.mli @@ -129,8 +129,8 @@ val add_def_local_var : context -> IdentName.t -> context * Ast.expr Var.t (** Adds a binding to the context *) val get_def_key : - Surface.Ast.qident -> - Surface.Ast.ident Marked.pos option -> + Surface.Ast.scope_var -> + Surface.Ast.lident Marked.pos option -> ScopeName.t -> context -> Pos.t -> diff --git a/compiler/surface/ast.ml b/compiler/surface/ast.ml index e34e05cc..61b3d928 100644 --- a/compiler/surface/ast.ml +++ b/compiler/surface/ast.ml @@ -30,33 +30,49 @@ open Catala_utils (** {1 Type definitions} *) -type constructor = (string[@opaque]) +type uident = (string[@opaque]) [@@deriving - visitors { variety = "map"; name = "constructor_map"; nude = true }, - visitors { variety = "iter"; name = "constructor_iter"; nude = true }] + visitors { variety = "map"; name = "uident_map"; nude = true }, + visitors { variety = "iter"; name = "uident_iter"; nude = true }] (** Constructors are CamelCase *) -type ident = (string[@opaque]) +type lident = (string[@opaque]) [@@deriving - visitors { variety = "map"; name = "ident_map"; nude = true }, - visitors { variety = "iter"; name = "ident_iter"; nude = true }] + visitors { variety = "map"; name = "lident_map"; nude = true }, + visitors { variety = "iter"; name = "lident_iter"; nude = true }] (** Idents are snake_case *) -type qident = ident Marked.pos list +type path = uident Marked.pos list [@@deriving visitors { variety = "map"; - ancestors = ["Marked.pos_map"; "ident_map"]; - name = "qident_map"; + ancestors = ["Marked.pos_map"; "uident_map"]; + name = "path_map"; }, visitors { variety = "iter"; - ancestors = ["Marked.pos_iter"; "ident_iter"]; - name = "qident_iter"; + ancestors = ["Marked.pos_iter"; "uident_iter"]; + name = "path_iter"; }] +type scope_var = lident Marked.pos list +[@@deriving + visitors + { + variety = "map"; + ancestors = ["Marked.pos_map"; "lident_map"]; + name = "scope_var_map"; + }, + visitors + { + variety = "iter"; + ancestors = ["Marked.pos_iter"; "lident_iter"]; + name = "scope_var_iter"; + }] +(** [foo.bar] in binding position: used to specify variables of subscopes *) + type primitive_typ = | Integer | Decimal @@ -65,18 +81,18 @@ type primitive_typ = | Duration | Text | Date - | Named of constructor + | Named of path * uident Marked.pos [@@deriving visitors { variety = "map"; - ancestors = ["constructor_map"]; + ancestors = ["path_map"; "uident_map"]; name = "primitive_typ_map"; }, visitors { variety = "iter"; - ancestors = ["constructor_iter"]; + ancestors = ["path_iter"; "uident_iter"]; name = "primitive_typ_iter"; }] @@ -154,25 +170,25 @@ and naked_typ = Base of base_typ | Func of func_typ }] type struct_decl_field = { - struct_decl_field_name : ident Marked.pos; + struct_decl_field_name : lident Marked.pos; struct_decl_field_typ : typ; } [@@deriving visitors { variety = "map"; - ancestors = ["typ_map"; "ident_map"]; + ancestors = ["typ_map"; "lident_map"]; name = "struct_decl_field_map"; }, visitors { variety = "iter"; - ancestors = ["typ_iter"; "ident_iter"]; + ancestors = ["typ_iter"; "lident_iter"]; name = "struct_decl_field_iter"; }] type struct_decl = { - struct_decl_name : constructor Marked.pos; + struct_decl_name : uident Marked.pos; struct_decl_fields : struct_decl_field Marked.pos list; } [@@deriving @@ -190,7 +206,7 @@ type struct_decl = { }] type enum_decl_case = { - enum_decl_case_name : constructor Marked.pos; + enum_decl_case_name : uident Marked.pos; enum_decl_case_typ : typ option; } [@@deriving @@ -210,7 +226,7 @@ type enum_decl_case = { }] type enum_decl = { - enum_decl_name : constructor Marked.pos; + enum_decl_name : uident Marked.pos; enum_decl_cases : enum_decl_case Marked.pos list; } [@@deriving @@ -230,19 +246,19 @@ type enum_decl = { }] type match_case_pattern = - (constructor Marked.pos option * constructor Marked.pos) list - * ident Marked.pos option + (path * uident Marked.pos) Marked.pos list * lident Marked.pos option [@@deriving visitors { variety = "map"; - ancestors = ["ident_map"; "constructor_map"; "Marked.pos_map"]; + ancestors = ["path_map"; "lident_map"; "uident_map"; "Marked.pos_map"]; name = "match_case_pattern_map"; }, visitors { variety = "iter"; - ancestors = ["ident_iter"; "constructor_iter"; "Marked.pos_iter"]; + ancestors = + ["path_iter"; "lident_iter"; "uident_iter"; "Marked.pos_iter"]; name = "match_case_pattern_iter"; }] @@ -384,10 +400,10 @@ type literal = }] type collection_op = - | Exists of { predicate : ident Marked.pos * expression } - | Forall of { predicate : ident Marked.pos * expression } - | Map of { f : ident Marked.pos * expression } - | Filter of { f : ident Marked.pos * expression } + | Exists of { predicate : lident Marked.pos * expression } + | Forall of { predicate : lident Marked.pos * expression } + | Map of { f : lident Marked.pos * expression } + | Filter of { f : lident Marked.pos * expression } | AggregateSum of { typ : primitive_typ } (* it would be nice to remove the need for specifying the type here like for extremums, but we need an additionl overload for "neutral element for @@ -396,7 +412,7 @@ type collection_op = | AggregateArgExtremum of { max : bool; default : expression; - f : ident Marked.pos * expression; + f : lident Marked.pos * expression; } and explicit_match_case = { @@ -418,16 +434,19 @@ and naked_expression = | MemCollection of expression * expression | TestMatchCase of expression * match_case_pattern Marked.pos | FunCall of expression * expression - | ScopeCall of constructor Marked.pos * (ident Marked.pos * expression) list - | LetIn of ident Marked.pos * expression * expression + | ScopeCall of + (path * uident Marked.pos) Marked.pos + * (lident Marked.pos * expression) list + | LetIn of lident Marked.pos * expression * expression | Builtin of builtin_expression | Literal of literal - | EnumInject of - constructor Marked.pos option * constructor Marked.pos * expression option - | StructLit of constructor Marked.pos * (ident Marked.pos * expression) list + | EnumInject of (path * uident Marked.pos) Marked.pos * expression option + | StructLit of + (path * uident Marked.pos) Marked.pos + * (lident Marked.pos * expression) list | ArrayLit of expression list - | Ident of ident - | Dotted of expression * constructor Marked.pos option * ident Marked.pos + | Ident of path * lident Marked.pos + | Dotted of expression * (path * lident Marked.pos) Marked.pos (** Dotted is for both struct field projection and sub-scope variables *) [@@deriving visitors @@ -462,66 +481,66 @@ and naked_expression = type exception_to = | NotAnException | UnlabeledException - | ExceptionToLabel of ident Marked.pos + | ExceptionToLabel of lident Marked.pos [@@deriving visitors { variety = "map"; - ancestors = ["ident_map"; "Marked.pos_map"]; + ancestors = ["lident_map"; "Marked.pos_map"]; name = "exception_to_map"; }, visitors { variety = "iter"; - ancestors = ["ident_iter"; "Marked.pos_iter"]; + ancestors = ["lident_iter"; "Marked.pos_iter"]; name = "exception_to_iter"; }] type rule = { - rule_label : ident Marked.pos option; + rule_label : lident Marked.pos option; rule_exception_to : exception_to; - rule_parameter : ident Marked.pos option; + rule_parameter : lident Marked.pos option; rule_condition : expression option; - rule_name : qident Marked.pos; + rule_name : scope_var Marked.pos; rule_id : Shared_ast.RuleName.t; [@opaque] rule_consequence : (bool[@opaque]) Marked.pos; - rule_state : ident Marked.pos option; + rule_state : lident Marked.pos option; } [@@deriving visitors { variety = "map"; - ancestors = ["expression_map"; "qident_map"; "exception_to_map"]; + ancestors = ["expression_map"; "scope_var_map"; "exception_to_map"]; name = "rule_map"; }, visitors { variety = "iter"; - ancestors = ["expression_iter"; "qident_iter"; "exception_to_iter"]; + ancestors = ["expression_iter"; "scope_var_iter"; "exception_to_iter"]; name = "rule_iter"; }] type definition = { - definition_label : ident Marked.pos option; + definition_label : lident Marked.pos option; definition_exception_to : exception_to; - definition_name : qident Marked.pos; - definition_parameter : ident Marked.pos option; + definition_name : scope_var Marked.pos; + definition_parameter : lident Marked.pos option; definition_condition : expression option; definition_id : Shared_ast.RuleName.t; [@opaque] definition_expr : expression; - definition_state : ident Marked.pos option; + definition_state : lident Marked.pos option; } [@@deriving visitors { variety = "map"; - ancestors = ["expression_map"; "qident_map"; "exception_to_map"]; + ancestors = ["expression_map"; "scope_var_map"; "exception_to_map"]; name = "definition_map"; }, visitors { variety = "iter"; - ancestors = ["expression_iter"; "qident_iter"; "exception_to_iter"]; + ancestors = ["expression_iter"; "scope_var_iter"; "exception_to_iter"]; name = "definition_iter"; }] @@ -531,20 +550,20 @@ type variation_typ = Increasing | Decreasing visitors { variety = "iter"; name = "variation_typ_iter" }] type meta_assertion = - | FixedBy of qident Marked.pos * ident Marked.pos + | FixedBy of scope_var Marked.pos * lident Marked.pos | VariesWith of - qident Marked.pos * expression * variation_typ Marked.pos option + scope_var Marked.pos * expression * variation_typ Marked.pos option [@@deriving visitors { variety = "map"; - ancestors = ["variation_typ_map"; "qident_map"; "expression_map"]; + ancestors = ["variation_typ_map"; "scope_var_map"; "expression_map"]; name = "meta_assertion_map"; }, visitors { variety = "iter"; - ancestors = ["variation_typ_iter"; "qident_iter"; "expression_iter"]; + ancestors = ["variation_typ_iter"; "scope_var_iter"; "expression_iter"]; name = "meta_assertion_iter"; }] @@ -590,7 +609,7 @@ type scope_use_item = type scope_use = { scope_use_condition : expression option; - scope_use_name : constructor Marked.pos; + scope_use_name : uident Marked.pos; scope_use_items : scope_use_item Marked.pos list; } [@@deriving @@ -631,8 +650,8 @@ type scope_decl_context_io = { }] type scope_decl_context_scope = { - scope_decl_context_scope_name : ident Marked.pos; - scope_decl_context_scope_sub_scope : constructor Marked.pos; + scope_decl_context_scope_name : lident Marked.pos; + scope_decl_context_scope_sub_scope : uident Marked.pos; scope_decl_context_scope_attribute : scope_decl_context_io; } [@@deriving @@ -641,8 +660,8 @@ type scope_decl_context_scope = { variety = "map"; ancestors = [ - "ident_map"; - "constructor_map"; + "lident_map"; + "uident_map"; "scope_decl_context_io_map"; "Marked.pos_map"; ]; @@ -653,8 +672,8 @@ type scope_decl_context_scope = { variety = "iter"; ancestors = [ - "ident_iter"; - "constructor_iter"; + "lident_iter"; + "uident_iter"; "scope_decl_context_io_iter"; "Marked.pos_iter"; ]; @@ -662,22 +681,22 @@ type scope_decl_context_scope = { }] type scope_decl_context_data = { - scope_decl_context_item_name : ident Marked.pos; + scope_decl_context_item_name : lident Marked.pos; scope_decl_context_item_typ : typ; scope_decl_context_item_attribute : scope_decl_context_io; - scope_decl_context_item_states : ident Marked.pos list; + scope_decl_context_item_states : lident Marked.pos list; } [@@deriving visitors { variety = "map"; - ancestors = ["typ_map"; "scope_decl_context_io_map"; "ident_map"]; + ancestors = ["typ_map"; "scope_decl_context_io_map"; "lident_map"]; name = "scope_decl_context_data_map"; }, visitors { variety = "iter"; - ancestors = ["typ_iter"; "scope_decl_context_io_iter"; "ident_iter"]; + ancestors = ["typ_iter"; "scope_decl_context_io_iter"; "lident_iter"]; name = "scope_decl_context_data_iter"; }] @@ -701,7 +720,7 @@ type scope_decl_context_item = }] type scope_decl = { - scope_decl_name : constructor Marked.pos; + scope_decl_name : uident Marked.pos; scope_decl_context : scope_decl_context_item Marked.pos list; } [@@deriving diff --git a/compiler/surface/parser.messages b/compiler/surface/parser.messages index 15a737dc..b278b95b 100644 --- a/compiler/surface/parser.messages +++ b/compiler/surface/parser.messages @@ -1,8 +1,8 @@ source_file: BEGIN_CODE DECLARATION ENUM UIDENT COLON ALT UIDENT CONTENT TEXT YEAR ## -## Ends in an error in state: 340. +## Ends in an error in state: 335. ## -## list(enum_decl_line) -> enum_decl_line . list(enum_decl_line) [ SCOPE END_CODE DECLARATION ] +## list(addpos(enum_decl_line)) -> enum_decl_line . list(addpos(enum_decl_line)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: ## enum_decl_line @@ -12,7 +12,7 @@ expected another enum case, or a new declaration or scope use source_file: BEGIN_CODE DECLARATION ENUM UIDENT COLON ALT UIDENT CONTENT YEAR ## -## Ends in an error in state: 336. +## Ends in an error in state: 331. ## ## option(preceded(CONTENT,addpos(typ))) -> CONTENT . typ [ SCOPE END_CODE DECLARATION ALT ] ## @@ -24,21 +24,21 @@ expected a content type source_file: BEGIN_CODE DECLARATION ENUM UIDENT COLON ALT UIDENT YEAR ## -## Ends in an error in state: 335. +## Ends in an error in state: 330. ## -## enum_decl_line -> ALT constructor . option(preceded(CONTENT,addpos(typ))) [ SCOPE END_CODE DECLARATION ALT ] +## enum_decl_line -> ALT UIDENT . option(preceded(CONTENT,addpos(typ))) [ SCOPE END_CODE DECLARATION ALT ] ## ## The known suffix of the stack is as follows: -## ALT constructor +## ALT UIDENT ## expected a payload for your enum case, or another case or declaration source_file: BEGIN_CODE DECLARATION ENUM UIDENT COLON ALT YEAR ## -## Ends in an error in state: 334. +## Ends in an error in state: 329. ## -## enum_decl_line -> ALT . constructor option(preceded(CONTENT,addpos(typ))) [ SCOPE END_CODE DECLARATION ALT ] +## enum_decl_line -> ALT . UIDENT option(preceded(CONTENT,addpos(typ))) [ SCOPE END_CODE DECLARATION ALT ] ## ## The known suffix of the stack is as follows: ## ALT @@ -48,33 +48,33 @@ expected the name of an enum case source_file: BEGIN_CODE DECLARATION ENUM UIDENT COLON YEAR ## -## Ends in an error in state: 333. +## Ends in an error in state: 328. ## -## code_item -> DECLARATION ENUM constructor COLON . list(enum_decl_line) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION ENUM UIDENT COLON . list(addpos(enum_decl_line)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: -## DECLARATION ENUM constructor COLON +## DECLARATION ENUM UIDENT COLON ## expected an enum case source_file: BEGIN_CODE DECLARATION ENUM UIDENT YEAR ## -## Ends in an error in state: 332. +## Ends in an error in state: 327. ## -## code_item -> DECLARATION ENUM constructor . COLON list(enum_decl_line) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION ENUM UIDENT . COLON list(addpos(enum_decl_line)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: -## DECLARATION ENUM constructor +## DECLARATION ENUM UIDENT ## expected a colon source_file: BEGIN_CODE DECLARATION ENUM YEAR ## -## Ends in an error in state: 331. +## Ends in an error in state: 326. ## -## code_item -> DECLARATION ENUM . constructor COLON list(enum_decl_line) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION ENUM . UIDENT COLON list(addpos(enum_decl_line)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: ## DECLARATION ENUM @@ -91,33 +91,33 @@ expected the name of your enum source_file: BEGIN_CODE DECLARATION SCOPE UIDENT COLON YEAR ## -## Ends in an error in state: 306. +## Ends in an error in state: 301. ## -## code_item -> DECLARATION SCOPE constructor COLON . nonempty_list(scope_decl_item) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION SCOPE UIDENT COLON . nonempty_list(addpos(scope_decl_item)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: -## DECLARATION SCOPE constructor COLON +## DECLARATION SCOPE UIDENT COLON ## expected a context item introduced by "context" source_file: BEGIN_CODE DECLARATION SCOPE UIDENT YEAR ## -## Ends in an error in state: 305. +## Ends in an error in state: 300. ## -## code_item -> DECLARATION SCOPE constructor . COLON nonempty_list(scope_decl_item) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION SCOPE UIDENT . COLON nonempty_list(addpos(scope_decl_item)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: -## DECLARATION SCOPE constructor +## DECLARATION SCOPE UIDENT ## expected a colon followed by the list of context items of this scope source_file: BEGIN_CODE DECLARATION SCOPE YEAR ## -## Ends in an error in state: 304. +## Ends in an error in state: 299. ## -## code_item -> DECLARATION SCOPE . constructor COLON nonempty_list(scope_decl_item) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION SCOPE . UIDENT COLON nonempty_list(addpos(scope_decl_item)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: ## DECLARATION SCOPE @@ -127,7 +127,7 @@ expected the name of the scope you are declaring source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON CONDITION LIDENT DEPENDS COLLECTION YEAR ## -## Ends in an error in state: 290. +## Ends in an error in state: 286. ## ## typ -> COLLECTION . typ [ STATE SCOPE OUTPUT LIDENT INTERNAL INPUT END_CODE DEPENDS DECLARATION DATA CONTEXT CONDITION ALT ] ## @@ -139,9 +139,9 @@ expected a new struct data, or another declaration or scope use source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON CONDITION LIDENT DEPENDS TEXT YEAR ## -## Ends in an error in state: 299. +## Ends in an error in state: 296. ## -## list(struct_scope) -> struct_scope . list(struct_scope) [ SCOPE END_CODE DECLARATION ] +## list(addpos(struct_scope)) -> struct_scope . list(addpos(struct_scope)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: ## struct_scope @@ -151,7 +151,7 @@ expected a new struct data, or another declaration or scope use source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON CONDITION LIDENT DEPENDS YEAR ## -## Ends in an error in state: 296. +## Ends in an error in state: 293. ## ## option(struct_scope_func) -> DEPENDS . typ [ STATE SCOPE OUTPUT LIDENT INTERNAL INPUT END_CODE DECLARATION DATA CONTEXT CONDITION ] ## @@ -163,7 +163,7 @@ expected the type of the parameter of this struct data function source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON CONDITION LIDENT YEAR ## -## Ends in an error in state: 295. +## Ends in an error in state: 292. ## ## struct_scope -> struct_scope_base . option(struct_scope_func) [ SCOPE END_CODE DECLARATION DATA CONDITION ] ## @@ -175,45 +175,45 @@ expected a new struct data, or another declaration or scope use source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON CONDITION YEAR ## -## Ends in an error in state: 301. +## Ends in an error in state: 290. ## -## struct_scope_base -> condition_pos . ident [ SCOPE END_CODE DEPENDS DECLARATION DATA CONDITION ] +## struct_scope_base -> CONDITION . lident [ SCOPE END_CODE DEPENDS DECLARATION DATA CONDITION ] ## ## The known suffix of the stack is as follows: -## condition_pos +## CONDITION ## expected the name of this struct condition source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON DATA LIDENT CONTENT YEAR ## -## Ends in an error in state: 289. +## Ends in an error in state: 285. ## -## struct_scope_base -> DATA ident CONTENT . typ [ SCOPE END_CODE DEPENDS DECLARATION DATA CONDITION ] +## struct_scope_base -> DATA lident CONTENT . typ [ SCOPE END_CODE DEPENDS DECLARATION DATA CONDITION ] ## ## The known suffix of the stack is as follows: -## DATA ident CONTENT +## DATA lident CONTENT ## expected the type of this struct data source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON DATA LIDENT YEAR ## -## Ends in an error in state: 288. +## Ends in an error in state: 284. ## -## struct_scope_base -> DATA ident . CONTENT typ [ SCOPE END_CODE DEPENDS DECLARATION DATA CONDITION ] +## struct_scope_base -> DATA lident . CONTENT typ [ SCOPE END_CODE DEPENDS DECLARATION DATA CONDITION ] ## ## The known suffix of the stack is as follows: -## DATA ident +## DATA lident ## expected the type of this struct data, introduced by the content keyword source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON DATA YEAR ## -## Ends in an error in state: 287. +## Ends in an error in state: 283. ## -## struct_scope_base -> DATA . ident CONTENT typ [ SCOPE END_CODE DEPENDS DECLARATION DATA CONDITION ] +## struct_scope_base -> DATA . lident CONTENT typ [ SCOPE END_CODE DEPENDS DECLARATION DATA CONDITION ] ## ## The known suffix of the stack is as follows: ## DATA @@ -223,33 +223,33 @@ expected the name of this struct data source_file: BEGIN_CODE DECLARATION STRUCT UIDENT COLON YEAR ## -## Ends in an error in state: 286. +## Ends in an error in state: 282. ## -## code_item -> DECLARATION STRUCT constructor COLON . list(struct_scope) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION STRUCT UIDENT COLON . list(addpos(struct_scope)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: -## DECLARATION STRUCT constructor COLON +## DECLARATION STRUCT UIDENT COLON ## expected struct data or condition source_file: BEGIN_CODE DECLARATION STRUCT UIDENT YEAR ## -## Ends in an error in state: 285. +## Ends in an error in state: 281. ## -## code_item -> DECLARATION STRUCT constructor . COLON list(struct_scope) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION STRUCT UIDENT . COLON list(addpos(struct_scope)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: -## DECLARATION STRUCT constructor +## DECLARATION STRUCT UIDENT ## expected a colon source_file: BEGIN_CODE DECLARATION STRUCT YEAR ## -## Ends in an error in state: 284. +## Ends in an error in state: 280. ## -## code_item -> DECLARATION STRUCT . constructor COLON list(struct_scope) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION STRUCT . UIDENT COLON list(addpos(struct_scope)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: ## DECLARATION STRUCT @@ -259,11 +259,11 @@ expected the struct name source_file: BEGIN_CODE DECLARATION YEAR ## -## Ends in an error in state: 283. +## Ends in an error in state: 279. ## -## code_item -> DECLARATION . STRUCT constructor COLON list(struct_scope) [ SCOPE END_CODE DECLARATION ] -## code_item -> DECLARATION . SCOPE constructor COLON nonempty_list(scope_decl_item) [ SCOPE END_CODE DECLARATION ] -## code_item -> DECLARATION . ENUM constructor COLON list(enum_decl_line) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION . STRUCT UIDENT COLON list(addpos(struct_scope)) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION . SCOPE UIDENT COLON nonempty_list(addpos(scope_decl_item)) [ SCOPE END_CODE DECLARATION ] +## code_item -> DECLARATION . ENUM UIDENT COLON list(addpos(enum_decl_line)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: ## DECLARATION @@ -273,72 +273,71 @@ expected the kind of the declaration (struct, scope or enum) source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION CARDINAL THEN ## -## Ends in an error in state: 244. +## Ends in an error in state: 241. ## -## assertion_base -> naked_expression . [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] -## naked_expression -> naked_expression . DOT ident [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . DOT constructor DOT ident [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . OF naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . WITH constructor_binding [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . CONTAINS naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . FOR ident AMONG naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . MULT naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . DIV naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . PLUS naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . MINUS naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . PLUSPLUS naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . LESSER naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . LESSER_EQUAL naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . GREATER naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . GREATER_EQUAL naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . EQUAL naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . NOT_EQUAL naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . AND naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . OR naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . XOR naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] -## naked_expression -> naked_expression . FOR ident AMONG naked_expression SUCH THAT naked_expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## assertion -> option(condition_consequence) expression . [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## expression -> expression . DOT qlident [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . OF expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . WITH constructor_binding [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . CONTAINS expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . FOR lident AMONG expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . MULT expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . DIV expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . PLUS expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . MINUS expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . PLUSPLUS expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . LESSER expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . LESSER_EQUAL expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . GREATER expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . GREATER_EQUAL expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . EQUAL expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . NOT_EQUAL expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . AND expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . OR expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . XOR expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] +## expression -> expression . FOR lident AMONG expression SUCH THAT expression [ XOR WITH SCOPE RULE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE DOT DIV DEFINITION DECLARATION CONTAINS ASSERTION AND ] ## ## The known suffix of the stack is as follows: -## naked_expression +## option(condition_consequence) expression ## expected a new scope use item source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION FIXED LIDENT BY YEAR ## -## Ends in an error in state: 241. +## Ends in an error in state: 238. ## -## assertion -> FIXED separated_nonempty_list(DOT,ident) BY . ident [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## assertion -> FIXED separated_nonempty_list(DOT,addpos(LIDENT)) BY . lident [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: -## FIXED separated_nonempty_list(DOT,ident) BY +## FIXED separated_nonempty_list(DOT,addpos(LIDENT)) BY ## expected the legislative text by which the value of the variable is fixed source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION FIXED LIDENT WITH_V ## -## Ends in an error in state: 240. +## Ends in an error in state: 237. ## -## assertion -> FIXED separated_nonempty_list(DOT,ident) . BY ident [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## assertion -> FIXED separated_nonempty_list(DOT,addpos(LIDENT)) . BY lident [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: -## FIXED separated_nonempty_list(DOT,ident) +## FIXED separated_nonempty_list(DOT,addpos(LIDENT)) ## ## 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 233, spurious reduction of production separated_nonempty_list(DOT,ident) -> ident +## In state 223, spurious reduction of production separated_nonempty_list(DOT,addpos(LIDENT)) -> LIDENT ## expected the legislative text by which the value of the variable is fixed source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION FIXED YEAR ## -## Ends in an error in state: 239. +## Ends in an error in state: 236. ## -## assertion -> FIXED . separated_nonempty_list(DOT,ident) BY ident [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## assertion -> FIXED . separated_nonempty_list(DOT,addpos(LIDENT)) BY lident [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: ## FIXED @@ -349,42 +348,41 @@ expected the name of the variable that should be fixed source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION UNDER_CONDITION TRUE THEN ## -## Ends in an error in state: 237. +## Ends in an error in state: 234. ## -## condition_consequence -> UNDER_CONDITION naked_expression . CONSEQUENCE [ UIDENT TRUE SUM STATE OUTPUT NOT MONEY_AMOUNT MONEY MINUS MINIMUM MAXIMUM MATCH LPAREN LIDENT LET LBRACKET INT_LITERAL IF FOR FILLED FALSE EXISTS DEFINED_AS DECIMAL_LITERAL DECIMAL CARDINAL BAR ] -## naked_expression -> naked_expression . DOT ident [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . DOT constructor DOT ident [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . OF naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . WITH constructor_binding [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . CONTAINS naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . FOR ident AMONG naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . MULT naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . DIV naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . PLUS naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . MINUS naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . PLUSPLUS naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . LESSER naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . LESSER_EQUAL naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . GREATER naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . GREATER_EQUAL naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . EQUAL naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . NOT_EQUAL naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . AND naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . OR naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . XOR naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] -## naked_expression -> naked_expression . FOR ident AMONG naked_expression SUCH THAT naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## condition_consequence -> UNDER_CONDITION expression . CONSEQUENCE [ UIDENT TRUE SUM STATE OUTPUT NOT MONEY_AMOUNT MONEY MINUS MINIMUM MAXIMUM MATCH LPAREN LIDENT LET LBRACKET INT_LITERAL IF FOR FILLED FALSE EXISTS DEFINED_AS DECIMAL_LITERAL DECIMAL CARDINAL BAR ] +## expression -> expression . DOT qlident [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . OF expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . WITH constructor_binding [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . CONTAINS expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . FOR lident AMONG expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . MULT expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . DIV expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . PLUS expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . MINUS expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . PLUSPLUS expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . LESSER expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . LESSER_EQUAL expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . GREATER expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . GREATER_EQUAL expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . EQUAL expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . NOT_EQUAL expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . AND expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . OR expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . XOR expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] +## expression -> expression . FOR lident AMONG expression SUCH THAT expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS CONSEQUENCE AND ] ## ## The known suffix of the stack is as follows: -## UNDER_CONDITION naked_expression +## UNDER_CONDITION expression ## expected a consequence for this definition under condition source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION UNDER_CONDITION YEAR ## -## Ends in an error in state: 236. +## Ends in an error in state: 233. ## -## condition_consequence -> UNDER_CONDITION . naked_expression CONSEQUENCE [ UIDENT TRUE SUM STATE OUTPUT NOT MONEY_AMOUNT MONEY MINUS MINIMUM MAXIMUM MATCH LPAREN LIDENT LET LBRACKET INT_LITERAL IF FOR FILLED FALSE EXISTS DEFINED_AS DECIMAL_LITERAL DECIMAL CARDINAL BAR ] +## condition_consequence -> UNDER_CONDITION . expression CONSEQUENCE [ UIDENT TRUE SUM STATE OUTPUT NOT MONEY_AMOUNT MONEY MINUS MINIMUM MAXIMUM MATCH LPAREN LIDENT LET LBRACKET INT_LITERAL IF FOR FILLED FALSE EXISTS DEFINED_AS DECIMAL_LITERAL DECIMAL CARDINAL BAR ] ## ## The known suffix of the stack is as follows: ## UNDER_CONDITION @@ -396,16 +394,16 @@ source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION VARIES LIDENT UNDER_CONDITI ## ## Ends in an error in state: 226. ## -## assertion -> VARIES separated_nonempty_list(DOT,ident) . WITH_V naked_expression option(variation_type) [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## assertion -> VARIES separated_nonempty_list(DOT,addpos(LIDENT)) . WITH_V expression option(addpos(variation_type)) [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: -## VARIES separated_nonempty_list(DOT,ident) +## VARIES separated_nonempty_list(DOT,addpos(LIDENT)) ## ## 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 233, spurious reduction of production separated_nonempty_list(DOT,ident) -> ident +## In state 223, spurious reduction of production separated_nonempty_list(DOT,addpos(LIDENT)) -> LIDENT ## expected an indication about what this variable varies with @@ -414,19 +412,19 @@ source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION VARIES LIDENT WITH_V YEAR ## ## Ends in an error in state: 227. ## -## assertion -> VARIES separated_nonempty_list(DOT,ident) WITH_V . naked_expression option(variation_type) [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## assertion -> VARIES separated_nonempty_list(DOT,addpos(LIDENT)) WITH_V . expression option(addpos(variation_type)) [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: -## VARIES separated_nonempty_list(DOT,ident) WITH_V +## VARIES separated_nonempty_list(DOT,addpos(LIDENT)) WITH_V ## the variable varies with an expression that was expected here source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION VARIES YEAR ## -## Ends in an error in state: 225. +## Ends in an error in state: 222. ## -## assertion -> VARIES . separated_nonempty_list(DOT,ident) WITH_V naked_expression option(variation_type) [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## assertion -> VARIES . separated_nonempty_list(DOT,addpos(LIDENT)) WITH_V expression option(addpos(variation_type)) [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: ## VARIES @@ -436,7 +434,7 @@ expecting the name of the varying variable source_file: BEGIN_CODE SCOPE UIDENT COLON ASSERTION YEAR ## -## Ends in an error in state: 224. +## Ends in an error in state: 221. ## ## scope_item -> ASSERTION . assertion [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## @@ -448,24 +446,24 @@ expected an expression that shoud be asserted during execution source_file: BEGIN_CODE SCOPE UIDENT COLON DEFINITION LIDENT DEFINED_AS YEAR ## -## Ends in an error in state: 276. +## Ends in an error in state: 272. ## -## definition -> option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,ident) option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS . naked_expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## definition -> option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,addpos(LIDENT)) option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS . expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: -## option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,ident) option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS +## option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,addpos(LIDENT)) option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS ## expected an expression for the definition source_file: BEGIN_CODE SCOPE UIDENT COLON DEFINITION LIDENT OF LIDENT DECREASING ## -## Ends in an error in state: 273. +## Ends in an error in state: 269. ## -## definition -> option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,ident) option(definition_parameters) . option(state) option(condition_consequence) DEFINED_AS naked_expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## definition -> option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,addpos(LIDENT)) option(definition_parameters) . option(state) option(condition_consequence) DEFINED_AS expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: -## option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,ident) option(definition_parameters) +## option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,addpos(LIDENT)) option(definition_parameters) ## expected a expression for defining this function, introduced by the defined as keyword @@ -473,27 +471,27 @@ expected a expression for defining this function, introduced by the defined as k source_file: BEGIN_CODE SCOPE UIDENT COLON DEFINITION LIDENT WITH_V ## -## Ends in an error in state: 272. +## Ends in an error in state: 268. ## -## definition -> option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,ident) . option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS naked_expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## definition -> option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,addpos(LIDENT)) . option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: -## option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,ident) +## option(label) option(exception_to) DEFINITION separated_nonempty_list(DOT,addpos(LIDENT)) ## ## 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 233, spurious reduction of production separated_nonempty_list(DOT,ident) -> ident +## In state 223, spurious reduction of production separated_nonempty_list(DOT,addpos(LIDENT)) -> LIDENT ## expected the defined as keyword to introduce the definition of this variable source_file: BEGIN_CODE SCOPE UIDENT COLON DEFINITION YEAR ## -## Ends in an error in state: 271. +## Ends in an error in state: 267. ## -## definition -> option(label) option(exception_to) DEFINITION . separated_nonempty_list(DOT,ident) option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS naked_expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## definition -> option(label) option(exception_to) DEFINITION . separated_nonempty_list(DOT,addpos(LIDENT)) option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: ## option(label) option(exception_to) DEFINITION @@ -503,9 +501,9 @@ expected the name of the variable you want to define source_file: BEGIN_CODE SCOPE UIDENT COLON EXCEPTION LIDENT YEAR ## -## Ends in an error in state: 254. +## Ends in an error in state: 250. ## -## definition -> option(label) option(exception_to) . DEFINITION separated_nonempty_list(DOT,ident) option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS naked_expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## definition -> option(label) option(exception_to) . DEFINITION separated_nonempty_list(DOT,addpos(LIDENT)) option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## rule -> option(label) option(exception_to) . RULE rule_expr option(condition_consequence) option(state) rule_consequence [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: @@ -516,9 +514,9 @@ expected a rule or a definition after the exception declaration source_file: BEGIN_CODE SCOPE UIDENT COLON EXCEPTION YEAR ## -## Ends in an error in state: 251. +## Ends in an error in state: 247. ## -## exception_to -> EXCEPTION . option(ident) [ RULE DEFINITION ] +## exception_to -> EXCEPTION . option(lident) [ RULE DEFINITION ] ## ## The known suffix of the stack is as follows: ## EXCEPTION @@ -528,9 +526,9 @@ expected the label to which the exception is referring back source_file: BEGIN_CODE SCOPE UIDENT COLON LABEL LIDENT DEFINED_AS ## -## Ends in an error in state: 250. +## Ends in an error in state: 246. ## -## definition -> option(label) . option(exception_to) DEFINITION separated_nonempty_list(DOT,ident) option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS naked_expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] +## definition -> option(label) . option(exception_to) DEFINITION separated_nonempty_list(DOT,addpos(LIDENT)) option(definition_parameters) option(state) option(condition_consequence) DEFINED_AS expression [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## rule -> option(label) . option(exception_to) RULE rule_expr option(condition_consequence) option(state) rule_consequence [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## ## The known suffix of the stack is as follows: @@ -541,9 +539,9 @@ expected a rule or a definition after the label declaration source_file: BEGIN_CODE SCOPE UIDENT COLON LABEL YEAR ## -## Ends in an error in state: 222. +## Ends in an error in state: 219. ## -## label -> LABEL . ident [ RULE EXCEPTION DEFINITION ] +## label -> LABEL . lident [ RULE EXCEPTION DEFINITION ] ## ## The known suffix of the stack is as follows: ## LABEL @@ -553,19 +551,19 @@ expected the name of the label source_file: BEGIN_CODE SCOPE UIDENT COLON RULE LIDENT DOT YEAR ## -## Ends in an error in state: 234. +## Ends in an error in state: 224. ## -## separated_nonempty_list(DOT,ident) -> ident DOT . separated_nonempty_list(DOT,ident) [ WITH_V UNDER_CONDITION STATE OF NOT FILLED DEFINED_AS BY ] +## separated_nonempty_list(DOT,addpos(LIDENT)) -> LIDENT DOT . separated_nonempty_list(DOT,addpos(LIDENT)) [ WITH_V UNDER_CONDITION STATE OF NOT FILLED DEFINED_AS BY ] ## ## The known suffix of the stack is as follows: -## ident DOT +## LIDENT DOT ## expected a struct field or a sub-scope context item after the dot source_file: BEGIN_CODE SCOPE UIDENT COLON RULE LIDENT NOT FALSE ## -## Ends in an error in state: 269. +## Ends in an error in state: 265. ## ## rule_consequence -> option(NOT) . FILLED [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## @@ -577,7 +575,7 @@ expected the filled keyword the this rule source_file: BEGIN_CODE SCOPE UIDENT COLON RULE LIDENT OF LIDENT YEAR ## -## Ends in an error in state: 261. +## Ends in an error in state: 257. ## ## rule -> option(label) option(exception_to) RULE rule_expr . option(condition_consequence) option(state) rule_consequence [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## @@ -589,9 +587,9 @@ expected the expression of the rule source_file: BEGIN_CODE SCOPE UIDENT COLON RULE LIDENT OF YEAR ## -## Ends in an error in state: 257. +## Ends in an error in state: 253. ## -## definition_parameters -> OF . ident [ UNDER_CONDITION STATE NOT FILLED DEFINED_AS ] +## definition_parameters -> OF . lident [ UNDER_CONDITION STATE NOT FILLED DEFINED_AS ] ## ## The known suffix of the stack is as follows: ## OF @@ -602,38 +600,38 @@ expected the name of the parameter for this dependent variable source_file: BEGIN_CODE SCOPE UIDENT COLON RULE LIDENT WITH_V ## -## Ends in an error in state: 256. +## Ends in an error in state: 252. ## -## rule_expr -> separated_nonempty_list(DOT,ident) . option(definition_parameters) [ UNDER_CONDITION STATE NOT FILLED ] +## rule_expr -> separated_nonempty_list(DOT,addpos(LIDENT)) . option(definition_parameters) [ UNDER_CONDITION STATE NOT FILLED ] ## ## The known suffix of the stack is as follows: -## separated_nonempty_list(DOT,ident) +## separated_nonempty_list(DOT,addpos(LIDENT)) ## ## 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 233, spurious reduction of production separated_nonempty_list(DOT,ident) -> ident +## In state 223, spurious reduction of production separated_nonempty_list(DOT,addpos(LIDENT)) -> LIDENT ## expected a condition or a consequence for this rule source_file: BEGIN_CODE SCOPE UIDENT COLON RULE LIDENT YEAR ## -## Ends in an error in state: 233. +## Ends in an error in state: 223. ## -## separated_nonempty_list(DOT,ident) -> ident . [ WITH_V UNDER_CONDITION STATE OF NOT FILLED DEFINED_AS BY ] -## separated_nonempty_list(DOT,ident) -> ident . DOT separated_nonempty_list(DOT,ident) [ WITH_V UNDER_CONDITION STATE OF NOT FILLED DEFINED_AS BY ] +## separated_nonempty_list(DOT,addpos(LIDENT)) -> LIDENT . [ WITH_V UNDER_CONDITION STATE OF NOT FILLED DEFINED_AS BY ] +## separated_nonempty_list(DOT,addpos(LIDENT)) -> LIDENT . DOT separated_nonempty_list(DOT,addpos(LIDENT)) [ WITH_V UNDER_CONDITION STATE OF NOT FILLED DEFINED_AS BY ] ## ## The known suffix of the stack is as follows: -## ident +## LIDENT ## expected a condition or a consequence for this rule, or the rest of the variable qualified name source_file: BEGIN_CODE SCOPE UIDENT COLON RULE YEAR ## -## Ends in an error in state: 255. +## Ends in an error in state: 251. ## ## rule -> option(label) option(exception_to) RULE . rule_expr option(condition_consequence) option(state) rule_consequence [ SCOPE RULE LABEL EXCEPTION END_CODE DEFINITION DECLARATION ASSERTION ] ## @@ -645,12 +643,12 @@ expected the name of the variable subject to the rule source_file: BEGIN_CODE SCOPE UIDENT COLON YEAR ## -## Ends in an error in state: 221. +## Ends in an error in state: 218. ## -## code_item -> SCOPE constructor option(scope_use_condition) COLON . nonempty_list(scope_item) [ SCOPE END_CODE DECLARATION ] +## code_item -> SCOPE UIDENT option(preceded(UNDER_CONDITION,expression)) COLON . nonempty_list(addpos(scope_item)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: -## SCOPE constructor option(scope_use_condition) COLON +## SCOPE UIDENT option(preceded(UNDER_CONDITION,expression)) COLON ## expected a scope use item: a rule, definition or assertion @@ -661,36 +659,35 @@ expected a scope use item: a rule, definition or assertion source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION UIDENT YEAR ## -## Ends in an error in state: 120. +## Ends in an error in state: 10. ## -## naked_expression -> constructor . enum_content_opt [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## naked_expression -> constructor . DOT constructor enum_content_opt [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## naked_expression -> constructor . LBRACE nonempty_list(preceded(ALT,struct_content_field)) RBRACE [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## naked_expression -> constructor . DOT constructor LBRACE nonempty_list(preceded(ALT,struct_content_field)) RBRACE [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> UIDENT . DOT qlident [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## quident -> UIDENT . DOT quident [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LBRACE LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTENT CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## quident -> UIDENT . [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LBRACE LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTENT CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: -## constructor +## UIDENT ## expected a payload for the enum case constructor, or the rest of the expression (with an operator ?) source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION EXISTS LIDENT YEAR ## -## Ends in an error in state: 62. +## Ends in an error in state: 70. ## -## naked_expression -> EXISTS ident . AMONG naked_expression SUCH THAT naked_expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> EXISTS lident . AMONG expression SUCH THAT expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: -## EXISTS ident +## EXISTS lident ## expected the "in" keyword to continue this existential test source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION EXISTS YEAR ## -## Ends in an error in state: 61. +## Ends in an error in state: 69. ## -## naked_expression -> EXISTS . ident AMONG naked_expression SUCH THAT naked_expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> EXISTS . lident AMONG expression SUCH THAT expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: ## EXISTS @@ -700,21 +697,21 @@ expected an identifier that will designate the existential witness for the test source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION FOR ALL LIDENT YEAR ## -## Ends in an error in state: 58. +## Ends in an error in state: 66. ## -## naked_expression -> FOR ALL ident . AMONG naked_expression WE_HAVE naked_expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> FOR ALL lident . AMONG expression WE_HAVE expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: -## FOR ALL ident +## FOR ALL lident ## expected the "in" keyword for the rest of the universal test source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION FOR ALL YEAR ## -## Ends in an error in state: 57. +## Ends in an error in state: 65. ## -## naked_expression -> FOR ALL . ident AMONG naked_expression WE_HAVE naked_expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> FOR ALL . lident AMONG expression WE_HAVE expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: ## FOR ALL @@ -724,9 +721,9 @@ expected an identifier for the bound variable of the universal test source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION FOR YEAR ## -## Ends in an error in state: 56. +## Ends in an error in state: 64. ## -## naked_expression -> FOR . ALL ident AMONG naked_expression WE_HAVE naked_expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> FOR . ALL lident AMONG expression WE_HAVE expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: ## FOR @@ -736,33 +733,32 @@ expected the "all" keyword to mean the "for all" construction of the universal t source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION IF TRUE SEMICOLON ## -## Ends in an error in state: 169. +## Ends in an error in state: 166. ## -## naked_expression -> naked_expression . DOT ident [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . DOT constructor DOT ident [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . OF naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . WITH constructor_binding [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . CONTAINS naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . FOR ident AMONG naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . MULT naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . DIV naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . PLUS naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . MINUS naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . PLUSPLUS naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . LESSER naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . LESSER_EQUAL naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . GREATER naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . GREATER_EQUAL naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . EQUAL naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . NOT_EQUAL naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . AND naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . OR naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . XOR naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> IF naked_expression . THEN naked_expression ELSE naked_expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## naked_expression -> naked_expression . FOR ident AMONG naked_expression SUCH THAT naked_expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . DOT qlident [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . OF expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . WITH constructor_binding [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . CONTAINS expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . FOR lident AMONG expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . MULT expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . DIV expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . PLUS expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . MINUS expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . PLUSPLUS expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . LESSER expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . LESSER_EQUAL expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . GREATER expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . GREATER_EQUAL expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . EQUAL expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . NOT_EQUAL expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . AND expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . OR expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . XOR expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> IF expression . THEN expression ELSE expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> expression . FOR lident AMONG expression SUCH THAT expression [ XOR WITH THEN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] ## ## The known suffix of the stack is as follows: -## IF naked_expression +## IF expression ## expected the "then" keyword as the conditional expression is complete @@ -772,9 +768,9 @@ expected the "then" keyword as the conditional expression is complete source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION IF YEAR ## -## Ends in an error in state: 55. +## Ends in an error in state: 63. ## -## naked_expression -> IF . naked_expression THEN naked_expression ELSE naked_expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> IF . expression THEN expression ELSE expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: ## IF @@ -784,7 +780,7 @@ expected an expression for the test of the conditional source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION INT_LITERAL WITH_V ## -## Ends in an error in state: 49. +## Ends in an error in state: 57. ## ## literal -> INT_LITERAL . option(addpos(unit_literal)) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## @@ -796,42 +792,41 @@ expected a unit for this literal, or a valid operator to complete the expression source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION LPAREN TRUE THEN ## -## Ends in an error in state: 183. +## Ends in an error in state: 180. ## -## naked_expression -> LPAREN naked_expression . RPAREN [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## naked_expression -> naked_expression . DOT ident [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . DOT constructor DOT ident [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . OF naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . WITH constructor_binding [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . CONTAINS naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . FOR ident AMONG naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . MULT naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . DIV naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . PLUS naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . MINUS naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . PLUSPLUS naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . LESSER naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . LESSER_EQUAL naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . GREATER naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . GREATER_EQUAL naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . EQUAL naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . NOT_EQUAL naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . AND naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . OR naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . XOR naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . FOR ident AMONG naked_expression SUCH THAT naked_expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> LPAREN expression . RPAREN [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> expression . DOT qlident [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . OF expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . WITH constructor_binding [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . CONTAINS expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . FOR lident AMONG expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . MULT expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . DIV expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . PLUS expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . MINUS expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . PLUSPLUS expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . LESSER expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . LESSER_EQUAL expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . GREATER expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . GREATER_EQUAL expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . EQUAL expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . NOT_EQUAL expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . AND expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . OR expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . XOR expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . FOR lident AMONG expression SUCH THAT expression [ XOR WITH RPAREN PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] ## ## The known suffix of the stack is as follows: -## LPAREN naked_expression +## LPAREN expression ## unmatched parenthesis that should have been closed by here source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION LPAREN YEAR ## -## Ends in an error in state: 43. +## Ends in an error in state: 51. ## -## naked_expression -> LPAREN . naked_expression RPAREN [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> LPAREN . expression RPAREN [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: ## LPAREN @@ -842,43 +837,42 @@ expected an expression inside the parenthesis source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION LBRACKET TRUE THEN ## -## Ends in an error in state: 175. +## Ends in an error in state: 174. ## -## naked_expression -> naked_expression . DOT ident [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . DOT constructor DOT ident [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . OF naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . WITH constructor_binding [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . CONTAINS naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . FOR ident AMONG naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . MULT naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . DIV naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . PLUS naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . MINUS naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . PLUSPLUS naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . LESSER naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . LESSER_EQUAL naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . GREATER naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . GREATER_EQUAL naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . EQUAL naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . NOT_EQUAL naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . AND naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . OR naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . XOR naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> naked_expression . FOR ident AMONG naked_expression SUCH THAT naked_expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## separated_nonempty_list(SEMICOLON,expression) -> naked_expression . [ RBRACKET ] -## separated_nonempty_list(SEMICOLON,expression) -> naked_expression . SEMICOLON separated_nonempty_list(SEMICOLON,expression) [ RBRACKET ] +## expression -> expression . DOT qlident [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . OF expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . WITH constructor_binding [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . CONTAINS expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . FOR lident AMONG expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . MULT expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . DIV expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . PLUS expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . MINUS expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . PLUSPLUS expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . LESSER expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . LESSER_EQUAL expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . GREATER expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . GREATER_EQUAL expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . EQUAL expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . NOT_EQUAL expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . AND expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . OR expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . XOR expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> expression . FOR lident AMONG expression SUCH THAT expression [ XOR WITH SEMICOLON RBRACKET PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## separated_nonempty_list(SEMICOLON,expression) -> expression . [ RBRACKET ] +## separated_nonempty_list(SEMICOLON,expression) -> expression . SEMICOLON separated_nonempty_list(SEMICOLON,expression) [ RBRACKET ] ## ## The known suffix of the stack is as follows: -## naked_expression +## expression ## expected a semicolon or a right square bracket after the collection element source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION LBRACKET YEAR ## -## Ends in an error in state: 48. +## Ends in an error in state: 56. ## -## naked_expression -> LBRACKET . loption(separated_nonempty_list(SEMICOLON,expression)) RBRACKET [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> LBRACKET . loption(separated_nonempty_list(SEMICOLON,expression)) RBRACKET [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: ## LBRACKET @@ -890,7 +884,7 @@ expected a collection element source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION MATCH TRUE WITH ALT YEAR ## -## Ends in an error in state: 187. +## Ends in an error in state: 184. ## ## nonempty_list(addpos(preceded(ALT,match_arm))) -> ALT . match_arm [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## nonempty_list(addpos(preceded(ALT,match_arm))) -> ALT . match_arm nonempty_list(addpos(preceded(ALT,match_arm))) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] @@ -903,22 +897,22 @@ expected the name of the constructor for the enum case in the pattern matching source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION MATCH TRUE WITH YEAR ## -## Ends in an error in state: 186. +## Ends in an error in state: 183. ## -## naked_expression -> naked_expression WITH . constructor_binding [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] -## naked_expression -> MATCH naked_expression WITH . nonempty_list(addpos(preceded(ALT,match_arm))) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> expression WITH . constructor_binding [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS AND ] +## expression -> MATCH expression WITH . nonempty_list(addpos(preceded(ALT,match_arm))) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: -## MATCH naked_expression WITH +## MATCH expression WITH ## expected a pattern matching case source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION MATCH YEAR ## -## Ends in an error in state: 42. +## Ends in an error in state: 50. ## -## naked_expression -> MATCH . naked_expression WITH nonempty_list(addpos(preceded(ALT,match_arm))) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] +## expression -> MATCH . expression WITH nonempty_list(addpos(preceded(ALT,match_arm))) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## ## The known suffix of the stack is as follows: ## MATCH @@ -926,54 +920,42 @@ source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION MATCH YEAR expected an expression to match with -source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION TRUE DOT UIDENT DOT YEAR -## -## Ends in an error in state: 101. -## -## naked_expression -> naked_expression DOT constructor DOT . ident [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] -## -## The known suffix of the stack is as follows: -## naked_expression DOT constructor DOT -## - -expected the rest of the path after the dot source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION TRUE YEAR ## -## Ends in an error in state: 218. +## Ends in an error in state: 216. ## -## naked_expression -> naked_expression . DOT ident [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . DOT constructor DOT ident [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . OF naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . WITH constructor_binding [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . CONTAINS naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . FOR ident AMONG naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . MULT naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . DIV naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . PLUS naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . MINUS naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . PLUSPLUS naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . LESSER naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . LESSER_EQUAL naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . GREATER naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . GREATER_EQUAL naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . EQUAL naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . NOT_EQUAL naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . AND naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . OR naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . XOR naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## naked_expression -> naked_expression . FOR ident AMONG naked_expression SUCH THAT naked_expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] -## scope_use_condition -> UNDER_CONDITION naked_expression . [ COLON ] +## expression -> expression . DOT qlident [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . OF expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . WITH constructor_binding [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . CONTAINS expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . FOR lident AMONG expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . MULT expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . DIV expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . PLUS expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . MINUS expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . PLUSPLUS expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . LESSER expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . LESSER_EQUAL expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . GREATER expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . GREATER_EQUAL expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . EQUAL expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . NOT_EQUAL expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . AND expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . OR expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . XOR expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## expression -> expression . FOR lident AMONG expression SUCH THAT expression [ XOR WITH PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER GREATER_EQUAL GREATER FOR EQUAL DOT DIV CONTAINS COLON AND ] +## option(preceded(UNDER_CONDITION,expression)) -> UNDER_CONDITION expression . [ COLON ] ## ## The known suffix of the stack is as follows: -## UNDER_CONDITION naked_expression +## UNDER_CONDITION expression ## expected the function application operator source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION BAR YEAR ## -## Ends in an error in state: 68. +## Ends in an error in state: 76. ## ## literal -> BAR . DATE_LITERAL BAR [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RPAREN RBRACKET RBRACE PLUSPLUS PLUS OR OF NOT_EQUAL MULT MINUS LESSER_EQUAL LESSER LABEL IS INCREASING IN GREATER_EQUAL GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIV DEFINITION DECREASING DECLARATION CONTAINS CONSEQUENCE COLON ASSERTION AND ALT ] ## @@ -985,9 +967,9 @@ expected the year for this date literal source_file: BEGIN_CODE SCOPE UIDENT UNDER_CONDITION YEAR ## -## Ends in an error in state: 10. +## Ends in an error in state: 9. ## -## scope_use_condition -> UNDER_CONDITION . naked_expression [ COLON ] +## option(preceded(UNDER_CONDITION,expression)) -> UNDER_CONDITION . expression [ COLON ] ## ## The known suffix of the stack is as follows: ## UNDER_CONDITION @@ -997,12 +979,12 @@ expected an expression source_file: BEGIN_CODE SCOPE UIDENT YEAR ## -## Ends in an error in state: 9. +## Ends in an error in state: 8. ## -## code_item -> SCOPE constructor . option(scope_use_condition) COLON nonempty_list(scope_item) [ SCOPE END_CODE DECLARATION ] +## code_item -> SCOPE UIDENT . option(preceded(UNDER_CONDITION,expression)) COLON nonempty_list(addpos(scope_item)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: -## SCOPE constructor +## SCOPE UIDENT ## expected a scope use condition or the content of this scope use @@ -1011,7 +993,7 @@ source_file: BEGIN_CODE SCOPE YEAR ## ## Ends in an error in state: 7. ## -## code_item -> SCOPE . constructor option(scope_use_condition) COLON nonempty_list(scope_item) [ SCOPE END_CODE DECLARATION ] +## code_item -> SCOPE . UIDENT option(preceded(UNDER_CONDITION,expression)) COLON nonempty_list(addpos(scope_item)) [ SCOPE END_CODE DECLARATION ] ## ## The known suffix of the stack is as follows: ## SCOPE @@ -1021,7 +1003,7 @@ expected the name of the scope being used source_file: BEGIN_CODE YEAR ## -## Ends in an error in state: 358. +## Ends in an error in state: 353. ## ## source_file_item -> BEGIN_CODE . code END_CODE [ LAW_TEXT LAW_HEADING EOF BEGIN_METADATA BEGIN_DIRECTIVE BEGIN_CODE ] ## diff --git a/compiler/surface/parser.mly b/compiler/surface/parser.mly index c9fb4b7a..5c3f7670 100644 --- a/compiler/surface/parser.mly +++ b/compiler/surface/parser.mly @@ -25,10 +25,6 @@ val lex_builtin: string -> Ast.builtin_expression option end> -%type source_file - -%start source_file - (* The token is returned for every line of law text, make them right-associative so that we concat them efficiently as much as possible. *) %right LAW_TEXT @@ -37,18 +33,75 @@ end> %right top_expr %right ALT %right let_expr IS -%right AND OR XOR +%right AND OR XOR (* Desugaring enforces proper parens later on *) %nonassoc GREATER GREATER_EQUAL LESSER LESSER_EQUAL EQUAL NOT_EQUAL %left PLUS MINUS PLUSPLUS %left MULT DIV %right apply OF CONTAINS FOR SUCH WITH %right unop_expr %right CONTENT +%nonassoc UIDENT %left DOT + +(* Types of all rules, in order. Without this, Menhir type errors are nearly + impossible to debug because of inlining *) + +%type addpos(UIDENT) +%type pos(CONDITION) +%type typ_base +%type typ +%type uident +%type lident +%type scope_var +%type quident +%type qlident +%type expression +%type naked_expression +%type struct_content_field +%type struct_or_enum_inject +%type num_literal +%type unit_literal +%type literal +%type<(Ast.lident Marked.pos * expression) list> scope_call_args +%type minmax +%type unop +%type binop +%type constructor_binding +%type match_arm +%type condition_consequence +%type rule_expr +%type rule_consequence +%type rule +%type definition_parameters +%type label +%type state +%type exception_to +%type definition +%type variation_type +%type assertion +%type scope_item +%type struct_scope_base +%type struct_scope_func +%type struct_scope +%type scope_decl_item_attribute_input +%type scope_decl_item_attribute_output +%type scope_decl_item_attribute +%type scope_decl_item +%type enum_decl_line +%type code_item +%type code +%type metadata_block +%type law_heading +%type law_text +%type source_file_item +%type source_file + +%start source_file + %% let pos(x) == -| ~=x ; { Pos.from_lpos $loc } +| x ; { Pos.from_lpos $loc } let addpos(x) == | ~=x ; { x, Pos.from_lpos $loc(x) } @@ -61,41 +114,59 @@ let typ_base := | TEXT ; { Text } | DECIMAL ; { Decimal } | DATE ; { Date } -| c = UIDENT ; +| c = quident ; { let path, uid = c in Named (path, uid) } let typ := | t = typ_base ; | COLLECTION ; t = addpos(typ) ; -let qident == -| b = separated_nonempty_list(DOT, ident) ; <> +let uident == +| ~ = addpos(UIDENT) ; <> -(* let path := - * | { [] } %prec qpath - * | ~=constructor ; DOT ; ~=path ; %prec qpath *) -(* Not yet supported, at the moment it's just an option: *) -let path == -| { None } -| ~=constructor ; DOT ; +let lident := +| i = LIDENT ; { + match Localisation.lex_builtin i with + | Some _ -> + Errors.raise_spanned_error + (Pos.from_lpos $sloc) + "Reserved builtin name" + | None -> + (i, Pos.from_lpos $sloc) +} -let expression == -| e = addpos(naked_expression) ; { (e: expression) } +let scope_var == +| b = separated_nonempty_list(DOT, addpos(LIDENT)) ; <> -let naked_expression := -| q = LIDENT ; { - (match Localisation.lex_builtin q with - | Some b -> Builtin b - | None -> Ident q) +let quident := +| uid = uident ; DOT ; quid = quident ; { + let path, quid = quid in uid :: path, quid +} +| id = uident ; { [], id } + +let qlident := +| uid = uident ; DOT ; qlid = qlident ; { + let path, lid = qlid in uid :: path, lid +} +| id = lident ; { [], id } + +let expression := +| e = addpos(naked_expression) ; <> + +let naked_expression == +| id = addpos(LIDENT) ; { + match Localisation.lex_builtin (Marked.unmark id) with + | Some b -> Builtin b + | None -> Ident ([], id) +} +| uid = uident ; DOT ; qlid = qlident ; { + let path, lid = qlid in Ident (uid :: path, lid) } | l = literal ; { Literal l } | LPAREN ; e = expression ; RPAREN ; | e = expression ; - DOT ; c = path ; - i = ident ; { - Dotted (e, c, i) -} + DOT ; i = addpos(qlident) ; | CARDINAL ; { Builtin Cardinal } @@ -105,9 +176,8 @@ let naked_expression := | MONEY ; { Builtin ToMoney } -| LBRACKET ; l = separated_list(SEMICOLON, expression) ; RBRACKET ; { - ArrayLit l -} +| LBRACKET ; l = separated_list(SEMICOLON, expression) ; RBRACKET ; + | e = struct_or_enum_inject ; <> | e1 = expression ; OF ; @@ -115,7 +185,7 @@ let naked_expression := FunCall (e1, e2) } %prec apply | OUTPUT ; OF ; - c = constructor ; + c = addpos(quident) ; fields = option(scope_call_args) ; { let fields = Option.value ~default:[] fields in ScopeCall (c, fields) @@ -134,7 +204,7 @@ let naked_expression := CollectionOp (AggregateSum { typ = Marked.unmark typ }, coll) } %prec apply | f = expression ; - FOR ; i = ident ; + FOR ; i = lident ; AMONG ; coll = expression ; { CollectionOp (Map {f = i, f}, coll) } %prec apply @@ -144,7 +214,7 @@ let naked_expression := default = expression ; { CollectionOp (AggregateExtremum { max; default }, coll) } %prec apply -| op = unop ; e = expression ; { +| op = addpos(unop) ; e = expression ; { Unop (op, e) } %prec unop_expr | e1 = expression ; @@ -152,12 +222,12 @@ let naked_expression := e2 = expression ; { Binop (binop, e1, e2) } -| EXISTS ; i = ident ; +| EXISTS ; i = lident ; AMONG ; coll = expression ; SUCH ; THAT ; predicate = expression ; { CollectionOp (Exists {predicate = i, predicate}, coll) } %prec let_expr -| FOR ; ALL ; i = ident ; +| FOR ; ALL ; i = lident ; AMONG ; coll = expression ; WE_HAVE ; predicate = expression ; { CollectionOp (Forall {predicate = i, predicate}, coll) @@ -172,23 +242,23 @@ let naked_expression := ELSE ; e3 = expression ; { IfThenElse (e1, e2, e3) } %prec let_expr -| LET ; id = ident ; +| LET ; id = lident ; DEFINED_AS ; e1 = expression ; IN ; e2 = expression ; { LetIn (id, e1, e2) } %prec let_expr -| i = ident ; +| i = lident ; AMONG ; coll = expression ; SUCH ; THAT ; f = expression ; { CollectionOp (Filter {f = i, f}, coll) } %prec top_expr | fmap = expression ; - FOR ; i = ident ; + FOR ; i = lident ; AMONG ; coll = expression ; SUCH ; THAT ; ffilt = expression ; { CollectionOp (Map {f = i, fmap}, (CollectionOp (Filter {f = i, ffilt}, coll), Pos.from_lpos $loc)) } %prec top_expr -| i = ident ; +| i = lident ; AMONG ; coll = expression ; SUCH ; THAT ; f = expression ; IS ; max = minmax ; @@ -198,20 +268,14 @@ let naked_expression := let struct_content_field := -| field = ident ; COLON ; e = expression ; <> - -let enum_content_opt := -| {None} %prec CONTENT -| CONTENT ; ~ = expression ; %prec CONTENT +| field = lident ; COLON ; e = expression ; <> let struct_or_enum_inject == -| ~ = path ; - ~ = constructor ; - data = enum_content_opt ; { - EnumInject(path, constructor, data) +| uid = addpos(quident) ; + data = option(preceded(CONTENT,expression)) ; { + EnumInject(uid, data) } -| _ = path ; - c = constructor ; +| c = addpos(quident) ; LBRACE ; fields = nonempty_list(preceded(ALT, struct_content_field)) ; RBRACE ; { @@ -263,8 +327,8 @@ let minmax == | MINIMUM ; { false } let unop == -| NOT ; { (Not, Pos.from_lpos $sloc) } -| k = MINUS ; { (Minus k, Pos.from_lpos $sloc) } +| NOT ; { Not } +| k = MINUS ; let binop == | k = MULT ; @@ -283,11 +347,11 @@ let binop == | XOR ; { Xor } let constructor_binding := -| ~ = path; ~ = constructor ; OF ; ~ = ident ; { - ([path, constructor], Some ident) +| uid = addpos(quident) ; OF ; lid = lident ; { + ([uid], Some lid) } -| ~ = path; ~ = constructor ; { - ([path, constructor], None) +| uid = addpos(quident) ; { + ([uid], None) } %prec apply let match_arm := @@ -301,14 +365,11 @@ let match_arm := } } %prec ALT -let condition == -| UNDER_CONDITION ; e = expression ; <> - let condition_consequence := -| cond = condition ; CONSEQUENCE ; { cond } +| UNDER_CONDITION ; c = expression ; CONSEQUENCE ; <> let rule_expr := -| i = addpos(qident) ; p = option(definition_parameters) ; <> +| i = addpos(scope_var) ; p = option(definition_parameters) ; <> let rule_consequence := | flag = option(NOT); FILLED ; { @@ -340,20 +401,20 @@ let rule := Pos.from_lpos $sloc); rule_consequence = cons; rule_state = state; - }, $sloc + } } let definition_parameters := -| OF ; i = ident ; { i } +| OF ; i = lident ; <> let label := -| LABEL ; i = ident ; { i } +| LABEL ; i = lident ; <> let state := -| STATE ; s = ident ; { s } +| STATE ; s = lident ; <> let exception_to := -| EXCEPTION ; i = option(ident) ; { +| EXCEPTION ; i = option(lident) ; { match i with | None -> UnlabeledException | Some x -> ExceptionToLabel x @@ -363,7 +424,7 @@ let definition := | label = option(label); except = option(exception_to) ; DEFINITION ; - name = addpos(qident) ; + name = addpos(scope_var) ; param = option(definition_parameters) ; state = option(state) ; cond = option(condition_consequence) ; @@ -385,70 +446,47 @@ let definition := Pos.from_lpos $sloc); definition_expr = e; definition_state = state; - }, $sloc + } } let variation_type := -| INCREASING ; { (Increasing, Pos.from_lpos $sloc) } -| DECREASING ; { (Decreasing, Pos.from_lpos $sloc) } - -let assertion_base := -| e = expression ; { let (e, _) = e in (e, Pos.from_lpos $sloc) } +| INCREASING ; { Increasing } +| DECREASING ; { Decreasing } let assertion := | cond = option(condition_consequence) ; - base = assertion_base ; { + base = expression ; { (Assertion { assertion_condition = cond; assertion_content = base; }) } -| FIXED ; q = addpos(qident) ; BY ; i = ident ; { +| FIXED ; q = addpos(scope_var) ; BY ; i = lident ; { MetaAssertion (FixedBy (q, i)) } -| VARIES ; q = addpos(qident) ; +| VARIES ; q = addpos(scope_var) ; WITH_V ; e = expression ; - t = option(variation_type) ; { + t = option(addpos(variation_type)) ; { MetaAssertion (VariesWith (q, e, t)) } let scope_item := -| r = rule ; { - let (r, _) = r in (Rule r, Pos.from_lpos $sloc) -} -| d = definition ; { - let (d, _) = d in (Definition d, Pos.from_lpos $sloc) -} -| ASSERTION ; contents = assertion ; { - (contents, Pos.from_lpos $sloc) -} - -let ident := -| i = LIDENT ; { - match Localisation.lex_builtin i with - | Some _ -> - Errors.raise_spanned_error - (Pos.from_lpos $sloc) - "Reserved builtin name" - | None -> - (i, Pos.from_lpos $sloc) -} - -let condition_pos := -| CONDITION ; { Pos.from_lpos $sloc } +| r = rule ; +| d = definition ; +| ASSERTION ; contents = assertion ; <> let struct_scope_base := -| DATA ; i = ident ; +| DATA ; i = lident ; CONTENT ; t = addpos(typ) ; { let t, pos = t in (i, (Data t, pos)) } -| pos = condition_pos ; i = ident ; { +| pos = pos(CONDITION) ; i = lident ; { (i, (Condition, pos)) } let struct_scope_func == -| DEPENDS ; t = addpos(typ) ; { t } +| DEPENDS ; t = addpos(typ) ; <> let struct_scope := | name_and_typ = struct_scope_base ; @@ -464,20 +502,20 @@ let struct_scope := arg_typ = (Data arg_typ, arg_pos); return_typ = (typ, typ_pos); }, Pos.from_lpos $sloc ; - }, Pos.from_lpos $sloc + } } let scope_decl_item_attribute_input := -| CONTEXT ; { Context, Pos.from_lpos $sloc } -| INPUT ; { Input, Pos.from_lpos $sloc } +| CONTEXT ; { Context } +| INPUT ; { Input } let scope_decl_item_attribute_output := -| OUTPUT ; { true, Pos.from_lpos $sloc } -| { false, Pos.from_lpos $sloc } +| OUTPUT ; { true } +| { false } let scope_decl_item_attribute := -| input = scope_decl_item_attribute_input ; - output = scope_decl_item_attribute_output ; { +| input = addpos(scope_decl_item_attribute_input) ; + output = addpos(scope_decl_item_attribute_output) ; { { scope_decl_context_io_input = input; scope_decl_context_io_output = output @@ -499,11 +537,11 @@ let scope_decl_item_attribute := let scope_decl_item := | attr = scope_decl_item_attribute ; - i = ident ; + i = lident ; CONTENT ; t = addpos(typ) ; func_typ = option(struct_scope_func) ; states = list(state) ; { - (ContextData { + ContextData { scope_decl_context_item_name = i; scope_decl_context_item_attribute = attr; scope_decl_context_item_typ = @@ -516,21 +554,21 @@ let scope_decl_item := return_typ = (Data typ, typ_pos); }, Pos.from_lpos $sloc); scope_decl_context_item_states = states; - }, Pos.from_lpos $sloc) + } } -| i = ident ; SCOPE ; c = constructor ; { - (ContextScope{ +| i = lident ; SCOPE ; c = uident ; { + ContextScope{ scope_decl_context_scope_name = i; scope_decl_context_scope_sub_scope = c; scope_decl_context_scope_attribute = { scope_decl_context_io_input = (Internal, Pos.from_lpos $sloc); scope_decl_context_io_output = (false, Pos.from_lpos $sloc); }; - }, Pos.from_lpos $sloc) + } } | attr = scope_decl_item_attribute ; - i = ident ; - _condition = CONDITION ; + i = lident ; + pos_condition = pos(CONDITION) ; func_typ = option(struct_scope_func) ; states = list(state) ; { ContextData { @@ -538,73 +576,66 @@ let scope_decl_item := scope_decl_context_item_attribute = attr; scope_decl_context_item_typ = (match func_typ with - | None -> (Base (Condition), Pos.from_lpos $loc(_condition)) + | None -> (Base (Condition), pos_condition) | Some (arg_typ, arg_pos) -> Func { arg_typ = (Data arg_typ, arg_pos); - return_typ = (Condition, Pos.from_lpos $loc(_condition)); + return_typ = (Condition, pos_condition); }, Pos.from_lpos $sloc); scope_decl_context_item_states = states; - }, Pos.from_lpos $sloc + } } let enum_decl_line := -| ALT ; c = constructor ; +| ALT ; c = uident ; t = option(preceded(CONTENT,addpos(typ))) ; { { enum_decl_case_name = c; enum_decl_case_typ = Option.map (fun (t, t_pos) -> Base (Data t), t_pos) t; - }, Pos.from_lpos $sloc + } } -let constructor := -| ~ = addpos(UIDENT) ; <> - -let scope_use_condition := -| UNDER_CONDITION ; e = expression ; <> - let code_item := -| SCOPE ; c = constructor ; - e = option(scope_use_condition) ; - COLON ; items = nonempty_list(scope_item) ; { - (ScopeUse { +| SCOPE ; c = uident ; + e = option(preceded(UNDER_CONDITION,expression)) ; + COLON ; items = nonempty_list(addpos(scope_item)) ; { + ScopeUse { scope_use_name = c; scope_use_condition = e; scope_use_items = items; - }, Pos.from_lpos $sloc) + } } -| DECLARATION ; STRUCT ; c = constructor ; - COLON ; scopes = list(struct_scope) ; { - (StructDecl { +| DECLARATION ; STRUCT ; c = uident ; + COLON ; scopes = list(addpos(struct_scope)) ; { + StructDecl { struct_decl_name = c; struct_decl_fields = scopes; - }, Pos.from_lpos $sloc) + } } -| DECLARATION ; SCOPE ; c = constructor ; - COLON ; context = nonempty_list(scope_decl_item) ; { - (ScopeDecl { +| DECLARATION ; SCOPE ; c = uident ; + COLON ; context = nonempty_list(addpos(scope_decl_item)) ; { + ScopeDecl { scope_decl_name = c; scope_decl_context = context; - }, Pos.from_lpos $sloc) + } } -| DECLARATION ; ENUM ; c = constructor ; - COLON ; cases = list(enum_decl_line) ; { - (EnumDecl { +| DECLARATION ; ENUM ; c = uident ; + COLON ; cases = list(addpos(enum_decl_line)) ; { + EnumDecl { enum_decl_name = c; enum_decl_cases = cases; - }, Pos.from_lpos $sloc) + } } let code := -| code = list(code_item) ; { (code, Pos.from_lpos $sloc) } +| code = list(addpos(code_item)) ; <> let metadata_block := | BEGIN_METADATA ; option(law_text) ; - code_and_pos = code ; + ~ = code ; text = END_CODE ; { - let (code, _) = code_and_pos in - (code, (text, Pos.from_lpos $sloc)) + (code, (text, Pos.from_lpos $sloc)) } let law_heading := @@ -623,9 +654,8 @@ let law_text := let source_file_item := | text = law_text ; { LawText text } | BEGIN_CODE ; - code_and_pos = code ; + ~ = code ; text = END_CODE ; { - let (code, _) = code_and_pos in CodeBlock (code, (text, Pos.from_lpos $sloc), false) } | heading = law_heading ; { diff --git a/compiler/surface/print.ml b/compiler/surface/print.ml index 50a8d183..a439fc45 100644 --- a/compiler/surface/print.ml +++ b/compiler/surface/print.ml @@ -14,15 +14,22 @@ License for the specific language governing permissions and limitations under the License. *) +open Catala_utils open Ast let format_primitive_typ (fmt : Format.formatter) (t : primitive_typ) : unit = match t with - | Integer -> Format.fprintf fmt "integer" - | Decimal -> Format.fprintf fmt "decimal" - | Boolean -> Format.fprintf fmt "boolean" - | Money -> Format.fprintf fmt "money" - | Duration -> Format.fprintf fmt "duration" - | Text -> Format.fprintf fmt "text" - | Date -> Format.fprintf fmt "date" - | Named constructor -> Format.fprintf fmt "%s" constructor + | Integer -> Format.pp_print_string fmt "integer" + | Decimal -> Format.pp_print_string fmt "decimal" + | Boolean -> Format.pp_print_string fmt "boolean" + | Money -> Format.pp_print_string fmt "money" + | Duration -> Format.pp_print_string fmt "duration" + | Text -> Format.pp_print_string fmt "text" + | Date -> Format.pp_print_string fmt "date" + | Named (path, constructor) -> + Format.fprintf fmt "%a.%s" + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.pp_print_char fmt '.') + (fun fmt (uid, _pos) -> Format.pp_print_string fmt uid)) + path + (Marked.unmark constructor) diff --git a/examples/aides_logement/prologue.catala_fr b/examples/aides_logement/prologue.catala_fr index 8a49a5d6..c52c7a80 100644 --- a/examples/aides_logement/prologue.catala_fr +++ b/examples/aides_logement/prologue.catala_fr @@ -341,8 +341,7 @@ champ d'application ÉligibilitéAidesPersonnelleLogement: -- GardeAlternéeCoefficientPriseEnCharge de coeff: coeff -- PasDeGardeAlternée: 0,0 )) - pour personne_à_charge parmi ( - personne_à_charge parmi personnes_à_charge_prises_en_compte + pour personne_à_charge parmi personnes_à_charge_prises_en_compte tel que (selon personne_à_charge sous forme -- AutrePersonneÀCharge: faux @@ -350,7 +349,7 @@ champ d'application ÉligibilitéAidesPersonnelleLogement: selon enfant.situation_garde_alternée sous forme -- GardeAlternéeCoefficientPriseEnCharge: vrai -- PasDeGardeAlternée: faux - )))) + ))) ``` ### Éligibilité à l'aide personnalisée au logement