From 47ca11fd7160974874355185b204e3887053ca47 Mon Sep 17 00:00:00 2001 From: Nicolas Berthier Date: Tue, 19 Sep 2023 10:20:31 +0200 Subject: [PATCH 01/12] Move stack of lexical contexts to preprocessor record in parser engine --- src/lsp/cobol_parser/parser_engine.ml | 36 +++++++++++++-------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/lsp/cobol_parser/parser_engine.ml b/src/lsp/cobol_parser/parser_engine.ml index fe1f48854..88042c163 100644 --- a/src/lsp/cobol_parser/parser_engine.ml +++ b/src/lsp/cobol_parser/parser_engine.ml @@ -50,18 +50,20 @@ module Make (Config: Cobol_config.T) = struct prev_limit': Cobol_preproc.Src_overlay.limit option; (* second-to-last *) preproc: 'm preproc; } + + (** Part of the parser state that typically changes on a sentence-by-sentence + basis (mostly the pre-processor and tokenizer's states). *) and 'm preproc = - (** state that typically change on a sentence-by-sentence basis (mostly the - pre-processor and tokenizer's states) *) { - tokzr: 'm Tokzr.state; pp: Cobol_preproc.preprocessor; (* also holds diagnistics *) + tokzr: 'm Tokzr.state; + context_stack: Context.stack; persist: 'm persist; } + + (** Part of the parser state that changes very rarely, if at all. *) and 'm persist = - (** state that change very rarely, if at all *) { - context_stack: Context.stack; recovery: recovery; tokenizer_memory: 'm memory; verbose: bool; @@ -95,9 +97,9 @@ module Make (Config: Cobol_config.T) = struct { pp; tokzr; + context_stack = Context.empty_stack; persist = { - context_stack = Context.empty_stack; recovery; tokenizer_memory; verbose; @@ -147,7 +149,6 @@ module Make (Config: Cobol_config.T) = struct let update_context_stack ~stack_update ~tokenizer_update ({ preproc; _ } as ps) tokens : Context.t list -> 's * 'a = - let { tokzr; persist; _ } = preproc in function | [] -> ps, tokens @@ -156,19 +157,17 @@ module Make (Config: Cobol_config.T) = struct List.fold_left begin fun (context_stack, set) ctx -> let context_stack, set' = stack_update context_stack ctx in context_stack, Text_lexer.TokenHandles.union set set' - end (persist.context_stack, Text_lexer.TokenHandles.empty) contexts + end (preproc.context_stack, Text_lexer.TokenHandles.empty) contexts in (* Update tokenizer state *) - let tokzr, tokens = tokenizer_update tokzr tokens tokens_set in + let tokzr, tokens = tokenizer_update preproc.tokzr tokens tokens_set in if show `Tks ps then Pretty.error "Tks': %a@." Text_tokenizer.pp_tokens tokens; - (if context_stack == persist.context_stack && tokzr == preproc.tokzr + (if context_stack == preproc.context_stack && tokzr == preproc.tokzr then ps - else { ps with - preproc = { preproc with - tokzr; persist = { persist with context_stack }}}), + else { ps with preproc = { preproc with tokzr; context_stack }}), tokens (** Use recovery trace (assumptions on missing tokens) to generate syntax @@ -243,7 +242,7 @@ module Make (Config: Cobol_config.T) = struct in let leaving_context ps prod = - match Context.top ps.preproc.persist.context_stack with + match Context.top ps.preproc.context_stack with | None -> false (* first filter *) | Some top_ctx -> match Grammar_interpr.lhs prod with @@ -253,14 +252,13 @@ module Make (Config: Cobol_config.T) = struct | _ -> false in - let pop_context ({ preproc = { tokzr; persist; _ }; _ } as ps) tokens = - let context_stack, tokens_set = Context.pop persist.context_stack in + let pop_context ({ preproc = { tokzr; context_stack; _ }; _ } as ps) + tokens = + let context_stack, tokens_set = Context.pop context_stack in if show `Ctx ps then Pretty.error "Outgoing: %a@." Context.pp_context tokens_set; let tokzr, tokens = Tokzr.disable_tokens tokzr tokens tokens_set in - { ps with - preproc = { ps.preproc with - tokzr; persist = { persist with context_stack }}}, + { ps with preproc = { ps.preproc with tokzr; context_stack }}, tokens in From 9ef4bab83fad214f05d578d18b093956bfbe1f53 Mon Sep 17 00:00:00 2001 From: Nicolas Berthier Date: Fri, 22 Sep 2023 09:36:47 +0200 Subject: [PATCH 02/12] Rewindable parsing This commit adds the ability to restart parsing only a few tokens before any document change. This should greatly improve performance, especially when editing the middle or end of large files. --- src/lsp/cobol_common/diagnostics.ml | 2 + src/lsp/cobol_common/diagnostics.mli | 2 + src/lsp/cobol_lsp/lsp_completion_keywords.ml | 3 +- src/lsp/cobol_lsp/lsp_document.ml | 190 ++++-- src/lsp/cobol_lsp/lsp_notif.ml | 6 +- src/lsp/cobol_lsp/lsp_request.ml | 2 +- src/lsp/cobol_lsp/lsp_semtoks.ml | 2 +- src/lsp/cobol_lsp/lsp_semtoks.mli | 2 +- src/lsp/cobol_lsp/lsp_server.ml | 42 +- src/lsp/cobol_lsp/lsp_server.mli | 6 +- src/lsp/cobol_parser/cobol_parser.ml | 37 +- src/lsp/cobol_parser/context.ml | 3 + src/lsp/cobol_parser/context.mli | 1 + src/lsp/cobol_parser/parser_engine.ml | 664 +++++++++++-------- src/lsp/cobol_parser/parser_engine.mli | 65 +- src/lsp/cobol_parser/parser_options.ml | 29 +- src/lsp/cobol_parser/parser_outputs.ml | 33 + src/lsp/cobol_parser/text_tokenizer.ml | 2 +- src/lsp/cobol_preproc/preproc.ml | 28 +- src/lsp/cobol_preproc/preproc.mli | 31 + src/lsp/cobol_preproc/preproc_engine.ml | 38 +- src/lsp/cobol_preproc/preproc_engine.mli | 19 +- src/lsp/cobol_preproc/src_lexing.ml | 13 +- src/lsp/cobol_preproc/src_lexing.mli | 1 + src/lsp/cobol_preproc/src_overlay.ml | 4 +- src/lsp/cobol_typeck/cobol_typeck.ml | 14 +- src/lsp/cobol_typeck/cobol_typeck.mli | 6 +- src/lsp/superbol_free_lib/command_pp.ml | 131 ++-- src/lsp/superbol_free_lib/common_args.ml | 14 +- src/lsp/superbol_free_lib/common_args.mli | 4 +- test/cobol_parsing/parser_testing.ml | 19 +- test/lsp/lsp_testing.ml | 2 +- test/output-tests/gnucobol.ml | 19 +- test/output-tests/reparse.ml | 19 +- 34 files changed, 929 insertions(+), 524 deletions(-) create mode 100644 src/lsp/cobol_parser/parser_outputs.ml diff --git a/src/lsp/cobol_common/diagnostics.ml b/src/lsp/cobol_common/diagnostics.ml index 50dc7f212..1b87234bb 100644 --- a/src/lsp/cobol_common/diagnostics.ml +++ b/src/lsp/cobol_common/diagnostics.ml @@ -199,6 +199,8 @@ let simple_result r = result r let some_result ?diags r = result ?diags (Some r) let no_result ~diags = { result = None; diags } let map_result f { result; diags } = { result = f result; diags } +let more_result f { result; diags } = with_more_diags ~diags (f result) +let forget_result { diags; _ } = diags let hint_result r = Cont.khint (with_diag r) let note_result r = Cont.knote (with_diag r) diff --git a/src/lsp/cobol_common/diagnostics.mli b/src/lsp/cobol_common/diagnostics.mli index cd1eac3f7..6ed202ca4 100644 --- a/src/lsp/cobol_common/diagnostics.mli +++ b/src/lsp/cobol_common/diagnostics.mli @@ -108,6 +108,8 @@ val simple_result: 'a -> 'a with_diags val some_result: ?diags:diagnostics -> 'a -> 'a option with_diags val no_result: diags:diagnostics -> _ option with_diags val map_result: ('a -> 'b) -> 'a with_diags -> 'b with_diags +val more_result: ('a -> 'b with_diags) -> 'a with_diags -> 'b with_diags +val forget_result: _ with_diags -> diagnostics val hint_result: 'a -> ?loc:Srcloc.srcloc -> ('b, 'a with_diags) Pretty.func val note_result: 'a -> ?loc:Srcloc.srcloc -> ('b, 'a with_diags) Pretty.func diff --git a/src/lsp/cobol_lsp/lsp_completion_keywords.ml b/src/lsp/cobol_lsp/lsp_completion_keywords.ml index 93744e549..87af7db46 100644 --- a/src/lsp/cobol_lsp/lsp_completion_keywords.ml +++ b/src/lsp/cobol_lsp/lsp_completion_keywords.ml @@ -13,7 +13,7 @@ (* open Cobol_common.Basics *) -let keywords_all = fst @@ List.split Cobol_parser.Text_keywords.keywords +let keywords_all = fst @@ List.split Cobol_parser.Keywords.keywords (* TODO: Too many keywords, hard to classification *) @@ -326,4 +326,3 @@ let keywords_data = [ let keywords_data = StringSet.elements @@ StringSet.of_list keywords_data let keywords_proc = StringSet.elements @@ StringSet.of_list (keywords_proc @ keywords_proc_other) *) - diff --git a/src/lsp/cobol_lsp/lsp_document.ml b/src/lsp/cobol_lsp/lsp_document.ml index 9c93566f4..47ae1fbb0 100644 --- a/src/lsp/cobol_lsp/lsp_document.ml +++ b/src/lsp/cobol_lsp/lsp_document.ml @@ -25,8 +25,9 @@ module TYPES = struct project: Lsp_project.t; textdoc: Lsp.Text_document.t; copybook: bool; - artifacts: Cobol_parser.parsing_artifacts; + artifacts: Cobol_parser.Outputs.artifacts; parsed: parsed_data option; + rewinder: rewinder option; (* Used for caching, when loading a cache file as the file is not reparsed, then diagnostics are not sent. *) diags: DIAGS.Set.t; @@ -40,11 +41,19 @@ module TYPES = struct definitions: name_definitions_in_compilation_unit CUMap.t Lazy.t; references: name_references_in_compilation_unit CUMap.t Lazy.t; } + and rewinder = + (PTREE.compilation_group option, + Cobol_common.Behaviors.eidetic) Cobol_parser.Outputs.output + Cobol_parser.rewinder (** Raised by {!retrieve_parsed_data}. *) exception Unparseable of Lsp.Types.DocumentUri.t exception Copybook of Lsp.Types.DocumentUri.t + (** Raised by {!load} and {!update}; allows keeping consistent document + contents. *) + exception Internal_error of document * exn + type cached = (** Persistent representation (for caching) *) { doc_cache_filename: string; (* relative to project rootdir *) @@ -52,7 +61,7 @@ module TYPES = struct doc_cache_langid: string; doc_cache_version: int; doc_cache_pplog: Cobol_preproc.log; - doc_cache_tokens: Cobol_parser.tokens_with_locs; + doc_cache_tokens: Cobol_parser.Outputs.tokens_with_locs; doc_cache_comments: Cobol_preproc.comments; doc_cache_parsed: (PTREE.compilation_group * CUs.t) option; doc_cache_diags: DIAGS.Set.serializable; @@ -64,17 +73,33 @@ include TYPES type t = document let uri { textdoc; _ } = Lsp.Text_document.documentUri textdoc -let parse ~project text = - let uri = Lsp.Text_document.documentUri text in - let libpath = Lsp_project.libpath_for ~uri project in - Cobol_parser.parse_with_tokens - (* Recovery policy for the parser: *) - ~recovery:(EnableRecovery { silence_benign_recoveries = true }) - ~source_format:project.source_format - ~config:project.cobol_config - ~libpath - (String { contents = Lsp.Text_document.text text; - filename = Lsp.Uri.to_path uri }) +(* let simple_parse ({ project; textdoc; _ } as doc) = *) +(* Cobol_parser.parse_with_artifacts *) +(* ~options:Cobol_parser.Options.{ *) +(* default with *) +(* recovery = EnableRecovery { silence_benign_recoveries = true }; *) +(* } *) +(* ~config:project.cobol_config @@ *) +(* Cobol_preproc.preprocessor *) +(* { init_libpath = Lsp_project.libpath_for ~uri:(uri doc) project; *) +(* init_config = project.cobol_config; *) +(* init_source_format = project.source_format } @@ *) +(* String { contents = Lsp.Text_document.text textdoc; *) +(* filename = Lsp.Uri.to_path (uri doc) } *) + +let rewindable_parse ({ project; textdoc; _ } as doc) = + Cobol_parser.rewindable_parse_with_artifacts + ~options:Cobol_parser.Options.{ + default with + recovery = EnableRecovery { silence_benign_recoveries = true }; + } + ~config:project.cobol_config @@ + Cobol_preproc.preprocessor + { init_libpath = Lsp_project.libpath_for ~uri:(uri doc) project; + init_config = project.cobol_config; + init_source_format = project.source_format } @@ + String { contents = Lsp.Text_document.text textdoc; + filename = Lsp.Uri.to_path (uri doc) } let lazy_definitions ast cus = lazy begin cus |> @@ -99,28 +124,61 @@ let lazy_references ast cus defs = end CUMap.empty ast end -let no_parsing_artifacts = - Cobol_parser.{ tokens = lazy []; - pplog = Cobol_preproc.Trace.empty; - comments = [] } - -let analyze ({ project; textdoc; copybook; _ } as doc) = - let artifacts, (parsed, diags) = - if copybook then - no_parsing_artifacts, (None, DIAGS.Set.none) - else - let ptree = parse ~project textdoc in - Cobol_parser.parsing_artifacts ptree, - match Cobol_typeck.analyze_compilation_group ptree with - | Ok (cus, ast, diags) -> - let definitions = lazy_definitions ast cus in - let references = lazy_references ast cus definitions in - Some { ast; cus; definitions; references}, diags - | Error diags -> - None, diags (* NB: no token if unrecoverable error (e.g, wrong - indicator) *) +let no_artifacts = + Cobol_parser.Outputs.{ tokens = lazy []; + pplog = Cobol_preproc.Trace.empty; + comments = []; + newline_cnums = [] } + +let gather_parsed_data ptree = + Cobol_typeck.analyze_compilation_group ptree |> + DIAGS.map_result begin function + | Ok (cus, ast) -> + let definitions = lazy_definitions ast cus in + let references = lazy_references ast cus definitions in + Some { ast; cus; definitions; references} + | Error () -> + None + end + +let extract_parsed_infos doc ptree = + let DIAGS.{ result = artifacts, rewinder, parsed; diags} = + DIAGS.more_result begin fun (ptree, rewinder) -> + gather_parsed_data ptree |> + DIAGS.map_result begin fun parsed -> + Cobol_parser.artifacts ptree, Some rewinder, parsed + end + end ptree in - { doc with artifacts; diags; parsed } + { doc with artifacts; rewinder; diags; parsed } + +let parse_and_analyze ({ copybook; _ } as doc) = + if copybook then (* skip *) + { doc with artifacts = no_artifacts; rewinder = None; parsed = None } + else + (* extract_parsed_infos doc @@ simple_parse doc *) + extract_parsed_infos doc @@ rewindable_parse doc + +let reparse_and_analyze ?position ({ copybook; rewinder; textdoc; _ } as doc) = + match position, rewinder with + | None, _ | _, None -> + parse_and_analyze doc + | _, Some _ when copybook -> (* skip *) + { doc with artifacts = no_artifacts; rewinder = None; parsed = None } + | Some position, Some rewinder -> + extract_parsed_infos doc @@ + Cobol_parser.rewind_and_parse rewinder ~position + begin fun ?new_position pp -> + let contents = Lsp.Text_document.text textdoc in + let contents = match new_position with + | None -> contents + | Some (Lexing.{ pos_cnum; _ } as _pos) -> + EzString.after contents (pos_cnum - 1) + in + (* Pretty.error "contents = %S@." contents; *) + Cobol_preproc.reset_preprocessor ?new_position pp + (String { contents; filename = Lsp.Uri.to_path (uri doc) }) + end (** Creates a record for a document that is not yet parsed or analyzed. *) let blank ~project ?copybook textdoc = @@ -132,7 +190,8 @@ let blank ~project ?copybook textdoc = { project; textdoc; - artifacts = no_parsing_artifacts; + artifacts = no_artifacts; + rewinder = None; diags = DIAGS.Set.none; parsed = None; copybook; @@ -141,17 +200,46 @@ let blank ~project ?copybook textdoc = let position_encoding = `UTF8 let load ~project ?copybook doc = - Lsp.Text_document.make ~position_encoding doc - |> blank ~project ?copybook - |> analyze + let textdoc = Lsp.Text_document.make ~position_encoding doc in + let doc = blank ~project ?copybook textdoc in + try parse_and_analyze doc + with e -> raise @@ Internal_error (doc, e) + +let first_change_pos ({ artifacts = { newline_cnums; _ }; _ } as doc) changes = + if newline_cnums = [] then None (* straight out of cache: missing info *) + else + match + List.fold_left begin fun pos -> function + | Lsp.Types.TextDocumentContentChangeEvent.{ range = None; _ } -> + Some (0, 0, 0) (* meaning: full text change *) + | { range = Some { start = { line; character }; _ }; _ } -> + let bol = + try List.nth newline_cnums (line - 1) + with Not_found | Invalid_argument _ -> 0 + in + let cnum = bol + character in + match pos with + | Some (_, _, cnum') when cnum' > cnum -> pos + | _ -> Some (line + 1, bol, cnum) + end None changes + with + | Some (pos_lnum, pos_bol, pos_cnum) -> + Some Lexing.{ pos_fname = Lsp.Uri.to_path (uri doc); + pos_bol; pos_cnum; pos_lnum } + | None -> (* Humm... can |changes|=0 really happen? *) + None -let update { project; textdoc; _ } changes = - (* TODO: Make it not reparse everything when a change occurs. *) - Lsp.Text_document.apply_content_changes textdoc changes - |> blank ~project - |> analyze +let update ({ textdoc; _ } as doc) changes = + let position = first_change_pos doc changes in + let doc = + { doc with + textdoc = Lsp.Text_document.apply_content_changes textdoc changes } + in + try reparse_and_analyze ?position doc + with e -> raise @@ Internal_error (doc, e) -(** Raises {!Unparseable} in case the document cannot be parsed entierely. *) +(** Raises {!Unparseable} in case the document cannot be parsed entierely, or + {!Copybook} in case the document is not a main program. *) let retrieve_parsed_data: document -> parsed_data = function | { parsed = Some p; _ } -> p | { copybook = false; _ } as doc -> raise @@ Unparseable (uri doc) @@ -160,7 +248,7 @@ let retrieve_parsed_data: document -> parsed_data = function (** Caching utilities *) let to_cache ({ project; textdoc; parsed; diags; - artifacts = { pplog; tokens; comments }; _ } as doc) = + artifacts = { pplog; tokens; comments; _ }; _ } as doc) = { doc_cache_filename = Lsp_project.relative_path_for ~uri:(uri doc) project; doc_cache_checksum = Digest.string (Lsp.Text_document.text textdoc); @@ -199,12 +287,16 @@ let of_cache ~project let parsed = Option.map (fun (ast, cus) -> - let definitions = lazy_definitions ast cus in - let references = lazy_references ast cus definitions in - { ast; cus; definitions; references}) + let definitions = lazy_definitions ast cus in + let references = lazy_references ast cus definitions in + { ast; cus; definitions; references }) parsed in - { doc with artifacts = { pplog; tokens = lazy tokens; comments }; + { doc with artifacts = { pplog; tokens = lazy tokens; comments; + (* We leave the folloing out of the cache: only + used upon document update, which should only + happen after a full parse in each session. *) + newline_cnums = [] }; diags = DIAGS.Set.of_serializable diags; parsed } diff --git a/src/lsp/cobol_lsp/lsp_notif.ml b/src/lsp/cobol_lsp/lsp_notif.ml index e865ea291..5cfd01ae3 100644 --- a/src/lsp/cobol_lsp/lsp_notif.ml +++ b/src/lsp/cobol_lsp/lsp_notif.ml @@ -24,11 +24,11 @@ let on_notification state notif = | Initialized config, Initialized -> Running (Lsp_server.init ~config) | Running registry, TextDocumentDidOpen params -> - Running (Lsp_server.add params registry) + Running (Lsp_server.did_open params registry) | Running registry, TextDocumentDidChange params -> - Running (Lsp_server.update params registry) + Running (Lsp_server.did_change params registry) | Running registry, TextDocumentDidClose params -> - Running (Lsp_server.remove params registry) + Running (Lsp_server.did_close params registry) | Running _, Exit -> Exit (Error "Received premature 'exit' notification") | _ -> diff --git a/src/lsp/cobol_lsp/lsp_request.ml b/src/lsp/cobol_lsp/lsp_request.ml index 3fe6a9e8a..39a169cad 100644 --- a/src/lsp/cobol_lsp/lsp_request.ml +++ b/src/lsp/cobol_lsp/lsp_request.ml @@ -214,7 +214,7 @@ let handle_semtoks_full, handle_semtoks_range = let handle registry ?range (doc: TextDocumentIdentifier.t) = try_with_document_data registry doc - ~f:begin fun ~doc:{ artifacts = { pplog; tokens; comments }; + ~f:begin fun ~doc:{ artifacts = { pplog; tokens; comments; _ }; _ } Lsp_document.{ ast; _ } -> let data = Lsp_semtoks.data ~filename:(Lsp.Uri.to_path doc.uri) ~range diff --git a/src/lsp/cobol_lsp/lsp_semtoks.ml b/src/lsp/cobol_lsp/lsp_semtoks.ml index f047f2d80..4b97b22e8 100644 --- a/src/lsp/cobol_lsp/lsp_semtoks.ml +++ b/src/lsp/cobol_lsp/lsp_semtoks.ml @@ -13,7 +13,7 @@ open Cobol_common (* Srcloc, Visitor *) open Cobol_common.Srcloc.INFIX -open Cobol_parser.Grammar_tokens +open Cobol_parser.Tokens module TOKTYP = struct type t = { index: int; name: string } diff --git a/src/lsp/cobol_lsp/lsp_semtoks.mli b/src/lsp/cobol_lsp/lsp_semtoks.mli index e8b35572b..2f719a800 100644 --- a/src/lsp/cobol_lsp/lsp_semtoks.mli +++ b/src/lsp/cobol_lsp/lsp_semtoks.mli @@ -19,7 +19,7 @@ val token_modifiers: string list val data : filename: string -> range: Lsp.Types.Range.t option - -> tokens: Cobol_parser.tokens_with_locs + -> tokens: Cobol_parser.Outputs.tokens_with_locs -> pplog: Cobol_preproc.log -> comments: Cobol_preproc.comments -> ptree: Lsp_imports.PTREE.compilation_group diff --git a/src/lsp/cobol_lsp/lsp_server.ml b/src/lsp/cobol_lsp/lsp_server.ml index 06ab11e8e..37bd846e0 100644 --- a/src/lsp/cobol_lsp/lsp_server.ml +++ b/src/lsp/cobol_lsp/lsp_server.ml @@ -132,8 +132,20 @@ let create_or_retrieve_project ~uri registry = let project = Lsp_project.for_ ~rootdir ~layout in project, add_project project registry -let add (DidOpenTextDocumentParams.{ textDocument = { uri; text; _ }; - _ } as doc) ?copybook registry = +let add (DidOpenTextDocumentParams.{ textDocument = { uri; _ }; _ } as doc) + ?copybook registry = + let project, registry = create_or_retrieve_project ~uri registry in + try + let doc = Lsp_document.load ~project ?copybook doc in + let registry = dispatch_diagnostics doc registry in + add_or_replace_doc doc registry + with Lsp_document.Internal_error (doc, e) -> + Lsp_io.pretty_notification ~log:true ~type_:Error + "Internal error while opening document: %a" Fmt.exn e; + add_or_replace_doc doc registry + +let did_open (DidOpenTextDocumentParams.{ textDocument = { uri; text; _ }; + _ } as doc) ?copybook registry = (* Try first with a lookup for the project in a cache, and then by creating/loading the project. *) let rec aux ~try_cache registry = @@ -152,10 +164,7 @@ let add (DidOpenTextDocumentParams.{ textDocument = { uri; text; _ }; in aux ~try_cache:false registry (* try again without the cache *) | None | Some _ -> - let project, registry = create_or_retrieve_project ~uri registry in - let doc = Lsp_document.load ~project ?copybook doc in - let registry = dispatch_diagnostics doc registry in - add_or_replace_doc doc registry + add doc ?copybook registry in aux ~try_cache:true registry @@ -164,14 +173,19 @@ let find_document (TextDocumentIdentifier.{ uri; _ } as doc) { docs; _ } = try URIMap.find uri docs with Not_found -> raise @@ Document_not_found doc -let update DidChangeTextDocumentParams.{ textDocument = { uri; _ }; - contentChanges; _ } registry = - let doc = find_document TextDocumentIdentifier.{ uri } registry in - let doc = Lsp_document.update doc contentChanges in - let registry = dispatch_diagnostics doc registry in - add_or_replace_doc doc registry - -let remove DidCloseTextDocumentParams.{ textDocument = { uri } } registry = +let did_change DidChangeTextDocumentParams.{ textDocument = { uri; _ }; + contentChanges; _ } registry = + try + let doc = find_document TextDocumentIdentifier.{ uri } registry in + let doc = Lsp_document.update doc contentChanges in + let registry = dispatch_diagnostics doc registry in + add_or_replace_doc doc registry + with Lsp_document.Internal_error (doc, e) -> + Lsp_io.pretty_notification ~log:true ~type_:Error + "Internal error while updating document: %a" Fmt.exn e; + add_or_replace_doc doc registry + +let did_close DidCloseTextDocumentParams.{ textDocument = { uri } } registry = { registry with docs = URIMap.remove uri registry.docs } (** {2 Miscellaneous} *) diff --git a/src/lsp/cobol_lsp/lsp_server.mli b/src/lsp/cobol_lsp/lsp_server.mli index d8f46dc8f..55511d022 100644 --- a/src/lsp/cobol_lsp/lsp_server.mli +++ b/src/lsp/cobol_lsp/lsp_server.mli @@ -63,13 +63,13 @@ val init which case it is not parsed directly as a normal program). When absent, copybook detection is performed via project configuration (see {!Lsp_project.detect_copybook}). *) -val add +val did_open : Lsp.Types.DidOpenTextDocumentParams.t -> ?copybook: bool -> t -> t -val update +val did_change : Lsp.Types.DidChangeTextDocumentParams.t -> t -> t -val remove +val did_close : Lsp.Types.DidCloseTextDocumentParams.t -> t -> t val find_document diff --git a/src/lsp/cobol_parser/cobol_parser.ml b/src/lsp/cobol_parser/cobol_parser.ml index 9cce50219..741d677bb 100644 --- a/src/lsp/cobol_parser/cobol_parser.ml +++ b/src/lsp/cobol_parser/cobol_parser.ml @@ -18,33 +18,18 @@ module PTree = PTree module PTree_visitor = PTree_visitor (** Options to tune the parser engine *) -include Parser_options +module Options = Parser_options -type ('a, 'm) parsed_result = ('a, 'm) Parser_engine.parsed_result = - { - parsed_input: Cobol_preproc.input; - parsed_diags: Cobol_common.Diagnostics.Set.t; - parsed_output: ('a, 'm) Parser_options.output; - } +(** Output types for the engine *) +module Outputs = Parser_outputs -type 'm parsed_compilation_group = - (PTree.compilation_group option, 'm) parsed_result - -(** {1 Exported modules} *) -(*TODO: remove these extra modules once the parser provides the proper tokens.*) -module Grammar_contexts = Grammar_contexts -module Grammar_tokens = Grammar_tokens -module Text_keywords = Text_keywords +module Contexts = Grammar_contexts +module Tokens = Grammar_tokens +module Keywords = Text_keywords (** {1 Exported functions} *) -type 'x source_handling = ?source_format:Cobol_config.source_format_spec -> 'x - -let parse_simple: _ source_handling = Parser_engine.parse_simple -let parse_with_tokens: _ source_handling = Parser_engine.parse_with_tokens -let parsing_artifacts = Parser_engine.parsing_artifacts - -(* --- *) +include Parser_engine (** {1 Modules and functions exported for testing purposes} @@ -53,16 +38,20 @@ let parsing_artifacts = Parser_engine.parsing_artifacts module INTERNAL = struct (** {2 COBOL tokens} *) + module Tokens = Grammar_tokens let pp_token = Text_tokenizer.pp_token let pp_tokens = Text_tokenizer.pp_tokens (** {2 COBOL grammar} *) + module Grammar (* : Grammar_sig.S *) = Grammar - (** {2 Parser with dummy source locations, that can be fed directly with a - list of tokens} *) + (** {2 Dummy parser} *) + + (** Parser with dummy source locations, that can be fed directly with a + list of tokens *) module Dummy = struct module Tags: Cobol_ast.Testing_helpers.TAGS = struct let loc = Cobol_common.Srcloc.raw Lexing.(dummy_pos, dummy_pos) diff --git a/src/lsp/cobol_parser/context.ml b/src/lsp/cobol_parser/context.ml index 4da82f4a6..cb6abfd09 100644 --- a/src/lsp/cobol_parser/context.ml +++ b/src/lsp/cobol_parser/context.ml @@ -85,3 +85,6 @@ let top_tokens: stack -> TH.t = function let pop: stack -> stack * TH.t = function | [] -> Pretty.invalid_arg "Unable to pop on an empty context stack" | { diff; _ } :: tl -> tl, diff + +let all_tokens: stack -> TH.t = + List.fold_left (fun th { diff; _ } -> TH.union th diff) TH.empty diff --git a/src/lsp/cobol_parser/context.mli b/src/lsp/cobol_parser/context.mli index 5d6f9c4d9..4341b11c0 100644 --- a/src/lsp/cobol_parser/context.mli +++ b/src/lsp/cobol_parser/context.mli @@ -30,4 +30,5 @@ val top: stack -> context option (** {3 Context-specific operations} *) val top_tokens: stack -> Text_lexer.TokenHandles.t +val all_tokens: stack -> Text_lexer.TokenHandles.t val pop: stack -> stack * Text_lexer.TokenHandles.t diff --git a/src/lsp/cobol_parser/parser_engine.ml b/src/lsp/cobol_parser/parser_engine.ml index 88042c163..6528ab452 100644 --- a/src/lsp/cobol_parser/parser_engine.ml +++ b/src/lsp/cobol_parser/parser_engine.ml @@ -15,11 +15,40 @@ module DIAGS = Cobol_common.Diagnostics open Cobol_common.Types open Cobol_common.Srcloc.INFIX -include Parser_options (* import types for options *) +open Parser_options (* import types for options *) +open Parser_outputs (* import types for outputs *) +(* Main type definitions *) + +type 'x rewinder = + { + rewind_n_parse: preprocessor_rewind -> position: Lexing.position -> + ('x * ('x rewinder)) with_diags; + } +and preprocessor_rewind = + ?new_position:Lexing.position -> (Cobol_preproc.preprocessor as 'r) -> 'r + +type 'm simple_parsing + = ?options:parser_options + -> ?config:Cobol_config.t + -> Cobol_preproc.preprocessor + -> (PTree.compilation_group option, 'm) output DIAGS.with_diags + +type 'm rewindable_parsing + = ?options:parser_options + -> ?config:Cobol_config.t + -> Cobol_preproc.preprocessor + -> (((PTree.compilation_group option, 'm) output as 'x) * + 'x rewinder) DIAGS.with_diags + +(* --- *) + +(** Parser configuration is mostly to deal with reserved tokens and grammar + post-actions. *) module Make (Config: Cobol_config.T) = struct module Tokzr = Text_tokenizer.Make (Config) + module Post = Grammar_post_actions.Make (Config) module Overlay_manager = Grammar_utils.Overlay_manager module Grammar_interpr = Grammar.MenhirInterpreter module Grammar_recovery = @@ -31,7 +60,6 @@ module Make (Config: Cobol_config.T) = struct | _ -> false end) - module Post = Grammar_post_actions.Make (Config) (** State of the parser. @@ -64,8 +92,8 @@ module Make (Config: Cobol_config.T) = struct (** Part of the parser state that changes very rarely, if at all. *) and 'm persist = { - recovery: recovery; tokenizer_memory: 'm memory; + recovery: recovery; verbose: bool; show_if_verbose: [`Tks | `Ctx] list; show: [`Pending] list; @@ -75,13 +103,9 @@ module Make (Config: Cobol_config.T) = struct context-stack will be needed when we want a persistent parser state. Best place for this is probaly in the tokenizer.*) - let init_parser - ?(verbose = false) - ?(show_if_verbose = [`Tks; `Ctx]) - ?(show = [`Pending]) - (type m) ~(tokenizer_memory: m memory) - ~(recovery: recovery) - pp = + let make_parser + (type m) Parser_options.{ verbose; show; recovery } + ?(show_if_verbose = [`Tks; `Ctx]) ~(tokenizer_memory: m memory) pp = let tokzr: m Tokzr.state = let memory: m Tokzr.memory = match tokenizer_memory with | Parser_options.Amnesic -> Tokzr.amnesic @@ -100,8 +124,8 @@ module Make (Config: Cobol_config.T) = struct context_stack = Context.empty_stack; persist = { - recovery; tokenizer_memory; + recovery; verbose; show_if_verbose; show; @@ -145,8 +169,6 @@ module Make (Config: Cobol_config.T) = struct Pretty.error "Tks: %a@." Text_tokenizer.pp_tokens tokens; update_tokzr ps tokzr, tokens - let state_num env = Grammar_interpr.current_state_number env - let update_context_stack ~stack_update ~tokenizer_update ({ preproc; _ } as ps) tokens : Context.t list -> 's * 'a = function @@ -218,287 +240,397 @@ module Make (Config: Cobol_config.T) = struct (* --- *) - let do_parse: type m. m state -> _ -> _ -> _ * m state = + let rec next_token ({ preproc = { tokzr; _ }; _ } as ps) tokens = + match Tokzr.next_token tokzr tokens with + | Some (tokzr, token, tokens) -> + (update_tokzr ps tokzr, token, tokens) + | None -> + let ps, tokens = produce_tokens ps in + next_token ps tokens + + let token_n_srcloc_limits ?prev_limit token = + let s, e = Overlay_manager.limits ~@token in + Option.iter (fun e -> Overlay_manager.link_limits e s) prev_limit; + ~&token, s, e + + let put_token_back ({ preproc; _ } as ps) token tokens = + let tokzr, tokens = Tokzr.put_token_back preproc.tokzr token tokens in + { ps with prev_limit = ps.prev_limit'; + preproc = { ps.preproc with tokzr } }, tokens + + let leaving_context ps prod = + match Context.top ps.preproc.context_stack with + | None -> false (* first filter *) + | Some top_ctx -> + match Grammar_interpr.lhs prod with + | X T _ -> false + | X N nt -> match Grammar_context.nonterminal_context nt with + | Some ctx -> ctx == top_ctx + | _ -> false + + let pop_context ({ preproc = { tokzr; context_stack; _ }; _ } as ps) + tokens = + let context_stack, tokens_set = Context.pop context_stack in + if show `Ctx ps then + Pretty.error "Outgoing: %a@." Context.pp_context tokens_set; + let tokzr, tokens = Tokzr.disable_tokens tokzr tokens tokens_set in + { ps with preproc = { ps.preproc with tokzr; context_stack }}, + tokens + + let push_incoming_contexts ps tokens env = + + let push context_stack ctx = + if show `Ctx ps then + Pretty.error "Incoming: %a@." Context.pp_context ctx; - let rec next_tokens ({ preproc = { tokzr; _ }; _ } as ps) tokens = - match Tokzr.next_token tokzr tokens with - | Some (tokzr, token, tokens) -> - update_tokzr ps tokzr, (token, tokens) - | None -> - let ps, tokens = produce_tokens ps in - next_tokens ps tokens - in + (* Push the new context on top of the stack *) + let context_stack = Context.push ctx context_stack in - let token_n_srcloc_limits ?prev_limit token = - let s, e = Overlay_manager.limits ~@token in - Option.iter (fun e -> Overlay_manager.link_limits e s) prev_limit; - ~&token, s, e + (* ... and retrieve newly reserved tokens *) + context_stack, Context.top_tokens context_stack in - let put_token_back ({ preproc; _ } as ps) token tokens = - let tokzr, tokens = Tokzr.put_token_back preproc.tokzr token tokens in - { ps with prev_limit = ps.prev_limit'; - preproc = { ps.preproc with tokzr } }, tokens + (* Retrieve and enable all incoming contexts *) + update_context_stack ps tokens + (Grammar_context.contexts_for_state_num @@ + Grammar_interpr.current_state_number env) + ~stack_update:push + ~tokenizer_update:Tokzr.enable_tokens + + let pop_outgoing_context ps tokens prod = + if leaving_context ps prod + then pop_context ps tokens + else ps, tokens + + (** Traverses a path (sequence of parser states or productions) that starts + with the state that matches the current context stack, and applies the + induced changes to the context stack. *) + let seesaw_context_stack ps tokens operations = + List.fold_left begin fun (ps, tokens) -> function + | Grammar_recovery.Env e -> push_incoming_contexts ps tokens e + | Grammar_recovery.Prod p -> pop_outgoing_context ps tokens p + end (ps, tokens) operations + + let env_loc env = + match Grammar_interpr.top env with + | None -> None + | Some (Element (_, _, s, e)) -> Some (Overlay_manager.join_limits (s, e)) + + let pending ?(severity = DIAGS.Warn) descr ps env = + if List.mem `Pending ps.preproc.persist.show then + let diag = + DIAGS.One.diag severity "Ignored@ %a@ (implementation@ pending)" + Pretty.text descr ?loc:(env_loc env) + in + add_diag diag ps + else ps + + let post_production ({ preproc = { tokzr; _ }; _ } as ps) + token tokens prod env = + match Post.post_production prod env with + | Post_diagnostic action -> + let ps = match action ~loc:(env_loc env) with + | Ok ((), Some diag) | Error Some diag -> add_diag diag ps + | Ok ((), None) | Error None -> ps + in + ps, token, tokens + | Post_special_names DecimalPointIsComma -> + let tokzr, token, tokens = + Tokzr.decimal_point_is_comma tokzr token tokens in + if show `Tks ps then + Pretty.error "Tks': %a@." Text_tokenizer.pp_tokens tokens; + update_tokzr ps tokzr, token, tokens + | Post_pending descr -> + pending descr ps env, token, tokens + | Post_special_names _ + | NoPost -> + ps, token, tokens + + let on_reduction ps token tokens prod = function + | Grammar_interpr.HandlingError env + | AboutToReduce (env, _) + | Shifting (_, env, _) -> + post_production ps token tokens prod env + | _ -> + ps, token, tokens + + (* Main code for driving the parser with recovery and lexical contexts: *) + + type ('a, 'm) step = + | OnTok of ('a, 'm) new_token_step + | Final of ('a option * 'm state) + and ('a, 'm) new_token_step = + (('m state * Text_tokenizer.token * Text_tokenizer.tokens) * + 'a Grammar_interpr.env) (* Always valid input_needed env. *) + + let rec normal ps tokens = function + | Grammar_interpr.InputNeeded env -> + OnTok (next_token ps tokens, env) + | Shifting (_e1, e2, _) as c -> + let ps, tokens = push_incoming_contexts ps tokens e2 in + normal ps tokens @@ Grammar_interpr.resume c + | Accepted v -> + accept ps v + | AboutToReduce _ (* may only happen upon `check` (or empty language) *) + | Rejected | HandlingError _ -> + assert false (* should never happen *) + + and on_new_token (({ prev_limit; _ } as ps, token, tokens), env) = + let c = Grammar_interpr.input_needed env in + let _t, _, e as tok = token_n_srcloc_limits ?prev_limit token in + let ps = { ps with prev_limit = Some e; prev_limit' = prev_limit } in + check ps token tokens env @@ Grammar_interpr.offer c tok + + and check ps token tokens env = function + | Grammar_interpr.HandlingError env -> + error ps token tokens env + | AboutToReduce (_, prod) when leaving_context ps prod -> + (* Reoffer token *) + let ps, tokens = put_token_back ps token tokens in + let ps, tokens = pop_context ps tokens in + normal ps tokens @@ Grammar_interpr.input_needed env + | AboutToReduce (_, prod) as c -> + (* NB: Here, we assume semantic actions do not raise any exception; + maybe that's a tad too optimistic; if they did we may need to report + that. *) + let c = Grammar_interpr.resume c in + let ps, token, tokens = on_reduction ps token tokens prod c in + check ps token tokens env c + | Shifting (_e1, e2, _) as c -> + let ps, tokens = push_incoming_contexts ps tokens e2 in + check ps token tokens env @@ Grammar_interpr.resume c + | c -> + normal ps tokens c + + and error ps token tokens env = + let report_invalid_syntax = + let loc_limits = Grammar_interpr.positions env in + let loc = Overlay_manager.join_limits loc_limits in + fun severity -> add_diag (DIAGS.One.diag severity ~loc "Invalid@ syntax") in + match ps.preproc.persist.recovery with + | EnableRecovery recovery_options -> + (* The limits of the re-submitted token will be re-constructed in + `token_n_srcloc_limits`, so `prev_limit` needs to be re-adjusted to + the second-to-last right-limit. *) + let ps, tokens = put_token_back ps token tokens in + recover ps tokens (Grammar_recovery.generate env) + ~report_syntax_hints_n_error:(report_syntax_hints_n_error + ~report_invalid_syntax + ~recovery_options) + | DisableRecovery -> + Final (None, report_invalid_syntax Error ps) + + and recover ps tokens candidates ~report_syntax_hints_n_error = + let { prev_limit; _ } as ps, token, tokens = next_token ps tokens in + let _, _, e as tok = token_n_srcloc_limits ?prev_limit token in + let ps = { ps with prev_limit = Some e; prev_limit' = prev_limit } in + match Grammar_recovery.attempt candidates tok with + | `Fail when ~&token <> Grammar_tokens.EOF -> (* ignore one token *) + recover ps tokens candidates ~report_syntax_hints_n_error + | `Fail when Option.is_none candidates.final -> + Final (None, report_syntax_hints_n_error ps []) (* unable to recover *) + | `Fail -> + let v, assumed = Option.get candidates.final in + accept (report_syntax_hints_n_error ps assumed) v + | `Accept (v, assumed) -> + accept (report_syntax_hints_n_error ps assumed) v + | `Ok (c, _, visited, assumed) -> + let ps, tokens = seesaw_context_stack ps tokens visited in + normal (report_syntax_hints_n_error ps assumed) tokens c + + and accept ps v = + Final (Some v, ps) + + let on_exn ps e = + Final (None, add_diag (DIAGS.of_exn e) ps) - let leaving_context ps prod = - match Context.top ps.preproc.context_stack with - | None -> false (* first filter *) - | Some top_ctx -> - match Grammar_interpr.lhs prod with - | X T _ -> false - | X N nt -> match Grammar_context.nonterminal_context nt with - | Some ctx -> ctx == top_ctx - | _ -> false - in + (* --- *) - let pop_context ({ preproc = { tokzr; context_stack; _ }; _ } as ps) - tokens = - let context_stack, tokens_set = Context.pop context_stack in - if show `Ctx ps then - Pretty.error "Outgoing: %a@." Context.pp_context tokens_set; - let tokzr, tokens = Tokzr.disable_tokens tokzr tokens tokens_set in - { ps with preproc = { ps.preproc with tokzr; context_stack }}, - tokens + let init_parse ps ~make_checkpoint = + let ps, tokens = produce_tokens ps in + let first_pos = match tokens with + | [] -> Cobol_preproc.position ps.preproc.pp + | t :: _ -> Cobol_common.Srcloc.start_pos ~@t in + normal ps tokens (make_checkpoint first_pos) - let push_incoming_contexts ps tokens env = - - let push context_stack ctx = - if show `Ctx ps then - Pretty.error "Incoming: %a@." Context.pp_context ctx; + let rec full_parse = function + | Final (res, ps) -> + res, ps + | OnTok (((ps, _, _), _) as state) -> + full_parse @@ try on_new_token state with e -> on_exn ps e - (* Push the new context on top of the stack *) - let context_stack = Context.push ctx context_stack in - - (* ... and retrieve newly reserved tokens *) - context_stack, Context.top_tokens context_stack - in - - (* Retrieve and enable all incoming contexts *) - update_context_stack ps tokens - (Grammar_context.contexts_for_state_num (state_num env)) - ~stack_update:push - ~tokenizer_update:Tokzr.enable_tokens - - and pop_outgoing_context ps tokens prod = - if leaving_context ps prod - then pop_context ps tokens - else ps, tokens - in - - (** Traverses a path (sequence of parser states or productions) that starts - with the state that matches the current context stack, and applies the - induced changes to the context stack. *) - let seesaw_context_stack ps tokens = - List.fold_left begin fun (ps, tokens) -> function - | Grammar_recovery.Env e -> push_incoming_contexts ps tokens e - | Grammar_recovery.Prod p -> pop_outgoing_context ps tokens p - end (ps, tokens) - in + (* --- *) - let env_loc env = - match Grammar_interpr.top env with - | None -> None - | Some (Element (_, _, s, e)) -> Some (Overlay_manager.join_limits (s, e)) - in + type ('a, 'm) rewindable_parsing_state = + { + init: 'm state; + step: ('a, 'm) step; + store: ('a, 'm) rewindable_history; + } + and ('a, 'm) rewindable_history = ('a, 'm) rewindable_history_event list + and ('a, 'm) rewindable_history_event = + { + preproc_position: Lexing.position; + event_step: ('a, 'm) new_token_step; + } - let pending ?(severity = DIAGS.Warn) descr ps env = - if List.mem `Pending ps.preproc.persist.show then - let diag = - DIAGS.One.diag severity "Ignored@ %a@ (implementation@ pending)" - Pretty.text descr ?loc:(env_loc env) - in - add_diag diag ps - else ps - in + let save_history_event + (((ps, _, _), _) as state) (store: _ rewindable_history) = + let preproc_position = Cobol_preproc.position ps.preproc.pp in + match store with + | { preproc_position = prev_pos; _ } :: store' + when prev_pos.pos_cnum = preproc_position.pos_cnum && + prev_pos.pos_fname = preproc_position.pos_fname -> + (* Preprocessor did not advance further since last save: replace event + with new parser state: *) + { preproc_position; event_step = state } :: store' + | store' -> + { preproc_position; event_step = state } :: store' + + let init_rewindable_parse ps ~make_checkpoint = + { + init = ps; + step = init_parse ps ~make_checkpoint; + store = []; + } - let post_production ({ preproc = { tokzr; _ }; _ } as ps) - token tokens prod env = - match Post.post_production prod env with - | Post_diagnostic action -> - let ps = match action ~loc:(env_loc env) with - | Ok ((), Some diag) | Error Some diag -> add_diag diag ps - | Ok ((), None) | Error None -> ps + let rewindable_parser_state = function + | { step = Final (_, ps) | OnTok ((ps, _, _), _); _ } -> ps + + let with_context_sensitive_tokens ~f = function + | { step = Final (_, ps) | OnTok ((ps, _, _), _); _ } -> + f (Context.all_tokens ps.preproc.context_stack) + + let parse_with_trace ?(save_step = 10) rwps = + let rec loop count ({ store; step; _ } as rwps) = match step with + | Final (res, _ps) -> + with_context_sensitive_tokens rwps ~f:Text_lexer.disable_tokens; + res, rwps + | OnTok (((ps, _, _), _) as state) -> + let store, count = + if count = save_step then store, succ count + else save_history_event state store, 0 + and step = + try on_new_token state with e -> on_exn ps e in - ps, token, tokens - | Post_special_names DecimalPointIsComma -> - let tokzr, token, tokens = - Tokzr.decimal_point_is_comma tokzr token tokens in - if show `Tks ps then - Pretty.error "Tks': %a@." Text_tokenizer.pp_tokens tokens; - update_tokzr ps tokzr, token, tokens - | Post_pending descr -> - pending descr ps env, token, tokens - | Post_special_names _ - | NoPost -> - ps, token, tokens + loop count { rwps with store; step } in + with_context_sensitive_tokens rwps ~f:Text_lexer.enable_tokens; + loop 0 rwps - let rec normal ({ prev_limit; _ } as ps) tokens = function - | Grammar_interpr.InputNeeded env as c -> - let ps, (token, tokens) = next_tokens ps tokens in - let _t, _, e as tok = token_n_srcloc_limits ?prev_limit token in - let ps = { ps with prev_limit = Some e; prev_limit' = prev_limit } in - check ps token tokens env (Grammar_interpr.offer c tok) - | Shifting (_e1, e2, _) as c -> - let ps, tokens = push_incoming_contexts ps tokens e2 in - normal ps tokens @@ Grammar_interpr.resume c - | Accepted v -> - accept ps v - | AboutToReduce _ (* may only happen upon `check` (or empty language) *) - | Rejected | HandlingError _ -> - assert false (* should never happen *) - - and on_production ps token tokens prod = function - | Grammar_interpr.HandlingError env - | AboutToReduce (env, _) - | Shifting (_, env, _) -> - post_production ps token tokens prod env - | _ -> - ps, token, tokens - - and check ps token tokens env = function - | Grammar_interpr.HandlingError env -> - error ps token tokens env - | AboutToReduce (_, prod) when leaving_context ps prod -> - (* Reoffer token *) - let ps, tokens = put_token_back ps token tokens in - let ps, tokens = pop_context ps tokens in - normal ps tokens @@ Grammar_interpr.input_needed env - | AboutToReduce (_, prod) as c -> - (* NB: Here, we assume semantic actions do not raise any exception; - maybe that's a tad too optimistic; if they did we may need to - report that. *) - let c = Grammar_interpr.resume c in - let ps, token, tokens = on_production ps token tokens prod c in - check ps token tokens env c - | Shifting (_e1, e2, _) as c -> - let ps, tokens = push_incoming_contexts ps tokens e2 in - check ps token tokens env @@ Grammar_interpr.resume c - | c -> - normal ps tokens c - - and error ps token tokens env = - let report_invalid_syntax = - let loc_limits = Grammar_interpr.positions env in - let loc = Overlay_manager.join_limits loc_limits in - fun severity -> add_diag (DIAGS.One.diag severity ~loc "Invalid@ syntax") - in - match ps.preproc.persist.recovery with - | EnableRecovery recovery_options -> - (* The limits of the re-submitted token will be re-constructed in - `token_n_srcloc_limits`, so `prev_limit` needs to be re-adjusted to - the second-to-last right-limit. *) - let ps, tokens = put_token_back ps token tokens in - recover ps tokens (Grammar_recovery.generate env) - ~report_syntax_hints_n_error:(report_syntax_hints_n_error - ~report_invalid_syntax - ~recovery_options) - | DisableRecovery -> - None, report_invalid_syntax Error ps - - and recover ({ prev_limit; _ } as ps) tokens candidates - ~report_syntax_hints_n_error = - let ps, (token, tokens) = next_tokens ps tokens in - let _, _, e as tok = token_n_srcloc_limits ?prev_limit token in - let ps = { ps with prev_limit = Some e; prev_limit' = prev_limit } in - match Grammar_recovery.attempt candidates tok with - | `Fail when ~&token <> Grammar_tokens.EOF -> (* ignore one token *) - recover ps tokens candidates ~report_syntax_hints_n_error - | `Fail when Option.is_none candidates.final -> - None, report_syntax_hints_n_error ps [] (* unable to recover *) - | `Fail -> - let v, assumed = Option.get candidates.final in - accept (report_syntax_hints_n_error ps assumed) v - | `Accept (v, assumed) -> - accept (report_syntax_hints_n_error ps assumed) v - | `Ok (c, _, visited, assumed) -> - let ps, tokens = seesaw_context_stack ps tokens visited in - normal (report_syntax_hints_n_error ps assumed) tokens c - - and accept ps v = - Some v, ps + (* --- *) - in - fun ps tokens c -> normal ps tokens c - - let parse ?verbose ?show ~recovery - (type m) ~(memory: m memory) pp make_checkpoint - : ('a option, m) output * _ = - let ps = init_parser ?verbose ?show ~recovery - ~tokenizer_memory:memory pp in - let res, ps = - (* TODO: catch in a deeper context to grab parsed tokens *) - let ps, tokens = produce_tokens ps in - let first_pos = match tokens with - | [] -> Cobol_preproc.position ps.preproc.pp - | t :: _ -> Cobol_common.Srcloc.start_pos ~@t - in - try do_parse ps tokens (make_checkpoint first_pos) - with e -> None, add_diag (DIAGS.of_exn e) ps - in - match memory with + let aggregate_output (type m) res (ps: m state) : ('a option, m) output = + match ps.preproc.persist.tokenizer_memory with | Amnesic -> - Only res, all_diags ps + Only res | Eidetic -> - let artifacts = { - tokens = Tokzr.parsed_tokens ps.preproc.tokzr; - pplog = Cobol_preproc.log ps.preproc.pp; - comments = Cobol_preproc.comments ps.preproc.pp; - } in - WithArtifacts (res, artifacts), all_diags ps + let artifacts = + { tokens = Tokzr.parsed_tokens ps.preproc.tokzr; + pplog = Cobol_preproc.log ps.preproc.pp; + comments = Cobol_preproc.comments ps.preproc.pp; + newline_cnums = Cobol_preproc.newline_cnums ps.preproc.pp } in + WithArtifacts (res, artifacts) + + let parse_once + ~options (type m) ~(memory: m memory) ~make_checkpoint pp + : (('a option, m) output) with_diags = + let ps = make_parser options ~tokenizer_memory:memory pp in + let res, ps = full_parse @@ init_parse ~make_checkpoint ps in + DIAGS.with_diags (aggregate_output res ps) (all_diags ps) + + let find_history_event_preceding ~(position: Lexing.position) store = + let rec aux = function + | [] -> + raise Not_found + | { preproc_position; _ } as event :: store + when preproc_position.pos_cnum <= position.pos_cnum && + preproc_position.pos_fname = position.pos_fname -> + event, store + | _ :: store -> + aux store + in + aux store + + let rec rewind_n_parse + : type m. ('a, m) rewindable_parsing_state -> make_checkpoint:_ + -> preprocessor_rewind -> position:Lexing.position + -> ((('a option, m) output as 'x) * 'x rewinder) with_diags = + fun rwps ~make_checkpoint pp_rewind ~position -> + let rwps = + try + let event, store = find_history_event_preceding ~position rwps.store in + let (ps, token, tokens), env = event.event_step in + let pp = ps.preproc.pp in + let pp = pp_rewind ?new_position:(Some event.preproc_position) pp in + let ps = { ps with preproc = { ps.preproc with pp } } in + { rwps with step = OnTok ((ps, token, tokens), env); store } + with Not_found -> (* rewinding before first checkpoint *) + let pp = pp_rewind rwps.init.preproc.pp in + let ps = { rwps.init with preproc = { rwps.init.preproc with pp } } in + init_rewindable_parse ~make_checkpoint ps + in + let res, rwps = parse_with_trace rwps in + let ps = rewindable_parser_state rwps in + let output = aggregate_output res ps in + let rewind_n_parse = rewind_n_parse rwps ~make_checkpoint in + DIAGS.with_diags (output, { rewind_n_parse }) (all_diags ps) + + let rewindable_parse + : options:_ -> memory:'m memory -> make_checkpoint:_ + -> Cobol_preproc.preprocessor + -> ((('a option, 'm) output as 'x) * 'x rewinder) with_diags = + fun ~options ~memory ~make_checkpoint pp -> + let res, rwps = + make_parser options ~tokenizer_memory:memory pp |> + init_rewindable_parse ~make_checkpoint |> + parse_with_trace + in + let ps = rewindable_parser_state rwps in + let output = aggregate_output res ps in + let rewind_n_parse = rewind_n_parse rwps ~make_checkpoint in + DIAGS.with_diags (output, { rewind_n_parse }) (all_diags ps) end -let default_recovery = - EnableRecovery { silence_benign_recoveries = false } +(* --- *) -(* TODO: accept a record instead of many labeled arguments? *) -type 'm parsing_function - = ?source_format:Cobol_config.source_format_spec - -> ?config:Cobol_config.t - -> ?recovery:recovery - -> ?verbose:bool - -> ?show:[`Pending] list - -> libpath:string list - -> Cobol_preproc.input - -> (PTree.compilation_group option, 'm) parsed_result +(* Main exported functions *) let parse (type m) ~(memory: m memory) - ?(source_format = Cobol_config.Auto) + ?(options = Parser_options.default) ?(config = Cobol_config.default) - ?(recovery = default_recovery) - ?verbose - ?show - ~libpath - : Cobol_preproc.input -> (PTree.compilation_group option, m) parsed_result = - let preprocessor = Cobol_preproc.preprocessor ?verbose in - fun input -> - let { result = output, parsed_diags; diags = other_diags } = - Cobol_common.with_stateful_diagnostics input - ~f:begin fun _init_diags input -> - let pp = preprocessor input @@ - `WithLibpath Cobol_preproc.{ init_libpath = libpath; - init_config = config; - init_source_format = source_format} - in - let module P = Make (val config) in - P.parse ?verbose ?show ~memory ~recovery pp - Grammar.Incremental.compilation_group - end - in - { - parsed_input = input; - parsed_output = output; - parsed_diags = DIAGS.Set.union parsed_diags other_diags - } + : Cobol_preproc.preprocessor -> + (PTree.compilation_group option, m) output with_diags = + let module P = Make (val config) in + P.parse_once ~options ~memory + ~make_checkpoint:Grammar.Incremental.compilation_group let parse_simple = parse ~memory:Amnesic -let parse_with_tokens = parse ~memory:Eidetic +let parse_with_artifacts = parse ~memory:Eidetic -let parsing_artifacts - : (_, Cobol_common.Behaviors.eidetic) parsed_result -> _ = function - | { parsed_output = WithArtifacts (_, artifacts); _ } -> artifacts +let rewindable_parse + (type m) + ~(memory: m memory) + ?(options = Parser_options.default) + ?(config = Cobol_config.default) + : Cobol_preproc.preprocessor -> + (((PTree.compilation_group option, m) output as 'x) * 'x rewinder) + with_diags = + let module P = Make (val config) in + P.rewindable_parse ~options ~memory + ~make_checkpoint:Grammar.Incremental.compilation_group + +let rewindable_parse_simple = rewindable_parse ~memory:Amnesic +let rewindable_parse_with_artifacts = rewindable_parse ~memory:Eidetic + +let rewind_and_parse { rewind_n_parse } rewind_preproc ~position = + rewind_n_parse rewind_preproc ~position + +let artifacts + : (_, Cobol_common.Behaviors.eidetic) output -> _ = function + | WithArtifacts (_, artifacts) -> artifacts diff --git a/src/lsp/cobol_parser/parser_engine.mli b/src/lsp/cobol_parser/parser_engine.mli index 0054a1ccf..60cdcedb8 100644 --- a/src/lsp/cobol_parser/parser_engine.mli +++ b/src/lsp/cobol_parser/parser_engine.mli @@ -11,21 +11,54 @@ (* *) (**************************************************************************) -include module type of Parser_options +open Parser_options +open Parser_outputs -type 'm parsing_function - = ?source_format:Cobol_config.source_format_spec +(** {1 Basic (one-shot) parsing} *) + +type 'm simple_parsing + = ?options:Parser_options.parser_options + -> ?config:Cobol_config.t + -> Cobol_preproc.preprocessor + -> (PTree.compilation_group option, 'm) output + Cobol_common.Diagnostics.with_diags + +val parse + : memory: 'm memory -> 'm simple_parsing +val parse_simple + : Cobol_common.Behaviors.amnesic simple_parsing +val parse_with_artifacts + : Cobol_common.Behaviors.eidetic simple_parsing + +(** {1 Rewindable parsing} *) + +type 'm rewindable_parsing + = ?options:parser_options -> ?config:Cobol_config.t - -> ?recovery:recovery - -> ?verbose:bool - -> ?show:[`Pending] list - -> libpath:string list - -> Cobol_preproc.input - -> (PTree.compilation_group option, 'm) parsed_result - -val parse: memory: 'm Parser_options.memory -> 'm parsing_function -val parse_simple: Cobol_common.Behaviors.amnesic parsing_function -val parse_with_tokens: Cobol_common.Behaviors.eidetic parsing_function - -val parsing_artifacts - : (_, Cobol_common.Behaviors.eidetic) parsed_result -> parsing_artifacts + -> Cobol_preproc.preprocessor + -> (((PTree.compilation_group option, 'm) output as 'x) * + 'x rewinder) + Cobol_common.Diagnostics.with_diags +and 'x rewinder +and preprocessor_rewind = + ?new_position:Lexing.position -> (Cobol_preproc.preprocessor as 'r) -> 'r + +val rewindable_parse + : memory:'m memory + -> 'm rewindable_parsing +val rewindable_parse_simple + : Cobol_common.Behaviors.amnesic rewindable_parsing +val rewindable_parse_with_artifacts + : Cobol_common.Behaviors.eidetic rewindable_parsing + +val rewind_and_parse + : 'x rewinder + -> preprocessor_rewind + -> position: Lexing.position + -> (((PTree.compilation_group option, 'm) output as 'x) * 'x rewinder) + Cobol_common.Diagnostics.with_diags + +(** {1 Accessing artifacts} *) + +val artifacts + : (_, Cobol_common.Behaviors.eidetic) output -> artifacts diff --git a/src/lsp/cobol_parser/parser_options.ml b/src/lsp/cobol_parser/parser_options.ml index dc237d101..44a659b88 100644 --- a/src/lsp/cobol_parser/parser_options.ml +++ b/src/lsp/cobol_parser/parser_options.ml @@ -14,8 +14,6 @@ (** Gathers some types used to define options for the parser engine. *) (* We are only defining types here so an MLI would only be redundant. *) -open Cobol_common.Srcloc.TYPES - (** Switch for the recovery mechanism *) type recovery = | DisableRecovery @@ -26,26 +24,23 @@ and recovery_options = missing tokens (e.g, periods). *) } -type 'a memory = +type 'm memory = | Amnesic: Cobol_common.Behaviors.amnesic memory | Eidetic: Cobol_common.Behaviors.eidetic memory -type tokens_with_locs = Grammar_tokens.token with_loc list -type parsing_artifacts = +type parser_options = { - tokens: tokens_with_locs Lazy.t; - pplog: Cobol_preproc.log; - comments: Cobol_preproc.comments + verbose: bool; + show: [`Pending] list; + recovery: recovery; } -type ('a, 'm) output = - | Only: 'a -> - ('a, Cobol_common.Behaviors.amnesic) output - | WithArtifacts: 'a * parsing_artifacts -> - ('a, Cobol_common.Behaviors.eidetic) output -type ('a, 'm) parsed_result = +let default_recovery = + EnableRecovery { silence_benign_recoveries = false } + +let default = { - parsed_input: Cobol_preproc.input; - parsed_diags: Cobol_common.Diagnostics.Set.t; - parsed_output: ('a, 'm) output; + verbose = false; + show = [`Pending]; + recovery = default_recovery; } diff --git a/src/lsp/cobol_parser/parser_outputs.ml b/src/lsp/cobol_parser/parser_outputs.ml new file mode 100644 index 000000000..fc347f9f5 --- /dev/null +++ b/src/lsp/cobol_parser/parser_outputs.ml @@ -0,0 +1,33 @@ +(**************************************************************************) +(* *) +(* SuperBOL OSS Studio *) +(* *) +(* Copyright (c) 2022-2023 OCamlPro SAS *) +(* *) +(* All rights reserved. *) +(* This source code is licensed under the GNU Affero General Public *) +(* License version 3 found in the LICENSE.md file in the root directory *) +(* of this source tree. *) +(* *) +(**************************************************************************) + +(** Gathers some types used to define outputs for the parser engine. *) +(* We are only defining types here so an MLI would only be redundant. *) + +open Cobol_common.Srcloc.TYPES + +type tokens_with_locs = Grammar_tokens.token with_loc list + +type artifacts = + { + tokens: tokens_with_locs Lazy.t; + pplog: Cobol_preproc.log; + comments: Cobol_preproc.comments; + newline_cnums: int list; + } + +type ('a, 'm) output = + | Only: 'a -> ('a, Cobol_common.Behaviors.amnesic) output + | WithArtifacts: 'a * artifacts -> ('a, Cobol_common.Behaviors.eidetic) output + +type 'm parsed_compilation_group = (PTree.compilation_group option, 'm) output diff --git a/src/lsp/cobol_parser/text_tokenizer.ml b/src/lsp/cobol_parser/text_tokenizer.ml index 06dd70ee9..0af619ff7 100644 --- a/src/lsp/cobol_parser/text_tokenizer.ml +++ b/src/lsp/cobol_parser/text_tokenizer.ml @@ -394,7 +394,7 @@ module Make (Config: Cobol_config.T) = struct | Eidetic [] -> Fmt.invalid_arg "put_token_back: unexpected memory state" | Eidetic (_ :: toks) -> { s with memory = Eidetic toks } - let next_token (type m) (s: m state) = + let next_token (s: _ state) = let rec aux = function | { payload = INTERVENING_ ','; _ } :: tokens -> aux tokens diff --git a/src/lsp/cobol_preproc/preproc.ml b/src/lsp/cobol_preproc/preproc.ml index 584c18c0d..7c72bbf06 100644 --- a/src/lsp/cobol_preproc/preproc.ml +++ b/src/lsp/cobol_preproc/preproc.ml @@ -29,12 +29,14 @@ include Preproc_trace (* include log events *) type 'k srclexer = 'k Src_lexing.state * Lexing.lexbuf and any_srclexer = | Plx: 'k srclexer -> any_srclexer [@@unboxed] -let srclex_lexbuf (Plx (_, lexbuf)) = lexbuf -let srclex_pos pl = (srclex_lexbuf pl).Lexing.lex_curr_p +let srclex_pos (Plx (_, lexbuf)) = + lexbuf.Lexing.lex_curr_p let srclex_diags (Plx (pl, _)) = Src_lexing.diagnostics pl let srclex_comments (Plx (pl, _)) = Src_lexing.comments pl +let srclex_newline_cnums (Plx (pl, _)) = + Src_lexing.newline_cnums pl let srclex_source_format (Plx (pl, _)) = Src_lexing.(source_format_spec @@ source_format pl) @@ -99,6 +101,27 @@ let srclex_from_channel = make_srclex Lexing.from_channel let srclex_from_file ~source_format filename : any_srclexer = srclex_from_string ~source_format ~filename (EzFile.read_file filename) +(** Note: If given, assumes [position] corresponds to the begining of the + input. If absent, restarts from first position. File name is kept from the + previous input. *) +let srclex_restart make_lexing ?position input (Plx (s, prev_lexbuf)) = + let lexbuf = make_lexing ?with_positions:(Some true) input in + let pos_fname = match position with + | Some p -> + Lexing.set_position lexbuf p; + p.Lexing.pos_fname + | None -> + prev_lexbuf.Lexing.lex_curr_p.pos_fname + in + Lexing.set_filename lexbuf pos_fname; + Plx (s, lexbuf) + +let srclex_restart_on_string = srclex_restart Lexing.from_string +let srclex_restart_on_channel = srclex_restart Lexing.from_channel +let srclex_restart_on_file ?position filename = + srclex_restart_on_string ?position (EzFile.read_file filename) + + (* --- Compiler Directives -------------------------------------------------- *) (* SOURCE FORMAT *) @@ -474,7 +497,6 @@ let delim left text right = textword_cat (fun w s -> concat_strings s w) Fun.id left let try_replacing_clause: replacing with_loc -> text -> _ result = fun replacing -> - (* Helpers to record replacement operations on source locations: *) let replloc = ~@replacing in match ~&replacing with | ReplaceExact { repl_from; repl_to } -> diff --git a/src/lsp/cobol_preproc/preproc.mli b/src/lsp/cobol_preproc/preproc.mli index 9227c66ae..25b45d6aa 100644 --- a/src/lsp/cobol_preproc/preproc.mli +++ b/src/lsp/cobol_preproc/preproc.mli @@ -101,6 +101,8 @@ val apply_replacing -> text -> 'a +(** {3 Source format} *) + val cdir_source_format : dialect: Cobol_config.dialect -> string with_loc @@ -113,6 +115,8 @@ val with_source_format -> any_srclexer -> any_srclexer +(** {3 Instantiation} *) + val srclex_from_file : source_format:Cobol_config.source_format -> string @@ -127,6 +131,30 @@ val srclex_from_channel -> source_format:Cobol_config.source_format -> in_channel -> any_srclexer + +(** {3 Resetting the input} *) + +(** Note: the functions below assume [position] corresponds to the begining of + the input.} *) + +val srclex_restart_on_file + : ?position: Lexing.position + -> string + -> any_srclexer + -> any_srclexer +val srclex_restart_on_string + : ?position: Lexing.position + -> string + -> any_srclexer + -> any_srclexer +val srclex_restart_on_channel + : ?position: Lexing.position + -> in_channel + -> any_srclexer + -> any_srclexer + +(** {3 Queries} *) + val srclex_diags : any_srclexer -> Cobol_common.Diagnostics.Set.t @@ -136,6 +164,9 @@ val srclex_pos val srclex_comments : any_srclexer -> comments +val srclex_newline_cnums + : any_srclexer + -> int list val next_source_line: any_srclexer -> any_srclexer * text val fold_source_lines: any_srclexer -> (text -> 'a -> 'a) -> 'a -> 'a diff --git a/src/lsp/cobol_preproc/preproc_engine.ml b/src/lsp/cobol_preproc/preproc_engine.ml index d056f8305..2ed9e00c4 100644 --- a/src/lsp/cobol_preproc/preproc_engine.ml +++ b/src/lsp/cobol_preproc/preproc_engine.ml @@ -50,7 +50,6 @@ and preprocessor_persist = { pparser: (module Preproc.PPPARSER); overlay_manager: (module Src_overlay.MANAGER); - config: Cobol_config.t; replacing: Preproc.replacing with_loc list list; copybooks: Cobol_common.Srcloc.copylocs; (* opened copybooks *) libpath: string list; @@ -66,6 +65,7 @@ let log { pplog; _ } = pplog let srclexer { srclex; _ } = srclex let position { srclex; _ } = Preproc.srclex_pos srclex let comments { srclex; _ } = Preproc.srclex_comments srclex +let newline_cnums { srclex; _ } = Preproc.srclex_newline_cnums srclex let with_srclex lp srclex = if lp.srclex == srclex then lp else { lp with srclex } @@ -93,6 +93,14 @@ let make_srclex ~source_format = function | Channel { contents; filename } -> Preproc.srclex_from_channel ~filename ~source_format contents +let rewind_srclex srclex ?position = function + | Filename filename -> + Preproc.srclex_restart_on_file ?position filename srclex + | String { contents; _ } -> (* Let's avoid renaming the file in lexbuf... *) + Preproc.srclex_restart_on_string ?position contents srclex + | Channel { contents; _ } -> (* ditto *) + Preproc.srclex_restart_on_channel ?position contents srclex + type init = { init_libpath: string list; @@ -119,7 +127,6 @@ let preprocessor ?(verbose = false) input = function { pparser = (module Pp); overlay_manager = (module Om); - config = (module Config); replacing = []; copybooks = Cobol_common.Srcloc.no_copy; libpath; @@ -141,6 +148,10 @@ let preprocessor ?(verbose = false) input = function verbose = persist.verbose || verbose; }; } + | `ResetPosition ({ srclex; _ } as pp, position) -> + { + pp with srclex = rewind_srclex srclex ?position input; + } (* --- *) @@ -220,8 +231,7 @@ and try_preproc lp srctext = | Ok (cdir, ppstate) -> Ok (process_preproc_phrase { lp with ppstate } cdir) and process_preproc_phrase ({ persist = { pparser = (module Pp); - overlay_manager = (module Om); - config = (module Config); _ }; + overlay_manager = (module Om); _ }; _ } as lp) = let parse ~stmt parser phrase : _ result = Pp.MenhirInterpreter.loop_handle @@ -385,6 +395,15 @@ let pp_pptokens: pptokens Pretty.printer = (* --- *) +let reset_preprocessor ?new_position pp input = + preprocessor ~verbose:pp.persist.verbose input + (`ResetPosition (pp, new_position)) + +(* --- *) + +let preprocessor ?verbose init input = + preprocessor ?verbose input (`WithLibpath init) + (** Default pretty-printing formatter for {!lex_file}, {!lex_lib}, and {!preprocess_file}. *) let default_oppf = Fmt.stdout @@ -425,10 +444,10 @@ let preprocess_file ~source_format ?verbose ?(config = Cobol_config.default) ~libpath ?(ppf = default_oppf) = let preprocessor = preprocessor ?verbose in Cobol_common.do_unit begin fun _init_diags filename -> - pp_preprocessed ppf @@ preprocessor (Filename filename) @@ - `WithLibpath { init_libpath = libpath; + pp_preprocessed ppf @@ + preprocessor { init_libpath = libpath; init_config = config; - init_source_format = source_format} + init_source_format = source_format } (Filename filename) end let text_of_input ~source_format ?verbose ?(config = Cobol_config.default) @@ -437,10 +456,9 @@ let text_of_input ~source_format ?verbose ?(config = Cobol_config.default) Cobol_common.do_any begin fun _init_diags input -> fst @@ full_text ~item:"file" @@ - preprocessor input @@ - `WithLibpath { init_libpath = libpath; + preprocessor { init_libpath = libpath; init_config = config; - init_source_format = source_format} + init_source_format = source_format } input end ?epf a let text_of_file ~source_format ?verbose ?(config = Cobol_config.default) diff --git a/src/lsp/cobol_preproc/preproc_engine.mli b/src/lsp/cobol_preproc/preproc_engine.mli index 14bceb89b..f28ec513e 100644 --- a/src/lsp/cobol_preproc/preproc_engine.mli +++ b/src/lsp/cobol_preproc/preproc_engine.mli @@ -25,6 +25,17 @@ type init = init_source_format: Cobol_config.source_format_spec; } +val preprocessor + : ?verbose:bool + -> init + -> input + -> preprocessor +val reset_preprocessor + : ?new_position:Lexing.position + -> preprocessor + -> input + -> preprocessor + (* --- *) val diags: preprocessor -> Cobol_common.Diagnostics.Set.t @@ -34,6 +45,8 @@ val log: preprocessor -> Preproc_trace.log val comments: preprocessor -> Text.comments val srclexer: preprocessor -> Preproc.any_srclexer val position: preprocessor -> Lexing.position +val newline_cnums: preprocessor -> int list + val next_sentence: preprocessor -> Text.text * preprocessor (** {2 High-level commands} *) @@ -43,12 +56,6 @@ val decide_source_format -> Cobol_config.source_format_spec -> Cobol_config.source_format Cobol_common.Diagnostics.with_diags -val preprocessor - : ?verbose:bool - -> input - -> [< `WithLibpath of init ] - -> preprocessor - val lex_file : source_format: Cobol_config.source_format_spec -> ?ppf:Format.formatter diff --git a/src/lsp/cobol_preproc/src_lexing.ml b/src/lsp/cobol_preproc/src_lexing.ml index fb9936907..1aa3dc649 100644 --- a/src/lsp/cobol_preproc/src_lexing.ml +++ b/src/lsp/cobol_preproc/src_lexing.ml @@ -146,6 +146,8 @@ type 'k state = comments: comments; cdir_seen: bool; newline: bool; + newline_cnums: int list; (** index of all newline characters encountered + so far (in reverse order) *) diags: DIAGS.Set.t; config: 'k config; } @@ -177,6 +179,7 @@ let init_state : 'k source_format -> 'k state = fun source_format -> comments = []; cdir_seen = false; newline = true; + newline_cnums = []; diags = DIAGS.Set.none; config = { @@ -187,6 +190,7 @@ let init_state : 'k source_format -> 'k state = fun source_format -> let diagnostics { diags; _ } = diags let comments { comments; _ } = List.rev comments +let newline_cnums { newline_cnums; _ } = List.rev newline_cnums let source_format { config = { source_format; _ }; _ } = source_format let allow_debug { config = { debug; _ }; _ } = debug @@ -252,12 +256,17 @@ let append t state = let new_line state lexbuf = Lexing.new_line lexbuf; + let state = + { state with + newline = true; + newline_cnums = Lexing.lexeme_end lexbuf :: state.newline_cnums } + in match state.lex_prods, state.cdir_seen with | { payload = TextWord _ | Alphanum _ | Pseudo _ | Eof; _ } :: _, _ | _, true -> - flush { state with newline = true } + flush state | _ -> - { state with newline = true }, [] + state, [] (* --- *) diff --git a/src/lsp/cobol_preproc/src_lexing.mli b/src/lsp/cobol_preproc/src_lexing.mli index e9e2fe394..c1ce5e1ba 100644 --- a/src/lsp/cobol_preproc/src_lexing.mli +++ b/src/lsp/cobol_preproc/src_lexing.mli @@ -56,6 +56,7 @@ type 'k state val init_state: 'k source_format -> 'k state val diagnostics: _ state -> Cobol_common.Diagnostics.Set.t val comments: _ state -> Text.comments +val newline_cnums: _ state -> int list val source_format: 'k state -> 'k source_format val change_source_format: 'k state -> 'c source_format Cobol_common.Srcloc.with_loc -> ('c state, 'k state) result diff --git a/src/lsp/cobol_preproc/src_overlay.ml b/src/lsp/cobol_preproc/src_overlay.ml index 5106a8668..37716ddcf 100644 --- a/src/lsp/cobol_preproc/src_overlay.ml +++ b/src/lsp/cobol_preproc/src_overlay.ml @@ -90,7 +90,9 @@ let limits: manager -> srcloc -> limit * limit = fun ctx loc -> | Some lexloc -> lexloc | _ -> Limit.make_virtual (), Limit.make_virtual () in - Links.replace ctx.right_of s (loc, e); (* replace to deal with duplicates *) + Links.replace ctx.right_of s (loc, e); (* Replace to deal with duplicates. *) + Links.remove ctx.cache s; (* Manually remove from cache to prevent invalid *) + Links.remove ctx.cache e; (* or even cyclic/infinite search upon rewind. *) s, e (** Links token limits *) diff --git a/src/lsp/cobol_typeck/cobol_typeck.ml b/src/lsp/cobol_typeck/cobol_typeck.ml index 0a7d9c87d..049982ad5 100644 --- a/src/lsp/cobol_typeck/cobol_typeck.ml +++ b/src/lsp/cobol_typeck/cobol_typeck.ml @@ -1156,20 +1156,18 @@ struct end let analyze_compilation_group ?(config = Cobol_config.default) - (type m) : m Cobol_parser.parsed_compilation_group -> _ = + (type m) : m Cobol_parser.Outputs.parsed_compilation_group -> _ = let analyze_cg (module Diags: DIAGS.STATEFUL) cg = let module Typeck = Make (val config) (Diags) in Ok (Typeck.typeck_compilation_group cg, DIAGS.Set.none) in function - | { parsed_output = Only None | WithArtifacts (None, _); - parsed_diags; _ } -> - Error parsed_diags - | { parsed_output = Only Some cg | WithArtifacts (Some cg, _); - parsed_diags; _ } -> + | Only None | WithArtifacts (None, _) -> + DIAGS.result @@ Error () + | Only Some cg | WithArtifacts (Some cg, _) -> match Cobol_common.catch_diagnostics analyze_cg cg with | Ok (res, diags) -> - Ok (res, cg, DIAGS.Set.union parsed_diags diags) + DIAGS.result ~diags @@ Ok (res, cg) | Error diags -> - Error (DIAGS.Set.union parsed_diags diags) + DIAGS.result ~diags @@ Error () diff --git a/src/lsp/cobol_typeck/cobol_typeck.mli b/src/lsp/cobol_typeck/cobol_typeck.mli index 28780f728..997a8016c 100644 --- a/src/lsp/cobol_typeck/cobol_typeck.mli +++ b/src/lsp/cobol_typeck/cobol_typeck.mli @@ -18,10 +18,8 @@ module CUs = Cobol_data.Compilation_unit.SET val analyze_compilation_group : ?config:(module Cobol_config.T) - -> _ Cobol_parser.parsed_compilation_group - -> (CUs.t * Cobol_parser.PTree.compilation_group * DIAGS.diagnostics, - DIAGS.diagnostics) - result + -> _ Cobol_parser.Outputs.parsed_compilation_group + -> (CUs.t * Cobol_parser.PTree.compilation_group, unit) result DIAGS.with_diags module Make (Config: Cobol_config.T) (* for dialect-based checks *) diff --git a/src/lsp/superbol_free_lib/command_pp.ml b/src/lsp/superbol_free_lib/command_pp.ml index 51376bcf5..bf82a9d64 100644 --- a/src/lsp/superbol_free_lib/command_pp.ml +++ b/src/lsp/superbol_free_lib/command_pp.ml @@ -38,75 +38,74 @@ let cmd = (fun () -> match List.rev !files with | [] -> - failwith "Provide at least one file" + failwith "Provide at least one file" | files -> - List.iter (fun file -> - let filename = match !output with - | None -> ( Filename.chop_extension file ) ^ ".i" - | Some output -> - begin match files with - | [ _ ] -> () - | _ -> - failwith "Option -o conflicts with providing multiple files" - end; - output - in - if filename = file then - Pretty.failwith "Source file conflicts with target %s" file; - if !parse || !check then - let parse ?source_format = - let common = common_get () in - let source_format = - Option.value ~default:common.source_format source_format - in - Cobol_parser.parse_simple - ~recovery:DisableRecovery - ~verbose:common.verbose - ~libpath:common.libpath - ~config:common.config - ~source_format + List.iter (fun file -> + let filename = match !output with + | None -> ( Filename.chop_extension file ) ^ ".i" + | Some output -> + begin match files with + | [ _ ] -> () + | _ -> + failwith "Option -o conflicts with providing multiple files" + end; + output in - let my_text = parse (Filename file) in - Format.eprintf "%a@." Cobol_common.Diagnostics.Set.pp my_text.parsed_diags; - match my_text.parsed_output with - | Only (Some cg) -> ( - let print = - Format.asprintf "@[%a@]@." Cobol_parser.PTree.pp_compilation_group + if filename = file then + Pretty.failwith "Source file conflicts with target %s" file; + if !parse || !check then + let parse ?source_format input = + let common = common_get () in + let source_format = + Option.value ~default:common.source_format source_format in - let contents = print cg in - output_file filename contents; - if !check then - match - parse ~source_format:(SF SFFree) (String { filename; contents }) - with - | { parsed_output = Only (Some cg'); _ } -> - if Cobol_parser.PTree.compare_compilation_group cg' cg <> 0 then ( - Format.eprintf "Reparse: different@."; - exit 1 - ) - | { parsed_diags; _ } -> - Format.eprintf "Reparse: %a@." Cobol_common.Diagnostics.Set.pp parsed_diags; - exit 1 - | exception _ -> - Format.eprintf "Reparse: ERROR!!!@."; - exit 1 - ) - | _ -> assert false - else - let text = - let common = common_get () in - Cobol_preproc.text_of_file file - ~verbose: common.verbose - ~source_format:common.source_format - ~libpath:common.libpath - in - let s = - Cobol_preproc.Text_printer.string_of_text - ~cobc:!cobc - ~max_line_gap:100 - text in - output_file filename s) - files) + Cobol_parser.parse_simple ~options:common.parser_options @@ + Cobol_preproc.preprocessor { init_libpath = common.libpath; + init_config = common.config; + init_source_format = source_format } + input + in + let my_text = parse (Filename file) in + Format.eprintf "%a@." Cobol_common.Diagnostics.Set.pp my_text.diags; + match my_text.result with + | Only (Some cg) -> ( + let print = + Format.asprintf "@[%a@]@." Cobol_parser.PTree.pp_compilation_group + in + let contents = print cg in + output_file filename contents; + if !check then + match + parse ~source_format:(SF SFFree) (String { filename; contents }) + with + | { result = Only (Some cg'); _ } -> + if Cobol_parser.PTree.compare_compilation_group cg' cg <> 0 then ( + Format.eprintf "Reparse: different@."; + exit 1 + ) + | { diags; _ } -> + Format.eprintf "Reparse: %a@." Cobol_common.Diagnostics.Set.pp diags; + exit 1 + | exception _ -> + Format.eprintf "Reparse: ERROR!!!@."; + exit 1 + ) + | _ -> assert false + else + let text = + let common = common_get () in + Cobol_preproc.text_of_file file + ~verbose: common.parser_options.verbose + ~source_format:common.source_format + ~libpath:common.libpath + in + let s = + Cobol_preproc.Text_printer.string_of_text + ~cobc:!cobc + ~max_line_gap:100 + text in + output_file filename s) + files) ~args: (common_args @ [ [ "cobc" ], Arg.Set cobc, EZCMD.info "Activate cobc specific features"; diff --git a/src/lsp/superbol_free_lib/common_args.ml b/src/lsp/superbol_free_lib/common_args.ml index b603bf54b..21f0e45e4 100644 --- a/src/lsp/superbol_free_lib/common_args.ml +++ b/src/lsp/superbol_free_lib/common_args.ml @@ -15,13 +15,13 @@ open EzCompat open Ezcmd.V2 open EZCMD.TYPES +open Cobol_parser.Options + type t = { config: (module Cobol_config.T); source_format: Cobol_config.source_format_spec; libpath: string list; - verbose: bool; - recovery: Cobol_parser.recovery; - show: [`Pending] list; + parser_options: parser_options; } let showable = @@ -130,12 +130,12 @@ let get () = in let recovery = if !recovery - then Cobol_parser.EnableRecovery { silence_benign_recoveries = false } - else Cobol_parser.DisableRecovery + then EnableRecovery { silence_benign_recoveries = false } + else DisableRecovery in let verbose = !Globals.verbosity > 0 in - { config ; source_format ; libpath = !libpath ; recovery; verbose; - show = !show } + { config; source_format; libpath = !libpath; + parser_options = { recovery; verbose; show = !show } } in get, args diff --git a/src/lsp/superbol_free_lib/common_args.mli b/src/lsp/superbol_free_lib/common_args.mli index e94db350a..f3bc30815 100644 --- a/src/lsp/superbol_free_lib/common_args.mli +++ b/src/lsp/superbol_free_lib/common_args.mli @@ -15,9 +15,7 @@ type t = { config: (module Cobol_config.T); source_format: Cobol_config.source_format_spec; libpath: string list; - verbose: bool; - recovery: Cobol_parser.recovery; - show: [`Pending] list; + parser_options: Cobol_parser.Options.parser_options; } val get : unit -> (unit -> t) * Ezcmd.V2.EZCMD.TYPES.arg_list diff --git a/test/cobol_parsing/parser_testing.ml b/test/cobol_parsing/parser_testing.ml index cce65ca4d..0182ce674 100644 --- a/test/cobol_parsing/parser_testing.ml +++ b/test/cobol_parsing/parser_testing.ml @@ -11,14 +11,23 @@ (* *) (**************************************************************************) +module DIAGS = Cobol_common.Diagnostics + let show_parsed_tokens ?(verbose = false) ?(source_format = Cobol_config.(SF SFFixed)) prog = - let { parsed_output = WithArtifacts (_, { tokens; _ }); _ } = - Cobol_parser.parse_with_tokens ~verbose ~source_format - ~recovery:(EnableRecovery { silence_benign_recoveries = false }) - ~libpath:[] @@ - Cobol_preproc.String { filename = "prog.cob"; contents = prog } + let DIAGS.{ result = WithArtifacts (_, { tokens; _ }); _ } = + Cobol_parser.parse_with_artifacts + ~options:Cobol_parser.Options.{ + default with + verbose; + recovery = EnableRecovery { silence_benign_recoveries = true }; + } @@ + Cobol_preproc.preprocessor + { init_libpath = []; + init_config = Cobol_config.default; + init_source_format = source_format } @@ + String { filename = "prog.cob"; contents = prog } in Cobol_parser.INTERNAL.pp_tokens Fmt.stdout (Lazy.force tokens) diff --git a/test/lsp/lsp_testing.ml b/test/lsp/lsp_testing.ml index 6f23fceb6..540569a7e 100644 --- a/test/lsp/lsp_testing.ml +++ b/test/lsp/lsp_testing.ml @@ -51,7 +51,7 @@ let add_cobol_doc server ?copybook ~projdir filename text = let uri = Lsp.Uri.of_path path in EzFile.write_file path text; let server = - LSP.Server.add ?copybook + LSP.Server.did_open ?copybook DidOpenTextDocumentParams.{ textDocument = TextDocumentItem.{ languageId = "cobol"; version = 0; text; uri; diff --git a/test/output-tests/gnucobol.ml b/test/output-tests/gnucobol.ml index 40d4cf86f..3a2c5c9c7 100644 --- a/test/output-tests/gnucobol.ml +++ b/test/output-tests/gnucobol.ml @@ -16,6 +16,8 @@ open Autofonce_lib open Autofonce_config open Autofonce_core.Types +module DIAGS = Cobol_common.Diagnostics + let () = (* Disable backtrace recording so `OCAMLRUNPARAM=b` has no effect on the output of tests that fail expectedly. *) @@ -155,14 +157,21 @@ let do_check_parse (test_filename, contents, _, { check_loc; then Cobol_config.(SF SFFree) else Cobol_config.(SF SFFixed) in + let parse_simple input = + Cobol_parser.parse_simple @@ + Cobol_preproc.preprocessor + { init_source_format = source_format; + init_config = Cobol_config.default; + init_libpath = [] } input + in try let input = setup_input ~filename contents in - match Cobol_parser.parse_simple ~source_format ~libpath:[] input with - | { parsed_diags; parsed_output = Only Some _; _ } -> - Cobol_common.show_diagnostics ~ppf:Fmt.stdout parsed_diags; + match parse_simple input with + | DIAGS.{ diags; result = Only Some _ } -> + Cobol_common.show_diagnostics ~ppf:Fmt.stdout diags; terminate "ok" - | { parsed_diags; _ } -> - Cobol_common.show_diagnostics ~ppf:Fmt.stdout parsed_diags; + | DIAGS.{ diags; _ } -> + Cobol_common.show_diagnostics ~ppf:Fmt.stdout diags; terminate "ok (with errors)" | exception e -> Pretty.out "Failure (%s)@\n%s@\n" (Printexc.to_string e) contents; diff --git a/test/output-tests/reparse.ml b/test/output-tests/reparse.ml index 4cb5ad7da..5ea789e4e 100644 --- a/test/output-tests/reparse.ml +++ b/test/output-tests/reparse.ml @@ -45,19 +45,28 @@ let preprocess_file ~source_format ?config = preprocess_file ~source_format ?config ~verbose:false ~libpath:[] ~ppf:std_formatter ~epf:std_formatter -let reparse_file ~source_format ?config filename = - let parse = - Cobol_parser.parse_simple ~recovery:DisableRecovery ?config ~libpath:[] +let reparse_file ~source_format ~config filename = + let parse ~source_format input = + Cobol_parser.parse_simple + ~options:Cobol_parser.Options.{ + default with + recovery = DisableRecovery + } @@ + Cobol_preproc.preprocessor + { init_libpath = []; + init_config = config; + init_source_format = source_format } + input in let print = Format.asprintf "@[%a@]@." Cobol_parser.PTree.pp_compilation_group in match parse ~source_format (Filename filename) with - | { parsed_output = Only Some cg; _ } -> ( + | { result = Only Some cg; _ } -> ( Format.printf "Parse: OK. "; let contents = print cg in match parse ~source_format:(SF SFFree) (String { contents; filename }) with - | { parsed_output = Only Some cg'; _ } -> + | { result = Only Some cg'; _ } -> if Cobol_parser.PTree.compare_compilation_group cg cg' = 0 then Format.printf "Reparse: OK." else From 81b21bd422a9ca31f40c393f7a080caeb94a1d95 Mon Sep 17 00:00:00 2001 From: Nicolas Berthier Date: Fri, 22 Sep 2023 11:52:58 +0200 Subject: [PATCH 03/12] Add missing licence header in code of `Cobol_parser.Recovery` --- src/lsp/cobol_parser/recovery.ml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/lsp/cobol_parser/recovery.ml b/src/lsp/cobol_parser/recovery.ml index 475db6293..28cd23bc1 100644 --- a/src/lsp/cobol_parser/recovery.ml +++ b/src/lsp/cobol_parser/recovery.ml @@ -10,6 +10,30 @@ (* of this source tree. *) (* *) (**************************************************************************) +(* *) +(* Copyright (c) 2013-2022 Frédéric Bour, Thomas Refis and *) +(* Simon Castellan. *) +(* *) +(* Permission is hereby granted, free of charge, to any person obtaining *) +(* a copy of this software and associated documentation files (the *) +(* "Software"), to deal in the Software without restriction, including *) +(* without limitation the rights to use, copy, modify, merge, publish, *) +(* distribute, sublicense, and/or sell copies of the Software, and to *) +(* permit persons to whom the Software is furnished to do so, subject to *) +(* the following conditions: *) +(* *) +(* The above copyright notice and this permission notice shall be *) +(* included in all copies or substantial portions of the Software. *) +(* *) +(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, *) +(* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *) +(* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND *) +(* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE *) +(* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION *) +(* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION *) +(* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *) +(* *) +(**************************************************************************) (* Note that's heavily inspired from merlin's own code for recovery *) From 88af9eddfa209c0e12ac8cff6b154b6ad3555271 Mon Sep 17 00:00:00 2001 From: Nicolas Berthier Date: Fri, 29 Sep 2023 23:56:04 +0200 Subject: [PATCH 04/12] Better represent informational paragraphs Additionally, use a dedicated token to avoid retokenization of program IDs --- src/lsp/cobol_ast/misc_descr.ml | 83 +- src/lsp/cobol_ast/raw.ml | 84 +- .../raw_compilation_group_visitor.ml | 26 +- .../cobol_ast/raw_misc_sections_visitor.ml | 13 +- src/lsp/cobol_common/visitor.ml | 6 + src/lsp/cobol_parser/grammar.mly | 152 +- src/lsp/cobol_parser/grammar_context.ml | 130 +- src/lsp/cobol_parser/grammar_post_actions.ml | 24 +- src/lsp/cobol_parser/grammar_printer.ml | 82 +- src/lsp/cobol_parser/grammar_recover.ml | 12116 ++++++++-------- src/lsp/cobol_parser/grammar_tokens.mly | 25 +- src/lsp/cobol_parser/text_keywords.ml | 14 +- src/lsp/cobol_parser/text_tokenizer.ml | 167 +- test/cobol_parsing/cS_tokens.ml | 35 +- test/cobol_parsing/decimal_point.ml | 6 +- test/cobol_parsing/tokens.ml | 6 +- test/output-tests/configuration.expected | 20 - test/output-tests/reparse.ml | 4 - test/output-tests/run_extensions.expected | 74 - test/output-tests/run_file.expected | 20 - test/output-tests/run_misc.expected | 36 - test/output-tests/syn_misc.expected | 68 - 22 files changed, 6586 insertions(+), 6605 deletions(-) diff --git a/src/lsp/cobol_ast/misc_descr.ml b/src/lsp/cobol_ast/misc_descr.ml index a6f9ba706..099a8c4da 100644 --- a/src/lsp/cobol_ast/misc_descr.ml +++ b/src/lsp/cobol_ast/misc_descr.ml @@ -14,25 +14,26 @@ open Terms open Operands -let if_empty pp_el pp_nel ppf = function - | [] -> pp_el ppf () - | xs -> pp_nel ppf xs - -let elist ?prefix:(prf = Fmt.nop) ?sep pp = - if_empty Fmt.nop Fmt.(prf ++ list ?sep pp) - (* -------------------- IDENTIFICATION DIVISION (EXTRA) -------------------- *) type informational_paragraphs = - { - author: string with_loc option; - installation: string with_loc option; - date_written: string with_loc option; - date_compiled: string with_loc option; - security: string with_loc option; - } -[@@deriving show, ord] + informational_paragraph with_loc list +[@@deriving ord] + +and informational_paragraph = + informational_paragraph_header * comment_entry with_loc + +and informational_paragraph_header = + | Author + | DateCompiled + | DateModified + | DateWritten + | Installation + | Remarks + | Security + +and comment_entry = string list (* ------------------------- ENVIRONMENT DIVISION -------------------------- *) @@ -655,7 +656,8 @@ let pp_select_clause ppf = function | SelectRecordKey { key; source } -> Fmt.pf ppf "RECORD %a%a" pp_qualname key - Fmt.(elist ~prefix:(any "SOURCE ") ~sep:sp pp_name') source + Pretty.(list ~fopen:"SOURCE " ~fsep:"@ " ~fclose:"" ~fempty:"" + pp_name') source | SelectRelativeKey n -> Fmt.pf ppf "RELATIVE %a" pp_name' n | SelectReserve n -> Fmt.pf ppf "RESERVE %a" pp_integer n @@ -711,6 +713,8 @@ and arithmetic_mode = and entry_convention = | COBOL +(* --- *) + let pp_entry_convention ppf = function | COBOL -> Fmt.pf ppf "COBOL" @@ -721,21 +725,46 @@ let pp_arithmetic_mode ppf = function | StandardDecimal -> Fmt.pf ppf "STANDARD-DECIMAL" let pp_options_clause ppf = function - | Arithmetic am -> Fmt.pf ppf "ARITHMETIC %a" pp_arithmetic_mode am + | Arithmetic am -> + Fmt.pf ppf "ARITHMETIC %a" pp_arithmetic_mode am | DefaultRoundedMode rm -> - Fmt.pf ppf "DEFAULT ROUNDED MODE %a" pp_rounding_mode rm + Fmt.pf ppf "DEFAULT ROUNDED MODE %a" pp_rounding_mode rm | EntryConvention ec -> - Fmt.pf ppf "ENTRY-CONVENTION %a" pp_entry_convention ec + Fmt.pf ppf "ENTRY-CONVENTION %a" pp_entry_convention ec | FloatBinaryDefault em -> - Fmt.pf ppf "FLOAT-BINARY %a" Data_descr.pp_endianness_mode em + Fmt.pf ppf "FLOAT-BINARY %a" Data_descr.pp_endianness_mode em | FloatDecimalDefault ee -> - Fmt.pf ppf "FLOAT-DECIMAL %a" Data_descr.pp_encoding_endianness ee + Fmt.pf ppf "FLOAT-DECIMAL %a" Data_descr.pp_encoding_endianness ee | IntermediateRounding rm -> - Fmt.pf ppf "INTERMEDIATE-ROUNDING %a" pp_rounding_mode rm + Fmt.pf ppf "INTERMEDIATE-ROUNDING %a" pp_rounding_mode rm let pp_options_paragraph : options_paragraph Fmt.t = - Fmt.( - any "OPTIONS.@ " ++ - box (list ~sep:sp (pp_with_loc pp_options_clause)) - ++ any "." - ) + Fmt.(any "OPTIONS.@ " ++ + box (list ~sep:sp (pp_with_loc pp_options_clause)) ++ + any ".") + + +(* --- *) + +let pp_informational_paragraph_header ppf = function + | Author -> Fmt.pf ppf "AUTHOR" + | DateCompiled -> Fmt.pf ppf "DATE-COMPILED" + | DateModified -> Fmt.pf ppf "DATE-MODIFIED" + | DateWritten -> Fmt.pf ppf "DATE-WRITTEN" + | Installation -> Fmt.pf ppf "INSTALLATION" + | Remarks -> Fmt.pf ppf "REMARKS" + | Security -> Fmt.pf ppf "SECURITY" + +let pp_comment_entry: comment_entry Pretty.printer = + Fmt.(list ~sep:sp string) + +let pp_informational_paragraph: informational_paragraph Pretty.printer = + Fmt.(any "@[<4>" ++ (* <- indent by 4 to avoid Area A *) + pair ~sep:(any ".@ ") + pp_informational_paragraph_header + (pp_with_loc pp_comment_entry) ++ + any "@]") + +let pp_informational_paragraphs: informational_paragraphs Pretty.printer = + Fmt.(list ~sep:(any "@\n") (* force newlines *) + (pp_with_loc pp_informational_paragraph)) diff --git a/src/lsp/cobol_ast/raw.ml b/src/lsp/cobol_ast/raw.ml index 3152ec305..6555ed97d 100644 --- a/src/lsp/cobol_ast/raw.ml +++ b/src/lsp/cobol_ast/raw.ml @@ -13,17 +13,10 @@ open Ast -module Misc_sections = struct - type informational_paragraphs = Ast.informational_paragraphs - let pp_informational_paragraphs = Ast.pp_informational_paragraphs - let compare_informational_paragraphs = Ast.compare_informational_paragraphs - type options_paragraph = Ast.options_paragraph - let pp_options_paragraph = Ast.pp_options_paragraph - let compare_options_paragraph = Ast.compare_options_paragraph - type environment_division = Ast.environment_division - let pp_environment_division = Ast.pp_environment_division - let compare_environment_division = Ast.compare_environment_division -end +module Misc_sections: Abstract.MISC_SECTIONS + with type informational_paragraphs = Ast.informational_paragraphs + and type options_paragraph = Ast.options_paragraph + and type environment_division = Ast.environment_division = Ast module Data_sections (Picture: Abstract.PICTURE) = struct include Picture @@ -819,9 +812,13 @@ struct | ProgramDefinition of { (* Note: more general than before (allows nested prototypes): *) kind: program_kind option; - has_identification_division: bool; - informational_paragraphs: informational_paragraphs - [@compare fun _ _ -> 0]; (* ~COB85, -COB2002 *) + has_identification_division_header: bool; + preliminary_informational_paragraphs: + informational_paragraphs (* GC extension (before PROGRAM-ID) *) + [@compare fun _ _ -> 0]; + supplementary_informational_paragraphs: + informational_paragraphs + [@compare fun _ _ -> 0]; (* ~COB85, -COB2002 *) nested_programs: program_unit with_loc list; } | ProgramPrototype @@ -837,42 +834,37 @@ struct | Initial -> Fmt.pf ppf "INITIAL" | Recursive -> Fmt.pf ppf "RECURSIVE" - let rec pp_program_unit ppf { - program_name; - program_as; - program_level; - program_options; - program_env; - program_data; - program_proc; - program_end_name; - } = - let has_identification_division = + let rec pp_program_unit ppf { program_name; + program_as; + program_level; + program_options; + program_env; + program_data; + program_proc; + program_end_name } = + let has_identification_division_header, + preliminary_info, supplementary_info, + nested_programs, + kind = match program_level with - | ProgramDefinition { has_identification_division = true; _ } -> true - | _ -> false + | ProgramDefinition { has_identification_division_header = p; + preliminary_informational_paragraphs = ip0; + supplementary_informational_paragraphs = ip1; + nested_programs; + kind } -> + p, Some ip0, Some ip1, nested_programs, Some kind + | ProgramPrototype -> + false, None, None, [], None in - let nested_programs = - match program_level with - | ProgramDefinition { nested_programs; _ } -> nested_programs - | ProgramPrototype -> [] - in - let _informational_paragraphs = - match program_level with - | ProgramDefinition { informational_paragraphs = ip; _ } -> Some ip - | ProgramPrototype -> None - in - if has_identification_division then - Fmt.pf ppf "@[IDENTIFICATION@ DIVISION@].@ "; + if has_identification_division_header then + Fmt.pf ppf "@[IDENTIFICATION@ DIVISION@].@\n"; + Fmt.(option pp_informational_paragraphs) ppf preliminary_info; Fmt.pf ppf "@[PROGRAM-ID.@ %a" (pp_with_loc pp_name) program_name; Fmt.(option (any "@ AS " ++ pp_strlit)) ppf program_as; - ( - match program_level with - | ProgramDefinition { kind; _ } -> - Fmt.(option (sp ++ pp_program_kind)) ppf kind - | ProgramPrototype -> Fmt.pf ppf "@ PROTOTYPE" - ); - Fmt.pf ppf ".@]"; + Fmt.(option (option (sp ++ pp_program_kind)) + ~none:(any "@ PROTOTYPE")) ppf kind; + Fmt.pf ppf ".@]@\n"; + Fmt.(option pp_informational_paragraphs) ppf supplementary_info; Fmt.(option (sp ++ pp_with_loc pp_options_paragraph)) ppf program_options; Fmt.(option (sp ++ pp_with_loc pp_environment_division)) ppf program_env; Fmt.(option (sp ++ pp_with_loc pp_data_division)) ppf program_data; diff --git a/src/lsp/cobol_ast/raw_compilation_group_visitor.ml b/src/lsp/cobol_ast/raw_compilation_group_visitor.ml index 846d17e77..cc5f968fb 100644 --- a/src/lsp/cobol_ast/raw_compilation_group_visitor.ml +++ b/src/lsp/cobol_ast/raw_compilation_group_visitor.ml @@ -104,21 +104,27 @@ struct ~continue:begin fun { program_name; program_as; program_level; program_options; program_env; program_data; program_proc; program_end_name } x -> x - >> fold_name' v program_name - >> fold_strlit_opt v program_as + >> (fun x -> match program_level with + | ProgramPrototype -> x + >> fold_name' v program_name + >> fold_strlit_opt v program_as + | ProgramDefinition { (* has_identification_division_header; *) + preliminary_informational_paragraphs = infos0; + supplementary_informational_paragraphs = infos1; + kind; _ } -> ignore kind; x + (* >> fold_bool v has_identification_division_header *) + >> v#continue_with_informational_paragraphs infos0 + >> fold_name' v program_name + >> fold_strlit_opt v program_as + >> v#continue_with_informational_paragraphs infos1) >> fold_options_paragraph'_opt v program_options >> fold_environment_division'_opt v program_env >> fold_data_division'_opt v program_data + >> fold_procedure_division'_opt v program_proc >> (fun x -> match program_level with | ProgramPrototype -> x - | ProgramDefinition { kind; - has_identification_division; - informational_paragraphs = infos; - nested_programs } -> ignore kind; x - >> fold_bool v has_identification_division - >> v#continue_with_informational_paragraphs infos - >> fold_with_loc_list v nested_programs ~fold:fold_program_unit) - >> fold_procedure_division'_opt v program_proc + | ProgramDefinition { nested_programs; _ } -> x + >> fold_with_loc_list v ~fold:fold_program_unit nested_programs) >> fold_name'_opt v program_end_name (* XXX: useful? *) end diff --git a/src/lsp/cobol_ast/raw_misc_sections_visitor.ml b/src/lsp/cobol_ast/raw_misc_sections_visitor.ml index b84b92df3..9d015d15a 100644 --- a/src/lsp/cobol_ast/raw_misc_sections_visitor.ml +++ b/src/lsp/cobol_ast/raw_misc_sections_visitor.ml @@ -31,6 +31,7 @@ module Make = struct class virtual ['a] folder = object inherit ['a] Terms_visitor.folder inherit ['a] Misc_sections_visitor.folder + method fold_informational_paragraph': (informational_paragraph with_loc, 'a) fold = default method fold_options_clause: (options_clause, 'a) fold = default method fold_configuration_section: (configuration_section, 'a) fold = default method fold_configuration_section': (configuration_section with_loc, 'a) fold = default @@ -161,16 +162,12 @@ module Make = struct (* --- *) + let fold_informational_paragraph' (v: _ #folder) = + leaf' v#fold_informational_paragraph' v + let fold_informational_paragraphs (v: _ #folder) = handle v#fold_informational_paragraphs - ~continue:begin fun { author; installation; date_written; - date_compiled; security } x -> x - >> fold_string'_opt v author - >> fold_string'_opt v installation - >> fold_string'_opt v date_written - >> fold_string'_opt v date_compiled - >> fold_string'_opt v security - end + ~continue:(fold_list ~fold:fold_informational_paragraph' v) let fold_options_paragraph (v: _ #folder) = handle v#fold_options_paragraph diff --git a/src/lsp/cobol_common/visitor.ml b/src/lsp/cobol_common/visitor.ml index 0f285ce2e..eca84d2eb 100644 --- a/src/lsp/cobol_common/visitor.ml +++ b/src/lsp/cobol_common/visitor.ml @@ -157,9 +157,15 @@ module Fold = struct (** Helper to shorten definitions for traversal of nodes with source locations *) + (* NOTE: we consider the traversal of `t with_loc` as a whole before the + generic traversal of `_ with_loc` via [fold']. Maybe doing it the other + way round would be more intuitive? *) let handle' vfold ~fold (v: _ #folder) = handle vfold ~continue:(fold' ~fold v) + let leaf' vfold = + handle' vfold ~fold:(fun _ _ -> Fun.id) + (* --- *) (** Reports a missing folding visitor implementation {e once}. *) diff --git a/src/lsp/cobol_parser/grammar.mly b/src/lsp/cobol_parser/grammar.mly index 327d0fd75..388e09f31 100644 --- a/src/lsp/cobol_parser/grammar.mly +++ b/src/lsp/cobol_parser/grammar.mly @@ -69,7 +69,8 @@ let dual_handler_none = let dummy_loc = Grammar_utils.Overlay_manager.(join_limits (dummy_limit, dummy_limit)) - let dummy_name = "_" &@ dummy_loc + let dummy_string = "_" &@ dummy_loc + let dummy_name = dummy_string let dummy_qualname: Cobol_ast.qualname = Cobol_ast.Name dummy_name @@ -269,6 +270,41 @@ let compilation_unit := | ~ = interface_definition ; +let program_definition_identification := + | h = identification_division_header; (* COB85: mandatory *) + id = program_definition_id_paragraph; + ip = informational_paragraphs; + { h, id, ip } + +let program_prototype_identification == + | ~ = identification_division_header; ~ = program_prototype_id_paragraph; < > + +let function_identification := + | ~ = identification_division_header; ~ = function_id_paragraph; < > + +let class_identification := + | ~ = identification_division_header; ~ = class_id_paragraph; < > + +let factory_identification := + | ~ = identification_division_header; ~ = factory_paragraph; < > + +let instance_identification := + | ~ = identification_division_header; ~ = object_paragraph; < > + +let interface_identification := + | ~ = identification_division_header; ~ = interface_id_paragraph; < > + +let method_identification := + | ~ = identification_division_header; ~ = method_id_paragraph; < > + +let identification_division_header == + | IDENTIFICATION; DIVISION; "."; + (* GnuCOBOL allows informational paragraphs before the `*-ID` entry; to + simplify we allow them here for any kind of compilation unit (but ignore, + except for normal programs, for now). *) + ~ = informational_paragraphs; + | {None} + program_definition [@cost 0]: | pd = program_definition_no_end @@ -276,32 +312,35 @@ program_definition [@cost 0]: END PROGRAM ep = name "." { match pd.program_level with | ProgramDefinition { kind; - has_identification_division; - informational_paragraphs; - nested_programs = [] } -> + has_identification_division_header; + preliminary_informational_paragraphs; + supplementary_informational_paragraphs; + nested_programs = [] } -> { pd with - program_level = ProgramDefinition { kind; - has_identification_division; - informational_paragraphs; - nested_programs = pdl }; + program_level = + ProgramDefinition { kind; + has_identification_division_header; + preliminary_informational_paragraphs; + supplementary_informational_paragraphs; + nested_programs = pdl }; program_end_name = Some ep } | _ -> failwith "Cannot happen as per the grammar." } program_definition_no_end: - | id = bo(identification_division) (* COB85: mandatory *) - pid = program_id_paragraph - ipo = informational_paragraphs (* Allowed in nested programs ? *) + | pid = program_definition_identification opo = ro(loc(options_paragraph)) edo = ro(loc(environment_division)) ddo = ro(loc(data_division)) pdo = ro(loc(program_procedure_division)) - { let program_name, program_as, kind = pid in + { let h, ((program_name, program_as), kind), ip1 = pid in + let ip0 = match h with None -> [] | Some h -> h in { program_name; program_as; - program_level = ProgramDefinition { kind; - has_identification_division = id; - informational_paragraphs = ipo; - nested_programs = [] }; + program_level = + ProgramDefinition { has_identification_division_header = h <> None; + preliminary_informational_paragraphs = ip0; + supplementary_informational_paragraphs = ip1; + nested_programs = []; kind }; program_options = opo; program_env = edo; program_data = ddo; @@ -311,14 +350,13 @@ program_definition_no_end: if it does not contain nested programs (it may be used though) *) program_prototype [@cost 999]: - | bo(identification_division) (* Note: bo instead of ? to avoid conflict *) - pid = program_prototype_id_paragraph + | pid = program_prototype_identification opo = ro(loc(options_paragraph)) edo = ro(loc(environment_division)) ddo = ro(loc(data_division)) pdo = ro(loc(procedure_division)) END PROGRAM ep = name "." - { let program_name, program_as = pid in + { let _, (program_name, program_as) = pid in { program_name; program_as; program_level = ProgramPrototype; @@ -329,14 +367,13 @@ program_prototype [@cost 999]: program_end_name = Some ep } } function_unit [@cost 999]: - | ro(identification_division) - fid = function_id_paragraph + | fid = function_identification opo = ro(loc(options_paragraph)) edo = ro(loc(environment_division)) ddo = ro(loc(data_division)) pdo = ro(procedure_division) END FUNCTION ef = name "." - { let name, as_, is_proto = fid in + { let _, (name, as_, is_proto) = fid in { function_name = name; function_as = as_; function_is_proto = is_proto; @@ -347,15 +384,14 @@ function_unit [@cost 999]: function_end_name = ef } } (* TODO: shoudn't we just check ef == name? *) class_definition [@cost 999]: - | ro(identification_division) - cid = class_id_paragraph + | cid = class_identification opo = ro(loc(options_paragraph)) edo = ro(loc(environment_division)) fdo = io(factory_definition) (* Note: inline to avoid conflict *) ido = ro(instance_definition) END CLASS ec = name "." - { let class_name, class_as, class_final, - class_inherits, class_usings = cid in + { let _, (class_name, class_as, class_final, + class_inherits, class_usings) = cid in { class_name; class_as; class_final; @@ -368,42 +404,39 @@ class_definition [@cost 999]: class_end_name = ec } } factory_definition: - | ro(identification_division) - fp = factory_paragraph + | fp = factory_identification opo = ro(loc(options_paragraph)) edo = ro(loc(environment_division)) ddo = ro(loc(data_division)) pdo = ro(object_procedure_division) END FACTORY "." - { { factory_implements = fp; + { { factory_implements = snd fp; factory_options = opo; factory_env = edo; factory_data = ddo; factory_methods = pdo } } instance_definition: - | ro(identification_division) - op = object_paragraph + | op = instance_identification opo = ro(loc(options_paragraph)) edo = ro(loc(environment_division)) ddo = ro(loc(data_division)) pdo = ro(object_procedure_division) END OBJECT "." - { { instance_implements = op; + { { instance_implements = snd op; instance_options = opo; instance_env = edo; instance_data = ddo; instance_methods = pdo } } interface_definition [@cost 999]: - | ro(identification_division) - iid = interface_id_paragraph + | iid = interface_identification opo = ro(loc(options_paragraph)) edo = ro(loc(environment_division)) pdo = ro(object_procedure_division) END INTERFACE ei = name "." - { let interface_name, interface_as, - interface_inherits, interface_usings = iid in + { let _, (interface_name, interface_as, + interface_inherits, interface_usings) = iid in { interface_name; interface_as; interface_inherits; @@ -414,14 +447,14 @@ interface_definition [@cost 999]: interface_end_name = ei } } method_definition: (* Note: used in PROCEDURE DIVISION, see below *) - | ro(identification_division) - mid = method_id_paragraph + | mid = method_identification opo = ro(loc(options_paragraph)) edo = ro(loc(environment_division)) ddo = ro(loc(data_division)) pdo = ro(procedure_division) END METHOD em = name "." - { let method_name, method_kind, method_override, method_final = mid in + { let _, (method_name, method_kind, + method_override, method_final) = mid in { method_name; method_kind; method_override; @@ -433,28 +466,33 @@ method_definition: (* Note: used in PROCEDURE DIVISION, see below *) method_end_name = em } } +let informational_paragraphs := (* ~COB85, -COB2002 *) + rl(loc(informational_paragraph)) -let identification_division := - | IDENTIFICATION; DIVISION; "." +let informational_paragraph := + | ~ = informational_paragraph_header; "."; ~ = loc(comment_entry); < > -let informational_paragraphs := (* ~COB85, -COB2002 *) - | ao = loc(AUTHOR)?; - io = loc(INSTALLATION)?; - dwo = loc(DATE_WRITTEN)?; - dco = loc(DATE_COMPILED)?; - so = loc(SECURITY)?; - { { author = ao; - installation = io; - date_written = dwo; - date_compiled = dco; - security = so } } +let informational_paragraph_header == + | AUTHOR; {Author} + | INSTALLATION; {Installation} + | DATE_WRITTEN; {DateWritten} + | DATE_MODIFIED; {DateModified} + | DATE_COMPILED; {DateCompiled} + | REMARKS; {Remarks} + | SECURITY; {Security} + +let info_word [@recovery "_"] [@symbol ""] := INFO_WORD +let comment_entry [@recovery ["_"]] [@symbol ""] := COMMENT_ENTRY let as__strlit_ := ~ = ro (pf (AS, string_literal)); < > -let program_id_paragraph [@context program_id_paragraph] := - | PROGRAM_ID; "."; i = name; slo = as__strlit_; +let program_id_header_prefix == + | PROGRAM_ID; "."; ~ = loc(info_word); ~ = as__strlit_; < > + +let program_definition_id_paragraph [@context program_id_paragraph] := + | ids = program_id_header_prefix; pko = o(IS?; pk = program_kind; PROGRAM?; { pk }); "."; - { i, slo, pko } + { ids, pko } let program_kind := | COMMON; {Common} (* Only within a nested program *) @@ -462,8 +500,7 @@ let program_kind := | RECURSIVE; {Recursive} let program_prototype_id_paragraph := (* +COB2002 *) - | PROGRAM_ID; "."; i = name; slo = as__strlit_; IS?; PROTOTYPE; "."; - { i, slo } + | ~ = program_id_header_prefix; IS?; PROTOTYPE; "."; < > let function_id_paragraph := | FUNCTION_ID; "."; i = name; slo = as__strlit_; @@ -496,6 +533,7 @@ let method_id_paragraph := (* +COB2002 * o = bo(OVERRIDE); f = bo(IS?; FINAL; {}); { i, PropertyMethod { kind = pk }, o, f } + let options_paragraph [@context options_paragraph] := (* +COB2002 *) | OPTIONS; "."; ~ = lo(sf(rnel(loc(options_clause)),".")); < > diff --git a/src/lsp/cobol_parser/grammar_context.ml b/src/lsp/cobol_parser/grammar_context.ml index 0f0c4a3a1..3918046ad 100644 --- a/src/lsp/cobol_parser/grammar_context.ml +++ b/src/lsp/cobol_parser/grammar_context.ml @@ -19,7 +19,7 @@ let nonterminal_context: type k. k nonterminal -> _ option = function | N_resume_statement -> Some resume_stmt | N_report_occurs_clause -> Some occurs_clause | N_read_statement -> Some read_stmt - | N_program_id_paragraph -> Some program_id_paragraph + | N_program_definition_id_paragraph -> Some program_id_paragraph | N_options_paragraph -> Some options_paragraph | N_occurs_fixed_clause -> Some occurs_clause | N_occurs_dynamic_clause -> Some occurs_clause @@ -50,86 +50,86 @@ let nonterminal_context: type k. k nonterminal -> _ option = function | _ -> None let contexts_for_state_num: int -> _ list = function - | 114 -> [options_paragraph] - | 116 -> [intermediate_rounding_clause] - | 128 -> [float_decimal_clause] - | 141 -> [float_binary_clause] - | 145 -> [entry_convention_clause] - | 148 -> [rounded_phrase] - | 154 -> [arithmetic_clause] - | 193 -> [object_computer_paragraph] - | 308 -> [dynlen_struct_clause] - | 328 -> [currency_clause] - | 366 -> [alphabet_clause] - | 442 -> [interface_specifier] - | 452 -> [function_specifier] - | 459 -> [class_specifier] - | 488 -> [sharing_clause] - | 540 -> [lock_mode_clause] - | 1083 -> [validate_status_clause] - | 1109 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1114 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1116 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1117 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1130 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1131 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1132 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1135 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1136 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1137 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1138 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 28 -> [program_id_paragraph] + | 154 -> [options_paragraph] + | 156 -> [intermediate_rounding_clause] + | 168 -> [float_decimal_clause] + | 181 -> [float_binary_clause] + | 185 -> [entry_convention_clause] + | 188 -> [rounded_phrase] + | 194 -> [arithmetic_clause] + | 233 -> [object_computer_paragraph] + | 347 -> [dynlen_struct_clause] + | 367 -> [currency_clause] + | 405 -> [alphabet_clause] + | 481 -> [interface_specifier] + | 491 -> [function_specifier] + | 498 -> [class_specifier] + | 527 -> [sharing_clause] + | 579 -> [lock_mode_clause] + | 1094 -> [validate_status_clause] + | 1120 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1125 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1127 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1128 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] | 1141 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1142 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] | 1143 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1146 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1147 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] | 1148 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1150 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1149 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] | 1152 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1153 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] | 1154 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1155 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1156 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1157 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1158 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] | 1159 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1160 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] | 1161 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1162 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] | 1163 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] | 1164 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] | 1165 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] | 1166 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] | 1167 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1168 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1169 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1170 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1171 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1172 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] | 1173 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1174 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] | 1175 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1176 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] | 1177 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1179 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] - | 1181 -> [typedef_clause] - | 1381 -> [occurs_clause] - | 1435 -> [typedef_clause] - | 1461 -> [default_clause] - | 1469 -> [constant] - | 1936 -> [occurs_clause] - | 1963 -> [line_clause (*NUMBERS only*)] - | 1965 -> [line_clause (*NUMBERS only*)] - | 1976 -> [column_clause (* NUMBERS & CENTER *)] - | 1982 -> [column_clause (* NUMBERS & CENTER *)] + | 1178 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1184 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1186 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1188 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1190 -> [usage_clause (* ok as none of leftmost terminals are C/S *)] + | 1192 -> [typedef_clause] + | 1392 -> [occurs_clause] + | 1446 -> [typedef_clause] + | 1472 -> [default_clause] + | 1480 -> [constant] + | 1947 -> [occurs_clause] + | 1974 -> [line_clause (*NUMBERS only*)] + | 1976 -> [line_clause (*NUMBERS only*)] | 1987 -> [column_clause (* NUMBERS & CENTER *)] - | 2009 -> [rounded_phrase] - | 2078 -> [screen_descr_entry] - | 2119 -> [erase_clause] - | 2376 -> [retry_phrase] - | 2470 -> [stop_stmt] - | 2557 -> [set_stmt] - | 2617 -> [set_attribute_stmt] - | 2705 -> [resume_stmt] - | 2723 -> [read_stmt] - | 2782 -> [sharing_phrase] - | 3027 -> [exit_stmt] - | 3164 -> [allocate_stmt] - | 3178 -> [accept_stmt] - | 3906 -> [object_paragraph] - | 3912 -> [factory_paragraph] - | 3950 -> [program_id_paragraph] - | 4023 -> [program_id_paragraph] + | 1993 -> [column_clause (* NUMBERS & CENTER *)] + | 1998 -> [column_clause (* NUMBERS & CENTER *)] + | 2020 -> [rounded_phrase] + | 2089 -> [screen_descr_entry] + | 2130 -> [erase_clause] + | 2387 -> [retry_phrase] + | 2481 -> [stop_stmt] + | 2568 -> [set_stmt] + | 2628 -> [set_attribute_stmt] + | 2716 -> [resume_stmt] + | 2734 -> [read_stmt] + | 2793 -> [sharing_phrase] + | 3038 -> [exit_stmt] + | 3175 -> [allocate_stmt] + | 3189 -> [accept_stmt] + | 3904 -> [program_id_paragraph] + | 4034 -> [object_paragraph] + | 4044 -> [factory_paragraph] | _ -> [] let contexts: type k. k lr1state -> _ list = fun s -> diff --git a/src/lsp/cobol_parser/grammar_post_actions.ml b/src/lsp/cobol_parser/grammar_post_actions.ml index 5793d9719..01ecbdeb9 100644 --- a/src/lsp/cobol_parser/grammar_post_actions.ml +++ b/src/lsp/cobol_parser/grammar_post_actions.ml @@ -23,19 +23,19 @@ struct match incoming_symbol state, prod_num with | N N__assign_external_, 2 -> Post_pending ((fun () -> "EXTERNAL") value) - | N N_control_division, 335 -> + | N N_control_division, 336 -> Post_diagnostic ((fun _ -> Config.control_division#verify) value) - | N N_special_names_clause, 2092 -> Post_special_names value - | N N_special_names_clause, 2093 -> Post_special_names value - | N N_special_names_clause, 2094 -> Post_special_names value - | N N_special_names_clause, 2095 -> Post_special_names value - | N N_special_names_clause, 2096 -> Post_special_names value - | N N_special_names_clause, 2097 -> Post_special_names value - | N N_special_names_clause, 2098 -> Post_special_names value - | N N_special_names_clause, 2099 -> Post_special_names value - | N N_special_names_clause, 2100 -> Post_special_names value - | N N_special_names_clause, 2101 -> Post_special_names value - | N N_special_names_clause, 2102 -> Post_special_names value + | N N_special_names_clause, 2103 -> Post_special_names value + | N N_special_names_clause, 2104 -> Post_special_names value + | N N_special_names_clause, 2105 -> Post_special_names value + | N N_special_names_clause, 2106 -> Post_special_names value + | N N_special_names_clause, 2107 -> Post_special_names value + | N N_special_names_clause, 2108 -> Post_special_names value + | N N_special_names_clause, 2109 -> Post_special_names value + | N N_special_names_clause, 2110 -> Post_special_names value + | N N_special_names_clause, 2111 -> Post_special_names value + | N N_special_names_clause, 2112 -> Post_special_names value + | N N_special_names_clause, 2113 -> Post_special_names value | _ -> NoPost let post_production diff --git a/src/lsp/cobol_parser/grammar_printer.ml b/src/lsp/cobol_parser/grammar_printer.ml index 51ce981af..a03414b69 100644 --- a/src/lsp/cobol_parser/grammar_printer.ml +++ b/src/lsp/cobol_parser/grammar_printer.ml @@ -600,6 +600,7 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.T T_INITIALIZE) -> "INITIALIZE" | MenhirInterpreter.X (MenhirInterpreter.T T_INITIAL) -> "INITIAL" | MenhirInterpreter.X (MenhirInterpreter.T T_INHERITS) -> "INHERITS" + | MenhirInterpreter.X (MenhirInterpreter.T T_INFO_WORD) -> "INFO_WORD" | MenhirInterpreter.X (MenhirInterpreter.T T_INDICATE) -> "INDICATE" | MenhirInterpreter.X (MenhirInterpreter.T T_INDEX_2) -> "INDEX_2" | MenhirInterpreter.X (MenhirInterpreter.T T_INDEX_1) -> "INDEX_1" @@ -932,6 +933,7 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.T T_COMMUNICATION) -> "COMMUNICATION" | MenhirInterpreter.X (MenhirInterpreter.T T_COMMON) -> "COMMON" | MenhirInterpreter.X (MenhirInterpreter.T T_COMMIT) -> "COMMIT" + | MenhirInterpreter.X (MenhirInterpreter.T T_COMMENT_ENTRY) -> "COMMENT_ENTRY" | MenhirInterpreter.X (MenhirInterpreter.T T_COMMAND_LINE) -> "COMMAND_LINE" | MenhirInterpreter.X (MenhirInterpreter.T T_COMMA) -> "COMMA" | MenhirInterpreter.X (MenhirInterpreter.T T_COMBO_BOX) -> "COMBO_BOX" @@ -1294,7 +1296,6 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_ro_linkage_section_) -> "" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_ro_integer_) -> "" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_ro_instance_definition_) -> "" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_ro_identification_division_) -> "" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_ro_file_section_) -> "" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_ro_expression_no_all_) -> "" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_ro_expands_phrase_) -> "" @@ -1365,6 +1366,7 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_rl_loc_object_computer_clause__) -> "" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_rl_loc_multiple_file_clause__) -> "" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_rl_loc_method_definition__) -> "" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_rl_loc_informational_paragraph__) -> "" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_rl_loc_file_or_sort_merge_descr_entry__) -> "" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_rl_loc_file_descr_clause__) -> "" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_rl_loc_entry_name_clause__) -> "" @@ -1428,8 +1430,9 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_program_prototype) -> "program_prototype" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_program_procedure_division) -> "program_procedure_division" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_program_kind) -> "program_kind" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_program_id_paragraph) -> "program_id_paragraph" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_program_definition_no_end) -> "program_definition_no_end" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_program_definition_identification) -> "program_definition_identification" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_program_definition_id_paragraph) -> "program_definition_id_paragraph" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_program_definition) -> "program_definition" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_program_collating_sequence_clause) -> "program_collating_sequence_clause" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_procedure_name_decl) -> "procedure_name_decl" @@ -1529,17 +1532,11 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_loc_entry_name_clause__) -> "option_loc_entry_name_clause__" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_loc_data_division__) -> "option_loc_data_division__" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_loc_configuration_section__) -> "option_loc_configuration_section__" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_loc_SECURITY__) -> "option_loc_SECURITY__" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_loc_INSTALLATION__) -> "option_loc_INSTALLATION__" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_loc_DATE_WRITTEN__) -> "option_loc_DATE_WRITTEN__" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_loc_DATE_COMPILED__) -> "option_loc_DATE_COMPILED__" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_loc_AUTHOR__) -> "option_loc_AUTHOR__" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_linkage_section_) -> "option_linkage_section_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_limit_is__) -> "option_limit_is__" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_io_control_entry_) -> "option_io_control_entry_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_integer_) -> "option_integer_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_instance_definition_) -> "option_instance_definition_" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_identification_division_) -> "option_identification_division_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_file_section_) -> "option_file_section_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_expression_no_all_) -> "option_expression_no_all_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_expands_phrase_) -> "option_expands_phrase_" @@ -1738,6 +1735,7 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_midrule___anonymous_27_) -> "midrule___anonymous_27_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_midrule___anonymous_15_) -> "midrule___anonymous_15_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_midrule___anonymous_0_) -> "midrule___anonymous_0_" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_method_identification) -> "method_identification" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_method_id_paragraph) -> "method_id_paragraph" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_method_definition) -> "method_definition" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_message_or_segment) -> "message_or_segment" @@ -1795,6 +1793,7 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_list_loc_object_computer_clause__) -> "list_loc_object_computer_clause__" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_list_loc_multiple_file_clause__) -> "list_loc_multiple_file_clause__" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_list_loc_method_definition__) -> "list_loc_method_definition__" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_list_loc_informational_paragraph__) -> "list_loc_informational_paragraph__" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_list_loc_file_or_sort_merge_descr_entry__) -> "list_loc_file_or_sort_merge_descr_entry__" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_list_loc_file_descr_clause__) -> "list_loc_file_descr_clause__" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_list_loc_entry_name_clause__) -> "list_loc_entry_name_clause__" @@ -1826,10 +1825,12 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_intrinsic_function_name) -> "intrinsic_function_name" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_intermediate_rounding_clause) -> "intermediate_rounding_clause" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_interface_specifier) -> "interface_specifier" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_interface_identification) -> "interface_identification" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_interface_id_paragraph) -> "interface_id_paragraph" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_interface_definition) -> "interface_definition" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_integers) -> "integers" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_integer) -> "" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_instance_identification) -> "instance_identification" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_instance_definition) -> "instance_definition" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_inspect_where) -> "inspect_where" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_inspect_statement) -> "inspect_statement" @@ -1841,6 +1842,8 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_initialize_statement) -> "initialize_statement" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_init_data_category) -> "init_data_category" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_informational_paragraphs) -> "informational_paragraphs" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_informational_paragraph) -> "informational_paragraph" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_info_word) -> "" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_indexed_by) -> "indexed_by" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_in_of) -> "in_of" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_imperative_statement) -> "imperative_statement" @@ -1849,7 +1852,6 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_if_statement) -> "if_statement" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_if_body) -> "if_body" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_idents) -> "" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_identification_division) -> "identification_division" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_ident_or_string_no_all) -> "ident_or_string_no_all" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_ident_or_string) -> "ident_or_string" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_ident_or_numeric) -> "ident_or_numeric" @@ -1872,6 +1874,7 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_function_unit) -> "function_unit" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_function_specifier) -> "function_specifier" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_function_name) -> "" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_function_identification) -> "function_identification" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_function_id_paragraph) -> "function_id_paragraph" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_from_to_characters_opt) -> "from_to_characters_opt" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_free_statement) -> "free_statement" @@ -1891,6 +1894,7 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_file_control_paragraph) -> "file_control_paragraph" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_figurative_constant) -> "" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_factory_paragraph) -> "factory_paragraph" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_factory_identification) -> "factory_identification" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_factory_definition) -> "factory_definition" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_external_clause) -> "external_clause" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_extended_condition) -> "extended_condition" @@ -1982,6 +1986,7 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_communication_section) -> "communication_section" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_communication_descr_entry) -> "communication_descr_entry" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_communication_descr_clause) -> "communication_descr_clause" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_comment_entry) -> "" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_column_position) -> "column_position" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_column_number) -> "column_number" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_column_header) -> "column_header" @@ -1993,6 +1998,7 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_close_format) -> "close_format" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_class_specifier) -> "class_specifier" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_class_name_clause) -> "class_name_clause" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_class_identification) -> "class_identification" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_class_id_paragraph) -> "class_id_paragraph" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_class_definition) -> "class_definition" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_class_condition_no_ident) -> "class_condition_no_ident" @@ -2012,7 +2018,6 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_call_prefix) -> "call_prefix" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_boption_or__RECORD_RECORDS__) -> "boption_or__RECORD_RECORDS__" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_boption_or__LINE_LINES__) -> "boption_or__LINE_LINES__" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_boption_identification_division_) -> "boption_identification_division_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_boption___anonymous_87_) -> "boption___anonymous_87_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_boption___anonymous_81_) -> "boption___anonymous_81_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_boption___anonymous_71_) -> "boption___anonymous_71_" @@ -2678,6 +2683,7 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.T T_INITIALIZE -> (fun _ -> "INITIALIZE") | MenhirInterpreter.T T_INITIAL -> (fun _ -> "INITIAL") | MenhirInterpreter.T T_INHERITS -> (fun _ -> "INHERITS") + | MenhirInterpreter.T T_INFO_WORD -> (fun _ -> "INFO_WORD") | MenhirInterpreter.T T_INDICATE -> (fun _ -> "INDICATE") | MenhirInterpreter.T T_INDEX_2 -> (fun _ -> "INDEX_2") | MenhirInterpreter.T T_INDEX_1 -> (fun _ -> "INDEX_1") @@ -3010,6 +3016,7 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.T T_COMMUNICATION -> (fun _ -> "COMMUNICATION") | MenhirInterpreter.T T_COMMON -> (fun _ -> "COMMON") | MenhirInterpreter.T T_COMMIT -> (fun _ -> "COMMIT") + | MenhirInterpreter.T T_COMMENT_ENTRY -> (fun _ -> "COMMENT_ENTRY") | MenhirInterpreter.T T_COMMAND_LINE -> (fun _ -> "COMMAND_LINE") | MenhirInterpreter.T T_COMMA -> (fun _ -> "COMMA") | MenhirInterpreter.T T_COMBO_BOX -> (fun _ -> "COMBO_BOX") @@ -3372,7 +3379,6 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_ro_linkage_section_ -> (fun _ -> "") | MenhirInterpreter.N MenhirInterpreter.N_ro_integer_ -> (fun _ -> "") | MenhirInterpreter.N MenhirInterpreter.N_ro_instance_definition_ -> (fun _ -> "") - | MenhirInterpreter.N MenhirInterpreter.N_ro_identification_division_ -> (fun _ -> "") | MenhirInterpreter.N MenhirInterpreter.N_ro_file_section_ -> (fun _ -> "") | MenhirInterpreter.N MenhirInterpreter.N_ro_expression_no_all_ -> (fun _ -> "") | MenhirInterpreter.N MenhirInterpreter.N_ro_expands_phrase_ -> (fun _ -> "") @@ -3443,6 +3449,7 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_rl_loc_object_computer_clause__ -> (fun _ -> "") | MenhirInterpreter.N MenhirInterpreter.N_rl_loc_multiple_file_clause__ -> (fun _ -> "") | MenhirInterpreter.N MenhirInterpreter.N_rl_loc_method_definition__ -> (fun _ -> "") + | MenhirInterpreter.N MenhirInterpreter.N_rl_loc_informational_paragraph__ -> (fun _ -> "") | MenhirInterpreter.N MenhirInterpreter.N_rl_loc_file_or_sort_merge_descr_entry__ -> (fun _ -> "") | MenhirInterpreter.N MenhirInterpreter.N_rl_loc_file_descr_clause__ -> (fun _ -> "") | MenhirInterpreter.N MenhirInterpreter.N_rl_loc_entry_name_clause__ -> (fun _ -> "") @@ -3506,8 +3513,9 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_program_prototype -> (fun _ -> "program_prototype") | MenhirInterpreter.N MenhirInterpreter.N_program_procedure_division -> (fun _ -> "program_procedure_division") | MenhirInterpreter.N MenhirInterpreter.N_program_kind -> (fun _ -> "program_kind") - | MenhirInterpreter.N MenhirInterpreter.N_program_id_paragraph -> (fun _ -> "program_id_paragraph") | MenhirInterpreter.N MenhirInterpreter.N_program_definition_no_end -> (fun _ -> "program_definition_no_end") + | MenhirInterpreter.N MenhirInterpreter.N_program_definition_identification -> (fun _ -> "program_definition_identification") + | MenhirInterpreter.N MenhirInterpreter.N_program_definition_id_paragraph -> (fun _ -> "program_definition_id_paragraph") | MenhirInterpreter.N MenhirInterpreter.N_program_definition -> (fun _ -> "program_definition") | MenhirInterpreter.N MenhirInterpreter.N_program_collating_sequence_clause -> (fun _ -> "program_collating_sequence_clause") | MenhirInterpreter.N MenhirInterpreter.N_procedure_name_decl -> (fun _ -> "procedure_name_decl") @@ -3607,17 +3615,11 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_option_loc_entry_name_clause__ -> (fun _ -> "option_loc_entry_name_clause__") | MenhirInterpreter.N MenhirInterpreter.N_option_loc_data_division__ -> (fun _ -> "option_loc_data_division__") | MenhirInterpreter.N MenhirInterpreter.N_option_loc_configuration_section__ -> (fun _ -> "option_loc_configuration_section__") - | MenhirInterpreter.N MenhirInterpreter.N_option_loc_SECURITY__ -> (fun _ -> "option_loc_SECURITY__") - | MenhirInterpreter.N MenhirInterpreter.N_option_loc_INSTALLATION__ -> (fun _ -> "option_loc_INSTALLATION__") - | MenhirInterpreter.N MenhirInterpreter.N_option_loc_DATE_WRITTEN__ -> (fun _ -> "option_loc_DATE_WRITTEN__") - | MenhirInterpreter.N MenhirInterpreter.N_option_loc_DATE_COMPILED__ -> (fun _ -> "option_loc_DATE_COMPILED__") - | MenhirInterpreter.N MenhirInterpreter.N_option_loc_AUTHOR__ -> (fun _ -> "option_loc_AUTHOR__") | MenhirInterpreter.N MenhirInterpreter.N_option_linkage_section_ -> (fun _ -> "option_linkage_section_") | MenhirInterpreter.N MenhirInterpreter.N_option_limit_is__ -> (fun _ -> "option_limit_is__") | MenhirInterpreter.N MenhirInterpreter.N_option_io_control_entry_ -> (fun _ -> "option_io_control_entry_") | MenhirInterpreter.N MenhirInterpreter.N_option_integer_ -> (fun _ -> "option_integer_") | MenhirInterpreter.N MenhirInterpreter.N_option_instance_definition_ -> (fun _ -> "option_instance_definition_") - | MenhirInterpreter.N MenhirInterpreter.N_option_identification_division_ -> (fun _ -> "option_identification_division_") | MenhirInterpreter.N MenhirInterpreter.N_option_file_section_ -> (fun _ -> "option_file_section_") | MenhirInterpreter.N MenhirInterpreter.N_option_expression_no_all_ -> (fun _ -> "option_expression_no_all_") | MenhirInterpreter.N MenhirInterpreter.N_option_expands_phrase_ -> (fun _ -> "option_expands_phrase_") @@ -3816,6 +3818,7 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_midrule___anonymous_27_ -> (fun _ -> "midrule___anonymous_27_") | MenhirInterpreter.N MenhirInterpreter.N_midrule___anonymous_15_ -> (fun _ -> "midrule___anonymous_15_") | MenhirInterpreter.N MenhirInterpreter.N_midrule___anonymous_0_ -> (fun _ -> "midrule___anonymous_0_") + | MenhirInterpreter.N MenhirInterpreter.N_method_identification -> (fun _ -> "method_identification") | MenhirInterpreter.N MenhirInterpreter.N_method_id_paragraph -> (fun _ -> "method_id_paragraph") | MenhirInterpreter.N MenhirInterpreter.N_method_definition -> (fun _ -> "method_definition") | MenhirInterpreter.N MenhirInterpreter.N_message_or_segment -> (fun _ -> "message_or_segment") @@ -3873,6 +3876,7 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_list_loc_object_computer_clause__ -> (fun _ -> "list_loc_object_computer_clause__") | MenhirInterpreter.N MenhirInterpreter.N_list_loc_multiple_file_clause__ -> (fun _ -> "list_loc_multiple_file_clause__") | MenhirInterpreter.N MenhirInterpreter.N_list_loc_method_definition__ -> (fun _ -> "list_loc_method_definition__") + | MenhirInterpreter.N MenhirInterpreter.N_list_loc_informational_paragraph__ -> (fun _ -> "list_loc_informational_paragraph__") | MenhirInterpreter.N MenhirInterpreter.N_list_loc_file_or_sort_merge_descr_entry__ -> (fun _ -> "list_loc_file_or_sort_merge_descr_entry__") | MenhirInterpreter.N MenhirInterpreter.N_list_loc_file_descr_clause__ -> (fun _ -> "list_loc_file_descr_clause__") | MenhirInterpreter.N MenhirInterpreter.N_list_loc_entry_name_clause__ -> (fun _ -> "list_loc_entry_name_clause__") @@ -3904,10 +3908,12 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_intrinsic_function_name -> (fun _ -> "intrinsic_function_name") | MenhirInterpreter.N MenhirInterpreter.N_intermediate_rounding_clause -> (fun _ -> "intermediate_rounding_clause") | MenhirInterpreter.N MenhirInterpreter.N_interface_specifier -> (fun _ -> "interface_specifier") + | MenhirInterpreter.N MenhirInterpreter.N_interface_identification -> (fun _ -> "interface_identification") | MenhirInterpreter.N MenhirInterpreter.N_interface_id_paragraph -> (fun _ -> "interface_id_paragraph") | MenhirInterpreter.N MenhirInterpreter.N_interface_definition -> (fun _ -> "interface_definition") | MenhirInterpreter.N MenhirInterpreter.N_integers -> (fun _ -> "integers") | MenhirInterpreter.N MenhirInterpreter.N_integer -> (fun _ -> "") + | MenhirInterpreter.N MenhirInterpreter.N_instance_identification -> (fun _ -> "instance_identification") | MenhirInterpreter.N MenhirInterpreter.N_instance_definition -> (fun _ -> "instance_definition") | MenhirInterpreter.N MenhirInterpreter.N_inspect_where -> (fun _ -> "inspect_where") | MenhirInterpreter.N MenhirInterpreter.N_inspect_statement -> (fun _ -> "inspect_statement") @@ -3919,6 +3925,8 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_initialize_statement -> (fun _ -> "initialize_statement") | MenhirInterpreter.N MenhirInterpreter.N_init_data_category -> (fun _ -> "init_data_category") | MenhirInterpreter.N MenhirInterpreter.N_informational_paragraphs -> (fun _ -> "informational_paragraphs") + | MenhirInterpreter.N MenhirInterpreter.N_informational_paragraph -> (fun _ -> "informational_paragraph") + | MenhirInterpreter.N MenhirInterpreter.N_info_word -> (fun _ -> "") | MenhirInterpreter.N MenhirInterpreter.N_indexed_by -> (fun _ -> "indexed_by") | MenhirInterpreter.N MenhirInterpreter.N_in_of -> (fun _ -> "in_of") | MenhirInterpreter.N MenhirInterpreter.N_imperative_statement -> (fun _ -> "imperative_statement") @@ -3927,7 +3935,6 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_if_statement -> (fun _ -> "if_statement") | MenhirInterpreter.N MenhirInterpreter.N_if_body -> (fun _ -> "if_body") | MenhirInterpreter.N MenhirInterpreter.N_idents -> (fun _ -> "") - | MenhirInterpreter.N MenhirInterpreter.N_identification_division -> (fun _ -> "identification_division") | MenhirInterpreter.N MenhirInterpreter.N_ident_or_string_no_all -> (fun _ -> "ident_or_string_no_all") | MenhirInterpreter.N MenhirInterpreter.N_ident_or_string -> (fun _ -> "ident_or_string") | MenhirInterpreter.N MenhirInterpreter.N_ident_or_numeric -> (fun _ -> "ident_or_numeric") @@ -3950,6 +3957,7 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_function_unit -> (fun _ -> "function_unit") | MenhirInterpreter.N MenhirInterpreter.N_function_specifier -> (fun _ -> "function_specifier") | MenhirInterpreter.N MenhirInterpreter.N_function_name -> (fun _ -> "") + | MenhirInterpreter.N MenhirInterpreter.N_function_identification -> (fun _ -> "function_identification") | MenhirInterpreter.N MenhirInterpreter.N_function_id_paragraph -> (fun _ -> "function_id_paragraph") | MenhirInterpreter.N MenhirInterpreter.N_from_to_characters_opt -> (fun _ -> "from_to_characters_opt") | MenhirInterpreter.N MenhirInterpreter.N_free_statement -> (fun _ -> "free_statement") @@ -3969,6 +3977,7 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_file_control_paragraph -> (fun _ -> "file_control_paragraph") | MenhirInterpreter.N MenhirInterpreter.N_figurative_constant -> (fun _ -> "") | MenhirInterpreter.N MenhirInterpreter.N_factory_paragraph -> (fun _ -> "factory_paragraph") + | MenhirInterpreter.N MenhirInterpreter.N_factory_identification -> (fun _ -> "factory_identification") | MenhirInterpreter.N MenhirInterpreter.N_factory_definition -> (fun _ -> "factory_definition") | MenhirInterpreter.N MenhirInterpreter.N_external_clause -> (fun _ -> "external_clause") | MenhirInterpreter.N MenhirInterpreter.N_extended_condition -> (fun _ -> "extended_condition") @@ -4060,6 +4069,7 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_communication_section -> (fun _ -> "communication_section") | MenhirInterpreter.N MenhirInterpreter.N_communication_descr_entry -> (fun _ -> "communication_descr_entry") | MenhirInterpreter.N MenhirInterpreter.N_communication_descr_clause -> (fun _ -> "communication_descr_clause") + | MenhirInterpreter.N MenhirInterpreter.N_comment_entry -> (fun _ -> "") | MenhirInterpreter.N MenhirInterpreter.N_column_position -> (fun _ -> "column_position") | MenhirInterpreter.N MenhirInterpreter.N_column_number -> (fun _ -> "column_number") | MenhirInterpreter.N MenhirInterpreter.N_column_header -> (fun _ -> "column_header") @@ -4071,6 +4081,7 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_close_format -> (fun _ -> "close_format") | MenhirInterpreter.N MenhirInterpreter.N_class_specifier -> (fun _ -> "class_specifier") | MenhirInterpreter.N MenhirInterpreter.N_class_name_clause -> (fun _ -> "class_name_clause") + | MenhirInterpreter.N MenhirInterpreter.N_class_identification -> (fun _ -> "class_identification") | MenhirInterpreter.N MenhirInterpreter.N_class_id_paragraph -> (fun _ -> "class_id_paragraph") | MenhirInterpreter.N MenhirInterpreter.N_class_definition -> (fun _ -> "class_definition") | MenhirInterpreter.N MenhirInterpreter.N_class_condition_no_ident -> (fun _ -> "class_condition_no_ident") @@ -4090,7 +4101,6 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_call_prefix -> (fun _ -> "call_prefix") | MenhirInterpreter.N MenhirInterpreter.N_boption_or__RECORD_RECORDS__ -> (fun _ -> "boption_or__RECORD_RECORDS__") | MenhirInterpreter.N MenhirInterpreter.N_boption_or__LINE_LINES__ -> (fun _ -> "boption_or__LINE_LINES__") - | MenhirInterpreter.N MenhirInterpreter.N_boption_identification_division_ -> (fun _ -> "boption_identification_division_") | MenhirInterpreter.N MenhirInterpreter.N_boption___anonymous_87_ -> (fun _ -> "boption___anonymous_87_") | MenhirInterpreter.N MenhirInterpreter.N_boption___anonymous_81_ -> (fun _ -> "boption___anonymous_81_") | MenhirInterpreter.N MenhirInterpreter.N_boption___anonymous_71_ -> (fun _ -> "boption___anonymous_71_") @@ -4388,7 +4398,7 @@ let print_token = function | SELECT -> print_value (MenhirInterpreter.T T_SELECT) () | SEGMENT_LIMIT -> print_value (MenhirInterpreter.T T_SEGMENT_LIMIT) () | SEGMENT -> print_value (MenhirInterpreter.T T_SEGMENT) () - | SECURITY v -> print_value (MenhirInterpreter.T T_SECURITY) v + | SECURITY -> print_value (MenhirInterpreter.T T_SECURITY) () | SECURE -> print_value (MenhirInterpreter.T T_SECURE) () | SECTION -> print_value (MenhirInterpreter.T T_SECTION) () | SECONDS -> print_value (MenhirInterpreter.T T_SECONDS) () @@ -4450,7 +4460,7 @@ let print_token = function | REORG_CRITERIA -> print_value (MenhirInterpreter.T T_REORG_CRITERIA) () | RENAMES -> print_value (MenhirInterpreter.T T_RENAMES) () | REMOVAL -> print_value (MenhirInterpreter.T T_REMOVAL) () - | REMARKS v -> print_value (MenhirInterpreter.T T_REMARKS) v + | REMARKS -> print_value (MenhirInterpreter.T T_REMARKS) () | REMAINDER -> print_value (MenhirInterpreter.T T_REMAINDER) () | RELEASE -> print_value (MenhirInterpreter.T T_RELEASE) () | RELATIVE -> print_value (MenhirInterpreter.T T_RELATIVE) () @@ -4743,7 +4753,7 @@ let print_token = function | INTERMEDIATE -> print_value (MenhirInterpreter.T T_INTERMEDIATE) () | INTERFACE_ID -> print_value (MenhirInterpreter.T T_INTERFACE_ID) () | INTERFACE -> print_value (MenhirInterpreter.T T_INTERFACE) () - | INSTALLATION v -> print_value (MenhirInterpreter.T T_INSTALLATION) v + | INSTALLATION -> print_value (MenhirInterpreter.T T_INSTALLATION) () | INSPECT -> print_value (MenhirInterpreter.T T_INSPECT) () | INSERT_ROWS -> print_value (MenhirInterpreter.T T_INSERT_ROWS) () | INSERTION_INDEX -> print_value (MenhirInterpreter.T T_INSERTION_INDEX) () @@ -4755,6 +4765,7 @@ let print_token = function | INITIALIZE -> print_value (MenhirInterpreter.T T_INITIALIZE) () | INITIAL -> print_value (MenhirInterpreter.T T_INITIAL) () | INHERITS -> print_value (MenhirInterpreter.T T_INHERITS) () + | INFO_WORD v -> print_value (MenhirInterpreter.T T_INFO_WORD) v | INDICATE -> print_value (MenhirInterpreter.T T_INDICATE) () | INDEX_2 -> print_value (MenhirInterpreter.T T_INDEX_2) () | INDEX_1 -> print_value (MenhirInterpreter.T T_INDEX_1) () @@ -5007,10 +5018,10 @@ let print_token = function | DEBUGGING -> print_value (MenhirInterpreter.T T_DEBUGGING) () | DAY_OF_WEEK -> print_value (MenhirInterpreter.T T_DAY_OF_WEEK) () | DAY -> print_value (MenhirInterpreter.T T_DAY) () - | DATE_WRITTEN v -> print_value (MenhirInterpreter.T T_DATE_WRITTEN) v - | DATE_MODIFIED v -> print_value (MenhirInterpreter.T T_DATE_MODIFIED) v + | DATE_WRITTEN -> print_value (MenhirInterpreter.T T_DATE_WRITTEN) () + | DATE_MODIFIED -> print_value (MenhirInterpreter.T T_DATE_MODIFIED) () | DATE_ENTRY -> print_value (MenhirInterpreter.T T_DATE_ENTRY) () - | DATE_COMPILED v -> print_value (MenhirInterpreter.T T_DATE_COMPILED) v + | DATE_COMPILED -> print_value (MenhirInterpreter.T T_DATE_COMPILED) () | DATE -> print_value (MenhirInterpreter.T T_DATE) () | DATA_TYPES -> print_value (MenhirInterpreter.T T_DATA_TYPES) () | DATA_RECORDS -> print_value (MenhirInterpreter.T T_DATA_RECORDS) () @@ -5087,6 +5098,7 @@ let print_token = function | COMMUNICATION -> print_value (MenhirInterpreter.T T_COMMUNICATION) () | COMMON -> print_value (MenhirInterpreter.T T_COMMON) () | COMMIT -> print_value (MenhirInterpreter.T T_COMMIT) () + | COMMENT_ENTRY v -> print_value (MenhirInterpreter.T T_COMMENT_ENTRY) v | COMMAND_LINE -> print_value (MenhirInterpreter.T T_COMMAND_LINE) () | COMMA -> print_value (MenhirInterpreter.T T_COMMA) () | COMBO_BOX -> print_value (MenhirInterpreter.T T_COMBO_BOX) () @@ -5205,7 +5217,7 @@ let print_token = function | AUTO_DECIMAL -> print_value (MenhirInterpreter.T T_AUTO_DECIMAL) () | AUTOMATIC -> print_value (MenhirInterpreter.T T_AUTOMATIC) () | AUTO -> print_value (MenhirInterpreter.T T_AUTO) () - | AUTHOR v -> print_value (MenhirInterpreter.T T_AUTHOR) v + | AUTHOR -> print_value (MenhirInterpreter.T T_AUTHOR) () | AT_EOP -> print_value (MenhirInterpreter.T T_AT_EOP) () | AT_END -> print_value (MenhirInterpreter.T T_AT_END) () | ATTRIBUTES -> print_value (MenhirInterpreter.T T_ATTRIBUTES) () @@ -5495,7 +5507,7 @@ let token_of_terminal (type a) (t : a MenhirInterpreter.terminal) (v : a) : toke | T_SELECT -> SELECT | T_SEGMENT_LIMIT -> SEGMENT_LIMIT | T_SEGMENT -> SEGMENT - | T_SECURITY -> SECURITY v + | T_SECURITY -> SECURITY | T_SECURE -> SECURE | T_SECTION -> SECTION | T_SECONDS -> SECONDS @@ -5557,7 +5569,7 @@ let token_of_terminal (type a) (t : a MenhirInterpreter.terminal) (v : a) : toke | T_REORG_CRITERIA -> REORG_CRITERIA | T_RENAMES -> RENAMES | T_REMOVAL -> REMOVAL - | T_REMARKS -> REMARKS v + | T_REMARKS -> REMARKS | T_REMAINDER -> REMAINDER | T_RELEASE -> RELEASE | T_RELATIVE -> RELATIVE @@ -5850,7 +5862,7 @@ let token_of_terminal (type a) (t : a MenhirInterpreter.terminal) (v : a) : toke | T_INTERMEDIATE -> INTERMEDIATE | T_INTERFACE_ID -> INTERFACE_ID | T_INTERFACE -> INTERFACE - | T_INSTALLATION -> INSTALLATION v + | T_INSTALLATION -> INSTALLATION | T_INSPECT -> INSPECT | T_INSERT_ROWS -> INSERT_ROWS | T_INSERTION_INDEX -> INSERTION_INDEX @@ -5862,6 +5874,7 @@ let token_of_terminal (type a) (t : a MenhirInterpreter.terminal) (v : a) : toke | T_INITIALIZE -> INITIALIZE | T_INITIAL -> INITIAL | T_INHERITS -> INHERITS + | T_INFO_WORD -> INFO_WORD v | T_INDICATE -> INDICATE | T_INDEX_2 -> INDEX_2 | T_INDEX_1 -> INDEX_1 @@ -6114,10 +6127,10 @@ let token_of_terminal (type a) (t : a MenhirInterpreter.terminal) (v : a) : toke | T_DEBUGGING -> DEBUGGING | T_DAY_OF_WEEK -> DAY_OF_WEEK | T_DAY -> DAY - | T_DATE_WRITTEN -> DATE_WRITTEN v - | T_DATE_MODIFIED -> DATE_MODIFIED v + | T_DATE_WRITTEN -> DATE_WRITTEN + | T_DATE_MODIFIED -> DATE_MODIFIED | T_DATE_ENTRY -> DATE_ENTRY - | T_DATE_COMPILED -> DATE_COMPILED v + | T_DATE_COMPILED -> DATE_COMPILED | T_DATE -> DATE | T_DATA_TYPES -> DATA_TYPES | T_DATA_RECORDS -> DATA_RECORDS @@ -6194,6 +6207,7 @@ let token_of_terminal (type a) (t : a MenhirInterpreter.terminal) (v : a) : toke | T_COMMUNICATION -> COMMUNICATION | T_COMMON -> COMMON | T_COMMIT -> COMMIT + | T_COMMENT_ENTRY -> COMMENT_ENTRY v | T_COMMAND_LINE -> COMMAND_LINE | T_COMMA -> COMMA | T_COMBO_BOX -> COMBO_BOX @@ -6312,7 +6326,7 @@ let token_of_terminal (type a) (t : a MenhirInterpreter.terminal) (v : a) : toke | T_AUTO_DECIMAL -> AUTO_DECIMAL | T_AUTOMATIC -> AUTOMATIC | T_AUTO -> AUTO - | T_AUTHOR -> AUTHOR v + | T_AUTHOR -> AUTHOR | T_AT_EOP -> AT_EOP | T_AT_END -> AT_END | T_ATTRIBUTES -> ATTRIBUTES diff --git a/src/lsp/cobol_parser/grammar_recover.ml b/src/lsp/cobol_parser/grammar_recover.ml index 68d1b10b8..dd886b926 100644 --- a/src/lsp/cobol_parser/grammar_recover.ml +++ b/src/lsp/cobol_parser/grammar_recover.ml @@ -17,7 +17,8 @@ module Default = struct let dummy_loc = Grammar_utils.Overlay_manager.(join_limits (dummy_limit, dummy_limit)) - let dummy_name = "_" &@ dummy_loc + let dummy_string = "_" &@ dummy_loc + let dummy_name = dummy_string let dummy_qualname: Cobol_ast.qualname = Cobol_ast.Name dummy_name @@ -269,7 +270,7 @@ module Default = struct | MenhirInterpreter.T T_SELECT -> () | MenhirInterpreter.T T_SEGMENT_LIMIT -> () | MenhirInterpreter.T T_SEGMENT -> () - | MenhirInterpreter.T T_SECURITY -> "_" + | MenhirInterpreter.T T_SECURITY -> () | MenhirInterpreter.T T_SECURE -> () | MenhirInterpreter.T T_SECTION -> () | MenhirInterpreter.T T_SECONDS -> () @@ -331,7 +332,7 @@ module Default = struct | MenhirInterpreter.T T_REORG_CRITERIA -> () | MenhirInterpreter.T T_RENAMES -> () | MenhirInterpreter.T T_REMOVAL -> () - | MenhirInterpreter.T T_REMARKS -> "_" + | MenhirInterpreter.T T_REMARKS -> () | MenhirInterpreter.T T_REMAINDER -> () | MenhirInterpreter.T T_RELEASE -> () | MenhirInterpreter.T T_RELATIVE -> () @@ -624,7 +625,7 @@ module Default = struct | MenhirInterpreter.T T_INTERMEDIATE -> () | MenhirInterpreter.T T_INTERFACE_ID -> () | MenhirInterpreter.T T_INTERFACE -> () - | MenhirInterpreter.T T_INSTALLATION -> "_" + | MenhirInterpreter.T T_INSTALLATION -> () | MenhirInterpreter.T T_INSPECT -> () | MenhirInterpreter.T T_INSERT_ROWS -> () | MenhirInterpreter.T T_INSERTION_INDEX -> () @@ -636,6 +637,7 @@ module Default = struct | MenhirInterpreter.T T_INITIALIZE -> () | MenhirInterpreter.T T_INITIAL -> () | MenhirInterpreter.T T_INHERITS -> () + | MenhirInterpreter.T T_INFO_WORD -> "_" | MenhirInterpreter.T T_INDICATE -> () | MenhirInterpreter.T T_INDEX_2 -> () | MenhirInterpreter.T T_INDEX_1 -> () @@ -888,10 +890,10 @@ module Default = struct | MenhirInterpreter.T T_DEBUGGING -> () | MenhirInterpreter.T T_DAY_OF_WEEK -> () | MenhirInterpreter.T T_DAY -> () - | MenhirInterpreter.T T_DATE_WRITTEN -> "_" - | MenhirInterpreter.T T_DATE_MODIFIED -> "_" + | MenhirInterpreter.T T_DATE_WRITTEN -> () + | MenhirInterpreter.T T_DATE_MODIFIED -> () | MenhirInterpreter.T T_DATE_ENTRY -> () - | MenhirInterpreter.T T_DATE_COMPILED -> "_" + | MenhirInterpreter.T T_DATE_COMPILED -> () | MenhirInterpreter.T T_DATE -> () | MenhirInterpreter.T T_DATA_TYPES -> () | MenhirInterpreter.T T_DATA_RECORDS -> () @@ -968,6 +970,7 @@ module Default = struct | MenhirInterpreter.T T_COMMUNICATION -> () | MenhirInterpreter.T T_COMMON -> () | MenhirInterpreter.T T_COMMIT -> () + | MenhirInterpreter.T T_COMMENT_ENTRY -> ["_"] | MenhirInterpreter.T T_COMMAND_LINE -> () | MenhirInterpreter.T T_COMMA -> () | MenhirInterpreter.T T_COMBO_BOX -> () @@ -1086,7 +1089,7 @@ module Default = struct | MenhirInterpreter.T T_AUTO_DECIMAL -> () | MenhirInterpreter.T T_AUTOMATIC -> () | MenhirInterpreter.T T_AUTO -> () - | MenhirInterpreter.T T_AUTHOR -> "_" + | MenhirInterpreter.T T_AUTHOR -> () | MenhirInterpreter.T T_AT_EOP -> () | MenhirInterpreter.T T_AT_END -> () | MenhirInterpreter.T T_ATTRIBUTES -> () @@ -1330,7 +1333,6 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_ro_linkage_section_ -> None | MenhirInterpreter.N MenhirInterpreter.N_ro_integer_ -> None | MenhirInterpreter.N MenhirInterpreter.N_ro_instance_definition_ -> None - | MenhirInterpreter.N MenhirInterpreter.N_ro_identification_division_ -> None | MenhirInterpreter.N MenhirInterpreter.N_ro_file_section_ -> None | MenhirInterpreter.N MenhirInterpreter.N_ro_expression_no_all_ -> None | MenhirInterpreter.N MenhirInterpreter.N_ro_expands_phrase_ -> None @@ -1401,6 +1403,7 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_rl_loc_object_computer_clause__ -> [] | MenhirInterpreter.N MenhirInterpreter.N_rl_loc_multiple_file_clause__ -> [] | MenhirInterpreter.N MenhirInterpreter.N_rl_loc_method_definition__ -> [] + | MenhirInterpreter.N MenhirInterpreter.N_rl_loc_informational_paragraph__ -> [] | MenhirInterpreter.N MenhirInterpreter.N_rl_loc_file_or_sort_merge_descr_entry__ -> [] | MenhirInterpreter.N MenhirInterpreter.N_rl_loc_file_descr_clause__ -> [] | MenhirInterpreter.N MenhirInterpreter.N_rl_loc_entry_name_clause__ -> [] @@ -1464,8 +1467,9 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_program_prototype -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_program_procedure_division -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_program_kind -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_program_id_paragraph -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_program_definition_no_end -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_program_definition_identification -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_program_definition_id_paragraph -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_program_definition -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_program_collating_sequence_clause -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_procedure_name_decl -> raise Not_found @@ -1565,17 +1569,11 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_option_loc_entry_name_clause__ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_option_loc_data_division__ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_option_loc_configuration_section__ -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_option_loc_SECURITY__ -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_option_loc_INSTALLATION__ -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_option_loc_DATE_WRITTEN__ -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_option_loc_DATE_COMPILED__ -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_option_loc_AUTHOR__ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_option_linkage_section_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_option_limit_is__ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_option_io_control_entry_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_option_integer_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_option_instance_definition_ -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_option_identification_division_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_option_file_section_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_option_expression_no_all_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_option_expands_phrase_ -> raise Not_found @@ -1774,6 +1772,7 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_midrule___anonymous_27_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_midrule___anonymous_15_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_midrule___anonymous_0_ -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_method_identification -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_method_id_paragraph -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_method_definition -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_message_or_segment -> raise Not_found @@ -1831,6 +1830,7 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_list_loc_object_computer_clause__ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_list_loc_multiple_file_clause__ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_list_loc_method_definition__ -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_list_loc_informational_paragraph__ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_list_loc_file_or_sort_merge_descr_entry__ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_list_loc_file_descr_clause__ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_list_loc_entry_name_clause__ -> raise Not_found @@ -1862,10 +1862,12 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_intrinsic_function_name -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_intermediate_rounding_clause -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_interface_specifier -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_interface_identification -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_interface_id_paragraph -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_interface_definition -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_integers -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_integer -> "0" + | MenhirInterpreter.N MenhirInterpreter.N_instance_identification -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_instance_definition -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_inspect_where -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_inspect_statement -> raise Not_found @@ -1877,6 +1879,8 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_initialize_statement -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_init_data_category -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_informational_paragraphs -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_informational_paragraph -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_info_word -> "_" | MenhirInterpreter.N MenhirInterpreter.N_indexed_by -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_in_of -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_imperative_statement -> Result.Error "bad statement" @@ -1885,7 +1889,6 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_if_statement -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_if_body -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_idents -> [] - | MenhirInterpreter.N MenhirInterpreter.N_identification_division -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_ident_or_string_no_all -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_ident_or_string -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_ident_or_numeric -> raise Not_found @@ -1908,6 +1911,7 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_function_unit -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_function_specifier -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_function_name -> dummy_name + | MenhirInterpreter.N MenhirInterpreter.N_function_identification -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_function_id_paragraph -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_from_to_characters_opt -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_free_statement -> raise Not_found @@ -1927,6 +1931,7 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_file_control_paragraph -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_figurative_constant -> Zero | MenhirInterpreter.N MenhirInterpreter.N_factory_paragraph -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_factory_identification -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_factory_definition -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_external_clause -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_extended_condition -> raise Not_found @@ -2018,6 +2023,7 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_communication_section -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_communication_descr_entry -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_communication_descr_clause -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_comment_entry -> ["_"] | MenhirInterpreter.N MenhirInterpreter.N_column_position -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_column_number -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_column_header -> raise Not_found @@ -2029,6 +2035,7 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_close_format -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_class_specifier -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_class_name_clause -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_class_identification -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_class_id_paragraph -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_class_definition -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_class_condition_no_ident -> ClassNumeric @@ -2048,7 +2055,6 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_call_prefix -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_boption_or__RECORD_RECORDS__ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_boption_or__LINE_LINES__ -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_boption_identification_division_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_boption___anonymous_87_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_boption___anonymous_81_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_boption___anonymous_71_ -> raise Not_found @@ -2132,7 +2138,7 @@ type decision = | Select of (int -> action list) let depth = - [|0;1;2;3;1;2;3;1;1;2;1;1;3;1;1;1;2;3;2;3;1;1;4;1;4;1;1;2;1;2;3;1;1;2;1;3;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;2;3;1;1;2;1;1;1;1;1;1;1;1;3;2;3;2;1;1;1;4;1;1;2;1;1;3;1;2;5;1;2;6;7;1;2;3;4;5;5;6;7;1;2;3;4;1;2;5;1;2;3;6;1;2;7;8;2;1;2;1;2;3;1;1;1;1;1;1;1;1;4;1;1;2;3;1;1;1;1;1;2;1;2;4;1;2;3;4;1;2;3;1;2;1;3;4;5;1;2;1;1;1;1;3;1;1;2;1;2;1;1;1;1;1;1;3;3;1;2;3;1;2;3;1;2;1;3;3;1;1;2;3;4;5;1;4;1;2;3;3;1;2;1;1;1;3;1;1;1;2;3;1;1;1;4;1;1;4;5;1;1;1;2;3;1;2;3;4;2;3;4;1;2;3;1;1;1;1;1;2;1;1;2;4;1;2;1;2;3;1;1;1;1;4;2;3;4;1;2;3;1;1;3;1;1;2;1;1;2;1;1;2;1;1;5;1;2;1;1;2;1;1;2;2;3;4;1;2;5;1;1;1;1;2;1;1;3;4;1;2;1;2;3;4;5;1;2;3;1;4;1;1;2;1;3;4;5;1;1;6;1;1;1;2;3;1;2;3;1;2;3;1;1;2;3;4;5;1;1;2;3;4;5;6;1;2;3;4;1;2;3;4;1;1;1;1;1;2;1;2;3;1;1;1;2;3;1;5;6;1;2;3;4;1;1;1;1;1;1;1;2;1;2;3;1;2;3;2;1;1;1;1;2;5;1;1;1;2;1;1;1;2;3;4;5;6;7;8;1;2;3;4;5;6;7;8;1;2;3;1;1;2;1;1;1;1;1;1;1;1;1;3;4;3;1;1;6;1;2;1;2;3;1;2;3;1;2;3;1;2;3;4;4;1;1;1;2;3;2;3;2;3;1;2;3;4;1;2;1;1;1;3;4;1;7;1;1;1;1;1;1;4;1;2;3;1;2;1;1;2;3;1;2;1;2;1;1;2;1;2;3;1;2;1;1;3;1;1;2;3;4;1;2;3;1;4;2;3;4;1;2;3;5;1;1;1;2;3;1;2;3;1;1;4;1;1;2;1;1;1;3;1;2;1;2;3;1;1;4;1;2;3;1;4;5;5;5;1;1;2;3;1;2;1;3;1;1;4;1;2;5;1;1;1;2;1;1;1;2;3;4;5;1;2;3;6;1;2;7;1;2;3;1;1;1;4;1;1;1;1;1;1;1;1;1;1;2;3;4;1;2;3;4;4;5;6;1;2;2;3;2;1;1;1;1;1;1;4;5;1;1;2;3;1;4;1;2;1;1;2;2;1;3;1;1;2;3;4;5;3;4;5;4;1;1;2;3;4;2;1;1;1;1;1;1;2;1;3;4;5;6;1;2;2;1;2;1;3;1;4;5;1;1;2;2;3;1;3;4;1;2;1;1;1;2;3;1;1;5;1;1;1;1;5;1;1;1;1;4;1;2;3;1;1;2;3;4;5;1;6;1;2;7;3;4;5;6;7;3;4;5;1;2;6;2;3;4;1;2;3;1;2;3;1;2;1;2;3;1;4;5;1;2;3;1;2;3;4;5;3;1;6;1;1;2;3;7;1;1;2;3;4;5;6;4;1;1;1;1;2;3;1;2;3;1;1;2;1;1;3;4;1;1;1;2;1;2;1;1;1;1;1;1;1;1;1;2;3;1;1;1;1;2;3;1;2;3;1;1;1;1;1;1;1;1;1;1;2;3;1;1;4;5;1;1;1;1;1;1;1;1;1;1;1;1;1;2;3;1;1;1;1;1;1;1;1;1;1;2;1;1;2;1;2;1;2;3;1;1;2;1;2;1;2;3;3;1;2;1;2;3;1;1;1;1;2;3;2;3;1;2;3;2;3;2;3;1;2;3;1;1;2;3;4;5;6;1;1;1;2;3;2;3;2;3;1;4;5;6;1;2;4;1;1;1;1;2;3;3;4;5;6;3;4;3;4;5;6;3;4;5;6;3;4;5;6;2;3;4;1;2;3;1;1;2;1;1;1;2;3;1;2;1;1;1;1;1;1;1;1;2;1;1;2;1;2;3;1;3;2;3;2;3;2;3;2;3;2;3;1;2;3;1;2;3;2;3;2;3;2;3;2;3;1;1;2;3;3;4;1;1;2;3;3;4;5;6;2;3;4;5;6;7;1;4;1;3;2;3;4;2;3;2;3;4;6;7;8;9;4;5;6;7;8;9;10;4;5;6;7;2;3;2;3;2;3;1;2;2;2;1;2;3;4;1;1;1;2;1;2;1;1;3;1;2;4;1;5;1;2;3;3;1;2;3;3;1;2;3;1;4;1;2;1;5;1;1;1;1;1;2;2;1;6;7;1;1;8;1;2;1;2;1;2;1;1;2;1;2;1;1;2;1;2;3;1;1;1;2;1;3;1;2;1;1;1;2;3;1;1;1;1;2;1;1;2;1;1;1;2;1;1;2;1;2;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;2;1;2;1;2;1;3;1;1;2;1;2;3;1;2;2;1;2;1;2;3;3;1;2;3;1;2;1;2;1;2;3;1;1;2;3;3;1;2;1;2;1;1;2;1;2;2;2;1;1;2;1;2;1;3;4;5;6;2;2;2;3;4;5;6;2;2;3;2;1;1;1;2;3;4;5;1;2;2;3;3;3;4;5;6;7;3;3;3;4;5;6;7;3;3;4;3;2;2;2;3;4;5;6;2;2;2;3;4;5;6;2;2;3;2;3;1;1;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;4;1;1;4;1;1;2;3;4;5;1;1;2;1;2;3;2;3;3;3;3;4;2;1;3;2;3;2;2;2;1;2;3;1;2;1;2;1;3;2;3;2;3;1;1;2;3;2;3;3;4;2;3;4;3;4;2;2;3;1;1;2;3;1;2;3;4;5;1;2;4;5;1;1;1;2;1;2;3;3;1;2;4;1;2;5;1;6;1;2;3;1;4;1;2;1;1;2;3;4;7;1;1;2;3;8;1;1;1;2;1;1;1;1;2;3;4;1;5;6;7;8;3;4;5;1;1;2;1;2;1;2;1;2;3;4;1;2;3;3;1;2;1;1;2;3;1;2;3;4;1;1;2;3;1;2;3;3;3;2;1;2;1;2;2;2;4;1;2;3;5;6;4;5;1;2;1;1;1;1;1;1;3;1;2;3;1;1;2;1;1;1;1;1;1;1;1;1;1;1;3;4;1;1;1;1;1;1;1;2;1;2;3;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;2;3;4;1;2;5;6;1;5;1;1;1;2;1;2;3;4;5;1;2;6;7;8;1;1;2;3;4;5;6;1;1;2;1;2;3;3;4;5;6;7;8;1;1;1;2;1;2;3;1;2;3;4;1;1;1;2;3;1;2;3;1;2;3;4;1;1;1;1;2;1;2;2;3;2;3;1;2;1;3;2;3;2;3;1;2;1;2;3;4;5;6;6;4;4;1;3;4;5;1;1;1;1;2;1;3;1;3;1;4;5;6;7;1;2;3;4;1;1;2;3;4;1;1;1;1;1;2;1;1;1;1;4;1;1;2;4;1;2;3;4;1;5;1;2;3;4;6;1;2;3;4;7;1;2;3;1;2;3;4;1;2;3;4;1;2;3;4;1;2;3;4;1;2;3;4;2;3;4;1;2;3;4;1;2;3;4;1;2;3;4;5;1;2;3;6;2;3;4;2;3;5;6;7;1;2;3;4;2;3;4;2;3;4;2;3;4;2;3;4;2;3;4;1;2;3;4;1;1;2;1;4;5;6;7;8;9;1;2;1;5;6;7;8;9;1;1;1;2;4;1;1;2;8;1;2;3;1;2;1;1;2;1;2;2;3;1;2;3;4;1;2;3;4;5;6;2;3;4;1;2;1;7;8;9;1;10;1;2;3;11;1;1;6;7;1;1;1;2;3;4;2;3;4;2;2;1;2;3;4;3;1;2;3;4;3;1;2;3;3;4;1;2;1;2;1;2;1;2;3;3;1;2;1;1;1;2;2;1;1;1;2;2;3;1;2;2;1;1;3;1;1;2;1;2;1;2;1;4;3;1;2;1;2;3;1;2;3;1;2;4;3;3;3;3;1;2;3;1;2;4;1;1;1;2;2;1;2;1;2;1;2;3;4;5;6;1;2;1;7;1;3;4;5;1;2;3;4;5;4;5;4;5;1;2;6;4;1;2;1;1;2;1;2;1;2;1;1;2;3;1;1;1;1;1;2;1;1;1;2;3;1;2;3;1;1;2;1;1;1;3;4;1;1;1;1;1;1;1;1;1;1;1;1;2;3;4;2;3;4;5;1;2;1;2;1;2;3;1;1;2;1;1;2;1;2;2;1;2;1;1;2;1;2;3;2;1;1;1;2;1;2;1;2;3;1;1;1;2;1;1;5;1;1;1;2;1;1;1;2;1;1;1;1;4;1;2;1;9;1;2;3;1;2;1;2;3;1;2;1;1;2;1;1;1;1;2;3;1;1;1;2;3;1;1;1;1;1;4;1;1;2;1;1;1;1;1;1;1;2;1;2;3;1;1;1;1;1;2;3;3;2;2;1;2;3;4;1;2;3;4;1;1;2;2;1;1;2;3;1;1;1;2;1;1;1;1;1;1;1;2;1;1;1;1;2;1;1;1;1;1;3;4;1;1;4;1;1;2;1;1;10;1;1;1;1;1;1;1;1;1;1;1;1;5;1;2;3;1;2;1;1;2;3;2;1;2;3;2;3;2;1;1;2;4;1;2;5;1;1;2;2;1;2;3;6;1;2;1;1;1;3;4;5;6;1;1;2;3;1;2;3;1;4;5;1;1;1;1;1;6;1;3;4;5;6;2;3;4;5;6;7;4;5;6;7;3;4;5;6;3;4;5;6;3;4;5;6;7;8;5;6;7;8;4;5;6;7;4;5;6;7;2;3;4;3;1;2;1;1;2;3;2;1;4;1;3;4;5;2;3;4;5;2;3;2;3;2;3;4;5;6;7;4;5;6;7;3;4;5;4;5;4;5;6;3;4;5;6;3;4;3;4;2;3;4;1;1;2;2;3;5;1;1;2;1;1;2;1;2;3;2;3;4;5;4;1;1;2;3;1;1;2;2;1;2;3;1;1;4;1;2;2;3;4;2;3;5;1;2;3;2;1;2;1;6;7;1;2;1;2;1;2;1;3;1;4;1;2;3;4;1;5;3;4;1;2;1;1;2;3;2;1;2;3;3;1;1;5;6;7;8;1;1;9;1;2;1;1;3;1;2;3;4;1;5;6;1;2;3;1;7;1;1;1;1;1;2;1;1;2;1;1;2;3;4;5;6;1;1;2;3;4;5;1;2;1;1;1;2;3;4;1;3;1;2;1;2;3;1;2;3;4;4;5;1;2;1;2;3;4;1;2;1;1;5;1;6;1;2;3;4;5;1;2;7;1;5;6;7;1;8;9;10;11;1;2;3;1;4;5;6;7;8;1;2;3;4;2;3;4;1;2;1;3;3;4;5;6;4;5;6;7;8;9;10;3;4;5;6;7;1;2;1;1;1;1;1;1;1;1;3;4;1;1;5;1;1;2;3;4;5;2;3;4;5;1;1;2;1;1;1;1;2;6;1;7;1;2;2;3;4;1;1;5;2;2;3;4;2;2;3;4;1;1;5;2;2;3;4;2;1;1;1;1;1;1;1;1;1;2;2;2;1;3;2;1;2;1;2;3;4;2;3;1;1;1;2;3;4;1;3;2;3;4;4;5;4;1;2;3;4;5;1;1;1;1;6;7;1;2;8;1;1;1;2;3;3;1;1;4;1;3;4;5;6;1;2;3;4;5;6;1;2;1;3;4;5;6;7;1;2;3;1;2;4;1;1;5;1;2;3;4;3;1;2;3;1;1;2;1;1;3;4;5;1;6;1;2;1;1;3;4;1;2;5;1;2;1;2;3;6;7;1;2;3;8;9;1;2;3;2;1;2;1;1;1;1;1;2;3;1;2;3;1;2;1;1;3;1;2;1;1;1;4;5;6;1;4;2;3;2;1;2;1;1;1;2;3;1;2;3;4;1;1;1;2;3;1;1;2;2;1;1;2;1;1;1;2;1;1;2;3;1;2;1;2;4;5;1;2;3;4;5;2;3;4;1;2;3;4;5;6;7;1;2;1;3;1;1;1;2;2;1;2;2;2;2;1;2;1;4;5;1;1;1;1;2;1;1;2;3;1;2;1;1;2;3;1;1;2;3;1;2;3;4;1;1;2;1;2;1;2;1;2;3;4;1;2;4;1;2;1;2;1;2;1;1;2;2;1;2;1;2;1;2;1;2;3;1;2;3;4;1;2;1;2;3;4;5;3;1;2;1;2;3;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;3;5;6;7;8;5;2;3;1;2;3;4;5;6;7;1;2;3;5;6;7;8;9;6;7;8;3;4;5;6;7;4;5;6;4;5;6;7;8;5;6;7;3;4;5;6;3;4;5;3;4;5;6;7;4;5;6;1;2;3;1;2;1;2;3;1;1;2;3;2;3;2;2;1;1;1;2;3;4;5;6;3;1;2;1;1;2;1;2;1;1;1;2;1;1;2;1;1;2;1;2;2;1;1;1;2;1;1;1;2;3;4;5;1;2;3;3;3;1;1;2;1;2;3;1;2;1;1;1;2;3;4;1;1;2;2;2;1;2;1;1;1;2;3;4;1;1;1;2;1;1;2;1;2;3;1;2;1;1;3;1;2;1;2;3;4;5;1;2;1;3;1;2;1;2;3;4;5;1;1;2;3;4;5;1;2;1;1;1;2;2;1;2;2;3;1;1;2;3;2;1;1;2;1;1;2;1;1;1;2;1;3;1;2;3;4;5;1;1;2;1;2;3;4;5;2;1;2;3;4;2;3;4;5;1;2;3;4;5;6;1;2;3;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;4;1;1;3;4;5;1;3;1;2;3;1;2;3;1;2;3;4;5;6;7;5;6;3;4;7;5;6;5;1;2;1;2;3;4;5;3;4;5;3;4;2;3;1;4;5;6;7;8;6;7;8;6;7;6;1;1;1;2;1;1;2;4;5;4;5;3;7;3;4;1;8;6;7;3;4;8;6;7;6;2;3;4;5;6;7;5;6;7;5;6;5;1;4;5;6;7;8;9;7;8;9;7;8;7;1;3;4;5;6;7;5;6;7;5;6;5;1;1;2;6;7;5;5;6;7;5;6;7;5;6;6;7;5;6;7;5;5;6;6;3;4;7;5;6;3;4;7;5;5;6;4;1;5;3;4;5;6;7;5;6;7;5;6;5;3;4;5;3;4;2;1;2;3;1;2;2;2;2;2;1;2;3;4;3;4;5;4;3;1;4;5;6;5;1;1;1;2;3;6;1;7;5;6;7;5;6;5;4;5;6;1;2;7;8;9;10;8;9;10;8;9;8;1;3;4;5;6;7;8;9;10;8;9;10;8;9;8;2;3;1;2;3;2;4;5;1;1;2;3;1;2;3;1;2;4;5;6;1;7;5;6;7;5;6;5;4;5;6;7;8;9;7;8;9;7;8;7;3;4;1;2;1;2;3;4;1;1;2;3;1;2;1;1;1;10;11;9;10;11;3;4;9;10;11;9;9;10;9;10;9;10;3;4;11;1;1;1;1;1;1;1;7;8;1;8;9;10;6;6;7;8;6;7;8;9;7;1;8;9;7;8;9;7;7;8;1;7;8;1;9;1;2;1;2;3;4;5;6;4;5;6;2;3;4;5;3;4;5;7;8;2;4;5;6;7;8;9;10;11;9;10;2;1;2;3;1;2;3;4;3;1;4;2;5;4;5;6;7;1;4;5;3;4;5;6;4;5;6;4;4;5;3;1;4;5;6;7;8;6;7;8;6;6;7;8;9;10;11;9;10;11;9;9;10;6;7;3;4;5;3;4;5;6;4;5;6;4;4;5;3;3;4;6;7;3;4;5;5;6;7;8;9;10;8;8;9;3;4;10;8;9;5;6;7;5;6;2;1;1;2;3;3;1;2;1;7;1;8;6;7;8;6;7;6;2;3;4;5;6;7;5;6;7;5;6;5;4;5;6;7;8;9;7;8;9;7;8;7;10;11;9;9;10;11;9;10;6;7;8;6;6;7;8;9;10;11;12;13;14;12;12;13;14;12;13;9;10;11;9;9;10;11;9;10;6;7;8;6;7;1;8;9;7;8;1;9;1;1;3;4;7;8;9;7;7;8;7;8;7;8;3;4;9;1;1;2;1;2;1;2;4;1;1;1;1;2;7;1;1;1;2;2;3;4;2;8;1;1;6;7;8;9;1;3;4;5;6;4;5;6;7;6;7;8;9;10;1;1;1;1;1;1;1;1;4;1;1;2;1;1;5;6;7;8;9;1;1;2;3;4;5;6;7;8;9;10;2;3;4;5;6;7;8;9;1;1;2;1;2;3;3;1;2;1;2;3;3;2;3;4;5;6;7;8;9;2;3;4;5;6;7;8;9;1;1;5;6;7;8;9;10;1;1;1;1;1;2;1;1;1;2;3;4;5;6;1;1;1;1;2;3;2;1;1;1;2;1;3;1;4;1;5;3;4;5;6;1;2;3;4;5;6;7;1;2;8;1;2;1;2;1;1;1;6;7;8;9;3;4;5;6;4;5;6;7;7;1;1;2;3;4;5;6;1;3;4;1;1;1;2;1;1;1;2;3;4;5;6;7;2;3;4;5;6;7;8;9;10;1;1;1;1;0;1;1;2;|] + [|0;1;2;3;1;2;3;1;1;2;1;1;3;1;1;1;2;3;2;3;1;1;4;1;4;1;1;2;1;2;1;3;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;2;3;1;1;2;1;1;1;1;1;1;1;1;3;2;3;2;1;1;1;4;5;6;5;1;6;7;1;1;2;1;3;1;2;1;3;4;1;1;2;1;1;3;1;2;5;1;2;6;7;1;2;3;1;2;1;3;1;2;3;1;2;3;1;2;3;1;2;3;1;2;3;1;2;3;1;1;4;1;2;3;4;5;5;6;7;1;2;3;4;1;2;5;1;2;3;6;1;2;7;8;5;1;2;1;2;3;1;1;1;1;1;1;1;1;4;1;1;2;3;1;1;1;1;1;2;1;2;4;1;2;3;4;1;2;3;1;2;1;3;4;5;1;2;1;1;1;1;3;1;1;2;1;2;1;1;1;1;1;1;3;6;1;2;3;1;2;3;1;2;1;3;3;1;1;2;3;4;5;1;4;1;2;3;3;1;2;1;1;1;3;1;1;2;3;1;1;1;4;1;1;4;5;1;1;1;2;3;1;2;3;4;2;3;4;1;2;3;1;1;1;1;1;2;1;1;2;4;1;2;1;2;3;1;1;1;1;4;2;3;4;1;2;3;1;1;3;1;1;2;1;1;2;1;1;2;1;1;5;1;2;1;1;2;1;1;2;2;3;4;1;2;5;1;1;1;1;2;1;1;3;4;1;2;1;2;3;4;5;1;2;3;1;4;1;1;2;1;3;4;5;1;1;6;1;1;1;2;3;1;2;3;1;2;3;1;1;2;3;4;5;1;1;2;3;4;5;6;1;2;3;4;1;2;3;4;1;1;1;1;1;2;1;2;3;1;1;1;2;3;1;5;6;1;2;3;4;1;1;1;1;1;1;1;2;1;2;3;1;2;3;2;1;1;1;1;2;5;1;1;1;2;1;1;1;2;3;4;5;6;7;8;1;2;3;4;5;6;7;8;1;2;3;1;1;2;1;1;1;1;1;1;1;1;1;3;4;3;1;1;6;1;2;1;2;3;1;2;3;1;2;3;1;2;3;4;4;1;1;1;2;3;2;3;2;3;1;2;3;4;1;2;1;1;1;3;4;1;7;1;1;1;1;1;1;4;1;2;3;1;2;1;1;2;3;1;2;1;2;1;1;2;1;2;3;1;2;1;1;3;1;1;2;3;4;1;2;3;1;4;2;3;4;1;2;3;5;1;1;1;2;3;1;2;3;1;1;4;1;1;2;1;1;1;3;1;2;1;2;3;1;1;4;1;2;3;1;4;5;5;5;1;1;2;3;1;2;1;3;1;1;4;1;2;5;1;1;1;2;1;1;1;2;3;4;5;1;2;3;6;1;2;7;1;2;3;1;1;1;4;1;1;1;1;1;1;1;1;1;1;2;3;4;1;2;3;4;4;5;6;1;2;2;3;2;1;1;1;1;1;1;4;5;1;1;2;3;1;4;1;2;1;1;2;2;1;3;1;1;2;3;4;5;3;4;5;4;1;1;2;3;4;2;1;1;1;1;1;1;2;1;3;4;5;6;1;2;2;1;2;1;3;1;4;5;1;1;2;2;3;1;3;4;1;2;1;1;1;2;3;1;1;5;1;1;1;1;5;1;1;1;1;7;1;2;3;1;2;3;1;2;1;2;3;1;4;5;1;2;3;1;2;3;4;5;3;1;6;1;1;2;3;7;1;1;2;3;4;5;6;4;1;1;1;1;2;3;1;2;3;1;1;2;1;1;3;4;1;1;1;2;1;2;1;1;1;1;1;1;1;1;1;2;3;1;1;1;1;2;3;1;2;3;1;1;1;1;1;1;1;1;1;1;2;3;1;1;4;5;1;1;1;1;1;1;1;1;1;1;1;1;1;2;3;1;1;1;1;1;1;1;1;1;1;2;1;1;2;1;2;1;2;3;1;1;2;1;2;1;2;3;3;1;2;1;2;3;1;1;1;1;2;3;2;3;1;2;3;2;3;2;3;1;2;3;1;1;2;3;4;5;6;1;1;1;2;3;2;3;2;3;1;4;5;6;1;2;4;1;1;1;1;2;3;3;4;5;6;3;4;3;4;5;6;3;4;5;6;3;4;5;6;2;3;4;1;2;3;1;1;2;1;1;1;2;3;1;2;1;1;1;1;1;1;1;1;2;1;1;2;1;2;3;1;3;2;3;2;3;2;3;2;3;2;3;1;2;3;1;2;3;2;3;2;3;2;3;2;3;1;1;2;3;3;4;1;1;2;3;3;4;5;6;2;3;4;5;6;7;1;4;1;3;2;3;4;2;3;2;3;4;6;7;8;9;4;5;6;7;8;9;10;4;5;6;7;2;3;2;3;2;3;1;2;2;2;1;2;3;4;1;1;1;2;1;2;1;1;3;1;2;4;1;5;1;2;3;3;1;2;3;3;1;2;3;1;4;1;2;1;5;1;1;1;1;1;2;2;1;6;7;1;1;8;1;2;1;2;1;2;1;1;2;1;2;1;1;2;1;2;3;1;1;1;2;1;3;1;2;1;1;1;2;3;1;1;1;1;2;1;1;2;1;1;1;2;1;1;2;1;2;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;2;1;2;1;2;1;3;1;1;2;1;2;3;1;2;2;1;2;1;2;3;3;1;2;3;1;2;1;2;1;2;3;1;1;2;3;3;1;2;1;2;1;1;2;1;2;2;2;1;1;2;1;2;1;3;4;5;6;2;2;2;3;4;5;6;2;2;3;2;1;1;1;2;3;4;5;1;2;2;3;3;3;4;5;6;7;3;3;3;4;5;6;7;3;3;4;3;2;2;2;3;4;5;6;2;2;2;3;4;5;6;2;2;3;2;3;1;1;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;4;1;1;4;1;1;2;3;4;5;1;1;2;1;2;3;2;3;3;3;3;4;2;1;3;2;3;2;2;2;1;2;3;1;2;1;2;1;3;2;3;2;3;1;1;2;3;2;3;3;4;2;3;4;3;4;2;2;3;1;1;2;3;1;2;3;4;5;1;2;4;5;1;1;1;2;1;2;3;3;1;2;4;1;2;5;1;6;1;2;3;1;4;1;2;1;1;2;3;4;7;1;1;2;3;8;1;1;1;2;1;1;1;1;2;3;4;1;5;6;7;8;3;4;5;1;1;2;1;2;1;2;1;2;3;4;1;2;3;3;1;2;1;1;2;3;1;2;3;4;1;1;2;3;1;2;3;3;3;2;1;2;1;2;2;2;4;1;2;3;5;6;4;5;1;2;1;1;1;1;1;1;3;1;2;3;1;1;2;1;1;1;1;1;1;1;1;1;1;1;3;4;1;1;1;1;1;1;1;2;1;2;3;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;2;3;4;1;2;5;6;1;5;1;1;1;2;1;2;3;4;5;1;2;6;7;8;1;1;2;3;4;5;6;1;1;2;1;2;3;3;4;5;6;7;8;1;1;1;2;1;2;3;1;2;3;4;1;1;1;2;3;1;2;3;1;2;3;4;1;1;1;1;2;1;2;2;3;2;3;1;2;1;3;2;3;2;3;1;2;1;2;3;4;5;6;6;4;4;1;3;4;5;1;1;1;1;2;1;3;1;3;1;4;5;6;7;1;2;3;4;1;1;2;3;4;1;1;1;1;1;2;1;1;1;1;4;1;1;2;4;1;2;3;4;1;5;1;2;3;4;6;1;2;3;4;7;1;2;3;1;2;3;4;1;2;3;4;1;2;3;4;1;2;3;4;1;2;3;4;2;3;4;1;2;3;4;1;2;3;4;1;2;3;4;5;1;2;3;6;2;3;4;2;3;5;6;7;1;2;3;4;2;3;4;2;3;4;2;3;4;2;3;4;2;3;4;1;2;3;4;1;1;2;1;4;5;6;7;8;9;1;2;1;5;6;7;8;9;1;1;1;2;4;1;1;2;8;1;2;3;1;2;1;1;2;1;2;2;3;1;2;3;4;1;2;3;4;5;6;2;3;4;1;2;1;7;8;9;1;10;1;2;3;11;1;1;6;7;1;1;1;2;3;4;2;3;4;2;2;1;2;3;4;3;1;2;3;4;3;1;2;3;3;4;1;2;1;2;1;2;1;2;3;3;1;2;1;1;1;2;2;1;1;1;2;2;3;1;2;2;1;1;3;1;1;2;1;2;1;2;1;4;3;1;2;1;2;3;1;2;3;1;2;4;3;3;3;3;1;2;3;1;2;4;1;1;1;2;2;1;2;1;2;1;2;3;4;5;6;1;2;1;7;1;3;4;5;1;2;3;4;5;4;5;4;5;1;2;6;4;1;2;1;1;2;1;2;1;2;1;1;2;3;1;1;1;1;1;2;1;1;1;2;3;1;2;3;1;1;2;1;1;1;3;4;1;1;1;1;1;1;1;1;1;1;1;1;2;3;4;2;3;4;5;1;2;1;2;1;2;3;1;1;2;1;1;2;1;2;2;1;2;1;1;2;1;2;3;2;1;1;1;2;1;2;1;2;3;1;1;1;2;1;1;5;1;1;1;2;1;1;1;2;1;1;1;1;4;1;2;1;9;1;2;3;1;2;1;2;3;1;2;1;1;2;1;1;1;1;2;3;1;1;1;2;3;1;1;1;1;1;4;1;1;2;1;1;1;1;1;1;1;2;1;2;3;1;1;1;1;1;2;3;3;2;2;1;2;3;4;1;2;3;4;1;1;2;2;1;1;2;3;1;1;1;2;1;1;1;1;1;1;1;2;1;1;1;1;2;1;1;1;1;1;3;4;1;1;4;1;1;2;1;1;10;1;1;1;1;1;1;1;1;1;1;1;1;8;1;2;3;1;2;1;1;2;3;2;1;2;3;2;3;2;1;1;2;4;1;2;5;1;1;2;2;1;2;3;6;1;2;1;1;1;3;4;5;6;1;1;2;3;1;2;3;1;4;5;1;1;1;1;1;6;1;3;4;5;6;2;3;4;5;6;7;4;5;6;7;3;4;5;6;3;4;5;6;3;4;5;6;7;8;5;6;7;8;4;5;6;7;4;5;6;7;2;3;4;3;1;2;1;1;2;3;2;1;4;1;3;4;5;2;3;4;5;2;3;2;3;2;3;4;5;6;7;4;5;6;7;3;4;5;4;5;4;5;6;3;4;5;6;3;4;3;4;2;3;4;1;1;2;2;3;5;1;1;2;1;1;2;1;2;3;2;3;4;5;4;1;1;2;3;1;1;2;2;1;2;3;1;1;4;1;2;2;3;4;2;3;5;1;2;3;2;1;2;1;6;7;1;2;1;2;1;2;1;3;1;4;1;2;3;4;1;5;3;4;1;2;1;1;2;3;2;1;2;3;3;1;1;5;6;7;8;1;1;9;1;2;1;1;3;1;2;3;4;1;5;6;1;2;3;1;7;1;1;1;1;1;2;1;1;2;1;1;2;3;4;5;6;1;1;2;3;4;5;1;2;1;1;1;2;3;4;1;3;1;2;1;2;3;1;2;3;4;4;5;1;2;1;2;3;4;1;2;1;1;5;1;6;1;2;3;4;5;1;2;7;1;5;6;7;1;8;9;10;11;1;2;3;1;4;5;6;7;8;1;2;3;4;2;3;4;1;2;1;3;3;4;5;6;4;5;6;7;8;9;10;3;4;5;6;7;1;2;1;1;1;1;1;1;1;1;3;4;1;1;5;1;1;2;3;4;5;2;3;4;5;1;1;2;1;1;1;1;2;6;1;7;1;2;2;3;4;1;1;5;2;2;3;4;2;2;3;4;1;1;5;2;2;3;4;2;1;1;1;1;1;1;1;1;1;2;2;2;1;3;2;1;2;1;2;3;4;2;3;1;1;1;2;3;4;1;3;2;3;4;4;5;4;1;2;3;4;5;1;1;1;1;6;7;1;2;8;1;1;1;2;3;3;1;1;4;1;3;4;5;6;1;2;3;4;5;6;1;2;1;3;4;5;6;7;1;2;3;1;2;4;1;1;5;1;2;3;4;3;1;2;3;1;1;2;1;1;3;4;5;1;6;1;2;1;1;3;4;1;2;5;1;2;1;2;3;6;7;1;2;3;8;9;1;2;3;2;1;2;1;1;1;1;1;2;3;1;2;3;1;2;1;1;3;1;2;1;1;1;4;5;6;1;4;2;3;2;1;2;1;1;1;2;3;1;2;3;4;1;1;1;2;3;1;1;2;2;1;1;2;1;1;1;2;1;1;2;3;1;2;1;2;4;5;1;2;3;4;5;2;3;4;1;2;3;4;5;6;7;1;2;1;3;1;1;1;2;2;1;2;2;2;2;1;2;1;4;5;1;1;1;1;2;1;1;2;3;1;2;1;1;2;3;1;1;2;3;1;2;3;4;1;1;2;1;2;1;2;1;2;3;4;1;2;4;1;2;1;2;1;2;1;1;2;2;1;2;1;2;1;2;1;2;3;1;2;3;4;1;2;1;2;3;4;5;3;1;2;1;2;3;4;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;3;5;6;7;8;5;2;3;1;2;3;4;5;6;7;1;2;3;5;6;7;8;9;6;7;8;3;4;5;6;7;4;5;6;4;5;6;7;8;5;6;7;3;4;5;6;3;4;5;3;4;5;6;7;4;5;6;1;2;3;1;2;1;2;3;1;1;2;3;2;3;2;2;1;1;1;2;3;4;5;6;3;1;2;1;1;2;1;2;1;1;1;2;1;1;2;1;1;2;1;2;2;1;1;1;2;1;1;1;2;3;4;5;1;2;3;3;3;1;1;2;1;2;3;1;2;1;1;1;2;3;4;1;1;2;2;2;1;2;1;1;1;2;3;4;1;1;1;2;1;1;2;1;2;3;1;2;1;1;3;1;2;1;2;3;4;5;1;2;1;3;1;2;1;2;3;4;5;1;1;2;3;4;5;1;2;1;1;1;2;2;1;2;2;3;1;1;2;3;2;1;1;2;1;1;2;1;1;1;2;1;3;1;2;3;4;5;1;1;2;1;2;3;4;5;2;1;2;3;4;2;3;4;5;1;2;3;4;5;6;1;2;3;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;4;1;1;3;4;5;1;3;1;2;3;1;2;3;1;2;3;4;5;6;7;5;6;3;4;7;5;6;5;1;2;1;2;3;4;5;3;4;5;3;4;2;3;1;4;5;6;7;8;6;7;8;6;7;6;1;1;1;2;1;1;2;4;5;4;5;3;7;3;4;1;8;6;7;3;4;8;6;7;6;2;3;4;5;6;7;5;6;7;5;6;5;1;4;5;6;7;8;9;7;8;9;7;8;7;1;3;4;5;6;7;5;6;7;5;6;5;1;1;2;6;7;5;5;6;7;5;6;7;5;6;6;7;5;6;7;5;5;6;6;3;4;7;5;6;3;4;7;5;5;6;4;1;5;3;4;5;6;7;5;6;7;5;6;5;3;4;5;3;4;2;1;2;3;1;2;2;2;2;2;1;2;3;4;3;4;5;4;3;1;4;5;6;5;1;1;1;2;3;6;1;7;5;6;7;5;6;5;4;5;6;1;2;7;8;9;10;8;9;10;8;9;8;1;3;4;5;6;7;8;9;10;8;9;10;8;9;8;2;3;1;2;3;2;4;5;1;1;2;3;1;2;3;1;2;4;5;6;1;7;5;6;7;5;6;5;4;5;6;7;8;9;7;8;9;7;8;7;3;4;1;2;1;2;3;4;1;1;2;3;1;2;1;1;1;10;11;9;10;11;3;4;9;10;11;9;9;10;9;10;9;10;3;4;11;1;1;1;1;1;1;1;7;8;1;8;9;10;6;6;7;8;6;7;8;9;7;1;8;9;7;8;9;7;7;8;1;7;8;1;9;1;2;1;2;3;4;5;6;4;5;6;2;3;4;5;3;4;5;7;8;2;4;5;6;7;8;9;10;11;9;10;2;1;2;3;1;2;3;4;3;1;4;2;5;4;5;6;7;1;4;5;3;4;5;6;4;5;6;4;4;5;3;1;4;5;6;7;8;6;7;8;6;6;7;8;9;10;11;9;10;11;9;9;10;6;7;3;4;5;3;4;5;6;4;5;6;4;4;5;3;3;4;6;7;3;4;5;5;6;7;8;9;10;8;8;9;3;4;10;8;9;5;6;7;5;6;2;1;1;2;3;3;1;2;1;7;1;8;6;7;8;6;7;6;2;3;4;5;6;7;5;6;7;5;6;5;4;5;6;7;8;9;7;8;9;7;8;7;10;11;9;9;10;11;9;10;6;7;8;6;6;7;8;9;10;11;12;13;14;12;12;13;14;12;13;9;10;11;9;9;10;11;9;10;6;7;8;6;7;1;8;9;7;8;1;9;1;1;3;4;7;8;9;7;7;8;7;8;7;8;3;4;9;1;1;2;1;2;1;2;4;1;1;1;1;2;7;1;1;1;2;2;3;4;2;8;1;1;6;7;8;9;1;3;4;5;6;4;5;6;7;9;10;11;12;13;1;1;1;1;1;1;1;1;5;6;1;2;5;5;5;1;2;3;4;5;6;7;8;9;1;1;1;2;3;4;1;1;2;3;4;1;1;2;3;4;1;2;3;4;5;6;7;1;2;8;1;2;1;2;1;1;1;6;7;8;9;3;4;5;6;4;5;6;7;5;1;1;1;2;1;2;2;3;4;5;6;1;3;4;1;2;3;1;2;3;1;2;3;4;5;1;6;1;2;7;3;4;5;6;7;3;4;5;1;2;6;1;2;3;4;5;4;1;2;3;4;5;6;7;8;9;1;1;1;1;2;1;4;5;6;7;8;1;1;1;1;1;1;2;3;4;5;6;7;8;9;1;2;1;2;3;1;2;1;2;3;3;1;2;3;4;1;2;1;2;3;3;5;5;4;5;6;7;8;1;1;1;2;3;4;5;6;7;8;1;1;1;2;3;4;5;6;7;8;4;1;2;3;4;5;6;7;8;9;1;1;1;1;0;1;1;2;|] let can_pop (type a) : a terminal -> bool = function | T_ZERO_FILL -> true @@ -2362,6 +2368,7 @@ let can_pop (type a) : a terminal -> bool = function | T_SELECT -> true | T_SEGMENT_LIMIT -> true | T_SEGMENT -> true + | T_SECURITY -> true | T_SECURE -> true | T_SECTION -> true | T_SECONDS -> true @@ -2423,6 +2430,7 @@ let can_pop (type a) : a terminal -> bool = function | T_REORG_CRITERIA -> true | T_RENAMES -> true | T_REMOVAL -> true + | T_REMARKS -> true | T_REMAINDER -> true | T_RELEASE -> true | T_RELATIVE -> true @@ -2711,6 +2719,7 @@ let can_pop (type a) : a terminal -> bool = function | T_INTERMEDIATE -> true | T_INTERFACE_ID -> true | T_INTERFACE -> true + | T_INSTALLATION -> true | T_INSPECT -> true | T_INSERT_ROWS -> true | T_INSERTION_INDEX -> true @@ -2969,7 +2978,10 @@ let can_pop (type a) : a terminal -> bool = function | T_DEBUGGING -> true | T_DAY_OF_WEEK -> true | T_DAY -> true + | T_DATE_WRITTEN -> true + | T_DATE_MODIFIED -> true | T_DATE_ENTRY -> true + | T_DATE_COMPILED -> true | T_DATE -> true | T_DATA_TYPES -> true | T_DATA_RECORDS -> true @@ -3163,6 +3175,7 @@ let can_pop (type a) : a terminal -> bool = function | T_AUTO_DECIMAL -> true | T_AUTOMATIC -> true | T_AUTO -> true + | T_AUTHOR -> true | T_AT_EOP -> true | T_AT_END -> true | T_ATTRIBUTES -> true @@ -3219,3395 +3232,3416 @@ let can_pop (type a) : a terminal -> bool = function | _ -> false let recover = - let r0 = [R 335] in - let r1 = R 1334 :: r0 in + let r0 = [R 336] in + let r1 = R 1354 :: r0 in let r2 = S (T T_PERIOD) :: r1 in - let r3 = [R 396] in - let r4 = R 1407 :: r3 in - let r5 = [R 395] in + let r3 = [R 397] in + let r4 = R 1415 :: r3 in + let r5 = [R 396] in let r6 = Sub (r4) :: r5 in let r7 = S (T T_PERIOD) :: r6 in - let r8 = [R 2437] in + let r8 = [R 2448] in let r9 = S (T T_TERMINAL) :: r8 in - let r10 = [R 391] in + let r10 = [R 392] in let r11 = Sub (r9) :: r10 in - let r12 = [R 923] in + let r12 = [R 943] in let r13 = S (T T_PERIOD) :: r12 in - let r14 = [R 394] in + let r14 = [R 395] in let r15 = Sub (r9) :: r14 in - let r16 = [R 287] in + let r16 = [R 288] in let r17 = S (T T_EOF) :: r16 in - let r18 = R 1389 :: r17 in - let r19 = [R 664] in - let r20 = S (T T_PERIOD) :: r19 in - let r21 = [R 90] in - let r22 = S (N N_ro_pf_AS_string_literal__) :: r21 in - let r23 = [R 602] in - let r24 = S (T T_PERIOD) :: r23 in - let r25 = Sub (r22) :: r24 in - let r26 = S (N N_name) :: r25 in - let r27 = S (T T_PERIOD) :: r26 in - let r28 = S (T T_FUNCTION_ID) :: r27 in - let r29 = [R 609] in - let r30 = S (T T_PERIOD) :: r29 in - let r31 = S (N N_name) :: r30 in - let r32 = S (T T_FUNCTION) :: r31 in - let r33 = S (T T_END) :: r32 in - let r34 = S (N N_ro_procedure_division_) :: r33 in - let r35 = S (N N_ro_loc_data_division__) :: r34 in - let r36 = S (N N_ro_loc_environment_division__) :: r35 in - let r37 = S (N N_ro_loc_options_paragraph__) :: r36 in - let r38 = [R 734] in - let r39 = S (T T_PERIOD) :: r38 in - let r40 = R 887 :: r39 in - let r41 = R 885 :: r40 in - let r42 = Sub (r22) :: r41 in - let r43 = S (N N_name) :: r42 in - let r44 = [R 2162] in - let r45 = S (N N_figurative_constant) :: r44 in - let r46 = [R 1430] in - let r47 = [R 1131] in - let r48 = S (T T_HIGH_VALUE) :: r47 in - let r49 = [R 553] in - let r50 = [R 1132] in - let r51 = [R 2164] in - let r52 = S (T T_ALPHANUM) :: r51 in - let r53 = [R 2163] in + let r18 = R 1397 :: r17 in + let r19 = [R 90] in + let r20 = S (N N_ro_pf_AS_string_literal__) :: r19 in + let r21 = [R 1592] in + let r22 = S (T T_PERIOD) :: r21 in + let r23 = R 1310 :: r22 in + let r24 = Sub (r20) :: r23 in + let r25 = S (N N_info_word) :: r24 in + let r26 = S (T T_PERIOD) :: r25 in + let r27 = [R 2173] in + let r28 = S (N N_figurative_constant) :: r27 in + let r29 = [R 1438] in + let r30 = [R 1151] in + let r31 = S (T T_HIGH_VALUE) :: r30 in + let r32 = [R 556] in + let r33 = [R 1152] in + let r34 = [R 2175] in + let r35 = S (T T_ALPHANUM) :: r34 in + let r36 = [R 2174] in + let r37 = Sub (r35) :: r36 in + let r38 = [R 2183] in + let r39 = [R 1596] in + let r40 = S (T T_COMMON) :: r39 in + let r41 = [R 1311] in + let r42 = R 1274 :: r41 in + let r43 = Sub (r40) :: r42 in + let r44 = [R 1605] in + let r45 = [R 748] in + let r46 = S (T T_PERIOD) :: r45 in + let r47 = R 905 :: r46 in + let r48 = R 903 :: r47 in + let r49 = Sub (r20) :: r48 in + let r50 = S (N N_name) :: r49 in + let r51 = [R 1018] in + let r52 = S (N N_rnel_name_) :: r51 in + let r53 = [R 904] in let r54 = Sub (r52) :: r53 in - let r55 = [R 2172] in - let r56 = [R 998] in - let r57 = S (N N_rnel_name_) :: r56 in - let r58 = [R 886] in - let r59 = Sub (r57) :: r58 in - let r60 = [R 888] in - let r61 = [R 603] in - let r62 = S (T T_PERIOD) :: r61 in - let r63 = [R 244] in - let r64 = S (T T_PERIOD) :: r63 in - let r65 = R 879 :: r64 in - let r66 = R 875 :: r65 in - let r67 = R 156 :: r66 in - let r68 = Sub (r22) :: r67 in - let r69 = S (N N_name) :: r68 in - let r70 = [R 157] in - let r71 = [R 876] in - let r72 = Sub (r57) :: r71 in - let r73 = [R 880] in - let r74 = [R 733] in - let r75 = S (T T_PERIOD) :: r74 in - let r76 = S (N N_name) :: r75 in - let r77 = S (T T_INTERFACE) :: r76 in - let r78 = S (T T_END) :: r77 in - let r79 = S (N N_ro_object_procedure_division_) :: r78 in - let r80 = S (N N_ro_loc_environment_division__) :: r79 in - let r81 = [R 1536] in - let r82 = R 905 :: r81 in - let r83 = [R 1938] in - let r84 = S (T T_AWAY_FROM_ZERO) :: r83 in - let r85 = [R 736] in - let r86 = Sub (r84) :: r85 in - let r87 = R 1222 :: r86 in - let r88 = [R 452] in - let r89 = S (T T_BINARY_ENCODING) :: r88 in - let r90 = [R 446] in - let r91 = Sub (r89) :: r90 in - let r92 = [R 589] in - let r93 = Sub (r91) :: r92 in - let r94 = R 1222 :: r93 in - let r95 = [R 468] in - let r96 = S (T T_HIGH_ORDER_LEFT) :: r95 in - let r97 = [R 583] in - let r98 = Sub (r96) :: r97 in - let r99 = R 1222 :: r98 in - let r100 = [R 476] in - let r101 = S (T T_COBOL) :: r100 in - let r102 = [R 1932] in - let r103 = Sub (r84) :: r102 in - let r104 = R 1222 :: r103 in - let r105 = R 1236 :: r104 in - let r106 = [R 66] in - let r107 = S (T T_NATIVE) :: r106 in - let r108 = [R 65] in + let r55 = [R 906] in + let r56 = [R 691] in + let r57 = S (N N_rl_loc_informational_paragraph__) :: r56 in + let r58 = S (T T_PROGRAM_ID) :: r26 in + let r59 = [R 1593] in + let r60 = Sub (r57) :: r59 in + let r61 = Sub (r58) :: r60 in + let r62 = Sub (r57) :: r61 in + let r63 = S (T T_PERIOD) :: r62 in + let r64 = S (T T_DIVISION) :: r63 in + let r65 = [R 690] in + let r66 = S (N N_comment_entry) :: r65 in + let r67 = [R 689] in + let r68 = S (N N_comment_entry) :: r67 in + let r69 = [R 685] in + let r70 = S (N N_comment_entry) :: r69 in + let r71 = [R 686] in + let r72 = S (N N_comment_entry) :: r71 in + let r73 = [R 687] in + let r74 = S (N N_comment_entry) :: r73 in + let r75 = [R 688] in + let r76 = S (N N_comment_entry) :: r75 in + let r77 = [R 684] in + let r78 = S (N N_comment_entry) :: r77 in + let r79 = [R 605] in + let r80 = S (T T_PERIOD) :: r79 in + let r81 = Sub (r20) :: r80 in + let r82 = S (N N_name) :: r81 in + let r83 = [R 606] in + let r84 = S (T T_PERIOD) :: r83 in + let r85 = [R 242] in + let r86 = S (T T_PERIOD) :: r85 in + let r87 = R 897 :: r86 in + let r88 = R 893 :: r87 in + let r89 = R 156 :: r88 in + let r90 = Sub (r20) :: r89 in + let r91 = S (N N_name) :: r90 in + let r92 = [R 157] in + let r93 = [R 894] in + let r94 = Sub (r52) :: r93 in + let r95 = [R 898] in + let r96 = [R 1603] in + let r97 = S (T T_PERIOD) :: r96 in + let r98 = S (N N_name) :: r97 in + let r99 = S (T T_PROGRAM) :: r98 in + let r100 = S (T T_END) :: r99 in + let r101 = S (N N_ro_loc_procedure_division__) :: r100 in + let r102 = S (N N_ro_loc_data_division__) :: r101 in + let r103 = S (N N_ro_loc_environment_division__) :: r102 in + let r104 = [R 1544] in + let r105 = R 923 :: r104 in + let r106 = [R 1949] in + let r107 = S (T T_AWAY_FROM_ZERO) :: r106 in + let r108 = [R 752] in let r109 = Sub (r107) :: r108 in - let r110 = [R 906] in - let r111 = [R 479] in - let r112 = S (N N_ro_loc_input_output_section__) :: r111 in - let r113 = S (N N_ro_loc_configuration_section__) :: r112 in - let r114 = S (T T_PERIOD) :: r113 in - let r115 = [R 311] in - let r116 = S (N N_ro_loc_repository_paragraph__) :: r115 in - let r117 = S (N N_ro_loc_special_names_paragraph__) :: r116 in - let r118 = S (N N_ro_loc_object_computer_paragraph__) :: r117 in - let r119 = S (N N_ro_loc_source_computer_paragraph__) :: r118 in - let r120 = S (T T_PERIOD) :: r119 in - let r121 = [R 2082] in - let r122 = R 1248 :: r121 in - let r123 = [R 2083] in - let r124 = S (T T_PERIOD) :: r123 in - let r125 = [R 153] in - let r126 = S (T T_MODE) :: r125 in - let r127 = [R 1151] in - let r128 = R 1248 :: r127 in - let r129 = [R 1152] in - let r130 = S (T T_PERIOD) :: r129 in - let r131 = [R 2007] in - let r132 = S (N N_integer) :: r131 in - let r133 = [R 914] in - let r134 = S (T T_CHARACTERS) :: r133 in - let r135 = [R 912] in - let r136 = Sub (r134) :: r135 in - let r137 = S (N N_integer) :: r136 in - let r138 = [R 51] in - let r139 = S (N N_ro_name_) :: r138 in - let r140 = S (N N_name) :: r139 in - let r141 = R 1222 :: r140 in - let r142 = [R 1582] in - let r143 = Sub (r141) :: r142 in - let r144 = S (T T_SEQUENCE) :: r143 in - let r145 = [R 343] in - let r146 = S (N N_name) :: r145 in - let r147 = R 1222 :: r146 in - let r148 = [R 344] in - let r149 = S (N N_name) :: r148 in - let r150 = R 1222 :: r149 in - let r151 = [R 862] in - let r152 = S (N N_name) :: r151 in - let r153 = [R 206] in - let r154 = S (N N_ro_locale_phrase_) :: r153 in - let r155 = Sub (r152) :: r154 in - let r156 = R 1222 :: r155 in - let r157 = [R 211] in - let r158 = Sub (r156) :: r157 in - let r159 = [R 205] in - let r160 = Sub (r152) :: r159 in - let r161 = R 1222 :: r160 in - let r162 = [R 204] in - let r163 = Sub (r152) :: r162 in - let r164 = R 1222 :: r163 in - let r165 = [R 800] in - let r166 = [R 2104] in - let r167 = R 1248 :: r166 in - let r168 = [R 2221] in - let r169 = S (N N_ro_pf_IN_name__) :: r168 in - let r170 = S (N N_nel___anonymous_16_) :: r169 in - let r171 = R 591 :: r170 in - let r172 = [R 592] in - let r173 = [R 1442] in - let r174 = [R 732] in - let r175 = S (N N_rnel_integer_) :: r174 in - let r176 = [R 1003] in - let r177 = Sub (r175) :: r176 in - let r178 = [R 1537] in - let r179 = Sub (r45) :: r178 in - let r180 = R 1222 :: r179 in - let r181 = S (N N_name) :: r180 in - let r182 = [R 996] in - let r183 = S (N N_name) :: r182 in - let r184 = [R 857] in - let r185 = Sub (r183) :: r184 in - let r186 = R 1222 :: r185 in - let r187 = [R 2194] in - let r188 = S (N N_name) :: r187 in - let r189 = [R 434] in - let r190 = Sub (r188) :: r189 in - let r191 = R 1222 :: r190 in - let r192 = S (N N_name) :: r191 in - let r193 = R 1270 :: r192 in - let r194 = [R 2192] in - let r195 = S (T T_PREFIXED) :: r194 in - let r196 = [R 388] in - let r197 = S (T T_COMMA) :: r196 in - let r198 = [R 346] in - let r199 = S (N N_name) :: r198 in - let r200 = [R 345] in - let r201 = S (N N_ro_pf___anonymous_14_string_literal__) :: r200 in - let r202 = Sub (r45) :: r201 in - let r203 = R 1222 :: r202 in - let r204 = [R 1470] in - let r205 = Sub (r45) :: r204 in - let r206 = S (T T_SYMBOL) :: r205 in - let r207 = S (T T_PICTURE_STRING) :: r206 in - let r208 = R 1222 :: r207 in - let r209 = [R 342] in - let r210 = S (N N_name) :: r209 in - let r211 = R 1222 :: r210 in - let r212 = [R 245] in - let r213 = S (N N_ro_pf_IN_name__) :: r212 in - let r214 = S (N N_nel___anonymous_13_) :: r213 in - let r215 = R 1222 :: r214 in - let r216 = R 591 :: r215 in - let r217 = [R 1001] in - let r218 = [R 2174] in - let r219 = S (N N_figurative_constant) :: r218 in - let r220 = [R 1458] in - let r221 = [R 2175] in - let r222 = Sub (r52) :: r221 in - let r223 = [R 220] in - let r224 = S (N N_rnel_literal_phrase_) :: r223 in - let r225 = [R 50] in - let r226 = Sub (r224) :: r225 in - let r227 = S (T T_IS) :: r226 in - let r228 = R 591 :: r227 in - let r229 = [R 841] in - let r230 = [R 1081] in - let r231 = [R 978] in - let r232 = S (N N_name) :: r231 in - let r233 = S (T T_IS) :: r232 in - let r234 = [R 977] in - let r235 = [R 2151] in - let r236 = S (N N_name) :: r235 in - let r237 = R 1222 :: r236 in - let r238 = [R 924] in - let r239 = S (N N_name) :: r238 in - let r240 = R 1222 :: r239 in - let r241 = [R 2152] in - let r242 = S (N N_name) :: r241 in - let r243 = R 1222 :: r242 in - let r244 = [R 925] in - let r245 = S (N N_name) :: r244 in - let r246 = R 1222 :: r245 in - let r247 = [R 2103] in - let r248 = [R 1743] in - let r249 = [R 2109] in - let r250 = Sub (r22) :: r249 in - let r251 = [R 2108] in - let r252 = Sub (r22) :: r251 in - let r253 = [R 735] in - let r254 = S (N N_ro_expands_phrase_) :: r253 in - let r255 = Sub (r22) :: r254 in - let r256 = [R 494] in - let r257 = Sub (r57) :: r256 in - let r258 = S (T T_USING) :: r257 in - let r259 = [R 608] in - let r260 = S (T T_INTRINSIC) :: r259 in - let r261 = [R 607] in - let r262 = [R 606] in - let r263 = [R 246] in - let r264 = S (N N_ro_expands_phrase_) :: r263 in - let r265 = Sub (r22) :: r264 in - let r266 = [R 1744] in - let r267 = [R 720] in - let r268 = S (N N_ro_loc_io_control_paragraph__) :: r267 in - let r269 = S (N N_ro_loc_file_control_paragraph__) :: r268 in - let r270 = S (T T_PERIOD) :: r269 in - let r271 = [R 554] in - let r272 = S (N N_rl_select_) :: r271 in - let r273 = [R 2008] in - let r274 = S (T T_PERIOD) :: r273 in - let r275 = S (N N_rnel_loc_select_clause__) :: r274 in - let r276 = S (N N_name) :: r275 in - let r277 = [R 2054] in - let r278 = R 1246 :: r277 in - let r279 = S (T T_ALL) :: r278 in - let r280 = [R 2053] in - let r281 = Sub (r279) :: r280 in - let r282 = [R 2056] in - let r283 = [R 2055] in - let r284 = [R 1751] in - let r285 = R 1415 :: r284 in - let r286 = [R 1651] in - let r287 = S (N N_name) :: r286 in - let r288 = R 1222 :: r287 in - let r289 = [R 1648] in - let r290 = R 901 :: r289 in - let r291 = S (N N_qualname) :: r290 in - let r292 = R 1222 :: r291 in - let r293 = [R 1646] in - let r294 = S (T T_STANDARD_1) :: r293 in - let r295 = [R 1647] in - let r296 = Sub (r294) :: r295 in - let r297 = [R 902] in - let r298 = Sub (r57) :: r297 in - let r299 = [R 1601] in - let r300 = [R 1602] in - let r301 = S (N N_qualname) :: r300 in - let r302 = [R 1545] in - let r303 = Sub (r301) :: r302 in - let r304 = R 1222 :: r303 in - let r305 = [R 1538] in - let r306 = S (T T_INDEXED) :: r305 in - let r307 = [R 1542] in - let r308 = Sub (r306) :: r307 in - let r309 = [R 1540] in - let r310 = [R 870] in - let r311 = S (T T_AUTOMATIC) :: r310 in - let r312 = [R 871] in - let r313 = S (N N_with_lock_clause) :: r312 in - let r314 = Sub (r311) :: r313 in - let r315 = R 1222 :: r314 in - let r316 = [R 2430] in - let r317 = S (T T_RECORD) :: r316 in - let r318 = R 126 :: r317 in - let r319 = S (T T_ON) :: r318 in - let r320 = [R 92] in - let r321 = S (N N_name) :: r320 in - let r322 = [R 91] in - let r323 = S (N N_ro_pf_USING_name__) :: r322 in - let r324 = S (N N_rnel_name_or_alphanum_) :: r323 in - let r325 = [R 1462] in - let r326 = [R 56] in - let r327 = R 154 :: r326 in - let r328 = R 899 :: r327 in - let r329 = S (N N_qualname) :: r328 in - let r330 = R 1222 :: r329 in - let r331 = R 1224 :: r330 in - let r332 = [R 900] in - let r333 = Sub (r57) :: r332 in - let r334 = [R 155] in - let r335 = [R 18] in - let r336 = S (T T_DYNAMIC) :: r335 in - let r337 = [R 21] in - let r338 = Sub (r336) :: r337 in - let r339 = R 1222 :: r338 in - let r340 = [R 569] in - let r341 = S (N N_qualname) :: r340 in - let r342 = R 1222 :: r341 in - let r343 = [R 256] in - let r344 = S (N N_ntl_name_) :: r343 in - let r345 = S (T T_OF) :: r344 in - let r346 = [R 255] in - let r347 = S (N N_name) :: r346 in - let r348 = [R 1141] in - let r349 = [R 828] in - let r350 = [R 745] in - let r351 = R 1352 :: r350 in - let r352 = [R 1750] in - let r353 = S (N N_name) :: r352 in - let r354 = [R 1745] in - let r355 = Sub (r353) :: r354 in - let r356 = R 1208 :: r355 in - let r357 = [R 1448] in - let r358 = [R 1746] in - let r359 = S (N N_name) :: r358 in - let r360 = R 1240 :: r359 in - let r361 = S (T T_REEL) :: r360 in - let r362 = [R 1747] in - let r363 = S (N N_name) :: r362 in - let r364 = [R 1749] in - let r365 = [R 1748] in - let r366 = S (N N_name) :: r365 in - let r367 = [R 744] in - let r368 = S (T T_PERIOD) :: r367 in - let r369 = S (N N_rl_loc_multiple_file_clause__) :: r368 in - let r370 = [R 1948] in - let r371 = Sub (r57) :: r370 in - let r372 = S (N N_name) :: r371 in - let r373 = R 1212 :: r372 in - let r374 = R 1188 :: r373 in - let r375 = [R 812] in - let r376 = [R 983] in - let r377 = S (N N_nel___anonymous_21_) :: r376 in - let r378 = R 1200 :: r377 in - let r379 = R 1274 :: r378 in - let r380 = [R 1005] in - let r381 = [R 1450] in - let r382 = [R 798] in - let r383 = [R 810] in - let r384 = [R 1154] in - let r385 = S (N N_rl_loc_method_definition__) :: r384 in - let r386 = S (T T_PERIOD) :: r385 in - let r387 = [R 920] in - let r388 = R 146 :: r387 in - let r389 = R 134 :: r388 in - let r390 = Sub (r22) :: r389 in - let r391 = S (N N_name) :: r390 in - let r392 = S (T T_PERIOD) :: r391 in - let r393 = S (T T_METHOD_ID) :: r392 in - let r394 = [R 919] in - let r395 = S (T T_PERIOD) :: r394 in - let r396 = S (N N_name) :: r395 in - let r397 = S (T T_METHOD) :: r396 in - let r398 = S (T T_END) :: r397 in - let r399 = S (N N_ro_procedure_division_) :: r398 in - let r400 = S (N N_ro_loc_data_division__) :: r399 in - let r401 = S (N N_ro_loc_environment_division__) :: r400 in - let r402 = S (N N_ro_loc_options_paragraph__) :: r401 in - let r403 = [R 922] in - let r404 = R 150 :: r403 in - let r405 = R 134 :: r404 in - let r406 = S (N N_name) :: r405 in - let r407 = [R 151] in - let r408 = [R 921] in - let r409 = R 150 :: r408 in - let r410 = R 134 :: r409 in - let r411 = S (N N_name) :: r410 in - let r412 = [R 147] in - let r413 = [R 373] in - let r414 = S (N N_ro_screen_section_) :: r413 in - let r415 = S (N N_ro_report_section_) :: r414 in - let r416 = S (N N_ro_communication_section_) :: r415 in - let r417 = S (N N_ro_linkage_section_) :: r416 in - let r418 = S (N N_ro_local_storage_section_) :: r417 in - let r419 = S (N N_ro_working_storage_section_) :: r418 in - let r420 = S (N N_ro_file_section_) :: r419 in + let r110 = R 1242 :: r109 in + let r111 = [R 453] in + let r112 = S (T T_BINARY_ENCODING) :: r111 in + let r113 = [R 447] in + let r114 = Sub (r112) :: r113 in + let r115 = [R 592] in + let r116 = Sub (r114) :: r115 in + let r117 = R 1242 :: r116 in + let r118 = [R 469] in + let r119 = S (T T_HIGH_ORDER_LEFT) :: r118 in + let r120 = [R 586] in + let r121 = Sub (r119) :: r120 in + let r122 = R 1242 :: r121 in + let r123 = [R 477] in + let r124 = S (T T_COBOL) :: r123 in + let r125 = [R 1943] in + let r126 = Sub (r107) :: r125 in + let r127 = R 1242 :: r126 in + let r128 = R 1256 :: r127 in + let r129 = [R 66] in + let r130 = S (T T_NATIVE) :: r129 in + let r131 = [R 65] in + let r132 = Sub (r130) :: r131 in + let r133 = [R 924] in + let r134 = [R 480] in + let r135 = S (N N_ro_loc_input_output_section__) :: r134 in + let r136 = S (N N_ro_loc_configuration_section__) :: r135 in + let r137 = S (T T_PERIOD) :: r136 in + let r138 = [R 312] in + let r139 = S (N N_ro_loc_repository_paragraph__) :: r138 in + let r140 = S (N N_ro_loc_special_names_paragraph__) :: r139 in + let r141 = S (N N_ro_loc_object_computer_paragraph__) :: r140 in + let r142 = S (N N_ro_loc_source_computer_paragraph__) :: r141 in + let r143 = S (T T_PERIOD) :: r142 in + let r144 = [R 2093] in + let r145 = R 1268 :: r144 in + let r146 = [R 2094] in + let r147 = S (T T_PERIOD) :: r146 in + let r148 = [R 153] in + let r149 = S (T T_MODE) :: r148 in + let r150 = [R 1171] in + let r151 = R 1268 :: r150 in + let r152 = [R 1172] in + let r153 = S (T T_PERIOD) :: r152 in + let r154 = [R 2018] in + let r155 = S (N N_integer) :: r154 in + let r156 = [R 932] in + let r157 = S (T T_CHARACTERS) :: r156 in + let r158 = [R 930] in + let r159 = Sub (r157) :: r158 in + let r160 = S (N N_integer) :: r159 in + let r161 = [R 51] in + let r162 = S (N N_ro_name_) :: r161 in + let r163 = S (N N_name) :: r162 in + let r164 = R 1242 :: r163 in + let r165 = [R 1590] in + let r166 = Sub (r164) :: r165 in + let r167 = S (T T_SEQUENCE) :: r166 in + let r168 = [R 344] in + let r169 = S (N N_name) :: r168 in + let r170 = R 1242 :: r169 in + let r171 = [R 345] in + let r172 = S (N N_name) :: r171 in + let r173 = R 1242 :: r172 in + let r174 = [R 880] in + let r175 = S (N N_name) :: r174 in + let r176 = [R 204] in + let r177 = S (N N_ro_locale_phrase_) :: r176 in + let r178 = Sub (r175) :: r177 in + let r179 = R 1242 :: r178 in + let r180 = [R 209] in + let r181 = Sub (r179) :: r180 in + let r182 = [R 203] in + let r183 = Sub (r175) :: r182 in + let r184 = R 1242 :: r183 in + let r185 = [R 202] in + let r186 = Sub (r175) :: r185 in + let r187 = R 1242 :: r186 in + let r188 = [R 818] in + let r189 = [R 2115] in + let r190 = R 1268 :: r189 in + let r191 = [R 2232] in + let r192 = S (N N_ro_pf_IN_name__) :: r191 in + let r193 = S (N N_nel___anonymous_16_) :: r192 in + let r194 = R 594 :: r193 in + let r195 = [R 595] in + let r196 = [R 1450] in + let r197 = [R 746] in + let r198 = S (N N_rnel_integer_) :: r197 in + let r199 = [R 1023] in + let r200 = Sub (r198) :: r199 in + let r201 = [R 1545] in + let r202 = Sub (r28) :: r201 in + let r203 = R 1242 :: r202 in + let r204 = S (N N_name) :: r203 in + let r205 = [R 1016] in + let r206 = S (N N_name) :: r205 in + let r207 = [R 875] in + let r208 = Sub (r206) :: r207 in + let r209 = R 1242 :: r208 in + let r210 = [R 2205] in + let r211 = S (N N_name) :: r210 in + let r212 = [R 435] in + let r213 = Sub (r211) :: r212 in + let r214 = R 1242 :: r213 in + let r215 = S (N N_name) :: r214 in + let r216 = R 1290 :: r215 in + let r217 = [R 2203] in + let r218 = S (T T_PREFIXED) :: r217 in + let r219 = [R 389] in + let r220 = S (T T_COMMA) :: r219 in + let r221 = [R 347] in + let r222 = S (N N_name) :: r221 in + let r223 = [R 346] in + let r224 = S (N N_ro_pf___anonymous_14_string_literal__) :: r223 in + let r225 = Sub (r28) :: r224 in + let r226 = R 1242 :: r225 in + let r227 = [R 1478] in + let r228 = Sub (r28) :: r227 in + let r229 = S (T T_SYMBOL) :: r228 in + let r230 = S (T T_PICTURE_STRING) :: r229 in + let r231 = R 1242 :: r230 in + let r232 = [R 343] in + let r233 = S (N N_name) :: r232 in + let r234 = R 1242 :: r233 in + let r235 = [R 245] in + let r236 = S (N N_ro_pf_IN_name__) :: r235 in + let r237 = S (N N_nel___anonymous_13_) :: r236 in + let r238 = R 1242 :: r237 in + let r239 = R 594 :: r238 in + let r240 = [R 1021] in + let r241 = [R 2185] in + let r242 = S (N N_figurative_constant) :: r241 in + let r243 = [R 1466] in + let r244 = [R 2186] in + let r245 = Sub (r35) :: r244 in + let r246 = [R 218] in + let r247 = S (N N_rnel_literal_phrase_) :: r246 in + let r248 = [R 50] in + let r249 = Sub (r247) :: r248 in + let r250 = S (T T_IS) :: r249 in + let r251 = R 594 :: r250 in + let r252 = [R 859] in + let r253 = [R 1101] in + let r254 = [R 998] in + let r255 = S (N N_name) :: r254 in + let r256 = S (T T_IS) :: r255 in + let r257 = [R 997] in + let r258 = [R 2162] in + let r259 = S (N N_name) :: r258 in + let r260 = R 1242 :: r259 in + let r261 = [R 944] in + let r262 = S (N N_name) :: r261 in + let r263 = R 1242 :: r262 in + let r264 = [R 2163] in + let r265 = S (N N_name) :: r264 in + let r266 = R 1242 :: r265 in + let r267 = [R 945] in + let r268 = S (N N_name) :: r267 in + let r269 = R 1242 :: r268 in + let r270 = [R 2114] in + let r271 = [R 1754] in + let r272 = [R 2120] in + let r273 = Sub (r20) :: r272 in + let r274 = [R 2119] in + let r275 = Sub (r20) :: r274 in + let r276 = [R 751] in + let r277 = S (N N_ro_expands_phrase_) :: r276 in + let r278 = Sub (r20) :: r277 in + let r279 = [R 495] in + let r280 = Sub (r52) :: r279 in + let r281 = S (T T_USING) :: r280 in + let r282 = [R 613] in + let r283 = S (T T_INTRINSIC) :: r282 in + let r284 = [R 612] in + let r285 = [R 611] in + let r286 = [R 246] in + let r287 = S (N N_ro_expands_phrase_) :: r286 in + let r288 = Sub (r20) :: r287 in + let r289 = [R 1755] in + let r290 = [R 732] in + let r291 = S (N N_ro_loc_io_control_paragraph__) :: r290 in + let r292 = S (N N_ro_loc_file_control_paragraph__) :: r291 in + let r293 = S (T T_PERIOD) :: r292 in + let r294 = [R 557] in + let r295 = S (N N_rl_select_) :: r294 in + let r296 = [R 2019] in + let r297 = S (T T_PERIOD) :: r296 in + let r298 = S (N N_rnel_loc_select_clause__) :: r297 in + let r299 = S (N N_name) :: r298 in + let r300 = [R 2065] in + let r301 = R 1266 :: r300 in + let r302 = S (T T_ALL) :: r301 in + let r303 = [R 2064] in + let r304 = Sub (r302) :: r303 in + let r305 = [R 2067] in + let r306 = [R 2066] in + let r307 = [R 1762] in + let r308 = R 1423 :: r307 in + let r309 = [R 1662] in + let r310 = S (N N_name) :: r309 in + let r311 = R 1242 :: r310 in + let r312 = [R 1659] in + let r313 = R 919 :: r312 in + let r314 = S (N N_qualname) :: r313 in + let r315 = R 1242 :: r314 in + let r316 = [R 1657] in + let r317 = S (T T_STANDARD_1) :: r316 in + let r318 = [R 1658] in + let r319 = Sub (r317) :: r318 in + let r320 = [R 920] in + let r321 = Sub (r52) :: r320 in + let r322 = [R 1612] in + let r323 = [R 1613] in + let r324 = S (N N_qualname) :: r323 in + let r325 = [R 1553] in + let r326 = Sub (r324) :: r325 in + let r327 = R 1242 :: r326 in + let r328 = [R 1546] in + let r329 = S (T T_INDEXED) :: r328 in + let r330 = [R 1550] in + let r331 = Sub (r329) :: r330 in + let r332 = [R 1548] in + let r333 = [R 888] in + let r334 = S (T T_AUTOMATIC) :: r333 in + let r335 = [R 889] in + let r336 = S (N N_with_lock_clause) :: r335 in + let r337 = Sub (r334) :: r336 in + let r338 = R 1242 :: r337 in + let r339 = [R 2441] in + let r340 = S (T T_RECORD) :: r339 in + let r341 = R 126 :: r340 in + let r342 = S (T T_ON) :: r341 in + let r343 = [R 92] in + let r344 = S (N N_name) :: r343 in + let r345 = [R 91] in + let r346 = S (N N_ro_pf_USING_name__) :: r345 in + let r347 = S (N N_rnel_name_or_alphanum_) :: r346 in + let r348 = [R 1470] in + let r349 = [R 56] in + let r350 = R 154 :: r349 in + let r351 = R 917 :: r350 in + let r352 = S (N N_qualname) :: r351 in + let r353 = R 1242 :: r352 in + let r354 = R 1244 :: r353 in + let r355 = [R 918] in + let r356 = Sub (r52) :: r355 in + let r357 = [R 155] in + let r358 = [R 18] in + let r359 = S (T T_DYNAMIC) :: r358 in + let r360 = [R 21] in + let r361 = Sub (r359) :: r360 in + let r362 = R 1242 :: r361 in + let r363 = [R 572] in + let r364 = S (N N_qualname) :: r363 in + let r365 = R 1242 :: r364 in + let r366 = [R 256] in + let r367 = S (N N_ntl_name_) :: r366 in + let r368 = S (T T_OF) :: r367 in + let r369 = [R 255] in + let r370 = S (N N_name) :: r369 in + let r371 = [R 1161] in + let r372 = [R 846] in + let r373 = [R 761] in + let r374 = R 1370 :: r373 in + let r375 = [R 1761] in + let r376 = S (N N_name) :: r375 in + let r377 = [R 1756] in + let r378 = Sub (r376) :: r377 in + let r379 = R 1228 :: r378 in + let r380 = [R 1456] in + let r381 = [R 1757] in + let r382 = S (N N_name) :: r381 in + let r383 = R 1260 :: r382 in + let r384 = S (T T_REEL) :: r383 in + let r385 = [R 1758] in + let r386 = S (N N_name) :: r385 in + let r387 = [R 1760] in + let r388 = [R 1759] in + let r389 = S (N N_name) :: r388 in + let r390 = [R 760] in + let r391 = S (T T_PERIOD) :: r390 in + let r392 = S (N N_rl_loc_multiple_file_clause__) :: r391 in + let r393 = [R 1959] in + let r394 = Sub (r52) :: r393 in + let r395 = S (N N_name) :: r394 in + let r396 = R 1232 :: r395 in + let r397 = R 1208 :: r396 in + let r398 = [R 830] in + let r399 = [R 1003] in + let r400 = S (N N_nel___anonymous_21_) :: r399 in + let r401 = R 1220 :: r400 in + let r402 = R 1294 :: r401 in + let r403 = [R 1025] in + let r404 = [R 1458] in + let r405 = [R 816] in + let r406 = [R 828] in + let r407 = [R 374] in + let r408 = S (N N_ro_screen_section_) :: r407 in + let r409 = S (N N_ro_report_section_) :: r408 in + let r410 = S (N N_ro_communication_section_) :: r409 in + let r411 = S (N N_ro_linkage_section_) :: r410 in + let r412 = S (N N_ro_local_storage_section_) :: r411 in + let r413 = S (N N_ro_working_storage_section_) :: r412 in + let r414 = S (N N_ro_file_section_) :: r413 in + let r415 = S (T T_PERIOD) :: r414 in + let r416 = [R 571] in + let r417 = S (N N_rl_loc_file_or_sort_merge_descr_entry__) :: r416 in + let r418 = S (T T_PERIOD) :: r417 in + let r419 = [R 570] in + let r420 = S (N N_rl_loc_constant_or_data_descr_entry__) :: r419 in let r421 = S (T T_PERIOD) :: r420 in - let r422 = [R 568] in - let r423 = S (N N_rl_loc_file_or_sort_merge_descr_entry__) :: r422 in - let r424 = S (T T_PERIOD) :: r423 in - let r425 = [R 567] in - let r426 = S (N N_rl_loc_constant_or_data_descr_entry__) :: r425 in - let r427 = S (T T_PERIOD) :: r426 in - let r428 = S (N N_rl_loc_sort_merge_file_descr_clause__) :: r427 in - let r429 = [R 1643] in - let r430 = R 1196 :: r429 in - let r431 = S (N N_integer) :: r430 in - let r432 = [R 598] in - let r433 = R 1196 :: r432 in - let r434 = [R 1645] in - let r435 = S (N N_ro_depending_phrase_) :: r434 in - let r436 = Sub (r433) :: r435 in - let r437 = R 1266 :: r436 in + let r422 = S (N N_rl_loc_sort_merge_file_descr_clause__) :: r421 in + let r423 = [R 1654] in + let r424 = R 1216 :: r423 in + let r425 = S (N N_integer) :: r424 in + let r426 = [R 601] in + let r427 = R 1216 :: r426 in + let r428 = [R 1656] in + let r429 = S (N N_ro_depending_phrase_) :: r428 in + let r430 = Sub (r427) :: r429 in + let r431 = R 1286 :: r430 in + let r432 = R 1236 :: r431 in + let r433 = [R 603] in + let r434 = R 1216 :: r433 in + let r435 = [R 602] in + let r436 = R 1216 :: r435 in + let r437 = [R 604] in let r438 = R 1216 :: r437 in - let r439 = [R 600] in - let r440 = R 1196 :: r439 in - let r441 = [R 599] in - let r442 = R 1196 :: r441 in - let r443 = [R 601] in - let r444 = R 1196 :: r443 in - let r445 = [R 405] in - let r446 = S (N N_qualname) :: r445 in - let r447 = R 1242 :: r446 in - let r448 = [R 1644] in - let r449 = R 1196 :: r448 in - let r450 = [R 348] in - let r451 = Sub (r57) :: r450 in - let r452 = [R 347] in - let r453 = Sub (r57) :: r452 in - let r454 = [R 820] in - let r455 = [R 372] in - let r456 = S (T T_PERIOD) :: r455 in - let r457 = S (N N_rl_loc_data_descr_clause__) :: r456 in - let r458 = [R 2413] in - let r459 = [R 1009] in - let r460 = S (N N_ro_pf_BY_expression__) :: r459 in - let r461 = [R 1436] in - let r462 = [R 526] in - let r463 = [R 340] in - let r464 = [R 99] in - let r465 = S (T T_RPAR) :: r464 in - let r466 = S (N N_expression) :: r465 in - let r467 = [R 341] in - let r468 = [R 339] in - let r469 = [R 624] in - let r470 = [R 622] in - let r471 = [R 632] in - let r472 = S (T T_RPAR) :: r471 in - let r473 = S (N N_ro_expression_no_all_) :: r472 in - let r474 = S (T T_COLON) :: r473 in - let r475 = [R 502] in - let r476 = [R 101] in + let r439 = [R 406] in + let r440 = S (N N_qualname) :: r439 in + let r441 = R 1262 :: r440 in + let r442 = [R 1655] in + let r443 = R 1216 :: r442 in + let r444 = [R 349] in + let r445 = Sub (r52) :: r444 in + let r446 = [R 348] in + let r447 = Sub (r52) :: r446 in + let r448 = [R 838] in + let r449 = [R 373] in + let r450 = S (T T_PERIOD) :: r449 in + let r451 = S (N N_rl_loc_data_descr_clause__) :: r450 in + let r452 = [R 2424] in + let r453 = [R 1029] in + let r454 = S (N N_ro_pf_BY_expression__) :: r453 in + let r455 = [R 1444] in + let r456 = [R 527] in + let r457 = [R 341] in + let r458 = [R 99] in + let r459 = S (T T_RPAR) :: r458 in + let r460 = S (N N_expression) :: r459 in + let r461 = [R 342] in + let r462 = [R 340] in + let r463 = [R 629] in + let r464 = [R 627] in + let r465 = [R 637] in + let r466 = S (T T_RPAR) :: r465 in + let r467 = S (N N_ro_expression_no_all_) :: r466 in + let r468 = S (T T_COLON) :: r467 in + let r469 = [R 503] in + let r470 = [R 101] in + let r471 = S (T T_RPAR) :: r470 in + let r472 = [R 504] in + let r473 = [R 38] in + let r474 = S (N N_ident) :: r473 in + let r475 = [R 39] in + let r476 = [R 2213] in let r477 = S (T T_RPAR) :: r476 in - let r478 = [R 503] in - let r479 = [R 38] in - let r480 = S (N N_ident) :: r479 in - let r481 = [R 39] in - let r482 = [R 2202] in - let r483 = S (T T_RPAR) :: r482 in - let r484 = [R 504] in - let r485 = [R 636] in - let r486 = S (T T_RPAR) :: r485 in - let r487 = S (N N_ro_expression_no_all_) :: r486 in - let r488 = S (T T_COLON) :: r487 in - let r489 = [R 637] in - let r490 = S (T T_RPAR) :: r489 in - let r491 = S (N N_ro_expression_no_all_) :: r490 in - let r492 = S (T T_COLON) :: r491 in - let r493 = [R 1158] in - let r494 = [R 635] in - let r495 = S (T T_RPAR) :: r494 in - let r496 = S (N N_ro_expression_no_all_) :: r495 in - let r497 = S (T T_COLON) :: r496 in - let r498 = [R 717] in - let r499 = R 1527 :: r498 in - let r500 = [R 837] in - let r501 = Sub (r48) :: r500 in - let r502 = [R 1528] in - let r503 = [R 1529] in - let r504 = [R 501] in - let r505 = S (N N_atomic_expression_no_all) :: r504 in - let r506 = [R 518] in - let r507 = Sub (r505) :: r506 in - let r508 = [R 532] in - let r509 = [R 514] in - let r510 = [R 639] in - let r511 = S (T T_RPAR) :: r510 in - let r512 = S (N N_ro_expression_no_all_) :: r511 in - let r513 = S (T T_COLON) :: r512 in - let r514 = [R 533] in + let r478 = [R 505] in + let r479 = [R 641] in + let r480 = S (T T_RPAR) :: r479 in + let r481 = S (N N_ro_expression_no_all_) :: r480 in + let r482 = S (T T_COLON) :: r481 in + let r483 = [R 642] in + let r484 = S (T T_RPAR) :: r483 in + let r485 = S (N N_ro_expression_no_all_) :: r484 in + let r486 = S (T T_COLON) :: r485 in + let r487 = [R 1178] in + let r488 = [R 640] in + let r489 = S (T T_RPAR) :: r488 in + let r490 = S (N N_ro_expression_no_all_) :: r489 in + let r491 = S (T T_COLON) :: r490 in + let r492 = [R 729] in + let r493 = R 1535 :: r492 in + let r494 = [R 855] in + let r495 = Sub (r31) :: r494 in + let r496 = [R 1536] in + let r497 = [R 1537] in + let r498 = [R 502] in + let r499 = S (N N_atomic_expression_no_all) :: r498 in + let r500 = [R 519] in + let r501 = Sub (r499) :: r500 in + let r502 = [R 533] in + let r503 = [R 515] in + let r504 = [R 644] in + let r505 = S (T T_RPAR) :: r504 in + let r506 = S (N N_ro_expression_no_all_) :: r505 in + let r507 = S (T T_COLON) :: r506 in + let r508 = [R 534] in + let r509 = [R 518] in + let r510 = [R 498] in + let r511 = [R 643] in + let r512 = S (T T_RPAR) :: r511 in + let r513 = S (N N_ro_expression_no_all_) :: r512 in + let r514 = S (T T_COLON) :: r513 in let r515 = [R 517] in - let r516 = [R 497] in - let r517 = [R 638] in - let r518 = S (T T_RPAR) :: r517 in - let r519 = S (N N_ro_expression_no_all_) :: r518 in - let r520 = S (T T_COLON) :: r519 in - let r521 = [R 516] in - let r522 = [R 515] in - let r523 = [R 513] in - let r524 = [R 1162] in - let r525 = [R 1164] in - let r526 = S (N N_name) :: r525 in - let r527 = [R 500] in - let r528 = [R 2059] in - let r529 = S (T T_NEGATIVE) :: r528 in - let r530 = [R 2200] in - let r531 = S (N N_integer) :: r530 in - let r532 = [R 525] in - let r533 = S (N N_atomic_expression) :: r532 in - let r534 = [R 496] in - let r535 = Sub (r533) :: r534 in - let r536 = [R 512] in - let r537 = Sub (r535) :: r536 in - let r538 = [R 535] in - let r539 = [R 527] in - let r540 = [R 528] in - let r541 = [R 495] in - let r542 = [R 508] in - let r543 = [R 511] in - let r544 = [R 510] in - let r545 = [R 509] in - let r546 = [R 507] in - let r547 = [R 536] in - let r548 = [R 520] in - let r549 = [R 523] in - let r550 = [R 522] in - let r551 = [R 521] in - let r552 = [R 519] in - let r553 = [R 505] in - let r554 = [R 2201] in - let r555 = [R 2197] in - let r556 = S (N N_integer) :: r555 in - let r557 = [R 630] in - let r558 = S (T T_RPAR) :: r557 in - let r559 = [R 631] in - let r560 = S (T T_RPAR) :: r559 in - let r561 = S (N N_ro_expression_no_all_) :: r560 in - let r562 = S (T T_COLON) :: r561 in - let r563 = [R 499] in - let r564 = [R 498] in - let r565 = [R 623] in - let r566 = [R 633] in - let r567 = S (T T_RPAR) :: r566 in - let r568 = S (N N_ro_expression_no_all_) :: r567 in - let r569 = S (T T_COLON) :: r568 in - let r570 = [R 634] in - let r571 = S (T T_RPAR) :: r570 in - let r572 = S (N N_ro_expression_no_all_) :: r571 in - let r573 = [R 529] in - let r574 = [R 530] in - let r575 = [R 1432] in + let r516 = [R 516] in + let r517 = [R 514] in + let r518 = [R 1182] in + let r519 = [R 1184] in + let r520 = S (N N_name) :: r519 in + let r521 = [R 501] in + let r522 = [R 2070] in + let r523 = S (T T_NEGATIVE) :: r522 in + let r524 = [R 2211] in + let r525 = S (N N_integer) :: r524 in + let r526 = [R 526] in + let r527 = S (N N_atomic_expression) :: r526 in + let r528 = [R 497] in + let r529 = Sub (r527) :: r528 in + let r530 = [R 513] in + let r531 = Sub (r529) :: r530 in + let r532 = [R 536] in + let r533 = [R 528] in + let r534 = [R 529] in + let r535 = [R 496] in + let r536 = [R 509] in + let r537 = [R 512] in + let r538 = [R 511] in + let r539 = [R 510] in + let r540 = [R 508] in + let r541 = [R 537] in + let r542 = [R 521] in + let r543 = [R 524] in + let r544 = [R 523] in + let r545 = [R 522] in + let r546 = [R 520] in + let r547 = [R 506] in + let r548 = [R 2212] in + let r549 = [R 2208] in + let r550 = S (N N_integer) :: r549 in + let r551 = [R 635] in + let r552 = S (T T_RPAR) :: r551 in + let r553 = [R 636] in + let r554 = S (T T_RPAR) :: r553 in + let r555 = S (N N_ro_expression_no_all_) :: r554 in + let r556 = S (T T_COLON) :: r555 in + let r557 = [R 500] in + let r558 = [R 499] in + let r559 = [R 628] in + let r560 = [R 638] in + let r561 = S (T T_RPAR) :: r560 in + let r562 = S (N N_ro_expression_no_all_) :: r561 in + let r563 = S (T T_COLON) :: r562 in + let r564 = [R 639] in + let r565 = S (T T_RPAR) :: r564 in + let r566 = S (N N_ro_expression_no_all_) :: r565 in + let r567 = [R 530] in + let r568 = [R 531] in + let r569 = [R 1440] in + let r570 = [R 380] in + let r571 = S (N N_literal) :: r570 in + let r572 = [R 1033] in + let r573 = R 895 :: r572 in + let r574 = S (N N_subscripts) :: r573 in + let r575 = [R 896] in let r576 = [R 379] in let r577 = S (N N_literal) :: r576 in - let r578 = [R 1013] in - let r579 = R 877 :: r578 in - let r580 = S (N N_subscripts) :: r579 in - let r581 = [R 878] in - let r582 = [R 378] in - let r583 = S (N N_literal) :: r582 in - let r584 = [R 482] in - let r585 = S (T T_ERROR) :: r584 in - let r586 = [R 2401] in - let r587 = S (N N_idents) :: r586 in - let r588 = S (T T_FOR) :: r587 in - let r589 = R 893 :: r588 in - let r590 = Sub (r585) :: r589 in - let r591 = R 1286 :: r590 in - let r592 = S (N N_ident_or_literal) :: r591 in - let r593 = [R 483] in - let r594 = [R 894] in - let r595 = [R 2331] in - let r596 = S (T T_BINARY) :: r595 in - let r597 = [R 2366] in - let r598 = Sub (r596) :: r597 in - let r599 = [R 2352] in - let r600 = [R 1493] in - let r601 = [R 2351] in - let r602 = [R 2349] in - let r603 = S (N N_ro_object_reference_kind_) :: r602 in - let r604 = [R 165] in - let r605 = [R 1161] in - let r606 = R 130 :: r605 in - let r607 = [R 1160] in - let r608 = [R 2350] in - let r609 = S (N N_name) :: r608 in - let r610 = [R 2347] in - let r611 = [R 2346] in - let r612 = [R 470] in - let r613 = S (N N_ro_endianness_mode_) :: r612 in - let r614 = [R 2344] in - let r615 = [R 2343] in - let r616 = [R 2345] in - let r617 = [R 2065] in - let r618 = S (N N_ro_signedness_) :: r617 in - let r619 = [R 2337] in - let r620 = [R 2338] in - let r621 = [R 2339] in - let r622 = [R 2336] in - let r623 = [R 2233] in - let r624 = [R 377] in - let r625 = S (N N_name) :: r624 in - let r626 = [R 1299] in - let r627 = [R 2022] in - let r628 = S (N N_name) :: r627 in - let r629 = [R 1949] in - let r630 = S (N N_name) :: r629 in - let r631 = [R 1649] in - let r632 = [R 1595] in - let r633 = R 160 :: r632 in - let r634 = [R 161] in - let r635 = [R 1486] in - let r636 = S (T T_GET) :: r635 in - let r637 = [R 1133] in - let r638 = S (N N_expression) :: r637 in - let r639 = [R 293] in - let r640 = Sub (r638) :: r639 in - let r641 = [R 310] in - let r642 = Sub (r640) :: r641 in - let r643 = [R 1573] in - let r644 = Sub (r642) :: r643 in - let r645 = [R 1134] in - let r646 = [R 1138] in - let r647 = S (T T_RPAR) :: r646 in - let r648 = [R 1137] in + let r578 = [R 483] in + let r579 = S (T T_ERROR) :: r578 in + let r580 = [R 2412] in + let r581 = S (N N_idents) :: r580 in + let r582 = S (T T_FOR) :: r581 in + let r583 = R 911 :: r582 in + let r584 = Sub (r579) :: r583 in + let r585 = R 1306 :: r584 in + let r586 = S (N N_ident_or_literal) :: r585 in + let r587 = [R 484] in + let r588 = [R 912] in + let r589 = [R 2342] in + let r590 = S (T T_BINARY) :: r589 in + let r591 = [R 2377] in + let r592 = Sub (r590) :: r591 in + let r593 = [R 2363] in + let r594 = [R 1501] in + let r595 = [R 2362] in + let r596 = [R 2360] in + let r597 = S (N N_ro_object_reference_kind_) :: r596 in + let r598 = [R 165] in + let r599 = [R 1181] in + let r600 = R 130 :: r599 in + let r601 = [R 1180] in + let r602 = [R 2361] in + let r603 = S (N N_name) :: r602 in + let r604 = [R 2358] in + let r605 = [R 2357] in + let r606 = [R 471] in + let r607 = S (N N_ro_endianness_mode_) :: r606 in + let r608 = [R 2355] in + let r609 = [R 2354] in + let r610 = [R 2356] in + let r611 = [R 2076] in + let r612 = S (N N_ro_signedness_) :: r611 in + let r613 = [R 2348] in + let r614 = [R 2349] in + let r615 = [R 2350] in + let r616 = [R 2347] in + let r617 = [R 2244] in + let r618 = [R 378] in + let r619 = S (N N_name) :: r618 in + let r620 = [R 1319] in + let r621 = [R 2033] in + let r622 = S (N N_name) :: r621 in + let r623 = [R 1960] in + let r624 = S (N N_name) :: r623 in + let r625 = [R 1660] in + let r626 = [R 1606] in + let r627 = R 160 :: r626 in + let r628 = [R 161] in + let r629 = [R 1494] in + let r630 = S (T T_GET) :: r629 in + let r631 = [R 1153] in + let r632 = S (N N_expression) :: r631 in + let r633 = [R 294] in + let r634 = Sub (r632) :: r633 in + let r635 = [R 311] in + let r636 = Sub (r634) :: r635 in + let r637 = [R 1581] in + let r638 = Sub (r636) :: r637 in + let r639 = [R 1154] in + let r640 = [R 1158] in + let r641 = S (T T_RPAR) :: r640 in + let r642 = [R 1157] in + let r643 = S (T T_RPAR) :: r642 in + let r644 = [R 575] in + let r645 = S (N N_expression) :: r644 in + let r646 = [R 297] in + let r647 = [R 577] in + let r648 = [R 583] in let r649 = S (T T_RPAR) :: r648 in - let r650 = [R 572] in - let r651 = S (N N_expression) :: r650 in - let r652 = [R 296] in - let r653 = [R 574] in - let r654 = [R 580] in - let r655 = S (T T_RPAR) :: r654 in - let r656 = [R 1662] in - let r657 = [R 1690] in - let r658 = R 1284 :: r657 in - let r659 = [R 1658] in - let r660 = [R 1654] in - let r661 = [R 1682] in - let r662 = R 1284 :: r661 in + let r650 = [R 1673] in + let r651 = [R 1701] in + let r652 = R 1304 :: r651 in + let r653 = [R 1669] in + let r654 = [R 1665] in + let r655 = [R 1693] in + let r656 = R 1304 :: r655 in + let r657 = [R 1681] in + let r658 = [R 1672] in + let r659 = [R 1700] in + let r660 = R 1304 :: r659 in + let r661 = [R 544] in + let r662 = S (T T_OMITTED) :: r661 in let r663 = [R 1670] in - let r664 = [R 1661] in - let r665 = [R 1689] in - let r666 = R 1284 :: r665 in - let r667 = [R 543] in - let r668 = S (T T_OMITTED) :: r667 in - let r669 = [R 1659] in - let r670 = [R 1664] in - let r671 = [R 1692] in - let r672 = R 1284 :: r671 in - let r673 = [R 1660] in - let r674 = [R 1656] in - let r675 = [R 1684] in - let r676 = R 1284 :: r675 in - let r677 = [R 1672] in - let r678 = [R 1663] in - let r679 = [R 1691] in - let r680 = R 1284 :: r679 in - let r681 = [R 1655] in - let r682 = [R 1683] in - let r683 = R 1284 :: r682 in - let r684 = [R 1671] in - let r685 = [R 1653] in - let r686 = [R 1681] in - let r687 = R 1284 :: r686 in - let r688 = [R 1669] in - let r689 = [R 1650] in - let r690 = [R 542] in - let r691 = [R 301] in - let r692 = [R 300] in - let r693 = [R 579] in - let r694 = S (T T_RPAR) :: r693 in - let r695 = [R 573] in - let r696 = [R 582] in - let r697 = [R 581] in - let r698 = [R 295] in - let r699 = [R 299] in - let r700 = [R 298] in - let r701 = [R 1565] in - let r702 = S (N N_ro_depending_phrase_) :: r701 in - let r703 = S (N N_ro_picture_locale_phrase_) :: r702 in - let r704 = S (T T_PICTURE_STRING) :: r703 in - let r705 = [R 1566] in - let r706 = S (N N_integer) :: r705 in - let r707 = R 1222 :: r706 in - let r708 = S (T T_SIZE) :: r707 in - let r709 = [R 1491] in - let r710 = [R 1169] in - let r711 = R 891 :: r710 in - let r712 = S (N N_rl_key_is_) :: r711 in - let r713 = R 1282 :: r712 in - let r714 = [R 1168] in - let r715 = R 891 :: r714 in - let r716 = S (N N_rl_key_is_) :: r715 in - let r717 = R 122 :: r716 in - let r718 = S (N N_ro_pf_TO_integer__) :: r717 in - let r719 = S (N N_ro_pf_FROM_integer__) :: r718 in - let r720 = [R 201] in - let r721 = S (N N_name) :: r720 in - let r722 = [R 1440] in - let r723 = [R 1460] in - let r724 = [R 1609] in - let r725 = S (N N_rnel_qualname_) :: r724 in - let r726 = [R 748] in - let r727 = Sub (r725) :: r726 in - let r728 = R 1222 :: r727 in - let r729 = [R 747] in - let r730 = Sub (r725) :: r729 in - let r731 = R 1222 :: r730 in - let r732 = [R 678] in - let r733 = Sub (r57) :: r732 in - let r734 = [R 776] in - let r735 = S (T T_DEPENDING) :: r447 in - let r736 = [R 1167] in - let r737 = R 891 :: r736 in - let r738 = S (N N_rl_key_is_) :: r737 in - let r739 = Sub (r735) :: r738 in - let r740 = R 1282 :: r739 in - let r741 = [R 746] in - let r742 = [R 2234] in - let r743 = [R 545] in - let r744 = [R 1011] in - let r745 = Sub (r642) :: r744 in - let r746 = [R 618] in - let r747 = S (T T_BIT) :: r746 in - let r748 = [R 544] in - let r749 = [R 433] in - let r750 = S (N N_ro_pf___anonymous_43_integer__) :: r749 in - let r751 = S (N N_ro_name_) :: r750 in - let r752 = [R 1484] in - let r753 = S (N N_integer) :: r752 in - let r754 = [R 406] in - let r755 = S (N N_idents) :: r754 in - let r756 = [R 392] in - let r757 = S (N N_ident_or_literal) :: r756 in - let r758 = [R 324] in + let r664 = [R 1675] in + let r665 = [R 1703] in + let r666 = R 1304 :: r665 in + let r667 = [R 1671] in + let r668 = [R 1667] in + let r669 = [R 1695] in + let r670 = R 1304 :: r669 in + let r671 = [R 1683] in + let r672 = [R 1674] in + let r673 = [R 1702] in + let r674 = R 1304 :: r673 in + let r675 = [R 1666] in + let r676 = [R 1694] in + let r677 = R 1304 :: r676 in + let r678 = [R 1682] in + let r679 = [R 1664] in + let r680 = [R 1692] in + let r681 = R 1304 :: r680 in + let r682 = [R 1680] in + let r683 = [R 1661] in + let r684 = [R 543] in + let r685 = [R 302] in + let r686 = [R 301] in + let r687 = [R 582] in + let r688 = S (T T_RPAR) :: r687 in + let r689 = [R 576] in + let r690 = [R 585] in + let r691 = [R 584] in + let r692 = [R 296] in + let r693 = [R 300] in + let r694 = [R 299] in + let r695 = [R 1573] in + let r696 = S (N N_ro_depending_phrase_) :: r695 in + let r697 = S (N N_ro_picture_locale_phrase_) :: r696 in + let r698 = S (T T_PICTURE_STRING) :: r697 in + let r699 = [R 1574] in + let r700 = S (N N_integer) :: r699 in + let r701 = R 1242 :: r700 in + let r702 = S (T T_SIZE) :: r701 in + let r703 = [R 1499] in + let r704 = [R 1189] in + let r705 = R 909 :: r704 in + let r706 = S (N N_rl_key_is_) :: r705 in + let r707 = R 1302 :: r706 in + let r708 = [R 1188] in + let r709 = R 909 :: r708 in + let r710 = S (N N_rl_key_is_) :: r709 in + let r711 = R 122 :: r710 in + let r712 = S (N N_ro_pf_TO_integer__) :: r711 in + let r713 = S (N N_ro_pf_FROM_integer__) :: r712 in + let r714 = [R 199] in + let r715 = S (N N_name) :: r714 in + let r716 = [R 1448] in + let r717 = [R 1468] in + let r718 = [R 1620] in + let r719 = S (N N_rnel_qualname_) :: r718 in + let r720 = [R 764] in + let r721 = Sub (r719) :: r720 in + let r722 = R 1242 :: r721 in + let r723 = [R 763] in + let r724 = Sub (r719) :: r723 in + let r725 = R 1242 :: r724 in + let r726 = [R 682] in + let r727 = Sub (r52) :: r726 in + let r728 = [R 792] in + let r729 = S (T T_DEPENDING) :: r441 in + let r730 = [R 1187] in + let r731 = R 909 :: r730 in + let r732 = S (N N_rl_key_is_) :: r731 in + let r733 = Sub (r729) :: r732 in + let r734 = R 1302 :: r733 in + let r735 = [R 762] in + let r736 = [R 2245] in + let r737 = [R 546] in + let r738 = [R 1031] in + let r739 = Sub (r636) :: r738 in + let r740 = [R 623] in + let r741 = S (T T_BIT) :: r740 in + let r742 = [R 545] in + let r743 = [R 434] in + let r744 = S (N N_ro_pf___anonymous_43_integer__) :: r743 in + let r745 = S (N N_ro_name_) :: r744 in + let r746 = [R 1492] in + let r747 = S (N N_integer) :: r746 in + let r748 = [R 407] in + let r749 = S (N N_idents) :: r748 in + let r750 = [R 393] in + let r751 = S (N N_ident_or_literal) :: r750 in + let r752 = [R 325] in + let r753 = [R 328] in + let r754 = [R 326] in + let r755 = S (N N_expression) :: r754 in + let r756 = S (T T_AS) :: r755 in + let r757 = [R 314] in + let r758 = S (T T_PERIOD) :: r757 in let r759 = [R 327] in - let r760 = [R 325] in - let r761 = S (N N_expression) :: r760 in - let r762 = S (T T_AS) :: r761 in - let r763 = [R 313] in - let r764 = S (T T_PERIOD) :: r763 in - let r765 = [R 326] in - let r766 = S (N N_name) :: r765 in - let r767 = [R 312] in - let r768 = S (T T_PERIOD) :: r767 in - let r769 = [R 226] in - let r770 = S (N N_name) :: r769 in - let r771 = [R 227] in - let r772 = Sub (r770) :: r771 in - let r773 = [R 105] in - let r774 = S (T T_ZERO) :: r773 in - let r775 = R 1286 :: r774 in - let r776 = [R 58] in - let r777 = [R 932] in - let r778 = S (T T_LEADING) :: r777 in - let r779 = [R 2060] in - let r780 = R 158 :: r779 in - let r781 = [R 159] in - let r782 = [R 788] in - let r783 = [R 317] in + let r760 = S (N N_name) :: r759 in + let r761 = [R 313] in + let r762 = S (T T_PERIOD) :: r761 in + let r763 = [R 224] in + let r764 = S (N N_name) :: r763 in + let r765 = [R 225] in + let r766 = Sub (r764) :: r765 in + let r767 = [R 105] in + let r768 = S (T T_ZERO) :: r767 in + let r769 = R 1306 :: r768 in + let r770 = [R 58] in + let r771 = [R 952] in + let r772 = S (T T_LEADING) :: r771 in + let r773 = [R 2071] in + let r774 = R 158 :: r773 in + let r775 = [R 159] in + let r776 = [R 804] in + let r777 = [R 318] in + let r778 = S (T T_PERIOD) :: r777 in + let r779 = R 1312 :: r778 in + let r780 = S (N N_qualname) :: r779 in + let r781 = [R 1313] in + let r782 = [R 798] in + let r783 = [R 319] in let r784 = S (T T_PERIOD) :: r783 in - let r785 = R 1292 :: r784 in - let r786 = S (N N_qualname) :: r785 in - let r787 = [R 1293] in - let r788 = [R 782] in - let r789 = [R 318] in - let r790 = S (T T_PERIOD) :: r789 in - let r791 = R 1296 :: r790 in - let r792 = R 1294 :: r791 in - let r793 = S (N N_rnel_literal_through_literal_) :: r792 in - let r794 = R 1222 :: r793 in - let r795 = S (T T_VALUE) :: r794 in - let r796 = [R 319] in - let r797 = S (T T_PERIOD) :: r796 in - let r798 = R 1296 :: r797 in - let r799 = R 1294 :: r798 in - let r800 = S (N N_rnel_literal_through_literal_) :: r799 in - let r801 = [R 1295] in - let r802 = [R 1297] in - let r803 = S (N N_literal) :: r802 in - let r804 = R 1222 :: r803 in - let r805 = S (T T_FALSE) :: r804 in - let r806 = R 1284 :: r805 in - let r807 = [R 844] in - let r808 = [R 566] in - let r809 = S (N N_rl_loc_constant_or_data_descr_entry__) :: r808 in - let r810 = S (T T_PERIOD) :: r809 in - let r811 = S (N N_rl_loc_file_descr_clause__) :: r810 in - let r812 = [R 2412] in - let r813 = S (N N_nel___anonymous_29_) :: r812 in - let r814 = [R 1608] in - let r815 = S (N N_literal) :: r814 in - let r816 = [R 1007] in - let r817 = Sub (r815) :: r816 in - let r818 = [R 1702] in - let r819 = Sub (r57) :: r818 in - let r820 = [R 1701] in - let r821 = Sub (r57) :: r820 in - let r822 = [R 1606] in - let r823 = S (N N_integer) :: r822 in - let r824 = [R 761] in - let r825 = Sub (r823) :: r824 in - let r826 = [R 926] in - let r827 = R 1222 :: r826 in - let r828 = S (T T_RECORD) :: r827 in - let r829 = [R 755] in - let r830 = S (T T_STANDARD) :: r829 in - let r831 = [R 927] in - let r832 = [R 756] in - let r833 = [R 594] in - let r834 = R 1202 :: r833 in - let r835 = [R 596] in - let r836 = [R 595] in - let r837 = [R 253] in - let r838 = [R 106] in - let r839 = S (N N_integer) :: r838 in - let r840 = [R 109] in - let r841 = [R 759] in - let r842 = S (N N_ro_pf___anonymous_32_qualname_or_integer__) :: r841 in - let r843 = [R 760] in - let r844 = S (N N_ro_pf___anonymous_32_qualname_or_integer__) :: r843 in - let r845 = Sub (r823) :: r844 in - let r846 = S (T T_TOP) :: r845 in - let r847 = [R 1474] in - let r848 = Sub (r823) :: r847 in - let r849 = S (T T_BOTTOM) :: r848 in - let r850 = [R 1472] in - let r851 = Sub (r823) :: r850 in - let r852 = R 1190 :: r851 in - let r853 = [R 792] in - let r854 = [R 794] in - let r855 = [R 2438] in + let r785 = R 1316 :: r784 in + let r786 = R 1314 :: r785 in + let r787 = S (N N_rnel_literal_through_literal_) :: r786 in + let r788 = R 1242 :: r787 in + let r789 = S (T T_VALUE) :: r788 in + let r790 = [R 320] in + let r791 = S (T T_PERIOD) :: r790 in + let r792 = R 1316 :: r791 in + let r793 = R 1314 :: r792 in + let r794 = S (N N_rnel_literal_through_literal_) :: r793 in + let r795 = [R 1315] in + let r796 = [R 1317] in + let r797 = S (N N_literal) :: r796 in + let r798 = R 1242 :: r797 in + let r799 = S (T T_FALSE) :: r798 in + let r800 = R 1304 :: r799 in + let r801 = [R 862] in + let r802 = [R 569] in + let r803 = S (N N_rl_loc_constant_or_data_descr_entry__) :: r802 in + let r804 = S (T T_PERIOD) :: r803 in + let r805 = S (N N_rl_loc_file_descr_clause__) :: r804 in + let r806 = [R 2423] in + let r807 = S (N N_nel___anonymous_29_) :: r806 in + let r808 = [R 1619] in + let r809 = S (N N_literal) :: r808 in + let r810 = [R 1027] in + let r811 = Sub (r809) :: r810 in + let r812 = [R 1713] in + let r813 = Sub (r52) :: r812 in + let r814 = [R 1712] in + let r815 = Sub (r52) :: r814 in + let r816 = [R 1617] in + let r817 = S (N N_integer) :: r816 in + let r818 = [R 777] in + let r819 = Sub (r817) :: r818 in + let r820 = [R 946] in + let r821 = R 1242 :: r820 in + let r822 = S (T T_RECORD) :: r821 in + let r823 = [R 771] in + let r824 = S (T T_STANDARD) :: r823 in + let r825 = [R 947] in + let r826 = [R 772] in + let r827 = [R 597] in + let r828 = R 1222 :: r827 in + let r829 = [R 599] in + let r830 = [R 598] in + let r831 = [R 253] in + let r832 = [R 106] in + let r833 = S (N N_integer) :: r832 in + let r834 = [R 109] in + let r835 = [R 775] in + let r836 = S (N N_ro_pf___anonymous_32_qualname_or_integer__) :: r835 in + let r837 = [R 776] in + let r838 = S (N N_ro_pf___anonymous_32_qualname_or_integer__) :: r837 in + let r839 = Sub (r817) :: r838 in + let r840 = S (T T_TOP) :: r839 in + let r841 = [R 1482] in + let r842 = Sub (r817) :: r841 in + let r843 = S (T T_BOTTOM) :: r842 in + let r844 = [R 1480] in + let r845 = Sub (r817) :: r844 in + let r846 = R 1210 :: r845 in + let r847 = [R 808] in + let r848 = [R 810] in + let r849 = [R 2449] in + let r850 = S (N N_rl_loc_constant_or_data_descr_entry__) :: r849 in + let r851 = S (T T_PERIOD) :: r850 in + let r852 = [R 867] in + let r853 = S (N N_rl_loc_constant_or_data_descr_entry__) :: r852 in + let r854 = S (T T_PERIOD) :: r853 in + let r855 = [R 788] in let r856 = S (N N_rl_loc_constant_or_data_descr_entry__) :: r855 in let r857 = S (T T_PERIOD) :: r856 in - let r858 = [R 849] in - let r859 = S (N N_rl_loc_constant_or_data_descr_entry__) :: r858 in + let r858 = [R 287] in + let r859 = S (N N_rl_loc_communication_descr_entry__) :: r858 in let r860 = S (T T_PERIOD) :: r859 in - let r861 = [R 772] in + let r861 = [R 286] in let r862 = S (N N_rl_loc_constant_or_data_descr_entry__) :: r861 in let r863 = S (T T_PERIOD) :: r862 in - let r864 = [R 286] in - let r865 = S (N N_rl_loc_communication_descr_entry__) :: r864 in - let r866 = S (T T_PERIOD) :: r865 in - let r867 = [R 285] in - let r868 = S (N N_rl_loc_constant_or_data_descr_entry__) :: r867 in - let r869 = S (T T_PERIOD) :: r868 in - let r870 = S (N N_rl_loc_communication_descr_clause__) :: r869 in - let r871 = S (T T_OUTPUT) :: r870 in - let r872 = R 1212 :: r871 in - let r873 = [R 279] in + let r864 = S (N N_rl_loc_communication_descr_clause__) :: r863 in + let r865 = S (T T_OUTPUT) :: r864 in + let r866 = R 1232 :: r865 in + let r867 = [R 280] in + let r868 = S (N N_name) :: r867 in + let r869 = R 1242 :: r868 in + let r870 = [R 274] in + let r871 = S (N N_name) :: r870 in + let r872 = R 1242 :: r871 in + let r873 = [R 281] in let r874 = S (N N_name) :: r873 in - let r875 = R 1222 :: r874 in - let r876 = [R 273] in + let r875 = R 1242 :: r874 in + let r876 = [R 278] in let r877 = S (N N_name) :: r876 in - let r878 = R 1222 :: r877 in - let r879 = [R 280] in + let r878 = R 1242 :: r877 in + let r879 = [R 279] in let r880 = S (N N_name) :: r879 in - let r881 = R 1222 :: r880 in - let r882 = [R 277] in - let r883 = S (N N_name) :: r882 in - let r884 = R 1222 :: r883 in - let r885 = [R 278] in - let r886 = S (N N_name) :: r885 in - let r887 = [R 282] in + let r881 = [R 283] in + let r882 = S (N N_name) :: r881 in + let r883 = R 1242 :: r882 in + let r884 = [R 282] in + let r885 = S (N N_name) :: r884 in + let r886 = R 1242 :: r885 in + let r887 = [R 273] in let r888 = S (N N_name) :: r887 in - let r889 = R 1222 :: r888 in - let r890 = [R 281] in - let r891 = S (N N_name) :: r890 in - let r892 = R 1222 :: r891 in - let r893 = [R 272] in - let r894 = S (N N_name) :: r893 in + let r889 = [R 276] in + let r890 = R 921 :: r889 in + let r891 = R 1302 :: r890 in + let r892 = S (N N_integer) :: r891 in + let r893 = [R 922] in + let r894 = S (N N_nel_name_) :: r893 in let r895 = [R 275] in - let r896 = R 903 :: r895 in - let r897 = R 1282 :: r896 in - let r898 = S (N N_integer) :: r897 in - let r899 = [R 904] in - let r900 = S (N N_nel_name_) :: r899 in - let r901 = [R 274] in - let r902 = S (N N_name) :: r901 in - let r903 = [R 266] in - let r904 = S (N N_name) :: r903 in - let r905 = R 1222 :: r904 in - let r906 = [R 271] in + let r896 = S (N N_name) :: r895 in + let r897 = [R 267] in + let r898 = S (N N_name) :: r897 in + let r899 = R 1242 :: r898 in + let r900 = [R 272] in + let r901 = S (N N_name) :: r900 in + let r902 = [R 270] in + let r903 = S (N N_name) :: r902 in + let r904 = [R 269] in + let r905 = S (N N_name) :: r904 in + let r906 = [R 268] in let r907 = S (N N_name) :: r906 in - let r908 = [R 269] in + let r908 = [R 271] in let r909 = S (N N_name) :: r908 in - let r910 = [R 268] in + let r910 = [R 277] in let r911 = S (N N_name) :: r910 in - let r912 = [R 267] in - let r913 = S (N N_name) :: r912 in - let r914 = [R 270] in - let r915 = S (N N_name) :: r914 in - let r916 = [R 276] in - let r917 = S (N N_name) :: r916 in - let r918 = R 1222 :: r917 in - let r919 = [R 778] in - let r920 = [R 283] in - let r921 = S (N N_rl_loc_constant_or_data_descr_entry__) :: r920 in - let r922 = S (T T_PERIOD) :: r921 in - let r923 = S (N N_rl_loc_entry_name_clause__) :: r922 in - let r924 = S (N N_rl_loc_communication_descr_clause__) :: r923 in - let r925 = [R 284] in - let r926 = S (N N_rl_loc_constant_or_data_descr_entry__) :: r925 in - let r927 = S (T T_PERIOD) :: r926 in - let r928 = S (N N_rl_name_) :: r927 in - let r929 = [R 824] in - let r930 = [R 790] in - let r931 = [R 780] in - let r932 = [R 1734] in - let r933 = S (N N_rl_loc_report_descr_entry__) :: r932 in - let r934 = S (T T_PERIOD) :: r933 in - let r935 = [R 1711] in - let r936 = S (N N_rl_loc_constant_or_report_group_descr_entry__) :: r935 in - let r937 = S (T T_PERIOD) :: r936 in - let r938 = S (N N_rl_loc_report_descr_clause__) :: r937 in - let r939 = [R 1548] in - let r940 = S (T T_COLUMNS) :: r939 in - let r941 = S (N N_integer) :: r940 in - let r942 = [R 1546] in - let r943 = S (N N_ro_pf___anonymous_38_integer__) :: r942 in - let r944 = S (N N_ro_pf___anonymous_37_integer__) :: r943 in - let r945 = S (N N_ro_pf___anonymous_34_integer__) :: r944 in - let r946 = S (N N_ro_pf___anonymous_33_integer__) :: r945 in - let r947 = Sub (r941) :: r946 in - let r948 = [R 1356] in - let r949 = [R 1355] in - let r950 = [R 1476] in - let r951 = S (N N_integer) :: r950 in - let r952 = [R 1478] in - let r953 = S (N N_integer) :: r952 in - let r954 = R 1222 :: r953 in - let r955 = [R 1480] in + let r912 = R 1242 :: r911 in + let r913 = [R 794] in + let r914 = [R 284] in + let r915 = S (N N_rl_loc_constant_or_data_descr_entry__) :: r914 in + let r916 = S (T T_PERIOD) :: r915 in + let r917 = S (N N_rl_loc_entry_name_clause__) :: r916 in + let r918 = S (N N_rl_loc_communication_descr_clause__) :: r917 in + let r919 = [R 285] in + let r920 = S (N N_rl_loc_constant_or_data_descr_entry__) :: r919 in + let r921 = S (T T_PERIOD) :: r920 in + let r922 = S (N N_rl_name_) :: r921 in + let r923 = [R 842] in + let r924 = [R 806] in + let r925 = [R 796] in + let r926 = [R 1745] in + let r927 = S (N N_rl_loc_report_descr_entry__) :: r926 in + let r928 = S (T T_PERIOD) :: r927 in + let r929 = [R 1722] in + let r930 = S (N N_rl_loc_constant_or_report_group_descr_entry__) :: r929 in + let r931 = S (T T_PERIOD) :: r930 in + let r932 = S (N N_rl_loc_report_descr_clause__) :: r931 in + let r933 = [R 1556] in + let r934 = S (T T_COLUMNS) :: r933 in + let r935 = S (N N_integer) :: r934 in + let r936 = [R 1554] in + let r937 = S (N N_ro_pf___anonymous_38_integer__) :: r936 in + let r938 = S (N N_ro_pf___anonymous_37_integer__) :: r937 in + let r939 = S (N N_ro_pf___anonymous_34_integer__) :: r938 in + let r940 = S (N N_ro_pf___anonymous_33_integer__) :: r939 in + let r941 = Sub (r935) :: r940 in + let r942 = [R 1374] in + let r943 = [R 1373] in + let r944 = [R 1484] in + let r945 = S (N N_integer) :: r944 in + let r946 = [R 1486] in + let r947 = S (N N_integer) :: r946 in + let r948 = R 1242 :: r947 in + let r949 = [R 1488] in + let r950 = S (N N_integer) :: r949 in + let r951 = R 1242 :: r950 in + let r952 = [R 951] in + let r953 = [R 1555] in + let r954 = S (N N_ro_pf___anonymous_38_integer__) :: r953 in + let r955 = S (N N_ro_pf___anonymous_37_integer__) :: r954 in let r956 = S (N N_integer) :: r955 in - let r957 = R 1222 :: r956 in - let r958 = [R 931] in - let r959 = [R 1547] in - let r960 = S (N N_ro_pf___anonymous_38_integer__) :: r959 in - let r961 = S (N N_ro_pf___anonymous_37_integer__) :: r960 in - let r962 = S (N N_integer) :: r961 in - let r963 = [R 1482] in - let r964 = S (N N_integer) :: r963 in - let r965 = [R 1551] in - let r966 = [R 1550] in - let r967 = [R 332] in - let r968 = Sub (r57) :: r967 in - let r969 = [R 334] in - let r970 = [R 331] in - let r971 = Sub (r57) :: r970 in - let r972 = [R 333] in - let r973 = [R 252] in - let r974 = S (N N_ident) :: r973 in - let r975 = [R 1728] in - let r976 = S (T T_PERIOD) :: r975 in - let r977 = S (N N_rl_loc_report_group_descr_clause__) :: r976 in - let r978 = [R 952] in - let r979 = [R 951] in - let r980 = [R 1732] in - let r981 = S (T T_DISPLAY) :: r980 in - let r982 = [R 1735] in - let r983 = S (T T_DETAIL) :: r982 in - let r984 = [R 935] in - let r985 = [R 939] in - let r986 = [R 943] in - let r987 = [R 1741] in - let r988 = [R 1704] in - let r989 = S (N N_qualname) :: r988 in - let r990 = [R 1306] in - let r991 = [R 1307] in - let r992 = [R 1740] in - let r993 = [R 1302] in - let r994 = R 166 :: r993 in - let r995 = [R 167] in - let r996 = [R 1303] in - let r997 = R 166 :: r996 in - let r998 = [R 1301] in - let r999 = [R 2217] in - let r1000 = S (N N_expression) :: r999 in - let r1001 = [R 2219] in - let r1002 = R 895 :: r1001 in - let r1003 = Sub (r1000) :: r1002 in - let r1004 = [R 896] in - let r1005 = [R 1140] in - let r1006 = [R 950] in - let r1007 = [R 949] in - let r1008 = [R 1730] in - let r1009 = S (N N_ro_step_phrase_) :: r1008 in - let r1010 = S (N N_ro_depending_phrase_) :: r1009 in - let r1011 = R 1282 :: r1010 in - let r1012 = [R 1731] in - let r1013 = S (N N_ro_step_phrase_) :: r1012 in - let r1014 = S (N N_ro_depending_phrase_) :: r1013 in - let r1015 = R 1282 :: r1014 in - let r1016 = [R 2154] in - let r1017 = [R 1119] in - let r1018 = S (N N_integer) :: r1017 in - let r1019 = R 1222 :: r1018 in - let r1020 = [R 1121] in - let r1021 = [R 1120] in - let r1022 = [R 1122] in - let r1023 = R 168 :: r1022 in - let r1024 = [R 169] in - let r1025 = [R 764] in - let r1026 = [R 948] in - let r1027 = R 1418 :: r1026 in - let r1028 = [R 763] in - let r1029 = [R 947] in - let r1030 = [R 946] in - let r1031 = [R 617] in - let r1032 = [R 45] in - let r1033 = R 1226 :: r1032 in - let r1034 = [R 260] in - let r1035 = [R 259] in - let r1036 = Sub (r1033) :: r1035 in - let r1037 = [R 258] in - let r1038 = Sub (r1033) :: r1037 in - let r1039 = [R 808] in - let r1040 = [R 2215] in - let r1041 = [R 1935] in - let r1042 = Sub (r84) :: r1041 in - let r1043 = [R 2216] in - let r1044 = R 1936 :: r1043 in - let r1045 = Sub (r989) :: r1044 in - let r1046 = [R 1742] in - let r1047 = [R 2089] in - let r1048 = S (N N_expression) :: r1047 in - let r1049 = [R 2081] in - let r1050 = R 1936 :: r1049 in - let r1051 = [R 1729] in - let r1052 = [R 770] in - let r1053 = [R 769] in - let r1054 = [R 771] in - let r1055 = [R 768] in - let r1056 = [R 1703] in - let r1057 = S (N N_rnel_column_position_) :: r1056 in - let r1058 = [R 265] in - let r1059 = [R 264] in - let r1060 = [R 784] in - let r1061 = [R 804] in - let r1062 = [R 806] in - let r1063 = [R 1990] in - let r1064 = S (N N_rl_loc_constant_or_screen_descr_entry__) :: r1063 in - let r1065 = S (T T_PERIOD) :: r1064 in - let r1066 = [R 1985] in - let r1067 = S (T T_PERIOD) :: r1066 in - let r1068 = S (N N_rl_loc_screen_descr_clause__) :: r1067 in - let r1069 = [R 2087] in - let r1070 = S (N N_literal) :: r1069 in - let r1071 = [R 2086] in - let r1072 = [R 2085] in - let r1073 = [R 1989] in - let r1074 = R 1282 :: r1073 in - let r1075 = [R 647] in - let r1076 = S (N N_ident) :: r1075 in - let r1077 = [R 1987] in - let r1078 = Sub (r1076) :: r1077 in - let r1079 = [R 1986] in - let r1080 = Sub (r1078) :: r1079 in - let r1081 = R 1222 :: r1080 in - let r1082 = [R 1988] in - let r1083 = [R 2084] in - let r1084 = [R 1956] in - let r1085 = Sub (r1076) :: r1084 in - let r1086 = [R 957] in - let r1087 = S (T T_EOL) :: r1086 in - let r1088 = [R 480] in - let r1089 = [R 958] in - let r1090 = S (T T_LINE) :: r1089 in - let r1091 = [R 1967] in - let r1092 = Sub (r1078) :: r1091 in - let r1093 = R 1222 :: r1092 in - let r1094 = [R 1966] in - let r1095 = Sub (r1078) :: r1094 in - let r1096 = R 1222 :: r1095 in - let r1097 = [R 1957] in - let r1098 = Sub (r1076) :: r1097 in - let r1099 = [R 814] in - let r1100 = [R 786] in - let r1101 = [R 1574] in - let r1102 = S (N N_rl_loc_section_paragraph__) :: r1101 in - let r1103 = R 889 :: r1102 in - let r1104 = S (T T_PERIOD) :: r1103 in - let r1105 = S (N N_ro_returning_) :: r1104 in - let r1106 = [R 1576] in - let r1107 = S (N N_rl_loc_section_paragraph__) :: r1106 in - let r1108 = R 889 :: r1107 in - let r1109 = S (T T_PERIOD) :: r1108 in - let r1110 = S (N N_ro_returning_) :: r1109 in - let r1111 = [R 1106] in - let r1112 = [R 1105] in - let r1113 = S (N N_name) :: r1112 in - let r1114 = [R 2398] in - let r1115 = Sub (r1113) :: r1114 in - let r1116 = [R 1113] in - let r1117 = S (N N_name) :: r1116 in - let r1118 = [R 2399] in - let r1119 = [R 1108] in - let r1120 = [R 1761] in - let r1121 = S (N N_ident) :: r1120 in - let r1122 = [R 1616] in - let r1123 = [R 171] in - let r1124 = [R 1047] in + let r957 = [R 1490] in + let r958 = S (N N_integer) :: r957 in + let r959 = [R 1559] in + let r960 = [R 1558] in + let r961 = [R 333] in + let r962 = Sub (r52) :: r961 in + let r963 = [R 335] in + let r964 = [R 332] in + let r965 = Sub (r52) :: r964 in + let r966 = [R 334] in + let r967 = [R 252] in + let r968 = S (N N_ident) :: r967 in + let r969 = [R 1739] in + let r970 = S (T T_PERIOD) :: r969 in + let r971 = S (N N_rl_loc_report_group_descr_clause__) :: r970 in + let r972 = [R 972] in + let r973 = [R 971] in + let r974 = [R 1743] in + let r975 = S (T T_DISPLAY) :: r974 in + let r976 = [R 1746] in + let r977 = S (T T_DETAIL) :: r976 in + let r978 = [R 955] in + let r979 = [R 959] in + let r980 = [R 963] in + let r981 = [R 1752] in + let r982 = [R 1715] in + let r983 = S (N N_qualname) :: r982 in + let r984 = [R 1326] in + let r985 = [R 1327] in + let r986 = [R 1751] in + let r987 = [R 1322] in + let r988 = R 166 :: r987 in + let r989 = [R 167] in + let r990 = [R 1323] in + let r991 = R 166 :: r990 in + let r992 = [R 1321] in + let r993 = [R 2228] in + let r994 = S (N N_expression) :: r993 in + let r995 = [R 2230] in + let r996 = R 913 :: r995 in + let r997 = Sub (r994) :: r996 in + let r998 = [R 914] in + let r999 = [R 1160] in + let r1000 = [R 970] in + let r1001 = [R 969] in + let r1002 = [R 1741] in + let r1003 = S (N N_ro_step_phrase_) :: r1002 in + let r1004 = S (N N_ro_depending_phrase_) :: r1003 in + let r1005 = R 1302 :: r1004 in + let r1006 = [R 1742] in + let r1007 = S (N N_ro_step_phrase_) :: r1006 in + let r1008 = S (N N_ro_depending_phrase_) :: r1007 in + let r1009 = R 1302 :: r1008 in + let r1010 = [R 2165] in + let r1011 = [R 1139] in + let r1012 = S (N N_integer) :: r1011 in + let r1013 = R 1242 :: r1012 in + let r1014 = [R 1141] in + let r1015 = [R 1140] in + let r1016 = [R 1142] in + let r1017 = R 168 :: r1016 in + let r1018 = [R 169] in + let r1019 = [R 780] in + let r1020 = [R 968] in + let r1021 = R 1426 :: r1020 in + let r1022 = [R 779] in + let r1023 = [R 967] in + let r1024 = [R 966] in + let r1025 = [R 622] in + let r1026 = [R 45] in + let r1027 = R 1246 :: r1026 in + let r1028 = [R 260] in + let r1029 = [R 259] in + let r1030 = Sub (r1027) :: r1029 in + let r1031 = [R 258] in + let r1032 = Sub (r1027) :: r1031 in + let r1033 = [R 826] in + let r1034 = [R 2226] in + let r1035 = [R 1946] in + let r1036 = Sub (r107) :: r1035 in + let r1037 = [R 2227] in + let r1038 = R 1947 :: r1037 in + let r1039 = Sub (r983) :: r1038 in + let r1040 = [R 1753] in + let r1041 = [R 2100] in + let r1042 = S (N N_expression) :: r1041 in + let r1043 = [R 2092] in + let r1044 = R 1947 :: r1043 in + let r1045 = [R 1740] in + let r1046 = [R 786] in + let r1047 = [R 785] in + let r1048 = [R 787] in + let r1049 = [R 784] in + let r1050 = [R 1714] in + let r1051 = S (N N_rnel_column_position_) :: r1050 in + let r1052 = [R 265] in + let r1053 = [R 264] in + let r1054 = [R 800] in + let r1055 = [R 822] in + let r1056 = [R 824] in + let r1057 = [R 2001] in + let r1058 = S (N N_rl_loc_constant_or_screen_descr_entry__) :: r1057 in + let r1059 = S (T T_PERIOD) :: r1058 in + let r1060 = [R 1996] in + let r1061 = S (T T_PERIOD) :: r1060 in + let r1062 = S (N N_rl_loc_screen_descr_clause__) :: r1061 in + let r1063 = [R 2098] in + let r1064 = S (N N_literal) :: r1063 in + let r1065 = [R 2097] in + let r1066 = [R 2096] in + let r1067 = [R 2000] in + let r1068 = R 1302 :: r1067 in + let r1069 = [R 652] in + let r1070 = S (N N_ident) :: r1069 in + let r1071 = [R 1998] in + let r1072 = Sub (r1070) :: r1071 in + let r1073 = [R 1997] in + let r1074 = Sub (r1072) :: r1073 in + let r1075 = R 1242 :: r1074 in + let r1076 = [R 1999] in + let r1077 = [R 2095] in + let r1078 = [R 1967] in + let r1079 = Sub (r1070) :: r1078 in + let r1080 = [R 977] in + let r1081 = S (T T_EOL) :: r1080 in + let r1082 = [R 481] in + let r1083 = [R 978] in + let r1084 = S (T T_LINE) :: r1083 in + let r1085 = [R 1978] in + let r1086 = Sub (r1072) :: r1085 in + let r1087 = R 1242 :: r1086 in + let r1088 = [R 1977] in + let r1089 = Sub (r1072) :: r1088 in + let r1090 = R 1242 :: r1089 in + let r1091 = [R 1968] in + let r1092 = Sub (r1070) :: r1091 in + let r1093 = [R 832] in + let r1094 = [R 802] in + let r1095 = [R 1582] in + let r1096 = S (N N_rl_loc_section_paragraph__) :: r1095 in + let r1097 = R 907 :: r1096 in + let r1098 = S (T T_PERIOD) :: r1097 in + let r1099 = S (N N_ro_returning_) :: r1098 in + let r1100 = [R 1584] in + let r1101 = S (N N_rl_loc_section_paragraph__) :: r1100 in + let r1102 = R 907 :: r1101 in + let r1103 = S (T T_PERIOD) :: r1102 in + let r1104 = S (N N_ro_returning_) :: r1103 in + let r1105 = [R 1126] in + let r1106 = [R 1125] in + let r1107 = S (N N_name) :: r1106 in + let r1108 = [R 2409] in + let r1109 = Sub (r1107) :: r1108 in + let r1110 = [R 1133] in + let r1111 = S (N N_name) :: r1110 in + let r1112 = [R 2410] in + let r1113 = [R 1128] in + let r1114 = [R 1772] in + let r1115 = S (N N_ident) :: r1114 in + let r1116 = [R 1627] in + let r1117 = [R 171] in + let r1118 = [R 1067] in + let r1119 = [R 391] in + let r1120 = S (T T_PERIOD) :: r1119 in + let r1121 = S (T T_DECLARATIVES) :: r1120 in + let r1122 = S (T T_END) :: r1121 in + let r1123 = S (N N_rnel_loc_decl_section_paragraph__) :: r1122 in + let r1124 = [R 856] in let r1125 = [R 390] in - let r1126 = S (T T_PERIOD) :: r1125 in - let r1127 = S (T T_DECLARATIVES) :: r1126 in - let r1128 = S (T T_END) :: r1127 in - let r1129 = S (N N_rnel_loc_decl_section_paragraph__) :: r1128 in - let r1130 = [R 838] in - let r1131 = [R 389] in - let r1132 = S (N N_rl_loc_sentence__) :: r1131 in - let r1133 = S (T T_PERIOD) :: r1132 in - let r1134 = [R 2388] in - let r1135 = S (N N_rnel_use_after_exception_) :: r1134 in - let r1136 = S (T T_EC) :: r1135 in - let r1137 = S (T T_USE) :: r1136 in - let r1138 = [R 1309] in - let r1139 = Sub (r1137) :: r1138 in - let r1140 = S (T T_PERIOD) :: r1139 in - let r1141 = [R 999] in - let r1142 = Sub (r57) :: r1141 in - let r1143 = [R 2371] in - let r1144 = Sub (r1142) :: r1143 in - let r1145 = R 1242 :: r1144 in - let r1146 = R 1252 :: r1145 in - let r1147 = [R 2372] in - let r1148 = Sub (r1142) :: r1147 in - let r1149 = R 1242 :: r1148 in - let r1150 = [R 2379] in - let r1151 = Sub (r1142) :: r1150 in - let r1152 = R 1242 :: r1151 in - let r1153 = R 1252 :: r1152 in - let r1154 = [R 2380] in - let r1155 = Sub (r1142) :: r1154 in - let r1156 = R 1242 :: r1155 in - let r1157 = [R 2377] in - let r1158 = Sub (r1142) :: r1157 in - let r1159 = R 1242 :: r1158 in - let r1160 = [R 2378] in - let r1161 = Sub (r1142) :: r1160 in - let r1162 = R 1242 :: r1161 in - let r1163 = [R 2381] in - let r1164 = Sub (r1142) :: r1163 in - let r1165 = R 1242 :: r1164 in - let r1166 = R 1252 :: r1165 in - let r1167 = [R 2383] in - let r1168 = Sub (r1142) :: r1167 in - let r1169 = R 1242 :: r1168 in - let r1170 = R 1252 :: r1169 in - let r1171 = [R 2384] in - let r1172 = Sub (r1142) :: r1171 in - let r1173 = R 1242 :: r1172 in - let r1174 = [R 2382] in - let r1175 = Sub (r1142) :: r1174 in - let r1176 = R 1242 :: r1175 in - let r1177 = [R 2387] in - let r1178 = S (N N_rnel_use_after_exception_) :: r1177 in - let r1179 = [R 2391] in - let r1180 = [R 2368] in - let r1181 = [R 826] in - let r1182 = R 825 :: r1181 in - let r1183 = [R 2369] in - let r1184 = Sub (r1142) :: r1183 in - let r1185 = [R 2370] in - let r1186 = Sub (r1142) :: r1185 in - let r1187 = R 1242 :: r1186 in - let r1188 = [R 2392] in - let r1189 = [R 2390] in - let r1190 = S (N N_rnel_use_after_exception_) :: r1189 in - let r1191 = [R 2375] in - let r1192 = Sub (r1142) :: r1191 in - let r1193 = R 1242 :: r1192 in - let r1194 = R 1252 :: r1193 in - let r1195 = [R 2376] in - let r1196 = Sub (r1142) :: r1195 in - let r1197 = R 1242 :: r1196 in - let r1198 = [R 2389] in - let r1199 = S (N N_rnel_use_after_exception_) :: r1198 in - let r1200 = [R 2393] in - let r1201 = [R 2373] in - let r1202 = Sub (r1142) :: r1201 in - let r1203 = [R 2374] in - let r1204 = Sub (r1142) :: r1203 in - let r1205 = R 1242 :: r1204 in - let r1206 = [R 2394] in - let r1207 = [R 2386] in - let r1208 = S (N N_rnel_debug_target_) :: r1207 in - let r1209 = R 1242 :: r1208 in - let r1210 = [R 387] in - let r1211 = [R 149] in - let r1212 = [R 1597] in - let r1213 = S (N N_qualname) :: r1212 in - let r1214 = [R 386] in - let r1215 = S (T T_DIGITS) :: r1130 in - let r1216 = [R 1599] in - let r1217 = [R 2385] in - let r1218 = S (N N_ident) :: r1217 in - let r1219 = S (T T_REPORTING) :: r1218 in - let r1220 = [R 2453] in - let r1221 = S (N N_qualname) :: r1220 in - let r1222 = [R 2440] in - let r1223 = R 2424 :: r1222 in - let r1224 = S (N N_ro_retry_phrase_) :: r1223 in - let r1225 = S (N N_ro_advancing_phrase_) :: r1224 in - let r1226 = S (N N_ro_pf_FROM_ident_or_literal__) :: r1225 in - let r1227 = [R 2454] in - let r1228 = [R 1438] in - let r1229 = [R 42] in - let r1230 = [R 1756] in - let r1231 = [R 1755] in - let r1232 = S (T T_SECONDS) :: r1231 in - let r1233 = [R 1754] in - let r1234 = [R 2426] in - let r1235 = [R 2428] in - let r1236 = [R 2427] in - let r1237 = [R 2450] in - let r1238 = [R 2400] in - let r1239 = [R 2292] in - let r1240 = S (N N_rnel_unstring_target_) :: r1239 in - let r1241 = S (T T_INTO) :: r1240 in - let r1242 = S (N N_unstring_delimiters) :: r1241 in - let r1243 = [R 662] in - let r1244 = S (N N_ident) :: r1243 in - let r1245 = [R 2290] in - let r1246 = S (N N_l___anonymous_99_) :: r1245 in - let r1247 = Sub (r1244) :: r1246 in - let r1248 = R 114 :: r1247 in - let r1249 = [R 750] in - let r1250 = S (N N_l___anonymous_99_) :: r1249 in - let r1251 = Sub (r1244) :: r1250 in - let r1252 = [R 2323] in - let r1253 = S (N N_ro_pf___anonymous_101_ident__) :: r1252 in - let r1254 = [R 1466] in - let r1255 = S (N N_ident) :: r1254 in - let r1256 = [R 1468] in - let r1257 = S (N N_ident) :: r1256 in - let r1258 = [R 2300] in - let r1259 = S (N N_ident) :: r1258 in - let r1260 = [R 2304] in - let r1261 = [R 2288] in - let r1262 = R 181 :: r1261 in - let r1263 = [R 656] in - let r1264 = S (N N_ident) :: r1263 in - let r1265 = [R 654] in - let r1266 = S (N N_ident) :: r1265 in - let r1267 = [R 2232] in - let r1268 = Sub (r1266) :: r1267 in - let r1269 = S (T T_TO) :: r1268 in - let r1270 = Sub (r1264) :: r1269 in - let r1271 = S (T T_FROM) :: r1270 in - let r1272 = R 1196 :: r1271 in - let r1273 = [R 1125] in - let r1274 = Sub (r48) :: r1273 in - let r1275 = [R 2230] in - let r1276 = [R 2220] in - let r1277 = [R 2203] in - let r1278 = R 467 :: r1277 in - let r1279 = S (N N_rnel_rounded_ident_) :: r1278 in - let r1280 = S (T T_FROM) :: r1279 in - let r1281 = [R 1933] in - let r1282 = R 1936 :: r1281 in - let r1283 = S (N N_ident) :: r1282 in - let r1284 = [R 2211] in - let r1285 = R 467 :: r1284 in - let r1286 = Sub (r1283) :: r1285 in - let r1287 = S (T T_FROM) :: r1286 in - let r1288 = [R 2212] in - let r1289 = R 467 :: r1288 in - let r1290 = [R 2091] in - let r1291 = S (N N_ro_s_delimited_by_) :: r1290 in - let r1292 = Sub (r1264) :: r1291 in - let r1293 = [R 1115] in - let r1294 = Sub (r1292) :: r1293 in - let r1295 = [R 2177] in - let r1296 = S (N N_ident) :: r1295 in - let r1297 = S (T T_INTO) :: r1296 in - let r1298 = [R 2181] in - let r1299 = [R 2158] in - let r1300 = [R 2157] in - let r1301 = [R 2155] in - let r1302 = S (T T_ERROR) :: r1301 in - let r1303 = [R 2434] in - let r1304 = S (N N_ident_or_literal) :: r1303 in - let r1305 = R 1268 :: r1304 in - let r1306 = [R 2112] in - let r1307 = [R 2116] in - let r1308 = [R 2069] in - let r1309 = S (N N_ro_collating_sequence_phrase_) :: r1308 in - let r1310 = [R 2071] in - let r1311 = [R 2075] in - let r1312 = [R 719] in - let r1313 = [R 1578] in - let r1314 = S (N N_name) :: r1313 in - let r1315 = [R 718] in - let r1316 = S (N N_ro_pf_THROUGH_procedure_name__) :: r1315 in - let r1317 = Sub (r1314) :: r1316 in - let r1318 = R 1222 :: r1317 in - let r1319 = [R 1454] in - let r1320 = [R 1544] in - let r1321 = Sub (r57) :: r1320 in - let r1322 = S (T T_GIVING) :: r1321 in - let r1323 = [R 2079] in - let r1324 = [R 1543] in - let r1325 = S (N N_ro_pf_THROUGH_procedure_name__) :: r1324 in - let r1326 = Sub (r1314) :: r1325 in - let r1327 = R 1222 :: r1326 in - let r1328 = [R 2076] in - let r1329 = S (N N_ro_collating_sequence_phrase_) :: r1328 in - let r1330 = R 1244 :: r1329 in - let r1331 = R 1216 :: r1330 in - let r1332 = [R 2080] in - let r1333 = [R 257] in - let r1334 = Sub (r141) :: r1333 in - let r1335 = [R 2072] in - let r1336 = S (N N_ro_collating_sequence_phrase_) :: r1335 in - let r1337 = R 1244 :: r1336 in - let r1338 = R 1216 :: r1337 in - let r1339 = [R 1172] in - let r1340 = Sub (r725) :: r1339 in - let r1341 = R 1224 :: r1340 in - let r1342 = [R 1173] in - let r1343 = Sub (r725) :: r1342 in - let r1344 = [R 2073] in - let r1345 = [R 2077] in - let r1346 = [R 2074] in - let r1347 = S (N N_ro_collating_sequence_phrase_) :: r1346 in - let r1348 = R 1244 :: r1347 in - let r1349 = R 1216 :: r1348 in - let r1350 = [R 2078] in - let r1351 = [R 2070] in - let r1352 = S (N N_ro_collating_sequence_phrase_) :: r1351 in - let r1353 = R 1244 :: r1352 in - let r1354 = R 1216 :: r1353 in - let r1355 = [R 2045] in - let r1356 = [R 861] in - let r1357 = S (T T_USER_DEFAULT) :: r1356 in - let r1358 = [R 866] in - let r1359 = S (N N_ident) :: r1358 in - let r1360 = [R 2050] in - let r1361 = Sub (r1359) :: r1360 in - let r1362 = S (T T_TO) :: r1361 in - let r1363 = [R 2051] in - let r1364 = S (T T_OFF) :: r1363 in + let r1126 = S (N N_rl_loc_sentence__) :: r1125 in + let r1127 = S (T T_PERIOD) :: r1126 in + let r1128 = [R 2399] in + let r1129 = S (N N_rnel_use_after_exception_) :: r1128 in + let r1130 = S (T T_EC) :: r1129 in + let r1131 = S (T T_USE) :: r1130 in + let r1132 = [R 1329] in + let r1133 = Sub (r1131) :: r1132 in + let r1134 = S (T T_PERIOD) :: r1133 in + let r1135 = [R 1019] in + let r1136 = Sub (r52) :: r1135 in + let r1137 = [R 2382] in + let r1138 = Sub (r1136) :: r1137 in + let r1139 = R 1262 :: r1138 in + let r1140 = R 1272 :: r1139 in + let r1141 = [R 2383] in + let r1142 = Sub (r1136) :: r1141 in + let r1143 = R 1262 :: r1142 in + let r1144 = [R 2390] in + let r1145 = Sub (r1136) :: r1144 in + let r1146 = R 1262 :: r1145 in + let r1147 = R 1272 :: r1146 in + let r1148 = [R 2391] in + let r1149 = Sub (r1136) :: r1148 in + let r1150 = R 1262 :: r1149 in + let r1151 = [R 2388] in + let r1152 = Sub (r1136) :: r1151 in + let r1153 = R 1262 :: r1152 in + let r1154 = [R 2389] in + let r1155 = Sub (r1136) :: r1154 in + let r1156 = R 1262 :: r1155 in + let r1157 = [R 2392] in + let r1158 = Sub (r1136) :: r1157 in + let r1159 = R 1262 :: r1158 in + let r1160 = R 1272 :: r1159 in + let r1161 = [R 2394] in + let r1162 = Sub (r1136) :: r1161 in + let r1163 = R 1262 :: r1162 in + let r1164 = R 1272 :: r1163 in + let r1165 = [R 2395] in + let r1166 = Sub (r1136) :: r1165 in + let r1167 = R 1262 :: r1166 in + let r1168 = [R 2393] in + let r1169 = Sub (r1136) :: r1168 in + let r1170 = R 1262 :: r1169 in + let r1171 = [R 2398] in + let r1172 = S (N N_rnel_use_after_exception_) :: r1171 in + let r1173 = [R 2402] in + let r1174 = [R 2379] in + let r1175 = [R 844] in + let r1176 = R 843 :: r1175 in + let r1177 = [R 2380] in + let r1178 = Sub (r1136) :: r1177 in + let r1179 = [R 2381] in + let r1180 = Sub (r1136) :: r1179 in + let r1181 = R 1262 :: r1180 in + let r1182 = [R 2403] in + let r1183 = [R 2401] in + let r1184 = S (N N_rnel_use_after_exception_) :: r1183 in + let r1185 = [R 2386] in + let r1186 = Sub (r1136) :: r1185 in + let r1187 = R 1262 :: r1186 in + let r1188 = R 1272 :: r1187 in + let r1189 = [R 2387] in + let r1190 = Sub (r1136) :: r1189 in + let r1191 = R 1262 :: r1190 in + let r1192 = [R 2400] in + let r1193 = S (N N_rnel_use_after_exception_) :: r1192 in + let r1194 = [R 2404] in + let r1195 = [R 2384] in + let r1196 = Sub (r1136) :: r1195 in + let r1197 = [R 2385] in + let r1198 = Sub (r1136) :: r1197 in + let r1199 = R 1262 :: r1198 in + let r1200 = [R 2405] in + let r1201 = [R 2397] in + let r1202 = S (N N_rnel_debug_target_) :: r1201 in + let r1203 = R 1262 :: r1202 in + let r1204 = [R 388] in + let r1205 = [R 149] in + let r1206 = [R 1608] in + let r1207 = S (N N_qualname) :: r1206 in + let r1208 = [R 387] in + let r1209 = S (T T_DIGITS) :: r1124 in + let r1210 = [R 1610] in + let r1211 = [R 2396] in + let r1212 = S (N N_ident) :: r1211 in + let r1213 = S (T T_REPORTING) :: r1212 in + let r1214 = [R 2464] in + let r1215 = S (N N_qualname) :: r1214 in + let r1216 = [R 2451] in + let r1217 = R 2435 :: r1216 in + let r1218 = S (N N_ro_retry_phrase_) :: r1217 in + let r1219 = S (N N_ro_advancing_phrase_) :: r1218 in + let r1220 = S (N N_ro_pf_FROM_ident_or_literal__) :: r1219 in + let r1221 = [R 2465] in + let r1222 = [R 1446] in + let r1223 = [R 42] in + let r1224 = [R 1767] in + let r1225 = [R 1766] in + let r1226 = S (T T_SECONDS) :: r1225 in + let r1227 = [R 1765] in + let r1228 = [R 2437] in + let r1229 = [R 2439] in + let r1230 = [R 2438] in + let r1231 = [R 2461] in + let r1232 = [R 2411] in + let r1233 = [R 2303] in + let r1234 = S (N N_rnel_unstring_target_) :: r1233 in + let r1235 = S (T T_INTO) :: r1234 in + let r1236 = S (N N_unstring_delimiters) :: r1235 in + let r1237 = [R 667] in + let r1238 = S (N N_ident) :: r1237 in + let r1239 = [R 2301] in + let r1240 = S (N N_l___anonymous_99_) :: r1239 in + let r1241 = Sub (r1238) :: r1240 in + let r1242 = R 114 :: r1241 in + let r1243 = [R 766] in + let r1244 = S (N N_l___anonymous_99_) :: r1243 in + let r1245 = Sub (r1238) :: r1244 in + let r1246 = [R 2334] in + let r1247 = S (N N_ro_pf___anonymous_101_ident__) :: r1246 in + let r1248 = [R 1474] in + let r1249 = S (N N_ident) :: r1248 in + let r1250 = [R 1476] in + let r1251 = S (N N_ident) :: r1250 in + let r1252 = [R 2311] in + let r1253 = S (N N_ident) :: r1252 in + let r1254 = [R 2315] in + let r1255 = [R 2299] in + let r1256 = R 179 :: r1255 in + let r1257 = [R 661] in + let r1258 = S (N N_ident) :: r1257 in + let r1259 = [R 659] in + let r1260 = S (N N_ident) :: r1259 in + let r1261 = [R 2243] in + let r1262 = Sub (r1260) :: r1261 in + let r1263 = S (T T_TO) :: r1262 in + let r1264 = Sub (r1258) :: r1263 in + let r1265 = S (T T_FROM) :: r1264 in + let r1266 = R 1216 :: r1265 in + let r1267 = [R 1145] in + let r1268 = Sub (r31) :: r1267 in + let r1269 = [R 2241] in + let r1270 = [R 2231] in + let r1271 = [R 2214] in + let r1272 = R 468 :: r1271 in + let r1273 = S (N N_rnel_rounded_ident_) :: r1272 in + let r1274 = S (T T_FROM) :: r1273 in + let r1275 = [R 1944] in + let r1276 = R 1947 :: r1275 in + let r1277 = S (N N_ident) :: r1276 in + let r1278 = [R 2222] in + let r1279 = R 468 :: r1278 in + let r1280 = Sub (r1277) :: r1279 in + let r1281 = S (T T_FROM) :: r1280 in + let r1282 = [R 2223] in + let r1283 = R 468 :: r1282 in + let r1284 = [R 2102] in + let r1285 = S (N N_ro_s_delimited_by_) :: r1284 in + let r1286 = Sub (r1258) :: r1285 in + let r1287 = [R 1135] in + let r1288 = Sub (r1286) :: r1287 in + let r1289 = [R 2188] in + let r1290 = S (N N_ident) :: r1289 in + let r1291 = S (T T_INTO) :: r1290 in + let r1292 = [R 2192] in + let r1293 = [R 2169] in + let r1294 = [R 2168] in + let r1295 = [R 2166] in + let r1296 = S (T T_ERROR) :: r1295 in + let r1297 = [R 2445] in + let r1298 = S (N N_ident_or_literal) :: r1297 in + let r1299 = R 1288 :: r1298 in + let r1300 = [R 2123] in + let r1301 = [R 2127] in + let r1302 = [R 2080] in + let r1303 = S (N N_ro_collating_sequence_phrase_) :: r1302 in + let r1304 = [R 2082] in + let r1305 = [R 2086] in + let r1306 = [R 731] in + let r1307 = [R 1586] in + let r1308 = S (N N_name) :: r1307 in + let r1309 = [R 730] in + let r1310 = S (N N_ro_pf_THROUGH_procedure_name__) :: r1309 in + let r1311 = Sub (r1308) :: r1310 in + let r1312 = R 1242 :: r1311 in + let r1313 = [R 1462] in + let r1314 = [R 1552] in + let r1315 = Sub (r52) :: r1314 in + let r1316 = S (T T_GIVING) :: r1315 in + let r1317 = [R 2090] in + let r1318 = [R 1551] in + let r1319 = S (N N_ro_pf_THROUGH_procedure_name__) :: r1318 in + let r1320 = Sub (r1308) :: r1319 in + let r1321 = R 1242 :: r1320 in + let r1322 = [R 2087] in + let r1323 = S (N N_ro_collating_sequence_phrase_) :: r1322 in + let r1324 = R 1264 :: r1323 in + let r1325 = R 1236 :: r1324 in + let r1326 = [R 2091] in + let r1327 = [R 257] in + let r1328 = Sub (r164) :: r1327 in + let r1329 = [R 2083] in + let r1330 = S (N N_ro_collating_sequence_phrase_) :: r1329 in + let r1331 = R 1264 :: r1330 in + let r1332 = R 1236 :: r1331 in + let r1333 = [R 1192] in + let r1334 = Sub (r719) :: r1333 in + let r1335 = R 1244 :: r1334 in + let r1336 = [R 1193] in + let r1337 = Sub (r719) :: r1336 in + let r1338 = [R 2084] in + let r1339 = [R 2088] in + let r1340 = [R 2085] in + let r1341 = S (N N_ro_collating_sequence_phrase_) :: r1340 in + let r1342 = R 1264 :: r1341 in + let r1343 = R 1236 :: r1342 in + let r1344 = [R 2089] in + let r1345 = [R 2081] in + let r1346 = S (N N_ro_collating_sequence_phrase_) :: r1345 in + let r1347 = R 1264 :: r1346 in + let r1348 = R 1236 :: r1347 in + let r1349 = [R 2056] in + let r1350 = [R 879] in + let r1351 = S (T T_USER_DEFAULT) :: r1350 in + let r1352 = [R 884] in + let r1353 = S (N N_ident) :: r1352 in + let r1354 = [R 2061] in + let r1355 = Sub (r1353) :: r1354 in + let r1356 = S (T T_TO) :: r1355 in + let r1357 = [R 2062] in + let r1358 = S (T T_OFF) :: r1357 in + let r1359 = S (T T_TO) :: r1358 in + let r1360 = [R 589] in + let r1361 = S (T T_FLOAT_INFINITY) :: r1360 in + let r1362 = [R 2063] in + let r1363 = S (N N_ro_sign_) :: r1362 in + let r1364 = Sub (r1361) :: r1363 in let r1365 = S (T T_TO) :: r1364 in - let r1366 = [R 586] in - let r1367 = S (T T_FLOAT_INFINITY) :: r1366 in - let r1368 = [R 2052] in - let r1369 = S (N N_ro_sign_) :: r1368 in - let r1370 = Sub (r1367) :: r1369 in - let r1371 = S (T T_TO) :: r1370 in - let r1372 = S (N N_idents) :: r1371 in - let r1373 = [R 585] in - let r1374 = [R 584] in - let r1375 = [R 113] in - let r1376 = S (T T_FALSE) :: r1375 in - let r1377 = [R 1846] in - let r1378 = Sub (r1376) :: r1377 in - let r1379 = S (T T_TO) :: r1378 in - let r1380 = [R 1844] in - let r1381 = Sub (r1376) :: r1380 in - let r1382 = [R 1175] in - let r1383 = S (T T_OFF) :: r1382 in - let r1384 = [R 1842] in - let r1385 = Sub (r1383) :: r1384 in - let r1386 = S (T T_TO) :: r1385 in - let r1387 = [R 1840] in - let r1388 = Sub (r1383) :: r1387 in - let r1389 = [R 2041] in - let r1390 = S (N N_rnel_screen_attribute_on_off_) :: r1389 in - let r1391 = S (T T_ATTRIBUTE) :: r1390 in - let r1392 = [R 2049] in - let r1393 = [R 1965] in - let r1394 = [R 2325] in - let r1395 = S (T T_BY) :: r1394 in - let r1396 = S (T T_DOWN) :: r1395 in - let r1397 = [R 2044] in - let r1398 = S (N N_expression) :: r1397 in - let r1399 = [R 2324] in - let r1400 = [R 859] in - let r1401 = S (N N_expression) :: r1400 in - let r1402 = [R 2042] in - let r1403 = Sub (r1401) :: r1402 in - let r1404 = [R 757] in - let r1405 = S (T T_LC_ALL) :: r1404 in - let r1406 = [R 858] in - let r1407 = [R 2043] in - let r1408 = S (N N_expression) :: r1407 in - let r1409 = [R 2037] in - let r1410 = S (N N_ident) :: r1409 in - let r1411 = S (T T_FROM) :: r1410 in - let r1412 = [R 471] in - let r1413 = S (N N_ident) :: r1412 in - let r1414 = [R 2039] in - let r1415 = R 174 :: r1414 in - let r1416 = S (N N_ro_advancing_phrase_) :: r1415 in - let r1417 = [R 175] in - let r1418 = [R 40] in - let r1419 = S (T T_PAGE) :: r1418 in - let r1420 = [R 41] in - let r1421 = [R 2038] in - let r1422 = R 174 :: r1421 in - let r1423 = S (N N_ro_advancing_phrase_) :: r1422 in - let r1424 = [R 1995] in - let r1425 = S (N N_qualname) :: r1424 in - let r1426 = [R 1999] in - let r1427 = R 465 :: r1426 in - let r1428 = S (N N_imp_stmts) :: r1427 in - let r1429 = R 845 :: r1428 in - let r1430 = Sub (r1425) :: r1429 in - let r1431 = S (T T_WHEN) :: r1430 in - let r1432 = S (N N_qualname) :: r1431 in - let r1433 = [R 1766] in - let r1434 = R 2424 :: r1433 in - let r1435 = S (N N_ro_retry_phrase_) :: r1434 in - let r1436 = S (N N_ro_pf_FROM_ident_or_literal__) :: r1435 in - let r1437 = R 1256 :: r1436 in - let r1438 = [R 1770] in - let r1439 = [R 94] in - let r1440 = S (T T_AT_END) :: r1439 in - let r1441 = [R 1758] in - let r1442 = S (N N_imp_stmts) :: r1441 in - let r1443 = Sub (r1440) :: r1442 in - let r1444 = S (N N_ro_pf_INTO_loc_ident___) :: r1443 in - let r1445 = R 1256 :: r1444 in - let r1446 = [R 1446] in - let r1447 = [R 1752] in - let r1448 = S (T T_STATEMENT) :: r1447 in - let r1449 = S (T T_NEXT) :: r1448 in - let r1450 = [R 1652] in - let r1451 = S (N N_ro_pf_FROM_ident_or_literal__) :: r1450 in - let r1452 = [R 917] in - let r1453 = S (T T_MESSAGE) :: r1452 in - let r1454 = [R 1636] in - let r1455 = S (N N_ident) :: r1454 in - let r1456 = S (T T_INTO) :: r1455 in - let r1457 = Sub (r1453) :: r1456 in - let r1458 = [R 1640] in - let r1459 = [R 1622] in - let r1460 = S (N N_ro_pf___anonymous_86_qualname__) :: r1459 in - let r1461 = R 2424 :: r1460 in - let r1462 = S (N N_ro_lock_or_retry_) :: r1461 in - let r1463 = S (N N_ro_pf_INTO_ident__) :: r1462 in - let r1464 = R 1256 :: r1463 in - let r1465 = S (N N_ro_read_direction_) :: r1464 in - let r1466 = [R 1444] in - let r1467 = [R 873] in - let r1468 = [R 872] in - let r1469 = S (T T_LOCK) :: r1468 in - let r1470 = [R 1489] in - let r1471 = S (N N_qualname) :: r1470 in - let r1472 = [R 1632] in - let r1473 = [R 1611] in - let r1474 = [R 1610] in - let r1475 = [R 1596] in - let r1476 = [R 1562] in - let r1477 = S (N N_ro_pf_THROUGH_qualified_procedure_name__) :: r1476 in - let r1478 = [R 1560] in - let r1479 = Sub (r642) :: r1478 in - let r1480 = [R 658] in - let r1481 = S (N N_ident) :: r1480 in - let r1482 = [R 2414] in - let r1483 = Sub (r642) :: r1482 in - let r1484 = S (T T_UNTIL) :: r1483 in - let r1485 = S (N N_ro_pf_BY_ident_or_numeric__) :: r1484 in - let r1486 = Sub (r1481) :: r1485 in - let r1487 = S (T T_FROM) :: r1486 in - let r1488 = S (N N_ident) :: r1487 in - let r1489 = [R 1561] in - let r1490 = S (N N_l_pf_AFTER_loc_varying_phrase___) :: r1489 in - let r1491 = [R 754] in - let r1492 = S (N N_l_pf_AFTER_loc_varying_phrase___) :: r1491 in - let r1493 = [R 1434] in - let r1494 = [R 1564] in - let r1495 = S (T T_END_PERFORM) :: r1494 in - let r1496 = [R 1183] in - let r1497 = [R 1182] in - let r1498 = S (N N_rnel_file_with_opt_) :: r1497 in - let r1499 = S (N N_ro_retry_phrase_) :: r1498 in - let r1500 = [R 2057] in - let r1501 = Sub (r279) :: r1500 in - let r1502 = [R 570] in - let r1503 = [R 976] in - let r1504 = S (T T_REWIND) :: r1503 in - let r1505 = [R 975] in - let r1506 = [R 984] in - let r1507 = R 463 :: r1506 in - let r1508 = S (N N_rnel_rounded_ident_) :: r1507 in - let r1509 = S (T T_BY) :: r1508 in - let r1510 = [R 985] in - let r1511 = R 463 :: r1510 in - let r1512 = [R 981] in - let r1513 = S (N N_idents) :: r1512 in - let r1514 = S (T T_TO) :: r1513 in - let r1515 = [R 982] in - let r1516 = S (N N_idents) :: r1515 in - let r1517 = S (T T_TO) :: r1516 in - let r1518 = [R 916] in - let r1519 = Sub (r1322) :: r1518 in - let r1520 = Sub (r57) :: r1519 in - let r1521 = S (T T_USING) :: r1520 in - let r1522 = S (N N_ro_collating_sequence_phrase_) :: r1521 in - let r1523 = S (N N_rnel_on_key_) :: r1522 in - let r1524 = [R 660] in - let r1525 = S (N N_ident) :: r1524 in - let r1526 = [R 743] in - let r1527 = S (N N_ro_returning_) :: r1526 in - let r1528 = R 897 :: r1527 in - let r1529 = Sub (r1525) :: r1528 in - let r1530 = [R 898] in - let r1531 = [R 2396] in - let r1532 = [R 197] in - let r1533 = [R 722] in - let r1534 = S (N N_rnel_loc_replacing_phrase__) :: r1533 in - let r1535 = S (T T_REPLACING) :: r1534 in - let r1536 = [R 725] in - let r1537 = Sub (r1535) :: r1536 in - let r1538 = [R 721] in - let r1539 = [R 723] in - let r1540 = [R 1699] in - let r1541 = [R 643] in - let r1542 = S (N N_rl_inspect_where_) :: r1541 in - let r1543 = Sub (r1264) :: r1542 in - let r1544 = [R 727] in - let r1545 = Sub (r1264) :: r1544 in - let r1546 = [R 726] in - let r1547 = Sub (r1264) :: r1546 in - let r1548 = [R 774] in - let r1549 = [R 1700] in - let r1550 = [R 1697] in + let r1366 = S (N N_idents) :: r1365 in + let r1367 = [R 588] in + let r1368 = [R 587] in + let r1369 = [R 113] in + let r1370 = S (T T_FALSE) :: r1369 in + let r1371 = [R 1858] in + let r1372 = Sub (r1370) :: r1371 in + let r1373 = S (T T_TO) :: r1372 in + let r1374 = [R 1856] in + let r1375 = Sub (r1370) :: r1374 in + let r1376 = [R 1195] in + let r1377 = S (T T_OFF) :: r1376 in + let r1378 = [R 1854] in + let r1379 = Sub (r1377) :: r1378 in + let r1380 = S (T T_TO) :: r1379 in + let r1381 = [R 1852] in + let r1382 = Sub (r1377) :: r1381 in + let r1383 = [R 2052] in + let r1384 = S (N N_rnel_screen_attribute_on_off_) :: r1383 in + let r1385 = S (T T_ATTRIBUTE) :: r1384 in + let r1386 = [R 2060] in + let r1387 = [R 1976] in + let r1388 = [R 2336] in + let r1389 = S (T T_BY) :: r1388 in + let r1390 = S (T T_DOWN) :: r1389 in + let r1391 = [R 2055] in + let r1392 = S (N N_expression) :: r1391 in + let r1393 = [R 2335] in + let r1394 = [R 877] in + let r1395 = S (N N_expression) :: r1394 in + let r1396 = [R 2053] in + let r1397 = Sub (r1395) :: r1396 in + let r1398 = [R 773] in + let r1399 = S (T T_LC_ALL) :: r1398 in + let r1400 = [R 876] in + let r1401 = [R 2054] in + let r1402 = S (N N_expression) :: r1401 in + let r1403 = [R 2048] in + let r1404 = S (N N_ident) :: r1403 in + let r1405 = S (T T_FROM) :: r1404 in + let r1406 = [R 472] in + let r1407 = S (N N_ident) :: r1406 in + let r1408 = [R 2050] in + let r1409 = R 174 :: r1408 in + let r1410 = S (N N_ro_advancing_phrase_) :: r1409 in + let r1411 = [R 175] in + let r1412 = [R 40] in + let r1413 = S (T T_PAGE) :: r1412 in + let r1414 = [R 41] in + let r1415 = [R 2049] in + let r1416 = R 174 :: r1415 in + let r1417 = S (N N_ro_advancing_phrase_) :: r1416 in + let r1418 = [R 2006] in + let r1419 = S (N N_qualname) :: r1418 in + let r1420 = [R 2010] in + let r1421 = R 466 :: r1420 in + let r1422 = S (N N_imp_stmts) :: r1421 in + let r1423 = R 863 :: r1422 in + let r1424 = Sub (r1419) :: r1423 in + let r1425 = S (T T_WHEN) :: r1424 in + let r1426 = S (N N_qualname) :: r1425 in + let r1427 = [R 1777] in + let r1428 = R 2435 :: r1427 in + let r1429 = S (N N_ro_retry_phrase_) :: r1428 in + let r1430 = S (N N_ro_pf_FROM_ident_or_literal__) :: r1429 in + let r1431 = R 1276 :: r1430 in + let r1432 = [R 1781] in + let r1433 = [R 94] in + let r1434 = S (T T_AT_END) :: r1433 in + let r1435 = [R 1769] in + let r1436 = S (N N_imp_stmts) :: r1435 in + let r1437 = Sub (r1434) :: r1436 in + let r1438 = S (N N_ro_pf_INTO_loc_ident___) :: r1437 in + let r1439 = R 1276 :: r1438 in + let r1440 = [R 1454] in + let r1441 = [R 1763] in + let r1442 = S (T T_STATEMENT) :: r1441 in + let r1443 = S (T T_NEXT) :: r1442 in + let r1444 = [R 1663] in + let r1445 = S (N N_ro_pf_FROM_ident_or_literal__) :: r1444 in + let r1446 = [R 935] in + let r1447 = S (T T_MESSAGE) :: r1446 in + let r1448 = [R 1647] in + let r1449 = S (N N_ident) :: r1448 in + let r1450 = S (T T_INTO) :: r1449 in + let r1451 = Sub (r1447) :: r1450 in + let r1452 = [R 1651] in + let r1453 = [R 1633] in + let r1454 = S (N N_ro_pf___anonymous_86_qualname__) :: r1453 in + let r1455 = R 2435 :: r1454 in + let r1456 = S (N N_ro_lock_or_retry_) :: r1455 in + let r1457 = S (N N_ro_pf_INTO_ident__) :: r1456 in + let r1458 = R 1276 :: r1457 in + let r1459 = S (N N_ro_read_direction_) :: r1458 in + let r1460 = [R 1452] in + let r1461 = [R 891] in + let r1462 = [R 890] in + let r1463 = S (T T_LOCK) :: r1462 in + let r1464 = [R 1497] in + let r1465 = S (N N_qualname) :: r1464 in + let r1466 = [R 1643] in + let r1467 = [R 1622] in + let r1468 = [R 1621] in + let r1469 = [R 1607] in + let r1470 = [R 1570] in + let r1471 = S (N N_ro_pf_THROUGH_qualified_procedure_name__) :: r1470 in + let r1472 = [R 1568] in + let r1473 = Sub (r636) :: r1472 in + let r1474 = [R 663] in + let r1475 = S (N N_ident) :: r1474 in + let r1476 = [R 2425] in + let r1477 = Sub (r636) :: r1476 in + let r1478 = S (T T_UNTIL) :: r1477 in + let r1479 = S (N N_ro_pf_BY_ident_or_numeric__) :: r1478 in + let r1480 = Sub (r1475) :: r1479 in + let r1481 = S (T T_FROM) :: r1480 in + let r1482 = S (N N_ident) :: r1481 in + let r1483 = [R 1569] in + let r1484 = S (N N_l_pf_AFTER_loc_varying_phrase___) :: r1483 in + let r1485 = [R 770] in + let r1486 = S (N N_l_pf_AFTER_loc_varying_phrase___) :: r1485 in + let r1487 = [R 1442] in + let r1488 = [R 1572] in + let r1489 = S (T T_END_PERFORM) :: r1488 in + let r1490 = [R 1203] in + let r1491 = [R 1202] in + let r1492 = S (N N_rnel_file_with_opt_) :: r1491 in + let r1493 = S (N N_ro_retry_phrase_) :: r1492 in + let r1494 = [R 2068] in + let r1495 = Sub (r302) :: r1494 in + let r1496 = [R 573] in + let r1497 = [R 996] in + let r1498 = S (T T_REWIND) :: r1497 in + let r1499 = [R 995] in + let r1500 = [R 1004] in + let r1501 = R 464 :: r1500 in + let r1502 = S (N N_rnel_rounded_ident_) :: r1501 in + let r1503 = S (T T_BY) :: r1502 in + let r1504 = [R 1005] in + let r1505 = R 464 :: r1504 in + let r1506 = [R 1001] in + let r1507 = S (N N_idents) :: r1506 in + let r1508 = S (T T_TO) :: r1507 in + let r1509 = [R 1002] in + let r1510 = S (N N_idents) :: r1509 in + let r1511 = S (T T_TO) :: r1510 in + let r1512 = [R 934] in + let r1513 = Sub (r1316) :: r1512 in + let r1514 = Sub (r52) :: r1513 in + let r1515 = S (T T_USING) :: r1514 in + let r1516 = S (N N_ro_collating_sequence_phrase_) :: r1515 in + let r1517 = S (N N_rnel_on_key_) :: r1516 in + let r1518 = [R 665] in + let r1519 = S (N N_ident) :: r1518 in + let r1520 = [R 759] in + let r1521 = S (N N_ro_returning_) :: r1520 in + let r1522 = R 915 :: r1521 in + let r1523 = Sub (r1519) :: r1522 in + let r1524 = [R 916] in + let r1525 = [R 2407] in + let r1526 = [R 195] in + let r1527 = [R 734] in + let r1528 = S (N N_rnel_loc_replacing_phrase__) :: r1527 in + let r1529 = S (T T_REPLACING) :: r1528 in + let r1530 = [R 737] in + let r1531 = Sub (r1529) :: r1530 in + let r1532 = [R 733] in + let r1533 = [R 735] in + let r1534 = [R 1710] in + let r1535 = [R 648] in + let r1536 = S (N N_rl_inspect_where_) :: r1535 in + let r1537 = Sub (r1258) :: r1536 in + let r1538 = [R 739] in + let r1539 = Sub (r1258) :: r1538 in + let r1540 = [R 738] in + let r1541 = Sub (r1258) :: r1540 in + let r1542 = [R 790] in + let r1543 = [R 1711] in + let r1544 = [R 1708] in + let r1545 = S (N N_rl_inspect_where_) :: r1544 in + let r1546 = Sub (r1258) :: r1545 in + let r1547 = [R 1709] in + let r1548 = [R 2236] in + let r1549 = S (N N_rnel_loc_tallying_for__) :: r1548 in + let r1550 = [R 645] in let r1551 = S (N N_rl_inspect_where_) :: r1550 in - let r1552 = Sub (r1264) :: r1551 in - let r1553 = [R 1698] in - let r1554 = [R 2225] in - let r1555 = S (N N_rnel_loc_tallying_for__) :: r1554 in - let r1556 = [R 640] in - let r1557 = S (N N_rl_inspect_where_) :: r1556 in - let r1558 = Sub (r1264) :: r1557 in - let r1559 = [R 641] in - let r1560 = Sub (r1558) :: r1559 in - let r1561 = [R 2229] in - let r1562 = [R 2227] in - let r1563 = [R 2228] in - let r1564 = [R 2226] in - let r1565 = S (N N_rnel_loc_tallying_for__) :: r1564 in - let r1566 = [R 724] in - let r1567 = S (N N_rl_inspect_where_) :: r1566 in - let r1568 = Sub (r1266) :: r1567 in - let r1569 = S (T T_TO) :: r1568 in - let r1570 = [R 716] in - let r1571 = [R 692] in - let r1572 = [R 708] in - let r1573 = [R 202] in - let r1574 = S (T T_VALUE) :: r1573 in - let r1575 = [R 711] in - let r1576 = S (T T_DEFAULT) :: r1575 in - let r1577 = [R 709] in - let r1578 = S (T T_DEFAULT) :: r1577 in - let r1579 = [R 2231] in - let r1580 = [R 1017] in - let r1581 = S (N N_ident_or_literal) :: r1580 in - let r1582 = S (T T_BY) :: r1581 in - let r1583 = [R 203] in - let r1584 = S (T T_VALUE) :: r1583 in - let r1585 = [R 715] in + let r1552 = Sub (r1258) :: r1551 in + let r1553 = [R 646] in + let r1554 = Sub (r1552) :: r1553 in + let r1555 = [R 2240] in + let r1556 = [R 2238] in + let r1557 = [R 2239] in + let r1558 = [R 2237] in + let r1559 = S (N N_rnel_loc_tallying_for__) :: r1558 in + let r1560 = [R 736] in + let r1561 = S (N N_rl_inspect_where_) :: r1560 in + let r1562 = Sub (r1260) :: r1561 in + let r1563 = S (T T_TO) :: r1562 in + let r1564 = [R 728] in + let r1565 = [R 704] in + let r1566 = [R 720] in + let r1567 = [R 200] in + let r1568 = S (T T_VALUE) :: r1567 in + let r1569 = [R 723] in + let r1570 = S (T T_DEFAULT) :: r1569 in + let r1571 = [R 721] in + let r1572 = S (T T_DEFAULT) :: r1571 in + let r1573 = [R 2242] in + let r1574 = [R 1037] in + let r1575 = S (N N_ident_or_literal) :: r1574 in + let r1576 = S (T T_BY) :: r1575 in + let r1577 = [R 201] in + let r1578 = S (T T_VALUE) :: r1577 in + let r1579 = [R 727] in + let r1580 = S (T T_DEFAULT) :: r1579 in + let r1581 = [R 725] in + let r1582 = S (T T_DEFAULT) :: r1581 in + let r1583 = [R 715] in + let r1584 = S (T T_DEFAULT) :: r1583 in + let r1585 = [R 713] in let r1586 = S (T T_DEFAULT) :: r1585 in - let r1587 = [R 713] in + let r1587 = [R 719] in let r1588 = S (T T_DEFAULT) :: r1587 in - let r1589 = [R 703] in + let r1589 = [R 717] in let r1590 = S (T T_DEFAULT) :: r1589 in - let r1591 = [R 701] in + let r1591 = [R 707] in let r1592 = S (T T_DEFAULT) :: r1591 in - let r1593 = [R 707] in + let r1593 = [R 705] in let r1594 = S (T T_DEFAULT) :: r1593 in - let r1595 = [R 705] in + let r1595 = [R 711] in let r1596 = S (T T_DEFAULT) :: r1595 in - let r1597 = [R 695] in + let r1597 = [R 709] in let r1598 = S (T T_DEFAULT) :: r1597 in - let r1599 = [R 693] in - let r1600 = S (T T_DEFAULT) :: r1599 in - let r1601 = [R 699] in - let r1602 = S (T T_DEFAULT) :: r1601 in - let r1603 = [R 697] in - let r1604 = S (T T_DEFAULT) :: r1603 in - let r1605 = [R 666] in - let r1606 = S (N N_imp_stmts) :: r1605 in - let r1607 = [R 671] in - let r1608 = Sub (r1606) :: r1607 in - let r1609 = R 1280 :: r1608 in - let r1610 = [R 668] in - let r1611 = [R 444] in - let r1612 = [R 443] in - let r1613 = [R 616] in - let r1614 = [R 1612] in - let r1615 = [R 1613] in - let r1616 = [R 615] in - let r1617 = [R 614] in - let r1618 = S (N N_ident) :: r1617 in - let r1619 = R 1242 :: r1618 in - let r1620 = [R 610] in - let r1621 = [R 597] in - let r1622 = [R 493] in - let r1623 = [R 487] in - let r1624 = [R 490] in - let r1625 = [R 488] in - let r1626 = [R 489] in - let r1627 = [R 2034] in - let r1628 = S (T T_FALSE) :: r1627 in - let r1629 = [R 2035] in - let r1630 = Sub (r1628) :: r1629 in - let r1631 = [R 2419] in - let r1632 = S (N N_imp_stmts) :: r1631 in - let r1633 = S (N N_rnel_when_selection_objects_) :: r1632 in - let r1634 = [R 1117] in - let r1635 = Sub (r1633) :: r1634 in - let r1636 = [R 485] in - let r1637 = R 2417 :: r1636 in - let r1638 = Sub (r1635) :: r1637 in - let r1639 = [R 2029] in - let r1640 = S (T T_ANY) :: r1639 in - let r1641 = [R 2030] in - let r1642 = Sub (r1640) :: r1641 in - let r1643 = [R 2420] in - let r1644 = [R 1618] in - let r1645 = S (N N_ro_pf_IN_name__) :: r1644 in - let r1646 = S (N N_expression) :: r1645 in - let r1647 = S (T T_THROUGH) :: r1646 in - let r1648 = [R 1558] in - let r1649 = S (T T_OMITTED) :: r1648 in - let r1650 = [R 2031] in - let r1651 = [R 1552] in - let r1652 = [R 1617] in - let r1653 = S (N N_ro_pf_IN_name__) :: r1652 in - let r1654 = S (N N_expression) :: r1653 in - let r1655 = [R 1554] in - let r1656 = [R 475] in - let r1657 = S (T T_PERIOD) :: r1656 in - let r1658 = S (N N_ro_name_) :: r1657 in - let r1659 = [R 911] in - let r1660 = S (T T_OUTPUT) :: r1659 in - let r1661 = [R 907] in - let r1662 = S (N N_name) :: r1661 in - let r1663 = Sub (r1660) :: r1662 in - let r1664 = [R 445] in - let r1665 = [R 910] in - let r1666 = [R 909] in - let r1667 = [R 644] in - let r1668 = S (N N_ident) :: r1667 in - let r1669 = [R 2423] in - let r1670 = Sub (r1668) :: r1669 in - let r1671 = [R 421] in - let r1672 = R 461 :: r1671 in - let r1673 = S (N N_rnel_rounded_ident_) :: r1672 in - let r1674 = S (T T_INTO) :: r1673 in - let r1675 = [R 422] in - let r1676 = R 461 :: r1675 in - let r1677 = [R 408] in - let r1678 = R 459 :: r1677 in - let r1679 = [R 419] in - let r1680 = R 459 :: r1679 in - let r1681 = S (N N_imp_stmts) :: r1680 in - let r1682 = [R 407] in - let r1683 = [R 398] in - let r1684 = S (N N_ro_retry_phrase_) :: r1683 in - let r1685 = R 1256 :: r1684 in - let r1686 = [R 402] in - let r1687 = [R 303] in - let r1688 = S (N N_expression) :: r1687 in - let r1689 = S (T T_EQ) :: r1688 in - let r1690 = [R 305] in - let r1691 = [R 251] in - let r1692 = [R 1015] in - let r1693 = [R 248] in - let r1694 = [R 173] in - let r1695 = [R 247] in - let r1696 = [R 250] in - let r1697 = [R 249] in - let r1698 = [R 200] in - let r1699 = [R 186] in - let r1700 = S (T T_NESTED) :: r1699 in - let r1701 = [R 188] in - let r1702 = S (N N_ro_returning_) :: r1701 in - let r1703 = R 897 :: r1702 in - let r1704 = [R 652] in - let r1705 = S (N N_ident) :: r1704 in - let r1706 = [R 185] in - let r1707 = [R 194] in - let r1708 = [R 55] in - let r1709 = [R 752] in - let r1710 = S (N N_l_loc___anonymous_79__) :: r1709 in - let r1711 = Sub (r1213) :: r1710 in - let r1712 = R 1312 :: r1711 in - let r1713 = [R 1313] in - let r1714 = [R 49] in - let r1715 = S (N N_ro_returning_) :: r1714 in - let r1716 = R 122 :: r1715 in - let r1717 = S (T T_RETURNING) :: r1121 in - let r1718 = [R 48] in - let r1719 = Sub (r1717) :: r1718 in - let r1720 = R 122 :: r1719 in - let r1721 = [R 22] in - let r1722 = R 457 :: r1721 in - let r1723 = S (N N_rnel_rounded_ident_) :: r1722 in - let r1724 = S (T T_TO) :: r1723 in - let r1725 = [R 34] in - let r1726 = R 457 :: r1725 in - let r1727 = Sub (r1283) :: r1726 in - let r1728 = S (T T_TO) :: r1727 in - let r1729 = [R 35] in - let r1730 = R 457 :: r1729 in - let r1731 = [R 3] in - let r1732 = R 455 :: r1731 in - let r1733 = [R 12] in - let r1734 = R 455 :: r1733 in - let r1735 = [R 970] in - let r1736 = [R 261] in - let r1737 = Sub (r1076) :: r1736 in - let r1738 = R 1238 :: r1737 in - let r1739 = S (T T_COL) :: r1738 in - let r1740 = [R 1570] in - let r1741 = Sub (r1739) :: r1740 in - let r1742 = [R 7] in - let r1743 = R 455 :: r1742 in - let r1744 = [R 765] in - let r1745 = Sub (r1076) :: r1744 in - let r1746 = [R 262] in - let r1747 = Sub (r1076) :: r1746 in - let r1748 = [R 9] in - let r1749 = R 455 :: r1748 in - let r1750 = [R 8] in - let r1751 = R 455 :: r1750 in - let r1752 = [R 969] in - let r1753 = [R 10] in - let r1754 = [R 6] in - let r1755 = R 455 :: r1754 in - let r1756 = [R 11] in - let r1757 = R 455 :: r1756 in - let r1758 = [R 13] in - let r1759 = [R 4] in - let r1760 = R 455 :: r1759 in - let r1761 = [R 14] in - let r1762 = R 455 :: r1761 in - let r1763 = [R 16] in - let r1764 = R 455 :: r1763 in - let r1765 = [R 15] in - let r1766 = R 455 :: r1765 in - let r1767 = [R 17] in - let r1768 = [R 383] in - let r1769 = [R 382] in - let r1770 = [R 5] in - let r1771 = [R 963] in - let r1772 = [R 36] in - let r1773 = R 457 :: r1772 in - let r1774 = [R 964] in - let r1775 = [R 37] in - let r1776 = [R 23] in - let r1777 = R 457 :: r1776 in - let r1778 = [R 24] in - let r1779 = R 457 :: r1778 in - let r1780 = [R 25] in - let r1781 = [R 26] in - let r1782 = R 457 :: r1781 in - let r1783 = S (N N_rnel_rounded_ident_) :: r1782 in - let r1784 = [R 27] in - let r1785 = R 457 :: r1784 in - let r1786 = [R 28] in - let r1787 = R 457 :: r1786 in - let r1788 = [R 29] in - let r1789 = [R 30] in - let r1790 = R 457 :: r1789 in - let r1791 = [R 31] in - let r1792 = R 457 :: r1791 in - let r1793 = [R 32] in - let r1794 = R 457 :: r1793 in - let r1795 = [R 33] in - let r1796 = [R 190] in - let r1797 = [R 192] in - let r1798 = [R 307] in - let r1799 = [R 962] in - let r1800 = [R 400] in - let r1801 = [R 961] in - let r1802 = [R 414] in - let r1803 = R 459 :: r1802 in - let r1804 = [R 416] in - let r1805 = R 459 :: r1804 in - let r1806 = [R 415] in - let r1807 = R 459 :: r1806 in - let r1808 = [R 417] in - let r1809 = [R 418] in - let r1810 = R 459 :: r1809 in - let r1811 = [R 420] in - let r1812 = [R 2433] in - let r1813 = S (T T_ADVANCING) :: r1812 in - let r1814 = [R 2326] in - let r1815 = [R 2432] in - let r1816 = [R 413] in - let r1817 = [R 411] in - let r1818 = [R 412] in - let r1819 = [R 409] in - let r1820 = R 459 :: r1819 in - let r1821 = [R 410] in - let r1822 = [R 423] in - let r1823 = R 461 :: r1822 in - let r1824 = [R 424] in - let r1825 = [R 425] in - let r1826 = R 461 :: r1825 in - let r1827 = S (N N_ro_pf_REMAINDER_ident__) :: r1826 in - let r1828 = S (N N_rnel_rounded_ident_) :: r1827 in - let r1829 = [R 1452] in - let r1830 = [R 426] in - let r1831 = R 461 :: r1830 in - let r1832 = [R 427] in - let r1833 = R 461 :: r1832 in - let r1834 = [R 428] in - let r1835 = [R 429] in - let r1836 = R 461 :: r1835 in - let r1837 = S (N N_ro_pf_REMAINDER_ident__) :: r1836 in - let r1838 = S (N N_rnel_rounded_ident_) :: r1837 in - let r1839 = S (T T_GIVING) :: r1838 in - let r1840 = [R 430] in - let r1841 = R 461 :: r1840 in - let r1842 = [R 431] in - let r1843 = R 461 :: r1842 in - let r1844 = [R 432] in - let r1845 = [R 2418] in - let r1846 = S (N N_imp_stmts) :: r1845 in - let r1847 = [R 2036] in - let r1848 = [R 986] in - let r1849 = R 463 :: r1848 in - let r1850 = [R 987] in - let r1851 = [R 988] in - let r1852 = R 463 :: r1851 in - let r1853 = S (N N_rnel_rounded_ident_) :: r1852 in - let r1854 = [R 989] in - let r1855 = R 463 :: r1854 in - let r1856 = [R 990] in - let r1857 = R 463 :: r1856 in - let r1858 = [R 991] in - let r1859 = [R 1456] in - let r1860 = S (T T_AFTER) :: r1229 in - let r1861 = [R 2435] in - let r1862 = Sub (r1860) :: r1861 in - let r1863 = [R 1559] in - let r1864 = [R 1626] in - let r1865 = [R 966] in - let r1866 = [R 1630] in - let r1867 = [R 1624] in - let r1868 = [R 965] in - let r1869 = [R 1642] in - let r1870 = [R 1638] in - let r1871 = [R 1760] in - let r1872 = [R 1768] in - let r1873 = [R 2000] in - let r1874 = R 465 :: r1873 in - let r1875 = [R 57] in - let r1876 = [R 1993] in - let r1877 = S (N N_expression) :: r1876 in - let r1878 = R 1284 :: r1877 in - let r1879 = [R 1994] in - let r1880 = S (N N_expression) :: r1879 in - let r1881 = [R 1991] in - let r1882 = S (N N_expression) :: r1881 in - let r1883 = R 1284 :: r1882 in - let r1884 = [R 1992] in - let r1885 = S (N N_expression) :: r1884 in - let r1886 = [R 2001] in - let r1887 = R 465 :: r1886 in - let r1888 = S (N N_imp_stmts) :: r1887 in - let r1889 = R 845 :: r1888 in - let r1890 = Sub (r1425) :: r1889 in + let r1599 = [R 670] in + let r1600 = S (N N_imp_stmts) :: r1599 in + let r1601 = [R 675] in + let r1602 = Sub (r1600) :: r1601 in + let r1603 = R 1300 :: r1602 in + let r1604 = [R 672] in + let r1605 = [R 445] in + let r1606 = [R 444] in + let r1607 = [R 621] in + let r1608 = [R 1623] in + let r1609 = [R 1624] in + let r1610 = [R 620] in + let r1611 = [R 619] in + let r1612 = S (N N_ident) :: r1611 in + let r1613 = R 1262 :: r1612 in + let r1614 = [R 615] in + let r1615 = [R 600] in + let r1616 = [R 494] in + let r1617 = [R 488] in + let r1618 = [R 491] in + let r1619 = [R 489] in + let r1620 = [R 490] in + let r1621 = [R 2045] in + let r1622 = S (T T_FALSE) :: r1621 in + let r1623 = [R 2046] in + let r1624 = Sub (r1622) :: r1623 in + let r1625 = [R 2430] in + let r1626 = S (N N_imp_stmts) :: r1625 in + let r1627 = S (N N_rnel_when_selection_objects_) :: r1626 in + let r1628 = [R 1137] in + let r1629 = Sub (r1627) :: r1628 in + let r1630 = [R 486] in + let r1631 = R 2428 :: r1630 in + let r1632 = Sub (r1629) :: r1631 in + let r1633 = [R 2040] in + let r1634 = S (T T_ANY) :: r1633 in + let r1635 = [R 2041] in + let r1636 = Sub (r1634) :: r1635 in + let r1637 = [R 2431] in + let r1638 = [R 1629] in + let r1639 = S (N N_ro_pf_IN_name__) :: r1638 in + let r1640 = S (N N_expression) :: r1639 in + let r1641 = S (T T_THROUGH) :: r1640 in + let r1642 = [R 1566] in + let r1643 = S (T T_OMITTED) :: r1642 in + let r1644 = [R 2042] in + let r1645 = [R 1560] in + let r1646 = [R 1628] in + let r1647 = S (N N_ro_pf_IN_name__) :: r1646 in + let r1648 = S (N N_expression) :: r1647 in + let r1649 = [R 1562] in + let r1650 = [R 476] in + let r1651 = S (T T_PERIOD) :: r1650 in + let r1652 = S (N N_ro_name_) :: r1651 in + let r1653 = [R 929] in + let r1654 = S (T T_OUTPUT) :: r1653 in + let r1655 = [R 925] in + let r1656 = S (N N_name) :: r1655 in + let r1657 = Sub (r1654) :: r1656 in + let r1658 = [R 446] in + let r1659 = [R 928] in + let r1660 = [R 927] in + let r1661 = [R 649] in + let r1662 = S (N N_ident) :: r1661 in + let r1663 = [R 2434] in + let r1664 = Sub (r1662) :: r1663 in + let r1665 = [R 422] in + let r1666 = R 462 :: r1665 in + let r1667 = S (N N_rnel_rounded_ident_) :: r1666 in + let r1668 = S (T T_INTO) :: r1667 in + let r1669 = [R 423] in + let r1670 = R 462 :: r1669 in + let r1671 = [R 409] in + let r1672 = R 460 :: r1671 in + let r1673 = [R 420] in + let r1674 = R 460 :: r1673 in + let r1675 = S (N N_imp_stmts) :: r1674 in + let r1676 = [R 408] in + let r1677 = [R 399] in + let r1678 = S (N N_ro_retry_phrase_) :: r1677 in + let r1679 = R 1276 :: r1678 in + let r1680 = [R 403] in + let r1681 = [R 304] in + let r1682 = S (N N_expression) :: r1681 in + let r1683 = S (T T_EQ) :: r1682 in + let r1684 = [R 306] in + let r1685 = [R 251] in + let r1686 = [R 1035] in + let r1687 = [R 248] in + let r1688 = [R 173] in + let r1689 = [R 247] in + let r1690 = [R 250] in + let r1691 = [R 249] in + let r1692 = [R 198] in + let r1693 = [R 184] in + let r1694 = S (T T_NESTED) :: r1693 in + let r1695 = [R 186] in + let r1696 = S (N N_ro_returning_) :: r1695 in + let r1697 = R 915 :: r1696 in + let r1698 = [R 657] in + let r1699 = S (N N_ident) :: r1698 in + let r1700 = [R 183] in + let r1701 = [R 192] in + let r1702 = [R 55] in + let r1703 = [R 768] in + let r1704 = S (N N_l_loc___anonymous_79__) :: r1703 in + let r1705 = Sub (r1207) :: r1704 in + let r1706 = R 1332 :: r1705 in + let r1707 = [R 1333] in + let r1708 = [R 49] in + let r1709 = S (N N_ro_returning_) :: r1708 in + let r1710 = R 122 :: r1709 in + let r1711 = S (T T_RETURNING) :: r1115 in + let r1712 = [R 48] in + let r1713 = Sub (r1711) :: r1712 in + let r1714 = R 122 :: r1713 in + let r1715 = [R 22] in + let r1716 = R 458 :: r1715 in + let r1717 = S (N N_rnel_rounded_ident_) :: r1716 in + let r1718 = S (T T_TO) :: r1717 in + let r1719 = [R 34] in + let r1720 = R 458 :: r1719 in + let r1721 = Sub (r1277) :: r1720 in + let r1722 = S (T T_TO) :: r1721 in + let r1723 = [R 35] in + let r1724 = R 458 :: r1723 in + let r1725 = [R 3] in + let r1726 = R 456 :: r1725 in + let r1727 = [R 12] in + let r1728 = R 456 :: r1727 in + let r1729 = [R 990] in + let r1730 = [R 261] in + let r1731 = Sub (r1070) :: r1730 in + let r1732 = R 1258 :: r1731 in + let r1733 = S (T T_COL) :: r1732 in + let r1734 = [R 1578] in + let r1735 = Sub (r1733) :: r1734 in + let r1736 = [R 7] in + let r1737 = R 456 :: r1736 in + let r1738 = [R 781] in + let r1739 = Sub (r1070) :: r1738 in + let r1740 = [R 262] in + let r1741 = Sub (r1070) :: r1740 in + let r1742 = [R 9] in + let r1743 = R 456 :: r1742 in + let r1744 = [R 8] in + let r1745 = R 456 :: r1744 in + let r1746 = [R 989] in + let r1747 = [R 10] in + let r1748 = [R 6] in + let r1749 = R 456 :: r1748 in + let r1750 = [R 11] in + let r1751 = R 456 :: r1750 in + let r1752 = [R 13] in + let r1753 = [R 4] in + let r1754 = R 456 :: r1753 in + let r1755 = [R 14] in + let r1756 = R 456 :: r1755 in + let r1757 = [R 16] in + let r1758 = R 456 :: r1757 in + let r1759 = [R 15] in + let r1760 = R 456 :: r1759 in + let r1761 = [R 17] in + let r1762 = [R 384] in + let r1763 = [R 383] in + let r1764 = [R 5] in + let r1765 = [R 983] in + let r1766 = [R 36] in + let r1767 = R 458 :: r1766 in + let r1768 = [R 984] in + let r1769 = [R 37] in + let r1770 = [R 23] in + let r1771 = R 458 :: r1770 in + let r1772 = [R 24] in + let r1773 = R 458 :: r1772 in + let r1774 = [R 25] in + let r1775 = [R 26] in + let r1776 = R 458 :: r1775 in + let r1777 = S (N N_rnel_rounded_ident_) :: r1776 in + let r1778 = [R 27] in + let r1779 = R 458 :: r1778 in + let r1780 = [R 28] in + let r1781 = R 458 :: r1780 in + let r1782 = [R 29] in + let r1783 = [R 30] in + let r1784 = R 458 :: r1783 in + let r1785 = [R 31] in + let r1786 = R 458 :: r1785 in + let r1787 = [R 32] in + let r1788 = R 458 :: r1787 in + let r1789 = [R 33] in + let r1790 = [R 188] in + let r1791 = [R 190] in + let r1792 = [R 308] in + let r1793 = [R 982] in + let r1794 = [R 401] in + let r1795 = [R 981] in + let r1796 = [R 415] in + let r1797 = R 460 :: r1796 in + let r1798 = [R 417] in + let r1799 = R 460 :: r1798 in + let r1800 = [R 416] in + let r1801 = R 460 :: r1800 in + let r1802 = [R 418] in + let r1803 = [R 419] in + let r1804 = R 460 :: r1803 in + let r1805 = [R 421] in + let r1806 = [R 2444] in + let r1807 = S (T T_ADVANCING) :: r1806 in + let r1808 = [R 2337] in + let r1809 = [R 2443] in + let r1810 = [R 414] in + let r1811 = [R 412] in + let r1812 = [R 413] in + let r1813 = [R 410] in + let r1814 = R 460 :: r1813 in + let r1815 = [R 411] in + let r1816 = [R 424] in + let r1817 = R 462 :: r1816 in + let r1818 = [R 425] in + let r1819 = [R 426] in + let r1820 = R 462 :: r1819 in + let r1821 = S (N N_ro_pf_REMAINDER_ident__) :: r1820 in + let r1822 = S (N N_rnel_rounded_ident_) :: r1821 in + let r1823 = [R 1460] in + let r1824 = [R 427] in + let r1825 = R 462 :: r1824 in + let r1826 = [R 428] in + let r1827 = R 462 :: r1826 in + let r1828 = [R 429] in + let r1829 = [R 430] in + let r1830 = R 462 :: r1829 in + let r1831 = S (N N_ro_pf_REMAINDER_ident__) :: r1830 in + let r1832 = S (N N_rnel_rounded_ident_) :: r1831 in + let r1833 = S (T T_GIVING) :: r1832 in + let r1834 = [R 431] in + let r1835 = R 462 :: r1834 in + let r1836 = [R 432] in + let r1837 = R 462 :: r1836 in + let r1838 = [R 433] in + let r1839 = [R 2429] in + let r1840 = S (N N_imp_stmts) :: r1839 in + let r1841 = [R 2047] in + let r1842 = [R 1006] in + let r1843 = R 464 :: r1842 in + let r1844 = [R 1007] in + let r1845 = [R 1008] in + let r1846 = R 464 :: r1845 in + let r1847 = S (N N_rnel_rounded_ident_) :: r1846 in + let r1848 = [R 1009] in + let r1849 = R 464 :: r1848 in + let r1850 = [R 1010] in + let r1851 = R 464 :: r1850 in + let r1852 = [R 1011] in + let r1853 = [R 1464] in + let r1854 = S (T T_AFTER) :: r1223 in + let r1855 = [R 2446] in + let r1856 = Sub (r1854) :: r1855 in + let r1857 = [R 1567] in + let r1858 = [R 1637] in + let r1859 = [R 986] in + let r1860 = [R 1641] in + let r1861 = [R 1635] in + let r1862 = [R 985] in + let r1863 = [R 1653] in + let r1864 = [R 1649] in + let r1865 = [R 1771] in + let r1866 = [R 1779] in + let r1867 = [R 2011] in + let r1868 = R 466 :: r1867 in + let r1869 = [R 57] in + let r1870 = [R 2004] in + let r1871 = S (N N_expression) :: r1870 in + let r1872 = R 1304 :: r1871 in + let r1873 = [R 2005] in + let r1874 = S (N N_expression) :: r1873 in + let r1875 = [R 2002] in + let r1876 = S (N N_expression) :: r1875 in + let r1877 = R 1304 :: r1876 in + let r1878 = [R 2003] in + let r1879 = S (N N_expression) :: r1878 in + let r1880 = [R 2012] in + let r1881 = R 466 :: r1880 in + let r1882 = S (N N_imp_stmts) :: r1881 in + let r1883 = R 863 :: r1882 in + let r1884 = Sub (r1419) :: r1883 in + let r1885 = S (T T_WHEN) :: r1884 in + let r1886 = [R 2013] in + let r1887 = R 466 :: r1886 in + let r1888 = [R 2426] in + let r1889 = S (N N_imp_stmts) :: r1888 in + let r1890 = Sub (r636) :: r1889 in let r1891 = S (T T_WHEN) :: r1890 in - let r1892 = [R 2002] in - let r1893 = R 465 :: r1892 in - let r1894 = [R 2415] in - let r1895 = S (N N_imp_stmts) :: r1894 in - let r1896 = Sub (r642) :: r1895 in - let r1897 = S (T T_WHEN) :: r1896 in - let r1898 = [R 1109] in - let r1899 = Sub (r1897) :: r1898 in - let r1900 = [R 1997] in - let r1901 = R 465 :: r1900 in - let r1902 = Sub (r1899) :: r1901 in - let r1903 = [R 1464] in - let r1904 = [R 2416] in - let r1905 = [R 1998] in - let r1906 = R 465 :: r1905 in - let r1907 = Sub (r1899) :: r1906 in - let r1908 = [R 2132] in - let r1909 = [R 2130] in - let r1910 = [R 2136] in - let r1911 = S (N N_qualname) :: r1910 in - let r1912 = [R 2140] in - let r1913 = [R 2138] in - let r1914 = [R 2144] in - let r1915 = S (N N_expression) :: r1914 in - let r1916 = [R 2148] in - let r1917 = [R 2146] in - let r1918 = [R 2114] in - let r1919 = [R 2124] in - let r1920 = [R 2122] in - let r1921 = [R 972] in - let r1922 = [R 2185] in - let r1923 = S (N N_ident) :: r1922 in - let r1924 = [R 2189] in - let r1925 = [R 2187] in - let r1926 = [R 971] in - let r1927 = [R 2179] in - let r1928 = [R 1947] in - let r1929 = S (T T_SIZE) :: r1928 in - let r1930 = [R 2213] in - let r1931 = R 467 :: r1930 in - let r1932 = [R 2214] in - let r1933 = [R 2204] in - let r1934 = R 467 :: r1933 in - let r1935 = [R 2205] in - let r1936 = R 467 :: r1935 in - let r1937 = [R 2206] in - let r1938 = [R 2207] in - let r1939 = R 467 :: r1938 in - let r1940 = S (N N_rnel_rounded_ident_) :: r1939 in - let r1941 = [R 2208] in - let r1942 = R 467 :: r1941 in - let r1943 = [R 2209] in - let r1944 = R 467 :: r1943 in - let r1945 = [R 2210] in - let r1946 = [R 2302] in - let r1947 = [R 2296] in - let r1948 = [R 2308] in - let r1949 = S (N N_ident) :: r1948 in - let r1950 = [R 2316] in - let r1951 = S (N N_ident) :: r1950 in - let r1952 = [R 2320] in - let r1953 = [R 2318] in - let r1954 = [R 2312] in - let r1955 = [R 2310] in - let r1956 = [R 2294] in - let r1957 = [R 2444] in - let r1958 = [R 968] in - let r1959 = [R 2448] in - let r1960 = [R 2442] in - let r1961 = [R 967] in - let r1962 = [R 818] in - let r1963 = [R 2040] in - let r1964 = [R 822] in - let r1965 = [R 816] in - let r1966 = [R 2003] in - let r1967 = S (N N_rl_loc_sentence__) :: r1966 in - let r1968 = S (T T_PERIOD) :: r1967 in - let r1969 = [R 1311] in - let r1970 = [R 1577] in - let r1971 = S (N N_rl_loc_section_paragraph__) :: r1970 in - let r1972 = R 889 :: r1971 in - let r1973 = [R 1575] in - let r1974 = S (N N_rl_loc_section_paragraph__) :: r1973 in - let r1975 = R 889 :: r1974 in - let r1976 = [R 796] in - let r1977 = [R 242] in - let r1978 = S (T T_PERIOD) :: r1977 in - let r1979 = S (N N_name) :: r1978 in - let r1980 = S (T T_CLASS) :: r1979 in - let r1981 = S (T T_END) :: r1980 in - let r1982 = S (N N_ro_instance_definition_) :: r1981 in - let r1983 = S (N N_ro_loc_environment_division__) :: r1982 in - let r1984 = [R 547] in - let r1985 = R 881 :: r1984 in - let r1986 = S (T T_PERIOD) :: r1985 in - let r1987 = S (T T_FACTORY) :: r1986 in - let r1988 = [R 546] in - let r1989 = S (T T_PERIOD) :: r1988 in - let r1990 = S (T T_FACTORY) :: r1989 in - let r1991 = S (T T_END) :: r1990 in - let r1992 = S (N N_ro_object_procedure_division_) :: r1991 in - let r1993 = S (N N_ro_loc_data_division__) :: r1992 in - let r1994 = S (N N_ro_loc_environment_division__) :: r1993 in - let r1995 = S (N N_ro_loc_options_paragraph__) :: r1994 in - let r1996 = [R 1153] in - let r1997 = R 883 :: r1996 in - let r1998 = S (T T_PERIOD) :: r1997 in - let r1999 = [R 884] in - let r2000 = S (T T_PERIOD) :: r1999 in - let r2001 = [R 882] in - let r2002 = S (T T_PERIOD) :: r2001 in - let r2003 = [R 728] in - let r2004 = S (T T_PERIOD) :: r2003 in - let r2005 = S (T T_OBJECT) :: r2004 in - let r2006 = S (T T_END) :: r2005 in - let r2007 = S (N N_ro_object_procedure_division_) :: r2006 in - let r2008 = S (N N_ro_loc_data_division__) :: r2007 in - let r2009 = S (N N_ro_loc_environment_division__) :: r2008 in - let r2010 = S (N N_ro_loc_options_paragraph__) :: r2009 in - let r2011 = [R 243] in - let r2012 = S (T T_PERIOD) :: r2011 in - let r2013 = S (N N_name) :: r2012 in - let r2014 = S (T T_CLASS) :: r2013 in - let r2015 = S (T T_END) :: r2014 in - let r2016 = S (T T_OBJECT) :: r1998 in - let r2017 = [R 1583] in - let r2018 = S (T T_PERIOD) :: r2017 in - let r2019 = S (N N_name) :: r2018 in - let r2020 = S (T T_PROGRAM) :: r2019 in - let r2021 = S (T T_END) :: r2020 in - let r2022 = [R 802] in - let r2023 = [R 1585] in - let r2024 = S (T T_PERIOD) :: r2023 in - let r2025 = R 1290 :: r2024 in - let r2026 = Sub (r22) :: r2025 in - let r2027 = S (N N_name) :: r2026 in - let r2028 = S (T T_PERIOD) :: r2027 in - let r2029 = S (T T_PROGRAM_ID) :: r2028 in - let r2030 = [R 679] in - let r2031 = R 1367 :: r2030 in - let r2032 = R 1361 :: r2031 in - let r2033 = R 1363 :: r2032 in - let r2034 = R 1365 :: r2033 in - let r2035 = R 1359 :: r2034 in - let r2036 = [R 1584] in - let r2037 = S (N N_ro_loc_program_procedure_division__) :: r2036 in - let r2038 = S (N N_ro_loc_data_division__) :: r2037 in - let r2039 = S (N N_ro_loc_environment_division__) :: r2038 in - let r2040 = S (N N_ro_loc_options_paragraph__) :: r2039 in - let r2041 = Sub (r2035) :: r2040 in - let r2042 = Sub (r2029) :: r2041 in - let r2043 = [R 1586] in - let r2044 = S (T T_COMMON) :: r2043 in - let r2045 = [R 1291] in - let r2046 = R 1254 :: r2045 in - let r2047 = Sub (r2044) :: r2046 in - let r2048 = [R 1589] in - let r2049 = R 2004 :: r2048 in - let r2050 = R 889 :: r2049 in - let r2051 = S (T T_PERIOD) :: r2050 in - let r2052 = S (N N_ro_returning_) :: r2051 in - let r2053 = [R 1591] in - let r2054 = R 2004 :: r2053 in - let r2055 = R 889 :: r2054 in + let r1892 = [R 1129] in + let r1893 = Sub (r1891) :: r1892 in + let r1894 = [R 2008] in + let r1895 = R 466 :: r1894 in + let r1896 = Sub (r1893) :: r1895 in + let r1897 = [R 1472] in + let r1898 = [R 2427] in + let r1899 = [R 2009] in + let r1900 = R 466 :: r1899 in + let r1901 = Sub (r1893) :: r1900 in + let r1902 = [R 2143] in + let r1903 = [R 2141] in + let r1904 = [R 2147] in + let r1905 = S (N N_qualname) :: r1904 in + let r1906 = [R 2151] in + let r1907 = [R 2149] in + let r1908 = [R 2155] in + let r1909 = S (N N_expression) :: r1908 in + let r1910 = [R 2159] in + let r1911 = [R 2157] in + let r1912 = [R 2125] in + let r1913 = [R 2135] in + let r1914 = [R 2133] in + let r1915 = [R 992] in + let r1916 = [R 2196] in + let r1917 = S (N N_ident) :: r1916 in + let r1918 = [R 2200] in + let r1919 = [R 2198] in + let r1920 = [R 991] in + let r1921 = [R 2190] in + let r1922 = [R 1958] in + let r1923 = S (T T_SIZE) :: r1922 in + let r1924 = [R 2224] in + let r1925 = R 468 :: r1924 in + let r1926 = [R 2225] in + let r1927 = [R 2215] in + let r1928 = R 468 :: r1927 in + let r1929 = [R 2216] in + let r1930 = R 468 :: r1929 in + let r1931 = [R 2217] in + let r1932 = [R 2218] in + let r1933 = R 468 :: r1932 in + let r1934 = S (N N_rnel_rounded_ident_) :: r1933 in + let r1935 = [R 2219] in + let r1936 = R 468 :: r1935 in + let r1937 = [R 2220] in + let r1938 = R 468 :: r1937 in + let r1939 = [R 2221] in + let r1940 = [R 2313] in + let r1941 = [R 2307] in + let r1942 = [R 2319] in + let r1943 = S (N N_ident) :: r1942 in + let r1944 = [R 2327] in + let r1945 = S (N N_ident) :: r1944 in + let r1946 = [R 2331] in + let r1947 = [R 2329] in + let r1948 = [R 2323] in + let r1949 = [R 2321] in + let r1950 = [R 2305] in + let r1951 = [R 2455] in + let r1952 = [R 988] in + let r1953 = [R 2459] in + let r1954 = [R 2453] in + let r1955 = [R 987] in + let r1956 = [R 836] in + let r1957 = [R 2051] in + let r1958 = [R 840] in + let r1959 = [R 834] in + let r1960 = [R 2014] in + let r1961 = S (N N_rl_loc_sentence__) :: r1960 in + let r1962 = S (T T_PERIOD) :: r1961 in + let r1963 = [R 1331] in + let r1964 = [R 1585] in + let r1965 = S (N N_rl_loc_section_paragraph__) :: r1964 in + let r1966 = R 907 :: r1965 in + let r1967 = [R 1583] in + let r1968 = S (N N_rl_loc_section_paragraph__) :: r1967 in + let r1969 = R 907 :: r1968 in + let r1970 = [R 812] in + let r1971 = [R 1604] in + let r1972 = S (T T_PERIOD) :: r1971 in + let r1973 = S (N N_name) :: r1972 in + let r1974 = S (T T_PROGRAM) :: r1973 in + let r1975 = S (T T_END) :: r1974 in + let r1976 = S (N N_ro_loc_procedure_division__) :: r1975 in + let r1977 = S (N N_ro_loc_data_division__) :: r1976 in + let r1978 = S (N N_ro_loc_environment_division__) :: r1977 in + let r1979 = [R 1591] in + let r1980 = S (T T_PERIOD) :: r1979 in + let r1981 = S (N N_name) :: r1980 in + let r1982 = S (T T_PROGRAM) :: r1981 in + let r1983 = S (T T_END) :: r1982 in + let r1984 = [R 1595] in + let r1985 = S (N N_ro_loc_program_procedure_division__) :: r1984 in + let r1986 = S (N N_ro_loc_data_division__) :: r1985 in + let r1987 = S (N N_ro_loc_environment_division__) :: r1986 in + let r1988 = [R 1599] in + let r1989 = R 2015 :: r1988 in + let r1990 = R 907 :: r1989 in + let r1991 = S (T T_PERIOD) :: r1990 in + let r1992 = S (N N_ro_returning_) :: r1991 in + let r1993 = [R 1601] in + let r1994 = R 2015 :: r1993 in + let r1995 = R 907 :: r1994 in + let r1996 = S (T T_PERIOD) :: r1995 in + let r1997 = S (N N_ro_returning_) :: r1996 in + let r1998 = [R 2017] in + let r1999 = [R 1602] in + let r2000 = R 2015 :: r1999 in + let r2001 = R 907 :: r2000 in + let r2002 = [R 1600] in + let r2003 = R 2015 :: r2002 in + let r2004 = R 907 :: r2003 in + let r2005 = [R 1594] in + let r2006 = [R 820] in + let r2007 = [R 747] in + let r2008 = S (T T_PERIOD) :: r2007 in + let r2009 = S (N N_name) :: r2008 in + let r2010 = S (T T_INTERFACE) :: r2009 in + let r2011 = S (T T_END) :: r2010 in + let r2012 = S (N N_ro_object_procedure_division_) :: r2011 in + let r2013 = S (N N_ro_loc_environment_division__) :: r2012 in + let r2014 = [R 1174] in + let r2015 = S (N N_rl_loc_method_definition__) :: r2014 in + let r2016 = S (T T_PERIOD) :: r2015 in + let r2017 = [R 938] in + let r2018 = R 146 :: r2017 in + let r2019 = R 134 :: r2018 in + let r2020 = Sub (r20) :: r2019 in + let r2021 = S (N N_name) :: r2020 in + let r2022 = S (T T_PERIOD) :: r2021 in + let r2023 = [R 940] in + let r2024 = R 150 :: r2023 in + let r2025 = R 134 :: r2024 in + let r2026 = S (N N_name) :: r2025 in + let r2027 = [R 151] in + let r2028 = [R 939] in + let r2029 = R 150 :: r2028 in + let r2030 = R 134 :: r2029 in + let r2031 = S (N N_name) :: r2030 in + let r2032 = [R 147] in + let r2033 = S (T T_METHOD_ID) :: r2022 in + let r2034 = [R 941] in + let r2035 = Sub (r2033) :: r2034 in + let r2036 = Sub (r57) :: r2035 in + let r2037 = S (T T_PERIOD) :: r2036 in + let r2038 = [R 937] in + let r2039 = S (T T_PERIOD) :: r2038 in + let r2040 = S (N N_name) :: r2039 in + let r2041 = S (T T_METHOD) :: r2040 in + let r2042 = S (T T_END) :: r2041 in + let r2043 = S (N N_ro_procedure_division_) :: r2042 in + let r2044 = S (N N_ro_loc_data_division__) :: r2043 in + let r2045 = S (N N_ro_loc_environment_division__) :: r2044 in + let r2046 = [R 814] in + let r2047 = [R 614] in + let r2048 = S (T T_PERIOD) :: r2047 in + let r2049 = S (N N_name) :: r2048 in + let r2050 = S (T T_FUNCTION) :: r2049 in + let r2051 = S (T T_END) :: r2050 in + let r2052 = S (N N_ro_procedure_division_) :: r2051 in + let r2053 = S (N N_ro_loc_data_division__) :: r2052 in + let r2054 = S (N N_ro_loc_environment_division__) :: r2053 in + let r2055 = [R 240] in let r2056 = S (T T_PERIOD) :: r2055 in - let r2057 = S (N N_ro_returning_) :: r2056 in - let r2058 = [R 2006] in - let r2059 = [R 1592] in - let r2060 = R 2004 :: r2059 in - let r2061 = R 889 :: r2060 in - let r2062 = [R 1590] in - let r2063 = R 2004 :: r2062 in - let r2064 = R 889 :: r2063 in - let r2065 = [R 1594] in - let r2066 = [R 1593] in - let r2067 = S (T T_PERIOD) :: r2066 in - let r2068 = S (N N_name) :: r2067 in - let r2069 = S (T T_PROGRAM) :: r2068 in - let r2070 = S (T T_END) :: r2069 in - let r2071 = S (N N_ro_loc_procedure_division__) :: r2070 in - let r2072 = S (N N_ro_loc_data_division__) :: r2071 in - let r2073 = S (N N_ro_loc_environment_division__) :: r2072 in - let r2074 = [R 2110] in + let r2057 = S (N N_name) :: r2056 in + let r2058 = S (T T_CLASS) :: r2057 in + let r2059 = S (T T_END) :: r2058 in + let r2060 = S (N N_ro_instance_definition_) :: r2059 in + let r2061 = S (N N_ro_loc_environment_division__) :: r2060 in + let r2062 = [R 1173] in + let r2063 = R 901 :: r2062 in + let r2064 = S (T T_PERIOD) :: r2063 in + let r2065 = [R 902] in + let r2066 = S (T T_PERIOD) :: r2065 in + let r2067 = [R 550] in + let r2068 = R 899 :: r2067 in + let r2069 = S (T T_PERIOD) :: r2068 in + let r2070 = S (T T_FACTORY) :: r2069 in + let r2071 = [R 548] in + let r2072 = Sub (r2070) :: r2071 in + let r2073 = Sub (r57) :: r2072 in + let r2074 = S (T T_PERIOD) :: r2073 in + let r2075 = [R 900] in + let r2076 = S (T T_PERIOD) :: r2075 in + let r2077 = [R 741] in + let r2078 = [R 740] in + let r2079 = S (T T_PERIOD) :: r2078 in + let r2080 = S (T T_OBJECT) :: r2079 in + let r2081 = S (T T_END) :: r2080 in + let r2082 = S (N N_ro_object_procedure_division_) :: r2081 in + let r2083 = S (N N_ro_loc_data_division__) :: r2082 in + let r2084 = S (N N_ro_loc_environment_division__) :: r2083 in + let r2085 = [R 547] in + let r2086 = S (T T_PERIOD) :: r2085 in + let r2087 = S (T T_FACTORY) :: r2086 in + let r2088 = S (T T_END) :: r2087 in + let r2089 = S (N N_ro_object_procedure_division_) :: r2088 in + let r2090 = S (N N_ro_loc_data_division__) :: r2089 in + let r2091 = S (N N_ro_loc_environment_division__) :: r2090 in + let r2092 = [R 241] in + let r2093 = S (T T_PERIOD) :: r2092 in + let r2094 = S (N N_name) :: r2093 in + let r2095 = S (T T_CLASS) :: r2094 in + let r2096 = S (T T_END) :: r2095 in + let r2097 = S (T T_OBJECT) :: r2064 in + let r2098 = Sub (r2097) :: r2077 in + let r2099 = Sub (r57) :: r2098 in + let r2100 = S (T T_PERIOD) :: r2099 in + let r2101 = [R 2121] in function - | 0 | 4043 -> Nothing - | 4042 -> One ([R 0]) - | 4044 -> One ([R 1]) - | 560 -> One ([R 2]) - | 590 -> One ([R 19]) - | 589 -> One ([R 20]) - | 2373 -> One ([R 43]) - | 1496 -> One ([R 44]) - | 1979 -> One ([R 46]) - | 1977 -> One ([R 47]) - | 237 -> One ([R 52]) - | 234 -> One ([R 53]) - | 233 -> One ([R 54]) - | 658 -> One (R 59 :: r374) - | 661 -> One ([R 60]) - | 660 -> One ([R 61]) - | 659 -> One ([R 62]) - | 881 -> One ([R 63]) - | 875 -> One ([R 64]) - | 158 -> One ([R 67]) - | 157 -> One ([R 68]) - | 156 -> One ([R 69]) - | 963 -> One ([R 70]) - | 962 -> One ([R 71]) - | 965 -> One ([R 72]) - | 964 -> One ([R 73]) - | 960 -> One ([R 74]) - | 966 -> One ([R 75]) - | 961 -> One ([R 76]) - | 815 -> One ([R 77]) - | 867 -> One ([R 78]) - | 864 -> One ([R 79]) - | 880 -> One ([R 80]) - | 879 -> One ([R 81]) - | 840 -> One ([R 82]) - | 841 -> One ([R 83]) - | 835 -> One ([R 84]) - | 826 -> One ([R 85]) - | 827 -> One ([R 86]) - | 830 -> One ([R 87]) - | 833 -> One ([R 88]) - | 834 -> One ([R 89]) - | 2702 -> One ([R 93]) - | 3805 -> One ([R 95]) - | 3808 -> One ([R 96]) - | 3807 -> One ([R 97]) - | 968 -> One ([R 98]) - | 896 -> One ([R 100]) - | 1493 -> One ([R 102]) - | 2140 -> One ([R 103]) - | 2139 -> One ([R 104]) - | 1640 -> One ([R 107]) - | 1639 -> One ([R 108]) - | 1638 -> One ([R 110]) - | 1637 -> One ([R 111]) - | 2598 -> One ([R 112]) - | 2403 -> One (R 114 :: r1251) - | 2399 -> One ([R 115]) - | 3031 -> One (R 116 :: r1624) - | 3032 -> One ([R 117]) - | 2252 -> One ([R 119]) - | 1776 -> One ([R 121]) - | 1393 -> One ([R 123]) - | 2582 -> One (R 124 :: r1373) - | 2588 -> One (R 124 :: r1374) - | 2583 -> One ([R 125]) - | 549 -> One ([R 127]) - | 3051 -> One (R 128 :: r1649) - | 1225 | 1252 -> One ([R 129]) - | 1126 -> One ([R 131]) - | 484 -> One (R 132 :: r276) - | 485 -> One ([R 133]) - | 715 -> One ([R 135]) - | 318 -> One (R 136 :: r195) - | 319 -> One ([R 137]) - | 314 -> One ([R 139]) - | 1181 -> One (R 140 :: r623) - | 1435 -> One (R 140 :: r742) - | 1182 -> One ([R 141]) - | 3296 -> One (R 142 :: r1768) - | 3297 -> One ([R 143]) - | 3299 -> One (R 144 :: r1769) - | 3300 -> One ([R 145]) - | 184 -> One (R 152 :: r124) - | 1914 -> One (R 166 :: r998) - | 3125 -> One (R 172 :: r1693) - | 3129 -> One (R 172 :: r1695) - | 3948 | 4018 -> One ([R 177]) - | 2673 -> One (R 178 :: r1420) - | 2675 -> One ([R 179]) - | 2674 -> One ([R 180]) - | 2434 -> One ([R 182]) - | 2433 -> One ([R 183]) - | 3146 -> One ([R 184]) - | 3362 -> One ([R 187]) - | 3365 -> One ([R 189]) - | 3368 -> One ([R 191]) - | 3361 -> One ([R 193]) - | 3370 -> One ([R 195]) - | 3369 -> One ([R 196]) - | 2842 -> One ([R 198]) - | 2840 -> One ([R 199]) - | 263 -> One ([R 207]) - | 260 -> One ([R 208]) - | 265 -> One ([R 209]) - | 262 -> One ([R 210]) - | 376 -> One ([R 212]) - | 377 -> One ([R 213]) - | 375 -> One ([R 214]) - | 374 -> One ([R 215]) - | 373 -> One ([R 216]) - | 372 -> One ([R 217]) - | 370 -> One ([R 218]) - | 371 -> One ([R 219]) - | 1487 -> One ([R 221]) - | 1486 -> One ([R 222]) - | 1485 -> One ([R 223]) - | 1484 -> One ([R 224]) - | 1483 -> One ([R 225]) - | 1308 -> One ([R 228]) - | 1309 -> One ([R 229]) - | 1305 -> One ([R 230]) - | 1304 -> One ([R 231]) - | 1303 -> One ([R 232]) - | 1302 -> One ([R 233]) - | 1301 -> One ([R 234]) - | 1300 -> One ([R 235]) - | 1299 -> One ([R 236]) - | 1298 -> One ([R 237]) - | 1297 -> One ([R 238]) - | 1296 -> One ([R 239]) - | 1295 -> One ([R 240]) - | 1293 -> One ([R 241]) - | 616 -> One ([R 254]) - | 2052 -> One ([R 263]) - | 3943 -> One ([R 288]) - | 4014 -> One ([R 289]) - | 4019 -> One ([R 290]) - | 4021 -> One ([R 291]) - | 4017 -> One ([R 292]) - | 1216 -> One ([R 294]) - | 1358 -> One ([R 297]) - | 3376 -> One ([R 302]) - | 3372 -> One ([R 304]) - | 3375 -> One ([R 306]) - | 3378 -> One ([R 308]) - | 3377 -> One ([R 309]) - | 788 -> One ([R 314]) - | 1588 -> One ([R 315]) - | 1556 -> One ([R 316]) - | 2062 -> One ([R 320]) - | 2058 -> One ([R 321]) - | 2175 -> One ([R 322]) - | 2170 -> One ([R 323]) - | 1471 -> One ([R 328]) - | 1470 -> One ([R 329]) - | 3116 -> One ([R 330]) - | 811 -> One ([R 336]) - | 802 -> One ([R 337]) - | 808 -> One ([R 338]) - | 1509 -> One ([R 349]) - | 1502 -> One ([R 350]) - | 1544 -> One ([R 351]) - | 1543 -> One ([R 352]) - | 1542 -> One ([R 353]) - | 1541 -> One ([R 354]) - | 1539 -> One ([R 355]) - | 1530 -> One ([R 356]) - | 1529 -> One ([R 357]) - | 1528 -> One ([R 358]) - | 1527 -> One ([R 359]) - | 1525 -> One ([R 360]) - | 1535 -> One ([R 361]) - | 1512 -> One ([R 362]) - | 1510 -> One ([R 363]) - | 1506 -> One ([R 364]) - | 1505 -> One ([R 365]) - | 1504 -> One ([R 366]) - | 1503 -> One ([R 367]) - | 1534 -> One ([R 368]) - | 1500 -> One ([R 369]) - | 1498 -> One ([R 370]) - | 1533 -> One ([R 371]) - | 1520 -> One ([R 374]) - | 1522 -> One ([R 375]) - | 1521 -> One ([R 376]) - | 1081 -> One ([R 380]) - | 1077 -> One ([R 381]) - | 3295 -> One ([R 384]) - | 3283 -> One ([R 385]) - | 1463 -> One ([R 393]) - | 3388 -> One ([R 397]) - | 3387 -> One ([R 399]) - | 3382 -> One ([R 401]) - | 3390 -> One ([R 403]) - | 3389 -> One ([R 404]) - | 54 -> One ([R 435]) - | 52 -> One ([R 436]) - | 49 -> One ([R 437]) - | 53 -> One ([R 438]) - | 358 -> One ([R 442]) - | 136 -> One ([R 447]) - | 139 -> One ([R 448]) - | 137 -> One ([R 449]) - | 1138 -> One (R 450 :: r610) - | 1141 -> One (R 450 :: r611) - | 1140 -> One ([R 451]) - | 134 -> One ([R 453]) - | 3242 -> One ([R 454]) - | 3266 -> One (R 455 :: r1753) - | 3279 -> One (R 455 :: r1758) - | 3292 -> One (R 455 :: r1767) - | 3304 -> One (R 455 :: r1770) - | 3310 -> One ([R 456]) - | 3317 -> One (R 457 :: r1775) - | 3329 -> One (R 457 :: r1780) - | 3342 -> One (R 457 :: r1788) - | 3354 -> One (R 457 :: r1795) - | 3392 -> One ([R 458]) - | 3402 -> One (R 459 :: r1808) - | 3408 -> One (R 459 :: r1811) - | 3422 -> One (R 459 :: r1816) - | 3424 -> One (R 459 :: r1817) - | 3425 -> One (R 459 :: r1818) - | 3431 -> One (R 459 :: r1821) - | 3440 -> One ([R 460]) - | 3445 -> One (R 461 :: r1824) - | 3460 -> One (R 461 :: r1834) - | 3475 -> One (R 461 :: r1844) - | 3498 -> One ([R 462]) - | 3503 -> One (R 463 :: r1850) - | 3515 -> One (R 463 :: r1858) - | 3589 -> One ([R 464]) - | 3727 -> One ([R 466]) - | 3732 -> One (R 467 :: r1932) - | 3744 -> One (R 467 :: r1937) - | 3756 -> One (R 467 :: r1945) - | 132 -> One ([R 469]) - | 2659 -> One ([R 472]) - | 2660 -> One ([R 473]) - | 2661 -> One ([R 474]) - | 1791 -> One ([R 477]) - | 790 -> One ([R 478]) - | 2127 -> One ([R 481]) - | 3485 -> One ([R 484]) - | 3034 -> One ([R 491]) - | 3028 -> One ([R 492]) - | 1001 -> One ([R 506]) - | 1000 -> One ([R 524]) - | 1053 -> One ([R 531]) - | 905 -> One ([R 534]) - | 989 -> One ([R 537]) - | 1326 -> One ([R 538]) - | 1310 -> One ([R 539]) - | 1325 -> One ([R 540]) - | 1307 -> One ([R 541]) - | 796 -> One ([R 548]) - | 798 -> One ([R 549]) - | 800 -> One ([R 550]) + | 0 | 4091 -> Nothing + | 4090 -> One ([R 0]) + | 4092 -> One ([R 1]) + | 599 -> One ([R 2]) + | 629 -> One ([R 19]) + | 628 -> One ([R 20]) + | 2384 -> One ([R 43]) + | 1507 -> One ([R 44]) + | 1990 -> One ([R 46]) + | 1988 -> One ([R 47]) + | 276 -> One ([R 52]) + | 273 -> One ([R 53]) + | 272 -> One ([R 54]) + | 697 -> One (R 59 :: r397) + | 700 -> One ([R 60]) + | 699 -> One ([R 61]) + | 698 -> One ([R 62]) + | 892 -> One ([R 63]) + | 886 -> One ([R 64]) + | 198 -> One ([R 67]) + | 197 -> One ([R 68]) + | 196 -> One ([R 69]) + | 974 -> One ([R 70]) + | 973 -> One ([R 71]) + | 976 -> One ([R 72]) + | 975 -> One ([R 73]) + | 971 -> One ([R 74]) + | 977 -> One ([R 75]) + | 972 -> One ([R 76]) + | 826 -> One ([R 77]) + | 878 -> One ([R 78]) + | 875 -> One ([R 79]) + | 891 -> One ([R 80]) + | 890 -> One ([R 81]) + | 851 -> One ([R 82]) + | 852 -> One ([R 83]) + | 846 -> One ([R 84]) + | 837 -> One ([R 85]) + | 838 -> One ([R 86]) + | 841 -> One ([R 87]) + | 844 -> One ([R 88]) + | 845 -> One ([R 89]) + | 2713 -> One ([R 93]) + | 3816 -> One ([R 95]) + | 3819 -> One ([R 96]) + | 3818 -> One ([R 97]) + | 979 -> One ([R 98]) + | 907 -> One ([R 100]) + | 1504 -> One ([R 102]) + | 2151 -> One ([R 103]) + | 2150 -> One ([R 104]) + | 1651 -> One ([R 107]) + | 1650 -> One ([R 108]) + | 1649 -> One ([R 110]) + | 1648 -> One ([R 111]) + | 2609 -> One ([R 112]) + | 2414 -> One (R 114 :: r1245) + | 2410 -> One ([R 115]) + | 3042 -> One (R 116 :: r1618) + | 3043 -> One ([R 117]) + | 2263 -> One ([R 119]) + | 1787 -> One ([R 121]) + | 1404 -> One ([R 123]) + | 2593 -> One (R 124 :: r1367) + | 2599 -> One (R 124 :: r1368) + | 2594 -> One ([R 125]) + | 588 -> One ([R 127]) + | 3062 -> One (R 128 :: r1643) + | 1236 | 1263 -> One ([R 129]) + | 1137 -> One ([R 131]) + | 523 -> One (R 132 :: r299) + | 524 -> One ([R 133]) + | 3973 -> One ([R 135]) + | 357 -> One (R 136 :: r218) + | 358 -> One ([R 137]) + | 353 -> One ([R 139]) + | 1192 -> One (R 140 :: r617) + | 1446 -> One (R 140 :: r736) + | 1193 -> One ([R 141]) + | 3307 -> One (R 142 :: r1762) + | 3308 -> One ([R 143]) + | 3310 -> One (R 144 :: r1763) + | 3311 -> One ([R 145]) + | 224 -> One (R 152 :: r147) + | 1925 -> One (R 166 :: r992) + | 3136 -> One (R 172 :: r1687) + | 3140 -> One (R 172 :: r1689) + | 2684 -> One (R 176 :: r1414) + | 2686 -> One ([R 177]) + | 2685 -> One ([R 178]) + | 2445 -> One ([R 180]) + | 2444 -> One ([R 181]) + | 3157 -> One ([R 182]) + | 3373 -> One ([R 185]) + | 3376 -> One ([R 187]) + | 3379 -> One ([R 189]) + | 3372 -> One ([R 191]) + | 3381 -> One ([R 193]) + | 3380 -> One ([R 194]) + | 2853 -> One ([R 196]) + | 2851 -> One ([R 197]) + | 302 -> One ([R 205]) + | 299 -> One ([R 206]) + | 304 -> One ([R 207]) + | 301 -> One ([R 208]) + | 415 -> One ([R 210]) + | 416 -> One ([R 211]) + | 414 -> One ([R 212]) + | 413 -> One ([R 213]) + | 412 -> One ([R 214]) + | 411 -> One ([R 215]) + | 409 -> One ([R 216]) + | 410 -> One ([R 217]) + | 1498 -> One ([R 219]) + | 1497 -> One ([R 220]) + | 1496 -> One ([R 221]) + | 1495 -> One ([R 222]) + | 1494 -> One ([R 223]) + | 1319 -> One ([R 226]) + | 1320 -> One ([R 227]) + | 1316 -> One ([R 228]) + | 1315 -> One ([R 229]) + | 1314 -> One ([R 230]) + | 1313 -> One ([R 231]) + | 1312 -> One ([R 232]) + | 1311 -> One ([R 233]) + | 1310 -> One ([R 234]) + | 1309 -> One ([R 235]) + | 1308 -> One ([R 236]) + | 1307 -> One ([R 237]) + | 1306 -> One ([R 238]) + | 1304 -> One ([R 239]) + | 3892 -> One ([R 243]) + | 4087 -> One ([R 244]) + | 655 -> One ([R 254]) + | 2063 -> One ([R 263]) + | 107 -> One ([R 266]) + | 3902 -> One ([R 289]) + | 3959 -> One ([R 290]) + | 4019 -> One ([R 291]) + | 4088 -> One ([R 292]) + | 4018 -> One ([R 293]) + | 1227 -> One ([R 295]) + | 1369 -> One ([R 298]) + | 3387 -> One ([R 303]) + | 3383 -> One ([R 305]) + | 3386 -> One ([R 307]) + | 3389 -> One ([R 309]) + | 3388 -> One ([R 310]) + | 799 -> One ([R 315]) + | 1599 -> One ([R 316]) + | 1567 -> One ([R 317]) + | 2073 -> One ([R 321]) + | 2069 -> One ([R 322]) + | 2186 -> One ([R 323]) + | 2181 -> One ([R 324]) + | 1482 -> One ([R 329]) + | 1481 -> One ([R 330]) + | 3127 -> One ([R 331]) + | 822 -> One ([R 337]) + | 813 -> One ([R 338]) + | 819 -> One ([R 339]) + | 1520 -> One ([R 350]) + | 1513 -> One ([R 351]) + | 1555 -> One ([R 352]) + | 1554 -> One ([R 353]) + | 1553 -> One ([R 354]) + | 1552 -> One ([R 355]) + | 1550 -> One ([R 356]) + | 1541 -> One ([R 357]) + | 1540 -> One ([R 358]) + | 1539 -> One ([R 359]) + | 1538 -> One ([R 360]) + | 1536 -> One ([R 361]) + | 1546 -> One ([R 362]) + | 1523 -> One ([R 363]) + | 1521 -> One ([R 364]) + | 1517 -> One ([R 365]) + | 1516 -> One ([R 366]) + | 1515 -> One ([R 367]) + | 1514 -> One ([R 368]) + | 1545 -> One ([R 369]) + | 1511 -> One ([R 370]) + | 1509 -> One ([R 371]) + | 1544 -> One ([R 372]) + | 1531 -> One ([R 375]) + | 1533 -> One ([R 376]) + | 1532 -> One ([R 377]) + | 1092 -> One ([R 381]) + | 1088 -> One ([R 382]) + | 3306 -> One ([R 385]) + | 3294 -> One ([R 386]) + | 1474 -> One ([R 394]) + | 3399 -> One ([R 398]) + | 3398 -> One ([R 400]) + | 3393 -> One ([R 402]) + | 3401 -> One ([R 404]) + | 3400 -> One ([R 405]) + | 50 -> One ([R 436]) + | 48 -> One ([R 437]) + | 45 -> One ([R 438]) + | 49 -> One ([R 439]) + | 397 -> One ([R 443]) + | 176 -> One ([R 448]) + | 179 -> One ([R 449]) + | 177 -> One ([R 450]) + | 1149 -> One (R 451 :: r604) + | 1152 -> One (R 451 :: r605) + | 1151 -> One ([R 452]) + | 174 -> One ([R 454]) + | 3253 -> One ([R 455]) + | 3277 -> One (R 456 :: r1747) + | 3290 -> One (R 456 :: r1752) + | 3303 -> One (R 456 :: r1761) + | 3315 -> One (R 456 :: r1764) + | 3321 -> One ([R 457]) + | 3328 -> One (R 458 :: r1769) + | 3340 -> One (R 458 :: r1774) + | 3353 -> One (R 458 :: r1782) + | 3365 -> One (R 458 :: r1789) + | 3403 -> One ([R 459]) + | 3413 -> One (R 460 :: r1802) + | 3419 -> One (R 460 :: r1805) + | 3433 -> One (R 460 :: r1810) + | 3435 -> One (R 460 :: r1811) + | 3436 -> One (R 460 :: r1812) + | 3442 -> One (R 460 :: r1815) + | 3451 -> One ([R 461]) + | 3456 -> One (R 462 :: r1818) + | 3471 -> One (R 462 :: r1828) + | 3486 -> One (R 462 :: r1838) + | 3509 -> One ([R 463]) + | 3514 -> One (R 464 :: r1844) + | 3526 -> One (R 464 :: r1852) + | 3600 -> One ([R 465]) + | 3738 -> One ([R 467]) + | 3743 -> One (R 468 :: r1926) + | 3755 -> One (R 468 :: r1931) + | 3767 -> One (R 468 :: r1939) + | 172 -> One ([R 470]) + | 2670 -> One ([R 473]) + | 2671 -> One ([R 474]) + | 2672 -> One ([R 475]) + | 1802 -> One ([R 478]) + | 801 -> One ([R 479]) + | 2138 -> One ([R 482]) + | 3496 -> One ([R 485]) + | 3045 -> One ([R 492]) + | 3039 -> One ([R 493]) + | 1012 -> One ([R 507]) + | 1011 -> One ([R 525]) + | 1064 -> One ([R 532]) + | 916 -> One ([R 535]) + | 1000 -> One ([R 538]) + | 1337 -> One ([R 539]) + | 1321 -> One ([R 540]) + | 1336 -> One ([R 541]) + | 1318 -> One ([R 542]) + | 4068 -> One ([R 549]) | 807 -> One ([R 551]) - | 814 -> One ([R 552]) - | 1674 -> One ([R 555]) - | 1670 -> One ([R 556]) - | 1671 -> One ([R 557]) - | 1677 -> One ([R 558]) - | 1646 -> One ([R 559]) - | 1669 -> One ([R 560]) - | 1641 -> One ([R 561]) - | 1675 -> One ([R 562]) - | 1668 -> One ([R 563]) - | 1676 -> One ([R 564]) - | 1645 -> One ([R 565]) - | 837 -> One ([R 571]) - | 1344 -> One ([R 575]) - | 1334 -> One ([R 576]) - | 1350 -> One ([R 577]) - | 1335 -> One ([R 578]) - | 2586 -> One ([R 587]) - | 2585 -> One ([R 588]) - | 836 -> One ([R 590]) - | 279 -> One ([R 593]) - | 822 -> One ([R 604]) - | 823 -> One ([R 605]) - | 773 -> One ([R 611]) - | 772 -> One ([R 612]) - | 3019 -> One ([R 613]) - | 1445 -> One ([R 619]) - | 854 -> One ([R 620]) - | 1014 -> One ([R 621]) + | 809 -> One ([R 552]) + | 811 -> One ([R 553]) + | 818 -> One ([R 554]) + | 825 -> One ([R 555]) + | 1685 -> One ([R 558]) + | 1681 -> One ([R 559]) + | 1682 -> One ([R 560]) + | 1688 -> One ([R 561]) + | 1657 -> One ([R 562]) + | 1680 -> One ([R 563]) + | 1652 -> One ([R 564]) + | 1686 -> One ([R 565]) + | 1679 -> One ([R 566]) + | 1687 -> One ([R 567]) + | 1656 -> One ([R 568]) + | 848 -> One ([R 574]) + | 1355 -> One ([R 578]) + | 1345 -> One ([R 579]) + | 1361 -> One ([R 580]) + | 1346 -> One ([R 581]) + | 2597 -> One ([R 590]) + | 2596 -> One ([R 591]) + | 847 -> One ([R 593]) + | 318 -> One ([R 596]) + | 3891 -> One ([R 607]) + | 4029 -> One ([R 608]) + | 833 -> One ([R 609]) + | 834 -> One ([R 610]) + | 784 -> One ([R 616]) + | 783 -> One ([R 617]) + | 3030 -> One ([R 618]) + | 1456 -> One ([R 624]) | 865 -> One ([R 625]) - | 857 -> One ([R 626]) - | 859 -> One ([R 627]) - | 897 -> One ([R 628]) - | 886 -> One ([R 629]) - | 2897 -> One ([R 642]) - | 3096 -> One ([R 645]) - | 3095 -> One ([R 646]) - | 2099 -> One ([R 648]) - | 2106 -> One ([R 649]) - | 1022 -> One ([R 650]) - | 1020 -> One ([R 651]) - | 3148 -> One ([R 653]) - | 2446 -> One ([R 655]) - | 2440 -> One ([R 657]) - | 2762 -> One ([R 659]) - | 2832 -> One ([R 661]) - | 2401 -> One ([R 663]) - | 1102 -> One ([R 665]) - | 3494 -> One ([R 667]) - | 3492 -> One ([R 669]) - | 3496 -> One ([R 670]) - | 3217 -> One ([R 672]) - | 3207 -> One ([R 673]) - | 3185 -> One ([R 674]) - | 3216 -> One ([R 675]) - | 522 -> One ([R 676]) - | 521 -> One ([R 677]) - | 2935 -> One ([R 680]) - | 2934 -> One ([R 681]) - | 2933 -> One ([R 682]) - | 2932 -> One ([R 683]) - | 2931 -> One ([R 684]) - | 2930 -> One ([R 685]) - | 2929 -> One ([R 686]) - | 2928 -> One ([R 687]) - | 2927 -> One ([R 688]) - | 2926 -> One ([R 689]) - | 2925 -> One ([R 690]) - | 2924 -> One ([R 691]) - | 2980 -> One ([R 694]) - | 2987 -> One ([R 696]) - | 2988 -> One ([R 698]) - | 2964 -> One ([R 700]) - | 2965 -> One ([R 702]) - | 2972 -> One ([R 704]) - | 2973 -> One ([R 706]) - | 2939 -> One ([R 710]) - | 2956 -> One ([R 712]) - | 2957 -> One ([R 714]) - | 201 -> One ([R 729]) - | 199 -> One ([R 730]) - | 200 -> One ([R 731]) - | 821 -> One ([R 737]) - | 820 -> One ([R 738]) - | 819 -> One ([R 739]) - | 818 -> One ([R 740]) - | 817 -> One ([R 741]) - | 1523 -> One ([R 742]) - | 2641 -> One ([R 758]) - | 1610 -> One ([R 762]) - | 2038 -> One ([R 766]) - | 2041 -> One ([R 767]) - | 2873 -> One (R 773 :: r1548) - | 1415 -> One (R 775 :: r734) - | 1774 -> One (R 777 :: r919) - | 1797 -> One (R 779 :: r931) - | 1557 -> One (R 781 :: r788) - | 2060 -> One (R 783 :: r1060) - | 2173 -> One (R 785 :: r1100) - | 1536 -> One (R 787 :: r782) - | 1793 -> One (R 789 :: r930) - | 1672 -> One (R 791 :: r853) - | 1680 -> One (R 793 :: r854) - | 3877 -> One (R 795 :: r1976) - | 686 -> One (R 797 :: r382) - | 266 -> One (R 799 :: r165) - | 3945 -> One (R 801 :: r2021) - | 3946 -> One (R 801 :: r2022) - | 2063 -> One (R 803 :: r1061) - | 2071 -> One (R 805 :: r1062) - | 2003 -> One (R 807 :: r1039) - | 690 -> One (R 809 :: r383) - | 668 -> One (R 811 :: r375) - | 2152 -> One (R 813 :: r1099) - | 3838 -> One (R 815 :: r1965) - | 3824 -> One (R 817 :: r1962) - | 781 -> One (R 819 :: r454) - | 3829 -> One (R 821 :: r1964) - | 1783 -> One (R 823 :: r929) - | 627 -> One (R 827 :: r349) - | 853 -> One ([R 829]) - | 851 -> One ([R 830]) - | 848 -> One ([R 831]) - | 852 -> One ([R 832]) - | 919 -> One ([R 833]) - | 921 -> One ([R 834]) - | 920 -> One ([R 835]) - | 922 -> One ([R 836]) - | 2225 | 2751 -> One ([R 839]) - | 378 -> One ([R 840]) - | 384 -> One ([R 842]) - | 1579 -> One ([R 843]) - | 3611 -> One ([R 846]) - | 26 -> One (R 847 :: r18) - | 4020 -> One ([R 848]) - | 2566 -> One ([R 850]) - | 2565 -> One ([R 851]) - | 2564 -> One ([R 852]) - | 2563 -> One ([R 853]) - | 2562 -> One ([R 854]) - | 2561 -> One ([R 855]) - | 2560 -> One ([R 856]) - | 2573 -> One ([R 860]) - | 248 -> One ([R 863]) - | 247 -> One ([R 864]) - | 246 -> One ([R 865]) - | 2569 -> One ([R 867]) - | 2570 -> One ([R 868]) - | 543 -> One ([R 869]) - | 3556 -> One ([R 874]) - | 3848 -> One ([R 890]) - | 1413 -> One ([R 892]) - | 3092 -> One ([R 908]) - | 208 -> One ([R 913]) - | 209 -> One ([R 915]) - | 2716 -> One ([R 918]) - | 1827 -> One ([R 930]) - | 1514 -> One ([R 933]) - | 1879 -> One ([R 934]) - | 1880 -> One ([R 936]) - | 1883 -> One ([R 937]) - | 1884 -> One ([R 938]) - | 1885 -> One ([R 940]) - | 1888 -> One ([R 941]) - | 1893 -> One ([R 942]) - | 1894 -> One ([R 944]) - | 1892 -> One ([R 945]) - | 2101 -> One ([R 953]) - | 2100 -> One ([R 954]) - | 2102 -> One ([R 955]) - | 2103 -> One ([R 956]) - | 2120 -> One ([R 959]) - | 2125 -> One ([R 960]) - | 239 -> One ([R 973]) - | 236 -> One ([R 974]) - | 417 -> One ([R 979]) - | 415 -> One ([R 980]) - | 34 -> One ([R 992]) - | 572 -> One ([R 993]) - | 563 -> One ([R 994]) - | 562 -> One ([R 995]) - | 305 -> One ([R 997]) - | 2245 -> One ([R 1000]) - | 362 -> One ([R 1002]) - | 294 -> One ([R 1004]) - | 682 -> One ([R 1006]) - | 1598 -> One ([R 1008]) - | 1060 -> One ([R 1010]) - | 1442 -> One ([R 1012]) - | 1074 -> One ([R 1014]) - | 3132 -> One ([R 1016]) - | 2950 -> One ([R 1018]) - | 916 -> One ([R 1019]) - | 917 -> One ([R 1020]) - | 2053 -> One ([R 1021]) - | 2054 -> One ([R 1022]) - | 2349 -> One ([R 1023]) - | 2350 -> One ([R 1024]) - | 2799 -> One ([R 1025]) - | 2800 -> One ([R 1026]) - | 1105 -> One ([R 1027]) - | 1106 -> One ([R 1028]) - | 2875 -> One ([R 1029]) - | 2876 -> One ([R 1030]) - | 3436 -> One ([R 1031]) - | 3437 -> One ([R 1032]) - | 3358 -> One ([R 1033]) - | 3359 -> One ([R 1034]) - | 3142 -> One ([R 1035]) + | 1025 -> One ([R 626]) + | 876 -> One ([R 630]) + | 868 -> One ([R 631]) + | 870 -> One ([R 632]) + | 908 -> One ([R 633]) + | 897 -> One ([R 634]) + | 2908 -> One ([R 647]) + | 3107 -> One ([R 650]) + | 3106 -> One ([R 651]) + | 2110 -> One ([R 653]) + | 2117 -> One ([R 654]) + | 1033 -> One ([R 655]) + | 1031 -> One ([R 656]) + | 3159 -> One ([R 658]) + | 2457 -> One ([R 660]) + | 2451 -> One ([R 662]) + | 2773 -> One ([R 664]) + | 2843 -> One ([R 666]) + | 2412 -> One ([R 668]) + | 1113 -> One ([R 669]) + | 3505 -> One ([R 671]) + | 3503 -> One ([R 673]) + | 3507 -> One ([R 674]) + | 3228 -> One ([R 676]) + | 3218 -> One ([R 677]) + | 3196 -> One ([R 678]) + | 3227 -> One ([R 679]) + | 561 -> One ([R 680]) + | 560 -> One ([R 681]) + | 30 -> One ([R 683]) + | 2946 -> One ([R 692]) + | 2945 -> One ([R 693]) + | 2944 -> One ([R 694]) + | 2943 -> One ([R 695]) + | 2942 -> One ([R 696]) + | 2941 -> One ([R 697]) + | 2940 -> One ([R 698]) + | 2939 -> One ([R 699]) + | 2938 -> One ([R 700]) + | 2937 -> One ([R 701]) + | 2936 -> One ([R 702]) + | 2935 -> One ([R 703]) + | 2991 -> One ([R 706]) + | 2998 -> One ([R 708]) + | 2999 -> One ([R 710]) + | 2975 -> One ([R 712]) + | 2976 -> One ([R 714]) + | 2983 -> One ([R 716]) + | 2984 -> One ([R 718]) + | 2950 -> One ([R 722]) + | 2967 -> One ([R 724]) + | 2968 -> One ([R 726]) + | 4058 -> One ([R 742]) + | 241 -> One ([R 743]) + | 239 -> One ([R 744]) + | 240 -> One ([R 745]) + | 3890 -> One ([R 749]) + | 4017 -> One ([R 750]) + | 832 -> One ([R 753]) + | 831 -> One ([R 754]) + | 830 -> One ([R 755]) + | 829 -> One ([R 756]) + | 828 -> One ([R 757]) + | 1534 -> One ([R 758]) + | 2652 -> One ([R 774]) + | 1621 -> One ([R 778]) + | 2049 -> One ([R 782]) + | 2052 -> One ([R 783]) + | 2884 -> One (R 789 :: r1542) + | 1426 -> One (R 791 :: r728) + | 1785 -> One (R 793 :: r913) + | 1808 -> One (R 795 :: r925) + | 1568 -> One (R 797 :: r782) + | 2071 -> One (R 799 :: r1054) + | 2184 -> One (R 801 :: r1094) + | 1547 -> One (R 803 :: r776) + | 1804 -> One (R 805 :: r924) + | 1683 -> One (R 807 :: r847) + | 1691 -> One (R 809 :: r848) + | 3888 -> One (R 811 :: r1970) + | 4007 -> One (R 813 :: r2046) + | 725 -> One (R 815 :: r405) + | 305 -> One (R 817 :: r188) + | 3913 -> One (R 819 :: r1983) + | 3952 -> One (R 819 :: r2006) + | 2074 -> One (R 821 :: r1055) + | 2082 -> One (R 823 :: r1056) + | 2014 -> One (R 825 :: r1033) + | 729 -> One (R 827 :: r406) + | 707 -> One (R 829 :: r398) + | 2163 -> One (R 831 :: r1093) + | 3849 -> One (R 833 :: r1959) + | 3835 -> One (R 835 :: r1956) + | 792 -> One (R 837 :: r448) + | 3840 -> One (R 839 :: r1958) + | 1794 -> One (R 841 :: r923) + | 666 -> One (R 845 :: r372) + | 864 -> One ([R 847]) + | 862 -> One ([R 848]) + | 859 -> One ([R 849]) + | 863 -> One ([R 850]) + | 930 -> One ([R 851]) + | 932 -> One ([R 852]) + | 931 -> One ([R 853]) + | 933 -> One ([R 854]) + | 2236 | 2762 -> One ([R 857]) + | 417 -> One ([R 858]) + | 423 -> One ([R 860]) + | 1590 -> One ([R 861]) + | 3622 -> One ([R 864]) + | 26 -> One (R 865 :: r18) + | 4030 -> One ([R 866]) + | 2577 -> One ([R 868]) + | 2576 -> One ([R 869]) + | 2575 -> One ([R 870]) + | 2574 -> One ([R 871]) + | 2573 -> One ([R 872]) + | 2572 -> One ([R 873]) + | 2571 -> One ([R 874]) + | 2584 -> One ([R 878]) + | 287 -> One ([R 881]) + | 286 -> One ([R 882]) + | 285 -> One ([R 883]) + | 2580 -> One ([R 885]) + | 2581 -> One ([R 886]) + | 582 -> One ([R 887]) + | 3567 -> One ([R 892]) + | 3859 -> One ([R 908]) + | 1424 -> One ([R 910]) + | 3103 -> One ([R 926]) + | 247 -> One ([R 931]) + | 248 -> One ([R 933]) + | 2727 -> One ([R 936]) + | 4006 -> One ([R 942]) + | 1838 -> One ([R 950]) + | 1525 -> One ([R 953]) + | 1890 -> One ([R 954]) + | 1891 -> One ([R 956]) + | 1894 -> One ([R 957]) + | 1895 -> One ([R 958]) + | 1896 -> One ([R 960]) + | 1899 -> One ([R 961]) + | 1904 -> One ([R 962]) + | 1905 -> One ([R 964]) + | 1903 -> One ([R 965]) + | 2112 -> One ([R 973]) + | 2111 -> One ([R 974]) + | 2113 -> One ([R 975]) + | 2114 -> One ([R 976]) + | 2131 -> One ([R 979]) + | 2136 -> One ([R 980]) + | 278 -> One ([R 993]) + | 275 -> One ([R 994]) + | 456 -> One ([R 999]) + | 454 -> One ([R 1000]) + | 86 -> One ([R 1012]) + | 611 -> One ([R 1013]) + | 602 -> One ([R 1014]) + | 601 -> One ([R 1015]) + | 344 -> One ([R 1017]) + | 2256 -> One ([R 1020]) + | 401 -> One ([R 1022]) + | 333 -> One ([R 1024]) + | 721 -> One ([R 1026]) + | 1609 -> One ([R 1028]) + | 1071 -> One ([R 1030]) + | 1453 -> One ([R 1032]) + | 1085 -> One ([R 1034]) | 3143 -> One ([R 1036]) - | 295 -> One ([R 1037]) - | 296 -> One ([R 1038]) - | 2036 -> One ([R 1039]) - | 2037 -> One ([R 1040]) - | 1075 -> One ([R 1041]) - | 1076 -> One ([R 1042]) - | 388 -> One ([R 1043]) - | 389 -> One ([R 1044]) - | 1577 -> One ([R 1045]) - | 1578 -> One ([R 1046]) - | 2220 -> One ([R 1048]) - | 3835 -> One ([R 1049]) - | 3836 -> One ([R 1050]) - | 164 -> One ([R 1051]) - | 165 -> One ([R 1052]) - | 2886 -> One ([R 1053]) - | 2887 -> One ([R 1054]) - | 2155 -> One ([R 1055]) - | 2156 -> One ([R 1056]) - | 3987 -> One ([R 1057]) - | 3988 -> One ([R 1058]) - | 594 -> One ([R 1059]) - | 617 -> One ([R 1060]) - | 3984 -> One ([R 1061]) - | 3985 -> One ([R 1062]) - | 2147 -> One ([R 1063]) - | 2148 -> One ([R 1064]) - | 392 -> One ([R 1065]) - | 394 -> One ([R 1066]) - | 2902 -> One ([R 1067]) - | 2903 -> One ([R 1068]) - | 2835 -> One ([R 1069]) - | 2843 -> One ([R 1070]) - | 2196 -> One ([R 1071]) - | 2209 -> One ([R 1072]) - | 83 -> One ([R 1073]) - | 84 -> One ([R 1074]) - | 570 -> One ([R 1075]) - | 571 -> One ([R 1076]) - | 2537 -> One ([R 1077]) - | 2538 -> One ([R 1078]) - | 2780 -> One ([R 1079]) - | 2804 -> One ([R 1080]) - | 383 -> One ([R 1082]) - | 3020 -> One ([R 1083]) - | 3021 -> One ([R 1084]) - | 1400 -> One ([R 1085]) - | 1401 -> One ([R 1086]) - | 2809 -> One ([R 1087]) - | 2810 -> One ([R 1088]) - | 2624 -> One ([R 1089]) - | 2627 -> One ([R 1090]) - | 463 -> One ([R 1091]) - | 464 -> One ([R 1092]) - | 950 -> One ([R 1093]) - | 951 -> One ([R 1094]) - | 1991 -> One ([R 1095]) - | 1992 -> One ([R 1096]) - | 2411 -> One ([R 1097]) - | 2412 -> One ([R 1098]) - | 2292 -> One ([R 1099]) - | 2293 -> One ([R 1100]) - | 1096 -> One ([R 1101]) - | 1097 -> One ([R 1102]) - | 3075 -> One ([R 1103]) - | 3076 -> One ([R 1104]) - | 2206 -> One ([R 1107]) - | 3633 -> One ([R 1110]) - | 3239 -> One ([R 1111]) - | 3215 -> One ([R 1112]) - | 2200 -> One ([R 1114]) - | 3717 -> One ([R 1116]) - | 3483 -> One ([R 1118]) - | 2450 -> One ([R 1123]) - | 2449 -> One ([R 1124]) - | 58 -> One ([R 1126]) - | 46 | 845 -> One ([R 1127]) - | 47 | 846 -> One ([R 1128]) - | 48 | 847 -> One ([R 1129]) - | 50 | 849 -> One ([R 1130]) - | 1223 -> One ([R 1135]) - | 1363 -> One ([R 1136]) - | 1931 -> One ([R 1139]) - | 614 -> One ([R 1142]) - | 2763 -> One ([R 1143]) - | 2769 -> One ([R 1144]) - | 2768 -> One ([R 1145]) - | 2458 -> One ([R 1146]) - | 267 -> One ([R 1147]) - | 269 -> One ([R 1148]) - | 216 -> One ([R 1149]) - | 213 -> One ([R 1150]) - | 838 -> One ([R 1155]) - | 805 -> One ([R 1156]) - | 799 -> One ([R 1157]) - | 797 -> One ([R 1159]) - | 930 -> One ([R 1163]) - | 928 -> One ([R 1165]) - | 924 -> One ([R 1166]) - | 3241 -> One ([R 1170]) - | 3107 -> One ([R 1171]) - | 2609 -> One ([R 1174]) - | 2428 -> One ([R 1176]) - | 2429 -> One ([R 1177]) - | 2243 -> One ([R 1178]) - | 2241 -> One ([R 1179]) - | 2242 -> One ([R 1180]) - | 2244 -> One ([R 1181]) - | 2669 -> One (R 1184 :: r1419) - | 2670 -> One ([R 1185]) - | 774 -> One (R 1186 :: r451) - | 1063 -> One (R 1186 :: r577) - | 1561 -> One (R 1186 :: r800) - | 1601 -> One (R 1186 :: r819) - | 1614 -> One (R 1186 :: r831) - | 1806 -> One (R 1186 :: r948) - | 1852 -> One (R 1186 :: r968) - | 1869 -> One (R 1186 :: r978) - | 1932 -> One (R 1186 :: r1006) - | 1966 -> One (R 1186 :: r1029) - | 775 -> One ([R 1187]) - | 663 -> One ([R 1189]) - | 1653 -> One (R 1190 :: r846) - | 1659 -> One (R 1190 :: r849) - | 2705 -> One (R 1190 :: r1449) - | 1654 -> One ([R 1191]) - | 1408 -> One (R 1192 :: r733) - | 1738 -> One (R 1192 :: r900) - | 2397 -> One (R 1192 :: r1248) - | 3719 -> One (R 1192 :: r1929) - | 1409 -> One ([R 1193]) - | 525 -> One (R 1194 :: r304) - | 1517 -> One (R 1194 :: r781) - | 212 -> One ([R 1195]) - | 274 -> One (R 1196 :: r171) - | 275 -> One ([R 1197]) - | 217 -> One (R 1198 :: r144) - | 218 -> One ([R 1199]) - | 742 -> One (R 1200 :: r431) - | 1632 -> One (R 1200 :: r839) - | 675 -> One ([R 1201]) - | 1623 -> One (R 1202 :: r835) - | 1626 -> One (R 1202 :: r836) - | 2946 -> One (R 1202 :: r1582) - | 1624 -> One ([R 1203]) - | 128 -> One (R 1204 :: r94) - | 141 -> One (R 1204 :: r99) - | 129 -> One ([R 1205]) - | 2122 -> One ([R 1207]) - | 638 -> One ([R 1209]) - | 554 -> One ([R 1211]) - | 277 -> One ([R 1213]) - | 77 -> One (R 1214 :: r59) - | 105 -> One (R 1214 :: r72) - | 78 -> One ([R 1215]) - | 1383 -> One (R 1216 :: r721) - | 2414 -> One (R 1216 :: r1255) - | 2418 -> One (R 1216 :: r1257) - | 2425 -> One (R 1216 :: r1259) - | 3774 -> One (R 1216 :: r1951) - | 745 -> One ([R 1217]) - | 1972 -> One (R 1218 :: r1031) - | 1973 -> One ([R 1219]) - | 2864 -> One (R 1220 :: r1545) - | 2868 -> One (R 1220 :: r1547) - | 2865 -> One ([R 1221]) - | 7 -> One (R 1222 :: r11) - | 15 -> One (R 1222 :: r15) - | 145 -> One (R 1222 :: r101) - | 154 -> One (R 1222 :: r109) - | 197 -> One (R 1222 :: r132) - | 322 -> One (R 1222 :: r197) - | 325 -> One (R 1222 :: r199) - | 509 -> One (R 1222 :: r296) - | 516 -> One (R 1222 :: r298) - | 532 -> One (R 1222 :: r308) - | 579 -> One (R 1222 :: r333) - | 778 -> One (R 1222 :: r453) - | 1079 -> One (R 1222 :: r583) - | 1083 -> One (R 1222 :: r592) - | 1107 -> One (R 1222 :: r598) - | 1190 -> One (R 1222 :: r626) - | 1367 -> One (R 1222 :: r704) - | 1443 -> One (R 1222 :: r747) - | 1453 -> One (R 1222 :: r753) - | 1458 -> One (R 1222 :: r755) - | 1461 -> One (R 1222 :: r757) - | 1481 -> One (R 1222 :: r772) - | 1595 -> One (R 1222 :: r817) - | 1604 -> One (R 1222 :: r821) - | 1607 -> One (R 1222 :: r825) - | 1719 -> One (R 1222 :: r886) - | 1733 -> One (R 1222 :: r894) - | 1742 -> One (R 1222 :: r902) - | 1751 -> One (R 1222 :: r907) - | 1754 -> One (R 1222 :: r909) - | 1757 -> One (R 1222 :: r911) - | 1760 -> One (R 1222 :: r913) - | 1763 -> One (R 1222 :: r915) - | 1808 -> One (R 1222 :: r949) - | 1812 -> One (R 1222 :: r951) - | 1828 -> One (R 1222 :: r962) - | 1833 -> One (R 1222 :: r964) - | 1857 -> One (R 1222 :: r971) - | 1862 -> One (R 1222 :: r974) - | 1871 -> One (R 1222 :: r979) - | 1873 -> One (R 1222 :: r981) - | 1877 -> One (R 1222 :: r983) - | 1934 -> One (R 1222 :: r1007) - | 1968 -> One (R 1222 :: r1030) - | 2010 -> One (R 1222 :: r1042) - | 2080 -> One (R 1222 :: r1070) - | 2116 -> One (R 1222 :: r1085) - | 2142 -> One (R 1222 :: r1098) - | 2739 -> One (R 1222 :: r1471) - | 8 -> One ([R 1223]) - | 503 -> One (R 1224 :: r288) - | 508 -> One (R 1224 :: r292) - | 1395 -> One (R 1224 :: r728) - | 1403 -> One (R 1224 :: r731) - | 2531 -> One (R 1224 :: r1343) - | 504 -> One ([R 1225]) - | 1978 -> One ([R 1227]) - | 1449 -> One (R 1228 :: r751) - | 1450 -> One ([R 1229]) - | 535 -> One ([R 1231]) - | 1650 -> One ([R 1233]) - | 3246 -> One ([R 1235]) - | 540 -> One (R 1236 :: r315) - | 586 -> One (R 1236 :: r339) - | 150 -> One ([R 1237]) - | 2095 -> One (R 1238 :: r1081) - | 2129 -> One (R 1238 :: r1093) - | 2133 -> One (R 1238 :: r1096) - | 3248 -> One (R 1238 :: r1745) - | 3251 -> One (R 1238 :: r1747) - | 2096 -> One ([R 1239]) - | 640 -> One (R 1240 :: r361) - | 643 -> One (R 1240 :: r363) - | 652 -> One (R 1240 :: r366) - | 1119 -> One (R 1240 :: r604) - | 1474 -> One (R 1240 :: r766) - | 1921 -> One (R 1240 :: r1003) - | 2123 -> One (R 1240 :: r1090) - | 2215 -> One (R 1240 :: r1123) - | 2345 -> One (R 1240 :: r1211) - | 2578 -> One (R 1240 :: r1372) - | 641 -> One ([R 1241]) - | 2013 -> One (R 1242 :: r1045) - | 2302 -> One (R 1242 :: r1184) - | 2328 -> One (R 1242 :: r1202) - | 2734 -> One (R 1242 :: r1469) - | 760 -> One ([R 1243]) - | 2516 -> One ([R 1245]) - | 492 -> One (R 1246 :: r283) - | 493 -> One ([R 1247]) - | 182 -> One ([R 1249]) - | 2454 -> One (R 1250 :: r1276) - | 2455 -> One ([R 1251]) - | 2248 -> One (R 1252 :: r1149) - | 2258 -> One (R 1252 :: r1156) - | 2262 -> One (R 1252 :: r1159) - | 2266 -> One (R 1252 :: r1162) - | 2276 -> One (R 1252 :: r1173) - | 2284 -> One (R 1252 :: r1176) - | 2305 -> One (R 1252 :: r1187) - | 2319 -> One (R 1252 :: r1197) - | 2331 -> One (R 1252 :: r1205) - | 2238 -> One ([R 1253]) - | 203 -> One ([R 1255]) - | 2690 -> One ([R 1257]) - | 2343 -> One ([R 1259]) - | 1432 -> One (R 1260 :: r741) - | 1433 -> One ([R 1261]) - | 1569 -> One (R 1262 :: r806) - | 1570 -> One ([R 1263]) - | 328 -> One (R 1264 :: r203) - | 329 -> One ([R 1265]) - | 204 -> One (R 1266 :: r137) - | 205 -> One ([R 1267]) - | 396 -> One (R 1268 :: r237) - | 401 -> One (R 1268 :: r240) - | 405 -> One (R 1268 :: r243) - | 409 -> One (R 1268 :: r246) - | 397 -> One ([R 1269]) - | 310 -> One ([R 1271]) - | 673 -> One ([R 1275]) - | 3087 -> One (R 1276 :: r1666) - | 3088 -> One ([R 1277]) - | 1226 -> One (R 1278 :: r656) - | 1234 -> One (R 1278 :: r660) - | 1245 -> One (R 1278 :: r664) - | 1255 -> One (R 1278 :: r670) - | 1262 -> One (R 1278 :: r674) - | 1273 -> One (R 1278 :: r678) - | 1280 -> One (R 1278 :: r681) - | 1312 -> One (R 1278 :: r685) - | 1227 -> One ([R 1279]) - | 2923 -> One ([R 1281]) - | 1424 -> One ([R 1283]) - | 1132 -> One (R 1284 :: r609) - | 1184 -> One (R 1284 :: r625) - | 1240 -> One (R 1284 :: r663) - | 1268 -> One (R 1284 :: r677) - | 1286 -> One (R 1284 :: r684) - | 1318 -> One (R 1284 :: r688) - | 2936 -> One (R 1284 :: r1574) - | 2940 -> One (R 1284 :: r1576) - | 2943 -> One (R 1284 :: r1578) - | 2953 -> One (R 1284 :: r1584) - | 2958 -> One (R 1284 :: r1586) - | 2961 -> One (R 1284 :: r1588) - | 2966 -> One (R 1284 :: r1590) - | 2969 -> One (R 1284 :: r1592) - | 2974 -> One (R 1284 :: r1594) - | 2977 -> One (R 1284 :: r1596) - | 2981 -> One (R 1284 :: r1598) - | 2984 -> One (R 1284 :: r1600) - | 2989 -> One (R 1284 :: r1602) - | 2992 -> One (R 1284 :: r1604) - | 3013 -> One (R 1284 :: r1616) - | 3599 -> One (R 1284 :: r1880) - | 3606 -> One (R 1284 :: r1885) - | 558 -> One ([R 1285]) - | 1086 -> One ([R 1287]) - | 488 -> One (R 1288 :: r281) - | 2782 -> One (R 1288 :: r1501) - | 185 -> One ([R 1289]) - | 1905 -> One (R 1300 :: r992) - | 1895 -> One (R 1304 :: r987) - | 1903 -> One ([R 1305]) - | 2231 -> One (R 1308 :: r1133) - | 3839 -> One (R 1310 :: r1968) - | 559 -> One (R 1314 :: r324) - | 573 -> One ([R 1315]) - | 2677 -> One ([R 1317]) - | 2844 -> One ([R 1319]) - | 1420 -> One ([R 1321]) - | 3138 -> One ([R 1323]) - | 2524 -> One ([R 1325]) - | 2182 -> One ([R 1327]) - | 4041 -> One ([R 1329]) - | 23 -> One ([R 1331]) - | 14 -> One (R 1332 :: r13) - | 20 -> One ([R 1333]) - | 25 -> One ([R 1335]) - | 765 -> One ([R 1337]) - | 1147 -> One ([R 1339]) - | 451 -> One ([R 1341]) - | 904 -> One ([R 1343]) - | 2189 -> One ([R 1345]) - | 3879 -> One ([R 1347]) - | 3935 -> One ([R 1349]) - | 2363 -> One ([R 1351]) - | 694 -> One ([R 1353]) - | 1805 -> One (R 1354 :: r947) - | 2184 -> One ([R 1358]) - | 3963 -> One ([R 1360]) - | 3969 -> One ([R 1362]) - | 3967 -> One ([R 1364]) - | 3965 -> One ([R 1366]) - | 3971 -> One ([R 1368]) - | 704 -> One ([R 1370]) - | 3870 -> One ([R 1372]) - | 1553 -> One ([R 1374]) - | 3872 -> One ([R 1376]) - | 699 -> One ([R 1378]) - | 702 -> One ([R 1380]) - | 697 -> One ([R 1382]) - | 476 -> One ([R 1384]) - | 3873 -> One ([R 1386]) - | 4039 -> One ([R 1388]) - | 3944 -> One ([R 1390]) - | 4007 -> One ([R 1392]) - | 472 -> One ([R 1394]) - | 191 -> One ([R 1396]) - | 432 -> One ([R 1398]) - | 3429 -> One ([R 1400]) - | 2186 -> One ([R 1402]) - | 258 -> One ([R 1404]) - | 3558 -> One ([R 1406]) - | 21 -> One ([R 1408]) - | 232 -> One ([R 1410]) - | 3887 -> One ([R 1412]) - | 1123 -> One ([R 1414]) - | 501 -> One ([R 1416]) - | 500 -> One ([R 1417]) - | 287 -> One (R 1418 :: r177) - | 2044 -> One (R 1418 :: r1057) - | 288 -> One ([R 1419]) - | 289 -> One ([R 1420]) - | 1847 -> One ([R 1422]) - | 1844 -> One ([R 1423]) - | 1982 -> One (R 1424 :: r1036) - | 1987 -> One (R 1424 :: r1038) - | 1984 -> One ([R 1425]) - | 1983 -> One ([R 1426]) - | 3533 -> One ([R 1428]) - | 1209 -> One ([R 1487]) - | 1370 -> One (R 1490 :: r708) - | 1379 -> One ([R 1495]) - | 3867 -> One ([R 1497]) - | 3011 -> One ([R 1499]) - | 3560 -> One ([R 1501]) - | 2179 -> One ([R 1503]) - | 2801 -> One ([R 1505]) - | 2849 -> One ([R 1507]) - | 3723 -> One ([R 1509]) - | 2176 -> One ([R 1511]) - | 2785 -> One ([R 1513]) - | 2591 -> One ([R 1515]) - | 1169 -> One ([R 1517]) - | 1168 -> One ([R 1518]) - | 1944 -> One ([R 1520]) - | 2478 -> One ([R 1522]) - | 2753 -> One ([R 1524]) - | 1687 -> One ([R 1526]) - | 170 -> One ([R 1530]) - | 161 -> One ([R 1531]) - | 169 -> One ([R 1532]) - | 168 -> One ([R 1533]) - | 167 -> One ([R 1534]) - | 166 -> One ([R 1535]) - | 534 -> One ([R 1539]) - | 601 -> One ([R 1541]) - | 1851 -> One ([R 1549]) - | 3055 -> One ([R 1553]) - | 3054 -> One ([R 1555]) - | 3073 -> One ([R 1556]) - | 3072 -> One ([R 1557]) - | 3525 -> One ([R 1563]) - | 2110 -> One ([R 1567]) - | 2109 -> One ([R 1568]) - | 3269 -> One ([R 1569]) - | 3270 -> One ([R 1571]) - | 3272 -> One ([R 1572]) - | 2500 -> One ([R 1579]) - | 2224 -> One ([R 1580]) - | 3833 -> One ([R 1581]) - | 3958 -> One ([R 1587]) - | 3957 -> One ([R 1588]) - | 2354 -> One ([R 1598]) - | 520 | 861 | 3179 -> One ([R 1600]) - | 529 -> One ([R 1603]) - | 528 -> One ([R 1604]) - | 1611 -> One ([R 1605]) - | 1599 -> One ([R 1607]) - | 3006 -> One ([R 1614]) - | 3005 -> One ([R 1615]) - | 2726 -> One ([R 1619]) - | 2725 -> One ([R 1620]) - | 3545 -> One ([R 1621]) - | 3554 -> One ([R 1623]) - | 3539 -> One ([R 1625]) - | 3547 -> One ([R 1627]) - | 3546 -> One ([R 1628]) - | 3544 -> One ([R 1629]) - | 3536 -> One ([R 1631]) - | 3549 -> One ([R 1633]) - | 3548 -> One ([R 1634]) - | 3568 -> One ([R 1635]) - | 3571 -> One ([R 1637]) - | 3563 -> One ([R 1639]) - | 3567 -> One ([R 1641]) - | 1311 -> One ([R 1657]) - | 1244 -> One ([R 1665]) - | 1220 -> One ([R 1666]) - | 1272 -> One ([R 1667]) - | 1254 -> One ([R 1668]) - | 1320 -> One ([R 1673]) - | 1242 -> One ([R 1674]) - | 1288 -> One ([R 1675]) - | 1270 -> One ([R 1676]) - | 1243 -> One ([R 1677]) - | 1219 -> One ([R 1678]) - | 1271 -> One ([R 1679]) - | 1253 -> One ([R 1680]) - | 1317 -> One ([R 1685]) - | 1239 -> One ([R 1686]) - | 1285 -> One ([R 1687]) - | 1267 -> One ([R 1688]) - | 1250 -> One ([R 1693]) - | 1232 -> One ([R 1694]) - | 1278 -> One ([R 1695]) - | 1260 -> One ([R 1696]) - | 1900 -> One ([R 1705]) - | 1897 -> One ([R 1706]) - | 2066 -> One ([R 1707]) - | 2068 -> One ([R 1708]) - | 2067 -> One ([R 1709]) - | 2064 -> One ([R 1710]) - | 1999 -> One ([R 1712]) - | 2007 -> One ([R 1713]) - | 2002 -> One ([R 1714]) - | 2006 -> One ([R 1715]) - | 2000 -> One ([R 1716]) - | 1995 -> One ([R 1717]) - | 2042 -> One ([R 1718]) - | 2004 -> One ([R 1719]) - | 2055 -> One ([R 1720]) - | 1994 -> One ([R 1721]) - | 1993 -> One ([R 1722]) - | 1998 -> One ([R 1723]) - | 2005 -> One ([R 1724]) - | 2043 -> One ([R 1725]) - | 2001 -> One ([R 1726]) - | 1990 -> One ([R 1727]) - | 1875 -> One ([R 1733]) - | 1920 -> One ([R 1736]) - | 1919 -> One ([R 1737]) - | 1918 -> One ([R 1738]) - | 1917 -> One ([R 1739]) - | 2709 -> One ([R 1753]) - | 3576 -> One ([R 1757]) - | 3575 -> One ([R 1759]) - | 2790 -> One (R 1762 :: r1502) - | 2794 -> One ([R 1763]) - | 2798 -> One ([R 1764]) - | 3583 -> One ([R 1765]) - | 3582 -> One ([R 1767]) - | 3579 -> One ([R 1769]) - | 3585 -> One ([R 1771]) - | 3584 -> One ([R 1772]) - | 2872 -> One ([R 1773]) - | 1414 -> One ([R 1774]) - | 1773 -> One ([R 1775]) - | 1796 -> One ([R 1776]) - | 1555 -> One ([R 1777]) - | 2059 -> One ([R 1778]) - | 2172 -> One ([R 1779]) - | 1524 -> One ([R 1780]) - | 1792 -> One ([R 1781]) - | 1647 -> One ([R 1782]) - | 1679 -> One ([R 1783]) - | 3880 -> One ([R 1784]) - | 688 -> One ([R 1785]) - | 270 -> One ([R 1786]) - | 2069 -> One ([R 1787]) - | 2073 -> One ([R 1788]) - | 2056 -> One ([R 1789]) - | 693 -> One ([R 1790]) - | 689 -> One ([R 1791]) - | 2169 -> One ([R 1792]) - | 3847 -> One ([R 1793]) - | 3832 -> One ([R 1794]) - | 1589 -> One ([R 1795]) - | 3827 -> One ([R 1796]) - | 1785 -> One ([R 1797]) - | 2299 -> One ([R 1798]) - | 630 -> One ([R 1799]) - | 878 -> One ([R 1800]) - | 2051 -> One ([R 1801]) - | 2348 -> One ([R 1802]) - | 2789 -> One ([R 1803]) - | 1103 | 2648 -> One ([R 1804]) - | 2860 -> One ([R 1805]) - | 3435 -> One ([R 1806]) - | 3357 -> One ([R 1807]) - | 3141 -> One ([R 1808]) - | 292 -> One ([R 1809]) - | 2035 -> One ([R 1810]) - | 1073 -> One ([R 1811]) - | 387 -> One ([R 1812]) - | 1576 -> One ([R 1813]) - | 3834 -> One ([R 1814]) - | 171 -> One ([R 1815]) - | 2888 -> One ([R 1816]) - | 3993 -> One ([R 1817]) - | 626 -> One ([R 1818]) - | 3992 -> One ([R 1819]) - | 431 -> One ([R 1820]) - | 2905 -> One ([R 1821]) - | 2846 -> One ([R 1822]) - | 3853 -> One ([R 1823]) - | 81 -> One ([R 1824]) - | 569 -> One ([R 1825]) - | 2539 -> One ([R 1826]) - | 2805 -> One ([R 1827]) - | 385 -> One ([R 1828]) - | 3022 -> One ([R 1829]) - | 1402 -> One ([R 1830]) - | 3332 -> One ([R 1831]) - | 2629 -> One ([R 1832]) - | 470 -> One ([R 1833]) - | 1006 -> One ([R 1834]) - | 3800 -> One ([R 1835]) - | 2301 -> One ([R 1836]) - | 1099 -> One ([R 1837]) - | 3486 -> One ([R 1838]) - | 2644 -> One ([R 1839]) - | 2651 -> One ([R 1841]) - | 2647 -> One ([R 1843]) - | 2653 -> One ([R 1845]) - | 2855 -> One ([R 1847]) - | 2889 -> One ([R 1848]) - | 2668 -> One ([R 1849]) - | 1419 -> One ([R 1850]) - | 3133 -> One ([R 1851]) - | 2512 -> One ([R 1852]) - | 2181 -> One ([R 1853]) - | 764 -> One ([R 1854]) - | 1145 -> One ([R 1855]) - | 450 -> One ([R 1856]) - | 903 -> One ([R 1857]) - | 2188 -> One ([R 1858]) - | 3876 -> One ([R 1859]) - | 3934 -> One ([R 1860]) - | 2362 -> One ([R 1861]) - | 2183 -> One ([R 1862]) - | 703 -> One ([R 1863]) - | 3869 -> One ([R 1864]) - | 1545 -> One ([R 1865]) - | 3871 -> One ([R 1866]) - | 698 -> One ([R 1867]) - | 701 -> One ([R 1868]) - | 696 -> One ([R 1869]) - | 475 -> One ([R 1870]) - | 3874 -> One ([R 1871]) - | 4040 -> One ([R 1872]) - | 4008 -> One ([R 1873]) - | 473 -> One ([R 1874]) - | 477 -> One ([R 1875]) - | 474 -> One ([R 1876]) - | 3434 -> One ([R 1877]) - | 2185 -> One ([R 1878]) - | 257 -> One ([R 1879]) - | 3557 -> One ([R 1880]) - | 231 -> One ([R 1881]) - | 3886 -> One ([R 1882]) - | 1122 -> One ([R 1883]) - | 3534 -> One ([R 1884]) - | 75 -> One ([R 1885]) - | 1061 -> One ([R 1886]) - | 2773 -> One ([R 1887]) - | 1062 -> One ([R 1888]) - | 2713 -> One ([R 1889]) - | 1418 -> One ([R 1890]) - | 286 -> One ([R 1891]) - | 3559 -> One ([R 1892]) - | 3577 -> One ([R 1893]) - | 656 -> One ([R 1894]) - | 683 -> One ([R 1895]) - | 3463 -> One ([R 1896]) - | 2502 -> One ([R 1897]) - | 3532 -> One ([R 1898]) - | 363 -> One ([R 1899]) - | 1417 -> One ([R 1900]) - | 568 -> One ([R 1901]) - | 3639 -> One ([R 1902]) - | 2423 -> One ([R 1903]) - | 2422 -> One ([R 1904]) - | 334 -> One ([R 1905]) - | 1663 -> One ([R 1906]) - | 1652 -> One ([R 1907]) - | 1842 -> One ([R 1908]) - | 1841 -> One ([R 1909]) - | 1838 -> One ([R 1910]) - | 1837 -> One ([R 1911]) - | 1457 -> One ([R 1912]) - | 1206 -> One ([R 1913]) - | 3555 -> One ([R 1914]) - | 1111 -> One ([R 1915]) - | 1380 -> One ([R 1916]) - | 3868 -> One ([R 1917]) - | 3012 -> One ([R 1918]) - | 3561 -> One ([R 1919]) - | 2180 -> One ([R 1920]) - | 2802 -> One ([R 1921]) - | 2850 -> One ([R 1922]) - | 3725 -> One ([R 1923]) - | 2178 -> One ([R 1924]) - | 2803 -> One ([R 1925]) - | 2593 -> One ([R 1926]) - | 1172 -> One ([R 1927]) - | 1946 -> One ([R 1928]) - | 2480 -> One ([R 1929]) - | 3526 -> One ([R 1930]) - | 2187 -> One ([R 1931]) - | 2009 -> One ([R 1934]) - | 2008 -> One (R 1936 :: r1040) - | 2017 -> One ([R 1937]) - | 125 -> One ([R 1939]) - | 124 -> One ([R 1940]) - | 123 -> One ([R 1941]) - | 122 -> One ([R 1942]) - | 121 -> One ([R 1943]) - | 120 -> One ([R 1944]) - | 119 -> One ([R 1945]) - | 3722 -> One ([R 1946]) - | 2141 -> One ([R 1950]) - | 2137 -> One ([R 1951]) - | 2112 -> One ([R 1952]) - | 2094 -> One ([R 1953]) - | 2089 -> One ([R 1954]) - | 2085 -> One ([R 1955]) - | 2160 -> One ([R 1958]) - | 2623 -> One ([R 1959]) - | 2622 -> One ([R 1960]) - | 2621 -> One ([R 1961]) - | 2620 -> One ([R 1962]) - | 2619 -> One ([R 1963]) - | 2618 -> One ([R 1964]) - | 2163 -> One ([R 1968]) - | 2151 -> One ([R 1969]) - | 2153 -> One ([R 1970]) - | 2166 -> One ([R 1971]) - | 2164 -> One ([R 1972]) - | 2154 -> One ([R 1973]) - | 2158 -> One ([R 1974]) - | 2146 -> One ([R 1975]) - | 2165 -> One ([R 1976]) - | 2162 -> One ([R 1977]) - | 2149 -> One ([R 1978]) - | 2113 -> One ([R 1979]) - | 2145 -> One ([R 1980]) - | 2088 -> One ([R 1981]) - | 2090 -> One ([R 1982]) - | 2150 -> One ([R 1983]) - | 2157 -> One ([R 1984]) - | 3594 -> One ([R 1996]) - | 3991 -> One ([R 2005]) - | 621 -> One ([R 2009]) - | 623 -> One ([R 2010]) - | 622 -> One ([R 2011]) - | 620 -> One ([R 2012]) - | 619 -> One ([R 2013]) - | 618 -> One ([R 2014]) - | 600 -> One ([R 2015]) - | 599 -> One ([R 2016]) - | 598 -> One ([R 2017]) - | 597 -> One ([R 2018]) - | 596 -> One ([R 2019]) - | 595 -> One ([R 2020]) - | 593 -> One ([R 2021]) - | 1194 -> One ([R 2023]) - | 3070 -> One ([R 2024]) - | 3064 -> One ([R 2025]) - | 3065 -> One ([R 2026]) - | 3045 -> One ([R 2027]) - | 3056 -> One ([R 2028]) - | 3490 -> One ([R 2032]) - | 3041 -> One ([R 2033]) - | 2605 -> One ([R 2046]) - | 2601 -> One ([R 2047]) - | 2594 -> One ([R 2048]) - | 953 -> One ([R 2058]) - | 1306 -> One ([R 2061]) - | 1290 -> One ([R 2062]) - | 1291 -> One ([R 2063]) - | 1294 -> One ([R 2064]) - | 782 -> One ([R 2066]) - | 785 -> One ([R 2067]) - | 784 -> One ([R 2068]) - | 2159 -> One ([R 2088]) - | 2024 -> One ([R 2090]) - | 427 -> One ([R 2092]) - | 426 -> One ([R 2093]) - | 425 -> One ([R 2094]) - | 424 -> One ([R 2095]) - | 423 -> One ([R 2096]) - | 422 -> One ([R 2097]) - | 421 -> One ([R 2098]) - | 420 -> One ([R 2099]) - | 419 -> One ([R 2100]) - | 391 -> One ([R 2101]) - | 393 -> One ([R 2102]) - | 467 -> One ([R 2105]) - | 465 -> One ([R 2106]) - | 466 -> One ([R 2107]) - | 3690 -> One ([R 2111]) - | 3679 -> One ([R 2113]) - | 3641 -> One ([R 2115]) - | 3692 -> One ([R 2117]) - | 3691 -> One ([R 2118]) - | 3687 -> One ([R 2119]) - | 3680 -> One ([R 2120]) - | 3686 -> One ([R 2121]) - | 3683 -> One ([R 2123]) - | 3689 -> One ([R 2125]) - | 3688 -> One ([R 2126]) - | 3649 -> One ([R 2127]) - | 3642 -> One ([R 2128]) - | 3648 -> One ([R 2129]) - | 3645 -> One ([R 2131]) - | 3651 -> One ([R 2133]) - | 3650 -> One ([R 2134]) - | 3662 -> One ([R 2135]) - | 3661 -> One ([R 2137]) - | 3658 -> One ([R 2139]) - | 3676 -> One ([R 2141]) - | 3675 -> One ([R 2142]) - | 3672 -> One ([R 2143]) - | 3671 -> One ([R 2145]) - | 3668 -> One ([R 2147]) - | 3674 -> One ([R 2149]) - | 3673 -> One ([R 2150]) - | 416 -> One ([R 2153]) - | 2473 -> One ([R 2156]) - | 44 -> One ([R 2159]) - | 43 -> One ([R 2160]) - | 40 -> One ([R 2161]) - | 67 | 350 -> One ([R 2165]) - | 64 | 349 -> One ([R 2166]) - | 37 | 61 -> One ([R 2167]) - | 38 | 62 -> One ([R 2168]) - | 39 | 63 -> One ([R 2169]) - | 41 | 65 -> One ([R 2170]) - | 42 | 66 -> One ([R 2171]) - | 360 -> One ([R 2173]) - | 3697 -> One ([R 2176]) - | 3714 -> One ([R 2178]) - | 3694 -> One ([R 2180]) - | 3716 -> One ([R 2182]) - | 3715 -> One ([R 2183]) - | 3704 -> One ([R 2184]) - | 3709 -> One ([R 2186]) - | 3703 -> One ([R 2188]) - | 3711 -> One ([R 2190]) - | 3710 -> One ([R 2191]) - | 315 -> One ([R 2193]) - | 946 -> One ([R 2195]) - | 1010 | 1068 -> One ([R 2196]) - | 949 -> One ([R 2198]) - | 957 -> One ([R 2199]) - | 1927 -> One ([R 2218]) - | 1189 -> One ([R 2222]) - | 1188 -> One ([R 2223]) - | 1187 -> One ([R 2224]) - | 3181 -> One ([R 2235]) - | 3182 -> One ([R 2236]) - | 3183 -> One ([R 2237]) - | 3184 -> One ([R 2238]) - | 3186 -> One ([R 2239]) - | 3187 -> One ([R 2240]) - | 3188 -> One ([R 2241]) - | 3189 -> One ([R 2242]) - | 3190 -> One ([R 2243]) - | 3191 -> One ([R 2244]) - | 3192 -> One ([R 2245]) - | 3193 -> One ([R 2246]) - | 3194 -> One ([R 2247]) - | 3195 -> One ([R 2248]) - | 3196 -> One ([R 2249]) + | 2961 -> One ([R 1038]) + | 927 -> One ([R 1039]) + | 928 -> One ([R 1040]) + | 2064 -> One ([R 1041]) + | 2065 -> One ([R 1042]) + | 2360 -> One ([R 1043]) + | 2361 -> One ([R 1044]) + | 2810 -> One ([R 1045]) + | 2811 -> One ([R 1046]) + | 1116 -> One ([R 1047]) + | 1117 -> One ([R 1048]) + | 2886 -> One ([R 1049]) + | 2887 -> One ([R 1050]) + | 3447 -> One ([R 1051]) + | 3448 -> One ([R 1052]) + | 3369 -> One ([R 1053]) + | 3370 -> One ([R 1054]) + | 3153 -> One ([R 1055]) + | 3154 -> One ([R 1056]) + | 334 -> One ([R 1057]) + | 335 -> One ([R 1058]) + | 2047 -> One ([R 1059]) + | 2048 -> One ([R 1060]) + | 1086 -> One ([R 1061]) + | 1087 -> One ([R 1062]) + | 427 -> One ([R 1063]) + | 428 -> One ([R 1064]) + | 1588 -> One ([R 1065]) + | 1589 -> One ([R 1066]) + | 2231 -> One ([R 1068]) + | 3846 -> One ([R 1069]) + | 3847 -> One ([R 1070]) + | 204 -> One ([R 1071]) + | 205 -> One ([R 1072]) + | 2897 -> One ([R 1073]) + | 2898 -> One ([R 1074]) + | 2166 -> One ([R 1075]) + | 2167 -> One ([R 1076]) + | 3928 -> One ([R 1077]) + | 3929 -> One ([R 1078]) + | 633 -> One ([R 1079]) + | 656 -> One ([R 1080]) + | 3925 -> One ([R 1081]) + | 3926 -> One ([R 1082]) + | 2158 -> One ([R 1083]) + | 2159 -> One ([R 1084]) + | 431 -> One ([R 1085]) + | 433 -> One ([R 1086]) + | 2913 -> One ([R 1087]) + | 2914 -> One ([R 1088]) + | 2846 -> One ([R 1089]) + | 2854 -> One ([R 1090]) + | 2207 -> One ([R 1091]) + | 2220 -> One ([R 1092]) + | 95 -> One ([R 1093]) + | 96 -> One ([R 1094]) + | 609 -> One ([R 1095]) + | 610 -> One ([R 1096]) + | 2548 -> One ([R 1097]) + | 2549 -> One ([R 1098]) + | 2791 -> One ([R 1099]) + | 2815 -> One ([R 1100]) + | 422 -> One ([R 1102]) + | 3031 -> One ([R 1103]) + | 3032 -> One ([R 1104]) + | 1411 -> One ([R 1105]) + | 1412 -> One ([R 1106]) + | 2820 -> One ([R 1107]) + | 2821 -> One ([R 1108]) + | 2635 -> One ([R 1109]) + | 2638 -> One ([R 1110]) + | 502 -> One ([R 1111]) + | 503 -> One ([R 1112]) + | 961 -> One ([R 1113]) + | 962 -> One ([R 1114]) + | 2002 -> One ([R 1115]) + | 2003 -> One ([R 1116]) + | 2422 -> One ([R 1117]) + | 2423 -> One ([R 1118]) + | 2303 -> One ([R 1119]) + | 2304 -> One ([R 1120]) + | 1107 -> One ([R 1121]) + | 1108 -> One ([R 1122]) + | 3086 -> One ([R 1123]) + | 3087 -> One ([R 1124]) + | 2217 -> One ([R 1127]) + | 3644 -> One ([R 1130]) + | 3250 -> One ([R 1131]) + | 3226 -> One ([R 1132]) + | 2211 -> One ([R 1134]) + | 3728 -> One ([R 1136]) + | 3494 -> One ([R 1138]) + | 2461 -> One ([R 1143]) + | 2460 -> One ([R 1144]) + | 54 -> One ([R 1146]) + | 42 | 856 -> One ([R 1147]) + | 43 | 857 -> One ([R 1148]) + | 44 | 858 -> One ([R 1149]) + | 46 | 860 -> One ([R 1150]) + | 1234 -> One ([R 1155]) + | 1374 -> One ([R 1156]) + | 1942 -> One ([R 1159]) + | 653 -> One ([R 1162]) + | 2774 -> One ([R 1163]) + | 2780 -> One ([R 1164]) + | 2779 -> One ([R 1165]) + | 2469 -> One ([R 1166]) + | 306 -> One ([R 1167]) + | 308 -> One ([R 1168]) + | 255 -> One ([R 1169]) + | 252 -> One ([R 1170]) + | 849 -> One ([R 1175]) + | 816 -> One ([R 1176]) + | 810 -> One ([R 1177]) + | 808 -> One ([R 1179]) + | 941 -> One ([R 1183]) + | 939 -> One ([R 1185]) + | 935 -> One ([R 1186]) + | 3252 -> One ([R 1190]) + | 3118 -> One ([R 1191]) + | 2620 -> One ([R 1194]) + | 2439 -> One ([R 1196]) + | 2440 -> One ([R 1197]) + | 2254 -> One ([R 1198]) + | 2252 -> One ([R 1199]) + | 2253 -> One ([R 1200]) + | 2255 -> One ([R 1201]) + | 2680 -> One (R 1204 :: r1413) + | 2681 -> One ([R 1205]) + | 785 -> One (R 1206 :: r445) + | 1074 -> One (R 1206 :: r571) + | 1572 -> One (R 1206 :: r794) + | 1612 -> One (R 1206 :: r813) + | 1625 -> One (R 1206 :: r825) + | 1817 -> One (R 1206 :: r942) + | 1863 -> One (R 1206 :: r962) + | 1880 -> One (R 1206 :: r972) + | 1943 -> One (R 1206 :: r1000) + | 1977 -> One (R 1206 :: r1023) + | 786 -> One ([R 1207]) + | 702 -> One ([R 1209]) + | 1664 -> One (R 1210 :: r840) + | 1670 -> One (R 1210 :: r843) + | 2716 -> One (R 1210 :: r1443) + | 1665 -> One ([R 1211]) + | 1419 -> One (R 1212 :: r727) + | 1749 -> One (R 1212 :: r894) + | 2408 -> One (R 1212 :: r1242) + | 3730 -> One (R 1212 :: r1923) + | 1420 -> One ([R 1213]) + | 564 -> One (R 1214 :: r327) + | 1528 -> One (R 1214 :: r775) + | 251 -> One ([R 1215]) + | 313 -> One (R 1216 :: r194) + | 314 -> One ([R 1217]) + | 256 -> One (R 1218 :: r167) + | 257 -> One ([R 1219]) + | 753 -> One (R 1220 :: r425) + | 1643 -> One (R 1220 :: r833) + | 714 -> One ([R 1221]) + | 1634 -> One (R 1222 :: r829) + | 1637 -> One (R 1222 :: r830) + | 2957 -> One (R 1222 :: r1576) + | 1635 -> One ([R 1223]) + | 168 -> One (R 1224 :: r117) + | 181 -> One (R 1224 :: r122) + | 169 -> One ([R 1225]) + | 2133 -> One ([R 1227]) + | 677 -> One ([R 1229]) + | 593 -> One ([R 1231]) + | 316 -> One ([R 1233]) + | 89 -> One (R 1234 :: r54) + | 145 -> One (R 1234 :: r94) + | 90 -> One ([R 1235]) + | 1394 -> One (R 1236 :: r715) + | 2425 -> One (R 1236 :: r1249) + | 2429 -> One (R 1236 :: r1251) + | 2436 -> One (R 1236 :: r1253) + | 3785 -> One (R 1236 :: r1945) + | 756 -> One ([R 1237]) + | 1983 -> One (R 1238 :: r1025) + | 1984 -> One ([R 1239]) + | 2875 -> One (R 1240 :: r1539) + | 2879 -> One (R 1240 :: r1541) + | 2876 -> One ([R 1241]) + | 7 -> One (R 1242 :: r11) + | 15 -> One (R 1242 :: r15) + | 185 -> One (R 1242 :: r124) + | 194 -> One (R 1242 :: r132) + | 237 -> One (R 1242 :: r155) + | 361 -> One (R 1242 :: r220) + | 364 -> One (R 1242 :: r222) + | 548 -> One (R 1242 :: r319) + | 555 -> One (R 1242 :: r321) + | 571 -> One (R 1242 :: r331) + | 618 -> One (R 1242 :: r356) + | 789 -> One (R 1242 :: r447) + | 1090 -> One (R 1242 :: r577) + | 1094 -> One (R 1242 :: r586) + | 1118 -> One (R 1242 :: r592) + | 1201 -> One (R 1242 :: r620) + | 1378 -> One (R 1242 :: r698) + | 1454 -> One (R 1242 :: r741) + | 1464 -> One (R 1242 :: r747) + | 1469 -> One (R 1242 :: r749) + | 1472 -> One (R 1242 :: r751) + | 1492 -> One (R 1242 :: r766) + | 1606 -> One (R 1242 :: r811) + | 1615 -> One (R 1242 :: r815) + | 1618 -> One (R 1242 :: r819) + | 1730 -> One (R 1242 :: r880) + | 1744 -> One (R 1242 :: r888) + | 1753 -> One (R 1242 :: r896) + | 1762 -> One (R 1242 :: r901) + | 1765 -> One (R 1242 :: r903) + | 1768 -> One (R 1242 :: r905) + | 1771 -> One (R 1242 :: r907) + | 1774 -> One (R 1242 :: r909) + | 1819 -> One (R 1242 :: r943) + | 1823 -> One (R 1242 :: r945) + | 1839 -> One (R 1242 :: r956) + | 1844 -> One (R 1242 :: r958) + | 1868 -> One (R 1242 :: r965) + | 1873 -> One (R 1242 :: r968) + | 1882 -> One (R 1242 :: r973) + | 1884 -> One (R 1242 :: r975) + | 1888 -> One (R 1242 :: r977) + | 1945 -> One (R 1242 :: r1001) + | 1979 -> One (R 1242 :: r1024) + | 2021 -> One (R 1242 :: r1036) + | 2091 -> One (R 1242 :: r1064) + | 2127 -> One (R 1242 :: r1079) + | 2153 -> One (R 1242 :: r1092) + | 2750 -> One (R 1242 :: r1465) + | 8 -> One ([R 1243]) + | 542 -> One (R 1244 :: r311) + | 547 -> One (R 1244 :: r315) + | 1406 -> One (R 1244 :: r722) + | 1414 -> One (R 1244 :: r725) + | 2542 -> One (R 1244 :: r1337) + | 543 -> One ([R 1245]) + | 1989 -> One ([R 1247]) + | 1460 -> One (R 1248 :: r745) + | 1461 -> One ([R 1249]) + | 574 -> One ([R 1251]) + | 1661 -> One ([R 1253]) + | 3257 -> One ([R 1255]) + | 579 -> One (R 1256 :: r338) + | 625 -> One (R 1256 :: r362) + | 190 -> One ([R 1257]) + | 2106 -> One (R 1258 :: r1075) + | 2140 -> One (R 1258 :: r1087) + | 2144 -> One (R 1258 :: r1090) + | 3259 -> One (R 1258 :: r1739) + | 3262 -> One (R 1258 :: r1741) + | 2107 -> One ([R 1259]) + | 679 -> One (R 1260 :: r384) + | 682 -> One (R 1260 :: r386) + | 691 -> One (R 1260 :: r389) + | 1130 -> One (R 1260 :: r598) + | 1485 -> One (R 1260 :: r760) + | 1932 -> One (R 1260 :: r997) + | 2134 -> One (R 1260 :: r1084) + | 2226 -> One (R 1260 :: r1117) + | 2356 -> One (R 1260 :: r1205) + | 2589 -> One (R 1260 :: r1366) + | 680 -> One ([R 1261]) + | 2024 -> One (R 1262 :: r1039) + | 2313 -> One (R 1262 :: r1178) + | 2339 -> One (R 1262 :: r1196) + | 2745 -> One (R 1262 :: r1463) + | 771 -> One ([R 1263]) + | 2527 -> One ([R 1265]) + | 531 -> One (R 1266 :: r306) + | 532 -> One ([R 1267]) + | 222 -> One ([R 1269]) + | 2465 -> One (R 1270 :: r1270) + | 2466 -> One ([R 1271]) + | 2259 -> One (R 1272 :: r1143) + | 2269 -> One (R 1272 :: r1150) + | 2273 -> One (R 1272 :: r1153) + | 2277 -> One (R 1272 :: r1156) + | 2287 -> One (R 1272 :: r1167) + | 2295 -> One (R 1272 :: r1170) + | 2316 -> One (R 1272 :: r1181) + | 2330 -> One (R 1272 :: r1191) + | 2342 -> One (R 1272 :: r1199) + | 2249 -> One ([R 1273]) + | 82 -> One ([R 1275]) + | 2701 -> One ([R 1277]) + | 2354 -> One ([R 1279]) + | 1443 -> One (R 1280 :: r735) + | 1444 -> One ([R 1281]) + | 1580 -> One (R 1282 :: r800) + | 1581 -> One ([R 1283]) + | 367 -> One (R 1284 :: r226) + | 368 -> One ([R 1285]) + | 243 -> One (R 1286 :: r160) + | 244 -> One ([R 1287]) + | 435 -> One (R 1288 :: r260) + | 440 -> One (R 1288 :: r263) + | 444 -> One (R 1288 :: r266) + | 448 -> One (R 1288 :: r269) + | 436 -> One ([R 1289]) + | 349 -> One ([R 1291]) + | 712 -> One ([R 1295]) + | 3098 -> One (R 1296 :: r1660) + | 3099 -> One ([R 1297]) + | 1237 -> One (R 1298 :: r650) + | 1245 -> One (R 1298 :: r654) + | 1256 -> One (R 1298 :: r658) + | 1266 -> One (R 1298 :: r664) + | 1273 -> One (R 1298 :: r668) + | 1284 -> One (R 1298 :: r672) + | 1291 -> One (R 1298 :: r675) + | 1323 -> One (R 1298 :: r679) + | 1238 -> One ([R 1299]) + | 2934 -> One ([R 1301]) + | 1435 -> One ([R 1303]) + | 1143 -> One (R 1304 :: r603) + | 1195 -> One (R 1304 :: r619) + | 1251 -> One (R 1304 :: r657) + | 1279 -> One (R 1304 :: r671) + | 1297 -> One (R 1304 :: r678) + | 1329 -> One (R 1304 :: r682) + | 2947 -> One (R 1304 :: r1568) + | 2951 -> One (R 1304 :: r1570) + | 2954 -> One (R 1304 :: r1572) + | 2964 -> One (R 1304 :: r1578) + | 2969 -> One (R 1304 :: r1580) + | 2972 -> One (R 1304 :: r1582) + | 2977 -> One (R 1304 :: r1584) + | 2980 -> One (R 1304 :: r1586) + | 2985 -> One (R 1304 :: r1588) + | 2988 -> One (R 1304 :: r1590) + | 2992 -> One (R 1304 :: r1592) + | 2995 -> One (R 1304 :: r1594) + | 3000 -> One (R 1304 :: r1596) + | 3003 -> One (R 1304 :: r1598) + | 3024 -> One (R 1304 :: r1610) + | 3610 -> One (R 1304 :: r1874) + | 3617 -> One (R 1304 :: r1879) + | 597 -> One ([R 1305]) + | 1097 -> One ([R 1307]) + | 527 -> One (R 1308 :: r304) + | 2793 -> One (R 1308 :: r1495) + | 225 -> One ([R 1309]) + | 1916 -> One (R 1320 :: r986) + | 1906 -> One (R 1324 :: r981) + | 1914 -> One ([R 1325]) + | 2242 -> One (R 1328 :: r1127) + | 3850 -> One (R 1330 :: r1962) + | 598 -> One (R 1334 :: r347) + | 612 -> One ([R 1335]) + | 2688 -> One ([R 1337]) + | 2855 -> One ([R 1339]) + | 1431 -> One ([R 1341]) + | 3149 -> One ([R 1343]) + | 2535 -> One ([R 1345]) + | 2193 -> One ([R 1347]) + | 4089 -> One ([R 1349]) + | 23 -> One ([R 1351]) + | 14 -> One (R 1352 :: r13) + | 20 -> One ([R 1353]) + | 25 -> One ([R 1355]) + | 776 -> One ([R 1357]) + | 1158 -> One ([R 1359]) + | 490 -> One ([R 1361]) + | 915 -> One ([R 1363]) + | 2200 -> One ([R 1365]) + | 4067 -> One ([R 1367]) + | 2374 -> One ([R 1369]) + | 733 -> One ([R 1371]) + | 1816 -> One (R 1372 :: r941) + | 2195 -> One ([R 1376]) + | 743 -> One ([R 1378]) + | 3881 -> One ([R 1380]) + | 1564 -> One ([R 1382]) + | 3883 -> One ([R 1384]) + | 738 -> One ([R 1386]) + | 741 -> One ([R 1388]) + | 736 -> One ([R 1390]) + | 515 -> One ([R 1392]) + | 3884 -> One ([R 1394]) + | 3878 -> One ([R 1396]) + | 3903 -> One ([R 1398]) + | 3948 -> One ([R 1400]) + | 511 -> One ([R 1402]) + | 231 -> One ([R 1404]) + | 471 -> One ([R 1406]) + | 3440 -> One ([R 1408]) + | 2197 -> One ([R 1410]) + | 297 -> One ([R 1412]) + | 3569 -> One ([R 1414]) + | 21 -> One ([R 1416]) + | 271 -> One ([R 1418]) + | 4016 -> One ([R 1420]) + | 1134 -> One ([R 1422]) + | 540 -> One ([R 1424]) + | 539 -> One ([R 1425]) + | 326 -> One (R 1426 :: r200) + | 2055 -> One (R 1426 :: r1051) + | 327 -> One ([R 1427]) + | 328 -> One ([R 1428]) + | 1858 -> One ([R 1430]) + | 1855 -> One ([R 1431]) + | 1993 -> One (R 1432 :: r1030) + | 1998 -> One (R 1432 :: r1032) + | 1995 -> One ([R 1433]) + | 1994 -> One ([R 1434]) + | 3544 -> One ([R 1436]) + | 1220 -> One ([R 1495]) + | 1381 -> One (R 1498 :: r702) + | 1390 -> One ([R 1503]) + | 4004 -> One ([R 1505]) + | 3022 -> One ([R 1507]) + | 3571 -> One ([R 1509]) + | 2190 -> One ([R 1511]) + | 2812 -> One ([R 1513]) + | 2860 -> One ([R 1515]) + | 3734 -> One ([R 1517]) + | 2187 -> One ([R 1519]) + | 2796 -> One ([R 1521]) + | 2602 -> One ([R 1523]) + | 1180 -> One ([R 1525]) + | 1179 -> One ([R 1526]) + | 1955 -> One ([R 1528]) + | 2489 -> One ([R 1530]) + | 2764 -> One ([R 1532]) + | 1698 -> One ([R 1534]) + | 210 -> One ([R 1538]) + | 201 -> One ([R 1539]) + | 209 -> One ([R 1540]) + | 208 -> One ([R 1541]) + | 207 -> One ([R 1542]) + | 206 -> One ([R 1543]) + | 573 -> One ([R 1547]) + | 640 -> One ([R 1549]) + | 1862 -> One ([R 1557]) + | 3066 -> One ([R 1561]) + | 3065 -> One ([R 1563]) + | 3084 -> One ([R 1564]) + | 3083 -> One ([R 1565]) + | 3536 -> One ([R 1571]) + | 2121 -> One ([R 1575]) + | 2120 -> One ([R 1576]) + | 3280 -> One ([R 1577]) + | 3281 -> One ([R 1579]) + | 3283 -> One ([R 1580]) + | 2511 -> One ([R 1587]) + | 2235 -> One ([R 1588]) + | 3844 -> One ([R 1589]) + | 79 -> One ([R 1597]) + | 76 -> One ([R 1598]) + | 2365 -> One ([R 1609]) + | 559 | 872 | 3190 -> One ([R 1611]) + | 568 -> One ([R 1614]) + | 567 -> One ([R 1615]) + | 1622 -> One ([R 1616]) + | 1610 -> One ([R 1618]) + | 3017 -> One ([R 1625]) + | 3016 -> One ([R 1626]) + | 2737 -> One ([R 1630]) + | 2736 -> One ([R 1631]) + | 3556 -> One ([R 1632]) + | 3565 -> One ([R 1634]) + | 3550 -> One ([R 1636]) + | 3558 -> One ([R 1638]) + | 3557 -> One ([R 1639]) + | 3555 -> One ([R 1640]) + | 3547 -> One ([R 1642]) + | 3560 -> One ([R 1644]) + | 3559 -> One ([R 1645]) + | 3579 -> One ([R 1646]) + | 3582 -> One ([R 1648]) + | 3574 -> One ([R 1650]) + | 3578 -> One ([R 1652]) + | 1322 -> One ([R 1668]) + | 1255 -> One ([R 1676]) + | 1231 -> One ([R 1677]) + | 1283 -> One ([R 1678]) + | 1265 -> One ([R 1679]) + | 1331 -> One ([R 1684]) + | 1253 -> One ([R 1685]) + | 1299 -> One ([R 1686]) + | 1281 -> One ([R 1687]) + | 1254 -> One ([R 1688]) + | 1230 -> One ([R 1689]) + | 1282 -> One ([R 1690]) + | 1264 -> One ([R 1691]) + | 1328 -> One ([R 1696]) + | 1250 -> One ([R 1697]) + | 1296 -> One ([R 1698]) + | 1278 -> One ([R 1699]) + | 1261 -> One ([R 1704]) + | 1243 -> One ([R 1705]) + | 1289 -> One ([R 1706]) + | 1271 -> One ([R 1707]) + | 1911 -> One ([R 1716]) + | 1908 -> One ([R 1717]) + | 2077 -> One ([R 1718]) + | 2079 -> One ([R 1719]) + | 2078 -> One ([R 1720]) + | 2075 -> One ([R 1721]) + | 2010 -> One ([R 1723]) + | 2018 -> One ([R 1724]) + | 2013 -> One ([R 1725]) + | 2017 -> One ([R 1726]) + | 2011 -> One ([R 1727]) + | 2006 -> One ([R 1728]) + | 2053 -> One ([R 1729]) + | 2015 -> One ([R 1730]) + | 2066 -> One ([R 1731]) + | 2005 -> One ([R 1732]) + | 2004 -> One ([R 1733]) + | 2009 -> One ([R 1734]) + | 2016 -> One ([R 1735]) + | 2054 -> One ([R 1736]) + | 2012 -> One ([R 1737]) + | 2001 -> One ([R 1738]) + | 1886 -> One ([R 1744]) + | 1931 -> One ([R 1747]) + | 1930 -> One ([R 1748]) + | 1929 -> One ([R 1749]) + | 1928 -> One ([R 1750]) + | 2720 -> One ([R 1764]) + | 3587 -> One ([R 1768]) + | 3586 -> One ([R 1770]) + | 2801 -> One (R 1773 :: r1496) + | 2805 -> One ([R 1774]) + | 2809 -> One ([R 1775]) + | 3594 -> One ([R 1776]) + | 3593 -> One ([R 1778]) + | 3590 -> One ([R 1780]) + | 3596 -> One ([R 1782]) + | 3595 -> One ([R 1783]) + | 2883 -> One ([R 1784]) + | 1425 -> One ([R 1785]) + | 1784 -> One ([R 1786]) + | 1807 -> One ([R 1787]) + | 1566 -> One ([R 1788]) + | 2070 -> One ([R 1789]) + | 2183 -> One ([R 1790]) + | 1535 -> One ([R 1791]) + | 1803 -> One ([R 1792]) + | 1658 -> One ([R 1793]) + | 1690 -> One ([R 1794]) + | 128 -> One ([R 1795]) + | 4009 -> One ([R 1796]) + | 727 -> One ([R 1797]) + | 309 -> One ([R 1798]) + | 2080 -> One ([R 1799]) + | 2084 -> One ([R 1800]) + | 2067 -> One ([R 1801]) + | 732 -> One ([R 1802]) + | 728 -> One ([R 1803]) + | 2180 -> One ([R 1804]) + | 3858 -> One ([R 1805]) + | 3843 -> One ([R 1806]) + | 1600 -> One ([R 1807]) + | 3838 -> One ([R 1808]) + | 1796 -> One ([R 1809]) + | 2310 -> One ([R 1810]) + | 669 -> One ([R 1811]) + | 889 -> One ([R 1812]) + | 2062 -> One ([R 1813]) + | 2359 -> One ([R 1814]) + | 2800 -> One ([R 1815]) + | 1114 | 2659 -> One ([R 1816]) + | 2871 -> One ([R 1817]) + | 3446 -> One ([R 1818]) + | 3368 -> One ([R 1819]) + | 3152 -> One ([R 1820]) + | 331 -> One ([R 1821]) + | 2046 -> One ([R 1822]) + | 1084 -> One ([R 1823]) + | 426 -> One ([R 1824]) + | 1587 -> One ([R 1825]) + | 3845 -> One ([R 1826]) + | 211 -> One ([R 1827]) + | 2899 -> One ([R 1828]) + | 3934 -> One ([R 1829]) + | 665 -> One ([R 1830]) + | 3933 -> One ([R 1831]) + | 470 -> One ([R 1832]) + | 2916 -> One ([R 1833]) + | 2857 -> One ([R 1834]) + | 3864 -> One ([R 1835]) + | 93 -> One ([R 1836]) + | 608 -> One ([R 1837]) + | 2550 -> One ([R 1838]) + | 2816 -> One ([R 1839]) + | 424 -> One ([R 1840]) + | 3033 -> One ([R 1841]) + | 1413 -> One ([R 1842]) + | 3343 -> One ([R 1843]) + | 2640 -> One ([R 1844]) + | 509 -> One ([R 1845]) + | 1017 -> One ([R 1846]) + | 3811 -> One ([R 1847]) + | 2312 -> One ([R 1848]) + | 1110 -> One ([R 1849]) + | 3497 -> One ([R 1850]) + | 2655 -> One ([R 1851]) + | 2662 -> One ([R 1853]) + | 2658 -> One ([R 1855]) + | 2664 -> One ([R 1857]) + | 2866 -> One ([R 1859]) + | 2900 -> One ([R 1860]) + | 2679 -> One ([R 1861]) + | 1430 -> One ([R 1862]) + | 3144 -> One ([R 1863]) + | 2523 -> One ([R 1864]) + | 2192 -> One ([R 1865]) + | 775 -> One ([R 1866]) + | 1156 -> One ([R 1867]) + | 489 -> One ([R 1868]) + | 914 -> One ([R 1869]) + | 2199 -> One ([R 1870]) + | 4057 -> One ([R 1871]) + | 2373 -> One ([R 1872]) + | 2194 -> One ([R 1873]) + | 742 -> One ([R 1874]) + | 3880 -> One ([R 1875]) + | 1556 -> One ([R 1876]) + | 3882 -> One ([R 1877]) + | 737 -> One ([R 1878]) + | 740 -> One ([R 1879]) + | 735 -> One ([R 1880]) + | 514 -> One ([R 1881]) + | 3885 -> One ([R 1882]) + | 3879 -> One ([R 1883]) + | 3949 -> One ([R 1884]) + | 512 -> One ([R 1885]) + | 516 -> One ([R 1886]) + | 513 -> One ([R 1887]) + | 3445 -> One ([R 1888]) + | 2196 -> One ([R 1889]) + | 296 -> One ([R 1890]) + | 3568 -> One ([R 1891]) + | 270 -> One ([R 1892]) + | 4015 -> One ([R 1893]) + | 1133 -> One ([R 1894]) + | 3545 -> One ([R 1895]) + | 71 -> One ([R 1896]) + | 1072 -> One ([R 1897]) + | 2784 -> One ([R 1898]) + | 1073 -> One ([R 1899]) + | 2724 -> One ([R 1900]) + | 1429 -> One ([R 1901]) + | 325 -> One ([R 1902]) + | 3570 -> One ([R 1903]) + | 3588 -> One ([R 1904]) + | 695 -> One ([R 1905]) + | 722 -> One ([R 1906]) + | 3474 -> One ([R 1907]) + | 2513 -> One ([R 1908]) + | 3543 -> One ([R 1909]) + | 402 -> One ([R 1910]) + | 1428 -> One ([R 1911]) + | 607 -> One ([R 1912]) + | 3650 -> One ([R 1913]) + | 2434 -> One ([R 1914]) + | 2433 -> One ([R 1915]) + | 373 -> One ([R 1916]) + | 1674 -> One ([R 1917]) + | 1663 -> One ([R 1918]) + | 1853 -> One ([R 1919]) + | 1852 -> One ([R 1920]) + | 1849 -> One ([R 1921]) + | 1848 -> One ([R 1922]) + | 1468 -> One ([R 1923]) + | 1217 -> One ([R 1924]) + | 3566 -> One ([R 1925]) + | 1122 -> One ([R 1926]) + | 1391 -> One ([R 1927]) + | 4005 -> One ([R 1928]) + | 3023 -> One ([R 1929]) + | 3572 -> One ([R 1930]) + | 2191 -> One ([R 1931]) + | 2813 -> One ([R 1932]) + | 2861 -> One ([R 1933]) + | 3736 -> One ([R 1934]) + | 2189 -> One ([R 1935]) + | 2814 -> One ([R 1936]) + | 2604 -> One ([R 1937]) + | 1183 -> One ([R 1938]) + | 1957 -> One ([R 1939]) + | 2491 -> One ([R 1940]) + | 3537 -> One ([R 1941]) + | 2198 -> One ([R 1942]) + | 2020 -> One ([R 1945]) + | 2019 -> One (R 1947 :: r1034) + | 2028 -> One ([R 1948]) + | 165 -> One ([R 1950]) + | 164 -> One ([R 1951]) + | 163 -> One ([R 1952]) + | 162 -> One ([R 1953]) + | 161 -> One ([R 1954]) + | 160 -> One ([R 1955]) + | 159 -> One ([R 1956]) + | 3733 -> One ([R 1957]) + | 2152 -> One ([R 1961]) + | 2148 -> One ([R 1962]) + | 2123 -> One ([R 1963]) + | 2105 -> One ([R 1964]) + | 2100 -> One ([R 1965]) + | 2096 -> One ([R 1966]) + | 2171 -> One ([R 1969]) + | 2634 -> One ([R 1970]) + | 2633 -> One ([R 1971]) + | 2632 -> One ([R 1972]) + | 2631 -> One ([R 1973]) + | 2630 -> One ([R 1974]) + | 2629 -> One ([R 1975]) + | 2174 -> One ([R 1979]) + | 2162 -> One ([R 1980]) + | 2164 -> One ([R 1981]) + | 2177 -> One ([R 1982]) + | 2175 -> One ([R 1983]) + | 2165 -> One ([R 1984]) + | 2169 -> One ([R 1985]) + | 2157 -> One ([R 1986]) + | 2176 -> One ([R 1987]) + | 2173 -> One ([R 1988]) + | 2160 -> One ([R 1989]) + | 2124 -> One ([R 1990]) + | 2156 -> One ([R 1991]) + | 2099 -> One ([R 1992]) + | 2101 -> One ([R 1993]) + | 2161 -> One ([R 1994]) + | 2168 -> One ([R 1995]) + | 3605 -> One ([R 2007]) + | 3932 -> One ([R 2016]) + | 660 -> One ([R 2020]) + | 662 -> One ([R 2021]) + | 661 -> One ([R 2022]) + | 659 -> One ([R 2023]) + | 658 -> One ([R 2024]) + | 657 -> One ([R 2025]) + | 639 -> One ([R 2026]) + | 638 -> One ([R 2027]) + | 637 -> One ([R 2028]) + | 636 -> One ([R 2029]) + | 635 -> One ([R 2030]) + | 634 -> One ([R 2031]) + | 632 -> One ([R 2032]) + | 1205 -> One ([R 2034]) + | 3081 -> One ([R 2035]) + | 3075 -> One ([R 2036]) + | 3076 -> One ([R 2037]) + | 3056 -> One ([R 2038]) + | 3067 -> One ([R 2039]) + | 3501 -> One ([R 2043]) + | 3052 -> One ([R 2044]) + | 2616 -> One ([R 2057]) + | 2612 -> One ([R 2058]) + | 2605 -> One ([R 2059]) + | 964 -> One ([R 2069]) + | 1317 -> One ([R 2072]) + | 1301 -> One ([R 2073]) + | 1302 -> One ([R 2074]) + | 1305 -> One ([R 2075]) + | 793 -> One ([R 2077]) + | 796 -> One ([R 2078]) + | 795 -> One ([R 2079]) + | 2170 -> One ([R 2099]) + | 2035 -> One ([R 2101]) + | 466 -> One ([R 2103]) + | 465 -> One ([R 2104]) + | 464 -> One ([R 2105]) + | 463 -> One ([R 2106]) + | 462 -> One ([R 2107]) + | 461 -> One ([R 2108]) + | 460 -> One ([R 2109]) + | 459 -> One ([R 2110]) + | 458 -> One ([R 2111]) + | 430 -> One ([R 2112]) + | 432 -> One ([R 2113]) + | 506 -> One ([R 2116]) + | 504 -> One ([R 2117]) + | 505 -> One ([R 2118]) + | 3701 -> One ([R 2122]) + | 3690 -> One ([R 2124]) + | 3652 -> One ([R 2126]) + | 3703 -> One ([R 2128]) + | 3702 -> One ([R 2129]) + | 3698 -> One ([R 2130]) + | 3691 -> One ([R 2131]) + | 3697 -> One ([R 2132]) + | 3694 -> One ([R 2134]) + | 3700 -> One ([R 2136]) + | 3699 -> One ([R 2137]) + | 3660 -> One ([R 2138]) + | 3653 -> One ([R 2139]) + | 3659 -> One ([R 2140]) + | 3656 -> One ([R 2142]) + | 3662 -> One ([R 2144]) + | 3661 -> One ([R 2145]) + | 3673 -> One ([R 2146]) + | 3672 -> One ([R 2148]) + | 3669 -> One ([R 2150]) + | 3687 -> One ([R 2152]) + | 3686 -> One ([R 2153]) + | 3683 -> One ([R 2154]) + | 3682 -> One ([R 2156]) + | 3679 -> One ([R 2158]) + | 3685 -> One ([R 2160]) + | 3684 -> One ([R 2161]) + | 455 -> One ([R 2164]) + | 2484 -> One ([R 2167]) + | 40 -> One ([R 2170]) + | 39 -> One ([R 2171]) + | 36 -> One ([R 2172]) + | 63 | 389 -> One ([R 2176]) + | 60 | 388 -> One ([R 2177]) + | 33 | 57 -> One ([R 2178]) + | 34 | 58 -> One ([R 2179]) + | 35 | 59 -> One ([R 2180]) + | 37 | 61 -> One ([R 2181]) + | 38 | 62 -> One ([R 2182]) + | 399 -> One ([R 2184]) + | 3708 -> One ([R 2187]) + | 3725 -> One ([R 2189]) + | 3705 -> One ([R 2191]) + | 3727 -> One ([R 2193]) + | 3726 -> One ([R 2194]) + | 3715 -> One ([R 2195]) + | 3720 -> One ([R 2197]) + | 3714 -> One ([R 2199]) + | 3722 -> One ([R 2201]) + | 3721 -> One ([R 2202]) + | 354 -> One ([R 2204]) + | 957 -> One ([R 2206]) + | 1021 | 1079 -> One ([R 2207]) + | 960 -> One ([R 2209]) + | 968 -> One ([R 2210]) + | 1938 -> One ([R 2229]) + | 1200 -> One ([R 2233]) + | 1199 -> One ([R 2234]) + | 1198 -> One ([R 2235]) + | 3192 -> One ([R 2246]) + | 3193 -> One ([R 2247]) + | 3194 -> One ([R 2248]) + | 3195 -> One ([R 2249]) | 3197 -> One ([R 2250]) | 3198 -> One ([R 2251]) | 3199 -> One ([R 2252]) @@ -6618,24 +6652,24 @@ let recover = | 3204 -> One ([R 2257]) | 3205 -> One ([R 2258]) | 3206 -> One ([R 2259]) - | 3208 -> One ([R 2260]) - | 3209 -> One ([R 2261]) - | 3210 -> One ([R 2262]) - | 3211 -> One ([R 2263]) - | 3212 -> One ([R 2264]) - | 3213 -> One ([R 2265]) - | 3214 -> One ([R 2266]) - | 3218 -> One ([R 2267]) - | 3219 -> One ([R 2268]) - | 3220 -> One ([R 2269]) - | 3221 -> One ([R 2270]) - | 3222 -> One ([R 2271]) - | 3223 -> One ([R 2272]) - | 3224 -> One ([R 2273]) - | 3225 -> One ([R 2274]) - | 3226 -> One ([R 2275]) - | 3227 -> One ([R 2276]) - | 3228 -> One ([R 2277]) + | 3207 -> One ([R 2260]) + | 3208 -> One ([R 2261]) + | 3209 -> One ([R 2262]) + | 3210 -> One ([R 2263]) + | 3211 -> One ([R 2264]) + | 3212 -> One ([R 2265]) + | 3213 -> One ([R 2266]) + | 3214 -> One ([R 2267]) + | 3215 -> One ([R 2268]) + | 3216 -> One ([R 2269]) + | 3217 -> One ([R 2270]) + | 3219 -> One ([R 2271]) + | 3220 -> One ([R 2272]) + | 3221 -> One ([R 2273]) + | 3222 -> One ([R 2274]) + | 3223 -> One ([R 2275]) + | 3224 -> One ([R 2276]) + | 3225 -> One ([R 2277]) | 3229 -> One ([R 2278]) | 3230 -> One ([R 2279]) | 3231 -> One ([R 2280]) @@ -6646,707 +6680,731 @@ let recover = | 3236 -> One ([R 2285]) | 3237 -> One ([R 2286]) | 3238 -> One ([R 2287]) - | 3770 -> One ([R 2291]) - | 3797 -> One ([R 2293]) - | 3769 -> One ([R 2295]) - | 3799 -> One ([R 2297]) - | 3798 -> One ([R 2298]) - | 3761 -> One ([R 2299]) - | 3764 -> One ([R 2301]) - | 3760 -> One ([R 2303]) - | 3766 -> One ([R 2305]) - | 3765 -> One ([R 2306]) - | 3789 -> One ([R 2307]) - | 3792 -> One ([R 2309]) - | 3788 -> One ([R 2311]) - | 3794 -> One ([R 2313]) - | 3793 -> One ([R 2314]) - | 3780 -> One ([R 2315]) - | 3783 -> One ([R 2317]) - | 3779 -> One ([R 2319]) - | 3785 -> One ([R 2321]) - | 3784 -> One ([R 2322]) - | 3416 -> One ([R 2327]) - | 3415 -> One ([R 2328]) - | 3418 -> One ([R 2329]) - | 3417 -> One ([R 2330]) - | 1152 -> One ([R 2332]) - | 1131 -> One ([R 2333]) - | 1116 -> One ([R 2334]) - | 1166 -> One ([R 2335]) - | 1137 -> One ([R 2340]) - | 1136 -> One ([R 2341]) - | 1135 -> One ([R 2342]) - | 1130 -> One ([R 2348]) - | 1165 -> One ([R 2353]) - | 1164 -> One ([R 2354]) - | 1163 -> One ([R 2355]) - | 1160 -> One ([R 2356]) - | 1159 -> One ([R 2357]) - | 1158 -> One ([R 2358]) - | 1157 -> One ([R 2359]) - | 1156 -> One ([R 2360]) - | 1153 -> One ([R 2361]) - | 1154 -> One ([R 2362]) - | 1155 -> One ([R 2363]) - | 1162 -> One ([R 2364]) - | 1161 -> One ([R 2365]) - | 1501 -> One ([R 2367]) - | 2838 -> One ([R 2395]) - | 2208 -> One ([R 2397]) - | 1540 -> One ([R 2402]) - | 1532 -> One ([R 2403]) - | 1531 -> One ([R 2404]) - | 1526 -> One ([R 2405]) - | 1511 -> One ([R 2406]) - | 1497 -> One ([R 2407]) - | 1499 -> One ([R 2408]) - | 1094 -> One ([R 2409]) - | 1095 -> One ([R 2410]) - | 1093 -> One ([R 2411]) - | 3564 -> One ([R 2421]) - | 2721 -> One ([R 2422]) - | 2390 -> One ([R 2425]) - | 551 -> One ([R 2431]) - | 10 -> One ([R 2436]) - | 3814 -> One ([R 2439]) - | 3823 -> One ([R 2441]) - | 3806 -> One ([R 2443]) - | 3816 -> One ([R 2445]) - | 3815 -> One ([R 2446]) - | 3813 -> One ([R 2447]) - | 3802 -> One ([R 2449]) - | 3818 -> One ([R 2451]) - | 3817 -> One ([R 2452]) - | 1192 -> One (S (T T_WHEN) :: r628) - | 1211 -> One (S (T T_WHEN) :: r644) - | 1439 -> One (S (T T_WHEN) :: r745) - | 743 -> One (S (T T_VARYING) :: r438) - | 555 -> One (S (T T_USING) :: r321) - | 2754 -> One (S (T T_UNTIL) :: r1479) - | 2602 -> One (S (T T_TO) :: r1381) - | 2613 -> One (S (T T_TO) :: r1388) - | 2638 -> One (S (T T_TO) :: r1403) - | 2649 -> One (S (T T_TO) :: r1408) - | 3156 -> One (S (T T_TO) :: r1712) - | 3158 -> One (S (T T_TO) :: r1713) - | 2381 -> One (S (T T_TIMES) :: r1233) - | 3530 -> One (S (T T_TIMES) :: r1863) - | 3066 -> One (S (T T_THROUGH) :: r1654) - | 3527 -> One (S (T T_TEST) :: r1862) - | 3085 -> One (S (T T_TERMINAL) :: r1665) - | 297 -> One (S (T T_TABLE) :: r181) - | 341 -> One (S (T T_STATUS) :: r211) - | 602 -> One (S (T T_STATUS) :: r342) - | 538 -> One (S (T T_SEQUENTIAL) :: r309) - | 606 -> One (S (T T_SEQUENCE) :: r345) - | 2521 -> One (S (T T_SEQUENCE) :: r1334) - | 2998 -> One (S (T T_SENTENCE) :: r1610) - | 3001 -> One (S (T T_SENTENCE) :: r1612) - | 3587 -> One (S (T T_SENTENCE) :: r1874) - | 3617 -> One (S (T T_SENTENCE) :: r1893) - | 3628 -> One (S (T T_SENTENCE) :: r1904) + | 3239 -> One ([R 2288]) + | 3240 -> One ([R 2289]) + | 3241 -> One ([R 2290]) + | 3242 -> One ([R 2291]) + | 3243 -> One ([R 2292]) + | 3244 -> One ([R 2293]) + | 3245 -> One ([R 2294]) + | 3246 -> One ([R 2295]) + | 3247 -> One ([R 2296]) + | 3248 -> One ([R 2297]) + | 3249 -> One ([R 2298]) + | 3781 -> One ([R 2302]) + | 3808 -> One ([R 2304]) + | 3780 -> One ([R 2306]) + | 3810 -> One ([R 2308]) + | 3809 -> One ([R 2309]) + | 3772 -> One ([R 2310]) + | 3775 -> One ([R 2312]) + | 3771 -> One ([R 2314]) + | 3777 -> One ([R 2316]) + | 3776 -> One ([R 2317]) + | 3800 -> One ([R 2318]) + | 3803 -> One ([R 2320]) + | 3799 -> One ([R 2322]) + | 3805 -> One ([R 2324]) + | 3804 -> One ([R 2325]) + | 3791 -> One ([R 2326]) + | 3794 -> One ([R 2328]) + | 3790 -> One ([R 2330]) + | 3796 -> One ([R 2332]) + | 3795 -> One ([R 2333]) + | 3427 -> One ([R 2338]) + | 3426 -> One ([R 2339]) + | 3429 -> One ([R 2340]) + | 3428 -> One ([R 2341]) + | 1163 -> One ([R 2343]) + | 1142 -> One ([R 2344]) + | 1127 -> One ([R 2345]) + | 1177 -> One ([R 2346]) + | 1148 -> One ([R 2351]) + | 1147 -> One ([R 2352]) + | 1146 -> One ([R 2353]) + | 1141 -> One ([R 2359]) + | 1176 -> One ([R 2364]) + | 1175 -> One ([R 2365]) + | 1174 -> One ([R 2366]) + | 1171 -> One ([R 2367]) + | 1170 -> One ([R 2368]) + | 1169 -> One ([R 2369]) + | 1168 -> One ([R 2370]) + | 1167 -> One ([R 2371]) + | 1164 -> One ([R 2372]) + | 1165 -> One ([R 2373]) + | 1166 -> One ([R 2374]) + | 1173 -> One ([R 2375]) + | 1172 -> One ([R 2376]) + | 1512 -> One ([R 2378]) + | 2849 -> One ([R 2406]) + | 2219 -> One ([R 2408]) + | 1551 -> One ([R 2413]) + | 1543 -> One ([R 2414]) + | 1542 -> One ([R 2415]) + | 1537 -> One ([R 2416]) + | 1522 -> One ([R 2417]) + | 1508 -> One ([R 2418]) + | 1510 -> One ([R 2419]) + | 1105 -> One ([R 2420]) + | 1106 -> One ([R 2421]) + | 1104 -> One ([R 2422]) + | 3575 -> One ([R 2432]) + | 2732 -> One ([R 2433]) + | 2401 -> One ([R 2436]) + | 590 -> One ([R 2442]) + | 10 -> One ([R 2447]) + | 3825 -> One ([R 2450]) + | 3834 -> One ([R 2452]) + | 3817 -> One ([R 2454]) + | 3827 -> One ([R 2456]) + | 3826 -> One ([R 2457]) + | 3824 -> One ([R 2458]) + | 3813 -> One ([R 2460]) + | 3829 -> One ([R 2462]) + | 3828 -> One ([R 2463]) + | 1203 -> One (S (T T_WHEN) :: r622) + | 1222 -> One (S (T T_WHEN) :: r638) + | 1450 -> One (S (T T_WHEN) :: r739) + | 754 -> One (S (T T_VARYING) :: r432) + | 594 -> One (S (T T_USING) :: r344) + | 2765 -> One (S (T T_UNTIL) :: r1473) + | 2613 -> One (S (T T_TO) :: r1375) + | 2624 -> One (S (T T_TO) :: r1382) + | 2649 -> One (S (T T_TO) :: r1397) + | 2660 -> One (S (T T_TO) :: r1402) + | 3167 -> One (S (T T_TO) :: r1706) + | 3169 -> One (S (T T_TO) :: r1707) + | 2392 -> One (S (T T_TIMES) :: r1227) + | 3541 -> One (S (T T_TIMES) :: r1857) + | 3077 -> One (S (T T_THROUGH) :: r1648) + | 3538 -> One (S (T T_TEST) :: r1856) + | 3096 -> One (S (T T_TERMINAL) :: r1659) + | 336 -> One (S (T T_TABLE) :: r204) + | 380 -> One (S (T T_STATUS) :: r234) + | 641 -> One (S (T T_STATUS) :: r365) + | 577 -> One (S (T T_SEQUENTIAL) :: r332) + | 645 -> One (S (T T_SEQUENCE) :: r368) + | 2532 -> One (S (T T_SEQUENCE) :: r1328) + | 3009 -> One (S (T T_SENTENCE) :: r1604) + | 3012 -> One (S (T T_SENTENCE) :: r1606) + | 3598 -> One (S (T T_SENTENCE) :: r1868) + | 3628 -> One (S (T T_SENTENCE) :: r1887) + | 3639 -> One (S (T T_SENTENCE) :: r1898) | 4 -> One (S (T T_SECTION) :: r7) - | 177 -> One (S (T T_SECTION) :: r120) - | 479 -> One (S (T T_SECTION) :: r270) - | 737 -> One (S (T T_SECTION) :: r424) - | 1683 -> One (S (T T_SECTION) :: r857) - | 1689 -> One (S (T T_SECTION) :: r860) - | 1694 -> One (S (T T_SECTION) :: r863) - | 1699 -> One (S (T T_SECTION) :: r866) - | 1800 -> One (S (T T_SECTION) :: r934) - | 2075 -> One (S (T T_SECTION) :: r1065) - | 825 -> One (S (T T_RPAR) :: r470) - | 873 -> One (S (T T_RPAR) :: r502) - | 876 -> One (S (T T_RPAR) :: r503) - | 1004 -> One (S (T T_RPAR) :: r554) - | 1036 -> One (S (T T_RPAR) :: r565) - | 116 -> One (S (T T_ROUNDING) :: r87) - | 148 -> One (S (T T_ROUNDED) :: r105) - | 2795 -> One (S (T T_REWIND) :: r1505) - | 3135 -> One (S (T T_REWIND) :: r1697) - | 1959 -> One (S (T T_RESET) :: r1024) - | 1546 -> One (S (T T_RENAMES) :: r786) - | 3126 -> One (S (T T_REMOVAL) :: r1694) - | 1117 -> One (S (T T_REFERENCE) :: r603) - | 2197 -> One (S (T T_REFERENCE) :: r1115) - | 2839 -> One (S (T T_REFERENCE) :: r1532) - | 574 -> One (S (T T_RECORD) :: r331) - | 1465 | 1537 -> One (S (T T_RECORD) :: r758) - | 1750 -> One (S (T T_QUEUE) :: r905) - | 95 -> One (S (T T_PROTOTYPE) :: r62) - | 712 -> One (S (T T_PROPERTY) :: r406) - | 720 -> One (S (T T_PROPERTY) :: r411) - | 2342 -> One (S (T T_PROCEDURES) :: r1210) - | 2493 -> One (S (T T_PROCEDURE) :: r1318) - | 2504 -> One (S (T T_PROCEDURE) :: r1327) - | 3698 -> One (S (T T_POINTER) :: r1923) - | 3771 -> One (S (T T_POINTER) :: r1949) - | 335 -> One (S (T T_PICTURE) :: r208) - | 32 -> One (S (T T_PERIOD) :: r43) - | 98 -> One (S (T T_PERIOD) :: r69) - | 114 -> One (S (T T_PERIOD) :: r82) - | 162 -> One (S (T T_PERIOD) :: r110) - | 180 -> One (S (T T_PERIOD) :: r122) - | 193 -> One (S (T T_PERIOD) :: r128) - | 272 -> One (S (T T_PERIOD) :: r167) - | 428 -> One (S (T T_PERIOD) :: r247) - | 434 -> One (S (T T_PERIOD) :: r248) - | 468 -> One (S (T T_PERIOD) :: r266) - | 482 -> One (S (T T_PERIOD) :: r272) - | 632 -> One (S (T T_PERIOD) :: r351) - | 2222 -> One (S (T T_PERIOD) :: r1129) - | 3825 -> One (S (T T_PERIOD) :: r1963) - | 3849 -> One (S (T T_PERIOD) :: r1972) - | 3858 -> One (S (T T_PERIOD) :: r1975) - | 3994 -> One (S (T T_PERIOD) :: r2061) - | 4002 -> One (S (T T_PERIOD) :: r2064) - | 4028 -> One (S (T T_PERIOD) :: r2065) - | 1908 -> One (S (T T_PAGE) :: r995) - | 1957 -> One (S (T T_PAGE) :: r1023) - | 3480 -> One (S (T T_OTHER) :: r1846) - | 490 -> One (S (T T_ONLY) :: r282) - | 1323 -> One (S (T T_OMITTED) :: r690) - | 1618 -> One (S (T T_OMITTED) :: r832) - | 2836 -> One (S (T T_OMITTED) :: r1531) - | 842 -> One (S (T T_OF) :: r480) - | 925 -> One (S (T T_OF) :: r526) - | 1592 -> One (S (T T_OF) :: r813) - | 1734 -> One (S (T T_OCCURS) :: r898) - | 3106 -> One (S (T T_NOT_ON_EXCEPTION) :: r1681) - | 1207 -> One (S (T T_NO) :: r636) - | 2791 -> One (S (T T_NO) :: r1504) - | 3411 -> One (S (T T_NO) :: r1813) - | 2033 -> One (S (T T_NEXT_PAGE) :: r1054) - | 2039 -> One (S (T T_NEXT_PAGE) :: r1055) - | 238 -> One (S (T T_NATIONAL) :: r150) - | 243 | 264 -> One (S (T T_NATIONAL) :: r161) - | 546 -> One (S (T T_LOCK) :: r319) - | 2384 -> One (S (T T_LOCK) :: r1234) - | 2385 -> One (S (T T_LOCK) :: r1235) - | 2388 -> One (S (T T_LOCK) :: r1236) - | 2732 -> One (S (T T_LOCK) :: r1467) - | 3134 -> One (S (T T_LOCK) :: r1696) - | 2665 -> One (S (T T_LINE) :: r1417) - | 308 -> One (S (T T_LENGTH) :: r193) - | 1494 -> One (S (T T_LENGTH) :: r776) - | 1706 -> One (S (T T_LENGTH) :: r875) - | 3663 -> One (S (T T_LENGTH) :: r1915) - | 1714 -> One (S (T T_KEY) :: r881) - | 1725 -> One (S (T T_KEY) :: r889) - | 1729 -> One (S (T T_KEY) :: r892) - | 3093 -> One (S (T T_KEY) :: r1670) - | 610 -> One (S (T T_IS) :: r347) - | 455 -> One (S (T T_INTRINSIC) :: r261) - | 1777 -> One (S (T T_INPUT) :: r924) - | 1825 -> One (S (T T_HEADING) :: r958) - | 1881 -> One (S (T T_HEADING) :: r984) - | 1886 -> One (S (T T_HEADING) :: r985) - | 1890 -> One (S (T T_HEADING) :: r986) - | 3653 -> One (S (T T_GT) :: r659) - | 1340 -> One (S (T T_GT) :: r669) - | 1341 -> One (S (T T_GT) :: r673) - | 1950 -> One (S (T T_GROUP) :: r1019) - | 3333 -> One (S (T T_GIVING) :: r1783) - | 3448 -> One (S (T T_GIVING) :: r1828) - | 3506 -> One (S (T T_GIVING) :: r1853) - | 3747 -> One (S (T T_GIVING) :: r1940) - | 1065 -> One (S (T T_FROM) :: r580) - | 2376 -> One (S (T T_FOREVER) :: r1230) - | 2890 -> One (S (T T_FOR) :: r1555) - | 2906 -> One (S (T T_FOR) :: r1565) - | 1664 -> One (S (T T_FOOTING) :: r852) - | 102 -> One (S (T T_FINAL) :: r70) - | 717 -> One (S (T T_FINAL) :: r407) - | 728 -> One (S (T T_FINAL) :: r412) - | 1203 -> One (S (T T_FINAL) :: r634) - | 2921 -> One (S (T T_FILLER) :: r1572) - | 671 -> One (S (T T_FILE) :: r379) - | 2236 -> One (S (T T_EXCEPTION) :: r1146) - | 2253 -> One (S (T T_EXCEPTION) :: r1153) - | 2270 -> One (S (T T_EXCEPTION) :: r1166) - | 2271 -> One (S (T T_EXCEPTION) :: r1170) - | 2314 -> One (S (T T_EXCEPTION) :: r1194) - | 2574 -> One (S (T T_EXCEPTION) :: r1365) - | 1088 -> One (S (T T_ERROR) :: r593) - | 1229 -> One (S (T T_EQUAL) :: r658) - | 1236 -> One (S (T T_EQUAL) :: r662) - | 1247 -> One (S (T T_EQUAL) :: r666) - | 1257 -> One (S (T T_EQUAL) :: r672) - | 1264 -> One (S (T T_EQUAL) :: r676) - | 1275 -> One (S (T T_EQUAL) :: r680) - | 1282 -> One (S (T T_EQUAL) :: r683) - | 1314 -> One (S (T T_EQUAL) :: r687) - | 3595 -> One (S (T T_EQUAL) :: r1878) - | 3602 -> One (S (T T_EQUAL) :: r1883) - | 4045 -> One (S (T T_EOF) :: r2074) - | 2313 -> One (S (T T_EC) :: r1190) - | 583 -> One (S (T T_DUPLICATES) :: r334) - | 2513 -> One (S (T T_DUPLICATES) :: r1331) - | 2525 -> One (S (T T_DUPLICATES) :: r1338) - | 2545 -> One (S (T T_DUPLICATES) :: r1349) - | 2552 -> One (S (T T_DUPLICATES) :: r1354) + | 217 -> One (S (T T_SECTION) :: r143) + | 518 -> One (S (T T_SECTION) :: r293) + | 748 -> One (S (T T_SECTION) :: r418) + | 1694 -> One (S (T T_SECTION) :: r851) + | 1700 -> One (S (T T_SECTION) :: r854) + | 1705 -> One (S (T T_SECTION) :: r857) + | 1710 -> One (S (T T_SECTION) :: r860) + | 1811 -> One (S (T T_SECTION) :: r928) + | 2086 -> One (S (T T_SECTION) :: r1059) + | 836 -> One (S (T T_RPAR) :: r464) + | 884 -> One (S (T T_RPAR) :: r496) + | 887 -> One (S (T T_RPAR) :: r497) + | 1015 -> One (S (T T_RPAR) :: r548) + | 1047 -> One (S (T T_RPAR) :: r559) + | 156 -> One (S (T T_ROUNDING) :: r110) + | 188 -> One (S (T T_ROUNDED) :: r128) + | 2806 -> One (S (T T_REWIND) :: r1499) + | 3146 -> One (S (T T_REWIND) :: r1691) + | 1970 -> One (S (T T_RESET) :: r1018) + | 1557 -> One (S (T T_RENAMES) :: r780) + | 3137 -> One (S (T T_REMOVAL) :: r1688) + | 1128 -> One (S (T T_REFERENCE) :: r597) + | 2208 -> One (S (T T_REFERENCE) :: r1109) + | 2850 -> One (S (T T_REFERENCE) :: r1526) + | 613 -> One (S (T T_RECORD) :: r354) + | 1476 | 1548 -> One (S (T T_RECORD) :: r752) + | 1761 -> One (S (T T_QUEUE) :: r899) + | 135 -> One (S (T T_PROTOTYPE) :: r84) + | 3970 -> One (S (T T_PROPERTY) :: r2026) + | 3978 -> One (S (T T_PROPERTY) :: r2031) + | 2353 -> One (S (T T_PROCEDURES) :: r1204) + | 2504 -> One (S (T T_PROCEDURE) :: r1312) + | 2515 -> One (S (T T_PROCEDURE) :: r1321) + | 3709 -> One (S (T T_POINTER) :: r1917) + | 3782 -> One (S (T T_POINTER) :: r1943) + | 374 -> One (S (T T_PICTURE) :: r231) + | 77 -> One (S (T T_PERIOD) :: r44) + | 84 -> One (S (T T_PERIOD) :: r50) + | 105 -> One (S (T T_PERIOD) :: r66) + | 109 -> One (S (T T_PERIOD) :: r68) + | 112 -> One (S (T T_PERIOD) :: r70) + | 115 -> One (S (T T_PERIOD) :: r72) + | 118 -> One (S (T T_PERIOD) :: r74) + | 121 -> One (S (T T_PERIOD) :: r76) + | 124 -> One (S (T T_PERIOD) :: r78) + | 130 -> One (S (T T_PERIOD) :: r82) + | 138 -> One (S (T T_PERIOD) :: r91) + | 154 -> One (S (T T_PERIOD) :: r105) + | 202 -> One (S (T T_PERIOD) :: r133) + | 220 -> One (S (T T_PERIOD) :: r145) + | 233 -> One (S (T T_PERIOD) :: r151) + | 311 -> One (S (T T_PERIOD) :: r190) + | 467 -> One (S (T T_PERIOD) :: r270) + | 473 -> One (S (T T_PERIOD) :: r271) + | 507 -> One (S (T T_PERIOD) :: r289) + | 521 -> One (S (T T_PERIOD) :: r295) + | 671 -> One (S (T T_PERIOD) :: r374) + | 2233 -> One (S (T T_PERIOD) :: r1123) + | 3836 -> One (S (T T_PERIOD) :: r1957) + | 3860 -> One (S (T T_PERIOD) :: r1966) + | 3869 -> One (S (T T_PERIOD) :: r1969) + | 3935 -> One (S (T T_PERIOD) :: r2001) + | 3943 -> One (S (T T_PERIOD) :: r2004) + | 1919 -> One (S (T T_PAGE) :: r989) + | 1968 -> One (S (T T_PAGE) :: r1017) + | 3491 -> One (S (T T_OTHER) :: r1840) + | 529 -> One (S (T T_ONLY) :: r305) + | 1334 -> One (S (T T_OMITTED) :: r684) + | 1629 -> One (S (T T_OMITTED) :: r826) + | 2847 -> One (S (T T_OMITTED) :: r1525) + | 853 -> One (S (T T_OF) :: r474) + | 936 -> One (S (T T_OF) :: r520) + | 1603 -> One (S (T T_OF) :: r807) + | 1745 -> One (S (T T_OCCURS) :: r892) + | 3117 -> One (S (T T_NOT_ON_EXCEPTION) :: r1675) + | 1218 -> One (S (T T_NO) :: r630) + | 2802 -> One (S (T T_NO) :: r1498) + | 3422 -> One (S (T T_NO) :: r1807) + | 2044 -> One (S (T T_NEXT_PAGE) :: r1048) + | 2050 -> One (S (T T_NEXT_PAGE) :: r1049) + | 277 -> One (S (T T_NATIONAL) :: r173) + | 282 | 303 -> One (S (T T_NATIONAL) :: r184) + | 585 -> One (S (T T_LOCK) :: r342) + | 2395 -> One (S (T T_LOCK) :: r1228) + | 2396 -> One (S (T T_LOCK) :: r1229) + | 2399 -> One (S (T T_LOCK) :: r1230) + | 2743 -> One (S (T T_LOCK) :: r1461) + | 3145 -> One (S (T T_LOCK) :: r1690) + | 2676 -> One (S (T T_LINE) :: r1411) + | 347 -> One (S (T T_LENGTH) :: r216) + | 1505 -> One (S (T T_LENGTH) :: r770) + | 1717 -> One (S (T T_LENGTH) :: r869) + | 3674 -> One (S (T T_LENGTH) :: r1909) + | 1725 -> One (S (T T_KEY) :: r875) + | 1736 -> One (S (T T_KEY) :: r883) + | 1740 -> One (S (T T_KEY) :: r886) + | 3104 -> One (S (T T_KEY) :: r1664) + | 649 -> One (S (T T_IS) :: r370) + | 494 -> One (S (T T_INTRINSIC) :: r284) + | 1788 -> One (S (T T_INPUT) :: r918) + | 1836 -> One (S (T T_HEADING) :: r952) + | 1892 -> One (S (T T_HEADING) :: r978) + | 1897 -> One (S (T T_HEADING) :: r979) + | 1901 -> One (S (T T_HEADING) :: r980) + | 3664 -> One (S (T T_GT) :: r653) + | 1351 -> One (S (T T_GT) :: r663) + | 1352 -> One (S (T T_GT) :: r667) + | 1961 -> One (S (T T_GROUP) :: r1013) + | 3344 -> One (S (T T_GIVING) :: r1777) + | 3459 -> One (S (T T_GIVING) :: r1822) + | 3517 -> One (S (T T_GIVING) :: r1847) + | 3758 -> One (S (T T_GIVING) :: r1934) + | 1076 -> One (S (T T_FROM) :: r574) + | 2387 -> One (S (T T_FOREVER) :: r1224) + | 2901 -> One (S (T T_FOR) :: r1549) + | 2917 -> One (S (T T_FOR) :: r1559) + | 1675 -> One (S (T T_FOOTING) :: r846) + | 142 -> One (S (T T_FINAL) :: r92) + | 1214 -> One (S (T T_FINAL) :: r628) + | 3975 -> One (S (T T_FINAL) :: r2027) + | 3986 -> One (S (T T_FINAL) :: r2032) + | 2932 -> One (S (T T_FILLER) :: r1566) + | 710 -> One (S (T T_FILE) :: r402) + | 2247 -> One (S (T T_EXCEPTION) :: r1140) + | 2264 -> One (S (T T_EXCEPTION) :: r1147) + | 2281 -> One (S (T T_EXCEPTION) :: r1160) + | 2282 -> One (S (T T_EXCEPTION) :: r1164) + | 2325 -> One (S (T T_EXCEPTION) :: r1188) + | 2585 -> One (S (T T_EXCEPTION) :: r1359) + | 1099 -> One (S (T T_ERROR) :: r587) + | 1240 -> One (S (T T_EQUAL) :: r652) + | 1247 -> One (S (T T_EQUAL) :: r656) + | 1258 -> One (S (T T_EQUAL) :: r660) + | 1268 -> One (S (T T_EQUAL) :: r666) + | 1275 -> One (S (T T_EQUAL) :: r670) + | 1286 -> One (S (T T_EQUAL) :: r674) + | 1293 -> One (S (T T_EQUAL) :: r677) + | 1325 -> One (S (T T_EQUAL) :: r681) + | 3606 -> One (S (T T_EQUAL) :: r1872) + | 3613 -> One (S (T T_EQUAL) :: r1877) + | 4093 -> One (S (T T_EOF) :: r2101) + | 2324 -> One (S (T T_EC) :: r1184) + | 622 -> One (S (T T_DUPLICATES) :: r357) + | 2524 -> One (S (T T_DUPLICATES) :: r1325) + | 2536 -> One (S (T T_DUPLICATES) :: r1332) + | 2556 -> One (S (T T_DUPLICATES) :: r1343) + | 2563 -> One (S (T T_DUPLICATES) :: r1348) | 1 -> One (S (T T_DIVISION) :: r2) - | 28 -> One (S (T T_DIVISION) :: r20) - | 174 -> One (S (T T_DIVISION) :: r114) - | 706 -> One (S (T T_DIVISION) :: r386) - | 734 -> One (S (T T_DIVISION) :: r421) - | 2191 -> One (S (T T_DIVISION) :: r1105) - | 3977 -> One (S (T T_DIVISION) :: r2052) - | 1816 -> One (S (T T_DETAIL) :: r954) - | 1821 | 1831 -> One (S (T T_DETAIL) :: r957) - | 1710 -> One (S (T T_DESTINATION) :: r878) - | 3015 -> One (S (T T_DEPENDING) :: r1619) - | 186 -> One (S (T T_DEBUGGING) :: r126) - | 2339 -> One (S (T T_DEBUGGING) :: r1209) - | 1718 -> One (S (T T_DATE) :: r884) - | 1769 -> One (S (T T_COUNT) :: r918) - | 3273 -> One (S (T T_COUNT) :: r1755) - | 2288 -> One (S (T T_CONDITION) :: r1178) - | 2323 -> One (S (T T_CONDITION) :: r1199) - | 1845 -> One (S (T T_COLUMNS) :: r965) - | 1848 -> One (S (T T_COLUMNS) :: r966) - | 1043 -> One (S (T T_COLON) :: r572) - | 651 -> One (S (T T_CLOCK_UNITS) :: r364) - | 241 -> One (S (T T_CLASSIFICATION) :: r158) - | 3168 -> One (S (T T_CHARACTERS) :: r1720) - | 2632 -> One (S (T T_BY) :: r1399) - | 2861 -> One (S (T T_BY) :: r1543) - | 2879 -> One (S (T T_BY) :: r1552) - | 1622 -> One (S (T T_BIT) :: r834) - | 2357 -> One (S (T T_BEFORE) :: r1219) - | 2530 -> One (S (T T_ASCENDING) :: r1341) - | 1196 -> One (S (T T_AS) :: r630) - | 1963 -> One (S (T T_ARE) :: r1025) - | 59 -> One (S (T T_AMPERSAND) :: r54) - | 355 -> One (S (T T_AMPERSAND) :: r222) - | 869 -> One (S (T T_AMPERSAND) :: r501) - | 2443 -> One (S (T T_AMPERSAND) :: r1274) - | 221 | 235 -> One (S (T T_ALPHANUMERIC) :: r147) - | 261 -> One (S (T T_ALPHANUMERIC) :: r164) - | 278 -> One (S (T T_ALPHANUMERIC) :: r172) - | 452 -> One (S (T T_ALL) :: r260) - | 2682 -> One (S (T T_ALL) :: r1432) - | 3420 -> One (S (T T_ADVANCING) :: r1815) - | 1128 -> One (S (T T_ACTIVE_CLASS) :: r607) - | 1070 -> One (S (N N_subscripts) :: r581) - | 855 | 1067 -> One (S (N N_subscript_first) :: r483) - | 2471 -> One (S (N N_ro_with_status_) :: r1300) - | 2781 -> One (S (N N_ro_sharing_phrase_) :: r1499) - | 3003 -> One (S (N N_ro_raising_exception_) :: r1613) - | 3029 -> One (S (N N_ro_raising_exception_) :: r1623) - | 3035 -> One (S (N N_ro_raising_exception_) :: r1625) - | 3037 -> One (S (N N_ro_raising_exception_) :: r1626) - | 1109 -> One (S (N N_ro_pf_option_TO__name__) :: r599) - | 1114 -> One (S (N N_ro_pf_option_TO__name__) :: r601) - | 1201 -> One (S (N N_ro_pf___anonymous_44_property_kind__) :: r633) - | 1648 -> One (S (N N_ro_pf___anonymous_30_qualname_or_integer__) :: r842) - | 2413 -> One (S (N N_ro_pf___anonymous_100_ident__) :: r1253) - | 3622 -> One (S (N N_ro_pf_VARYING_ident__) :: r1902) - | 352 -> One (S (N N_ro_pf_THROUGH_string_or_int_literal__) :: r217) - | 678 -> One (S (N N_ro_pf_POSITION_integer__) :: r380) - | 634 -> One (S (N N_ro_pf_ON_name__) :: r356) - | 794 -> One (S (N N_ro_pf_FROM_expression__) :: r460) - | 3428 -> One (S (N N_ro_loc_upon__) :: r1820) - | 113 -> One (S (N N_ro_loc_options_paragraph__) :: r80) - | 3897 -> One (S (N N_ro_loc_options_paragraph__) :: r1983) - | 4030 -> One (S (N N_ro_loc_options_paragraph__) :: r2073) - | 789 -> One (S (N N_ro_loc_entry_name_clause__) :: r457) - | 1867 -> One (S (N N_ro_loc_entry_name_clause__) :: r977) - | 2078 -> One (S (N N_ro_loc_entry_name_clause__) :: r1068) - | 2232 -> One (S (N N_ro_integer_) :: r1140) - | 3840 -> One (S (N N_ro_integer_) :: r1969) - | 3936 -> One (S (N N_ro_instance_definition_) :: r2015) - | 1011 -> One (S (N N_ro_expression_no_all_) :: r558) - | 2487 -> One (S (N N_ro_collating_sequence_phrase_) :: r1310) - | 2489 -> One (S (N N_ro_collating_sequence_phrase_) :: r1311) - | 2541 -> One (S (N N_ro_collating_sequence_phrase_) :: r1344) - | 3124 -> One (S (N N_ro_close_format_) :: r1692) - | 1382 -> One (S (N N_ro_capacity_phrase_) :: r719) - | 2854 -> One (S (N N_rnell_rev_tallying_) :: r1538) - | 2557 -> One (S (N N_rnell_rev___anonymous_88_) :: r1355) - | 1092 -> One (S (N N_rnel_validation_stage_) :: r594) - | 3117 -> One (S (N N_rnel_rounded_ident_) :: r1689) - | 3346 -> One (S (N N_rnel_rounded_ident_) :: r1790) - | 2778 -> One (S (N N_rnel_open_phrase_) :: r1496) - | 2193 -> One (S (N N_rnel_loc_using_clause__) :: r1110) - | 3979 -> One (S (N N_rnel_loc_using_clause__) :: r2057) - | 2834 -> One (S (N N_rnel_loc_using_by__) :: r1530) - | 2857 -> One (S (N N_rnel_loc_replacing_phrase__) :: r1539) - | 2027 -> One (S (N N_rnel_line_position_) :: r1051) - | 3139 -> One (S (N N_rnel_ident_or_string_) :: r1698) - | 2457 -> One (S (N N_rnel_ident_or_numeric_) :: r1280) - | 3172 -> One (S (N N_rnel_ident_or_numeric_) :: r1724) - | 2858 -> One (S (N N_rnel_ident_by_after_before_) :: r1540) - | 2877 -> One (S (N N_rnel_ident_by_after_before_) :: r1549) - | 2883 -> One (S (N N_rnel_ident_by_after_before_) :: r1553) - | 2294 -> One (S (N N_rl_pf_FILE_name__) :: r1180) - | 1854 -> One (S (N N_rl_name_) :: r969) - | 1859 -> One (S (N N_rl_name_) :: r972) - | 3989 -> One (S (N N_rl_loc_section_paragraph__) :: r2058) - | 657 -> One (S (N N_rl_loc_same_area_clause__) :: r369) - | 196 -> One (S (N N_rl_loc_object_computer_clause__) :: r130) - | 1778 -> One (S (N N_rl_loc_communication_descr_clause__) :: r928) - | 2898 -> One (S (N N_rl_inspect_where_) :: r1562) - | 3652 -> One (S (N N_relop) :: r1911) - | 523 -> One (S (N N_qualname) :: r299) - | 1549 -> One (S (N N_qualname) :: r787) - | 2459 -> One (S (N N_qualname) :: r1287) - | 2485 -> One (S (N N_qualname) :: r1309) - | 3173 -> One (S (N N_qualname) :: r1728) - | 1929 -> One (S (N N_ntl_arithmetic_term_) :: r1005) - | 2214 -> One (S (N N_nel_loc___anonymous_72__) :: r1122) - | 2944 -> One (S (N N_nel___anonymous_84_) :: r1579) - | 3122 -> One (S (N N_nel___anonymous_80_) :: r1691) - | 792 -> One (S (N N_nel___anonymous_42_) :: r458) - | 283 -> One (S (N N_name) :: r173) - | 302 -> One (S (N N_name) :: r186) - | 345 -> One (S (N N_name) :: r216) - | 366 -> One (S (N N_name) :: r228) - | 436 -> One (S (N N_name) :: r250) - | 439 -> One (S (N N_name) :: r252) - | 442 -> One (S (N N_name) :: r255) - | 445 -> One (S (N N_name) :: r258) - | 459 -> One (S (N N_name) :: r265) - | 565 -> One (S (N N_name) :: r325) - | 613 -> One (S (N N_name) :: r348) - | 635 -> One (S (N N_name) :: r357) - | 740 -> One (S (N N_name) :: r428) - | 803 -> One (S (N N_name) :: r463) - | 809 -> One (S (N N_name) :: r467) - | 812 -> One (S (N N_name) :: r468) - | 923 -> One (S (N N_name) :: r524) - | 1112 -> One (S (N N_name) :: r600) - | 1124 -> One (S (N N_name) :: r606) - | 1199 -> One (S (N N_name) :: r631) - | 1375 -> One (S (N N_name) :: r709) - | 1467 -> One (S (N N_name) :: r759) - | 1559 -> One (S (N N_name) :: r795) - | 1564 -> One (S (N N_name) :: r801) - | 1590 -> One (S (N N_name) :: r811) - | 1702 -> One (S (N N_name) :: r872) - | 1803 -> One (S (N N_name) :: r938) - | 2194 -> One (S (N N_name) :: r1111) - | 2204 -> One (S (N N_name) :: r1119) - | 2218 -> One (S (N N_name) :: r1124) - | 2289 -> One (S (N N_name) :: r1179) - | 2295 -> One (S (N N_name) :: r1182) - | 2309 -> One (S (N N_name) :: r1188) - | 2324 -> One (S (N N_name) :: r1200) - | 2335 -> One (S (N N_name) :: r1206) - | 2367 -> One (S (N N_name) :: r1227) - | 2431 -> One (S (N N_name) :: r1262) - | 2482 -> One (S (N N_name) :: r1306) - | 2654 -> One (S (N N_name) :: r1411) - | 2696 -> One (S (N N_name) :: r1445) - | 2710 -> One (S (N N_name) :: r1451) - | 2714 -> One (S (N N_name) :: r1457) - | 2723 -> One (S (N N_name) :: r1465) - | 2745 -> One (S (N N_name) :: r1474) - | 2748 -> One (S (N N_name) :: r1475) - | 2823 -> One (S (N N_name) :: r1523) - | 3007 -> One (S (N N_name) :: r1615) - | 3023 -> One (S (N N_name) :: r1620) - | 3079 -> One (S (N N_name) :: r1658) - | 3111 -> One (S (N N_name) :: r1685) - | 3164 -> One (S (N N_name) :: r1716) - | 3282 -> One (S (N N_name) :: r1760) - | 3414 -> One (S (N N_name) :: r1814) - | 868 -> One (S (N N_literal) :: r499) - | 1580 -> One (S (N N_literal) :: r807) - | 2019 -> One (S (N N_literal) :: r1046) - | 2470 -> One (S (N N_literal) :: r1299) - | 3155 -> One (S (N N_l_loc___anonymous_79__) :: r1708) - | 498 -> One (S (N N_integer) :: r285) - | 679 -> One (S (N N_integer) :: r381) - | 748 -> One (S (N N_integer) :: r440) - | 751 -> One (S (N N_integer) :: r442) - | 753 -> One (S (N N_integer) :: r444) - | 768 -> One (S (N N_integer) :: r449) - | 1381 -> One (S (N N_integer) :: r713) - | 1387 -> One (S (N N_integer) :: r722) - | 1390 -> One (S (N N_integer) :: r723) - | 1422 -> One (S (N N_integer) :: r740) - | 1635 -> One (S (N N_integer) :: r840) - | 1936 -> One (S (N N_integer) :: r1011) - | 1938 -> One (S (N N_integer) :: r1015) - | 1942 -> One (S (N N_integer) :: r1016) - | 1953 -> One (S (N N_integer) :: r1020) - | 1955 -> One (S (N N_integer) :: r1021) - | 2028 -> One (S (N N_integer) :: r1052) - | 2030 -> One (S (N N_integer) :: r1053) - | 2046 -> One (S (N N_integer) :: r1058) - | 2048 -> One (S (N N_integer) :: r1059) - | 2091 -> One (S (N N_integer) :: r1074) - | 2392 -> One (S (N N_imp_stmts) :: r1237) - | 2430 -> One (S (N N_imp_stmts) :: r1260) - | 2463 -> One (S (N N_imp_stmts) :: r1289) - | 2469 -> One (S (N N_imp_stmts) :: r1298) - | 2484 -> One (S (N N_imp_stmts) :: r1307) - | 2695 -> One (S (N N_imp_stmts) :: r1438) - | 2722 -> One (S (N N_imp_stmts) :: r1458) - | 2743 -> One (S (N N_imp_stmts) :: r1472) - | 2777 -> One (S (N N_imp_stmts) :: r1495) - | 2814 -> One (S (N N_imp_stmts) :: r1511) - | 3000 -> One (S (N N_imp_stmts) :: r1611) - | 3104 -> One (S (N N_imp_stmts) :: r1676) - | 3115 -> One (S (N N_imp_stmts) :: r1686) - | 3121 -> One (S (N N_imp_stmts) :: r1690) - | 3154 -> One (S (N N_imp_stmts) :: r1707) - | 3177 -> One (S (N N_imp_stmts) :: r1730) - | 3180 -> One (S (N N_imp_stmts) :: r1734) - | 3243 -> One (S (N N_imp_stmts) :: r1735) - | 3258 -> One (S (N N_imp_stmts) :: r1749) - | 3261 -> One (S (N N_imp_stmts) :: r1751) - | 3263 -> One (S (N N_imp_stmts) :: r1752) - | 3276 -> One (S (N N_imp_stmts) :: r1757) - | 3286 -> One (S (N N_imp_stmts) :: r1764) - | 3289 -> One (S (N N_imp_stmts) :: r1766) - | 3308 -> One (S (N N_imp_stmts) :: r1771) - | 3312 -> One (S (N N_imp_stmts) :: r1773) - | 3314 -> One (S (N N_imp_stmts) :: r1774) - | 3323 -> One (S (N N_imp_stmts) :: r1777) - | 3326 -> One (S (N N_imp_stmts) :: r1779) - | 3336 -> One (S (N N_imp_stmts) :: r1785) - | 3339 -> One (S (N N_imp_stmts) :: r1787) - | 3348 -> One (S (N N_imp_stmts) :: r1792) - | 3351 -> One (S (N N_imp_stmts) :: r1794) - | 3363 -> One (S (N N_imp_stmts) :: r1796) - | 3366 -> One (S (N N_imp_stmts) :: r1797) - | 3373 -> One (S (N N_imp_stmts) :: r1798) - | 3380 -> One (S (N N_imp_stmts) :: r1799) - | 3383 -> One (S (N N_imp_stmts) :: r1800) - | 3385 -> One (S (N N_imp_stmts) :: r1801) - | 3396 -> One (S (N N_imp_stmts) :: r1805) - | 3399 -> One (S (N N_imp_stmts) :: r1807) - | 3405 -> One (S (N N_imp_stmts) :: r1810) - | 3442 -> One (S (N N_imp_stmts) :: r1823) - | 3454 -> One (S (N N_imp_stmts) :: r1831) - | 3457 -> One (S (N N_imp_stmts) :: r1833) - | 3469 -> One (S (N N_imp_stmts) :: r1841) - | 3472 -> One (S (N N_imp_stmts) :: r1843) - | 3500 -> One (S (N N_imp_stmts) :: r1849) - | 3509 -> One (S (N N_imp_stmts) :: r1855) - | 3512 -> One (S (N N_imp_stmts) :: r1857) - | 3537 -> One (S (N N_imp_stmts) :: r1864) - | 3540 -> One (S (N N_imp_stmts) :: r1865) - | 3542 -> One (S (N N_imp_stmts) :: r1866) - | 3550 -> One (S (N N_imp_stmts) :: r1867) - | 3552 -> One (S (N N_imp_stmts) :: r1868) - | 3565 -> One (S (N N_imp_stmts) :: r1869) - | 3569 -> One (S (N N_imp_stmts) :: r1870) - | 3573 -> One (S (N N_imp_stmts) :: r1871) - | 3580 -> One (S (N N_imp_stmts) :: r1872) - | 3612 -> One (S (N N_imp_stmts) :: r1891) - | 3635 -> One (S (N N_imp_stmts) :: r1907) - | 3643 -> One (S (N N_imp_stmts) :: r1908) - | 3646 -> One (S (N N_imp_stmts) :: r1909) - | 3656 -> One (S (N N_imp_stmts) :: r1912) - | 3659 -> One (S (N N_imp_stmts) :: r1913) - | 3666 -> One (S (N N_imp_stmts) :: r1916) - | 3669 -> One (S (N N_imp_stmts) :: r1917) - | 3677 -> One (S (N N_imp_stmts) :: r1918) - | 3681 -> One (S (N N_imp_stmts) :: r1919) - | 3684 -> One (S (N N_imp_stmts) :: r1920) - | 3695 -> One (S (N N_imp_stmts) :: r1921) - | 3701 -> One (S (N N_imp_stmts) :: r1924) - | 3705 -> One (S (N N_imp_stmts) :: r1925) - | 3707 -> One (S (N N_imp_stmts) :: r1926) - | 3712 -> One (S (N N_imp_stmts) :: r1927) - | 3729 -> One (S (N N_imp_stmts) :: r1931) - | 3738 -> One (S (N N_imp_stmts) :: r1934) - | 3741 -> One (S (N N_imp_stmts) :: r1936) - | 3750 -> One (S (N N_imp_stmts) :: r1942) - | 3753 -> One (S (N N_imp_stmts) :: r1944) - | 3762 -> One (S (N N_imp_stmts) :: r1946) - | 3767 -> One (S (N N_imp_stmts) :: r1947) - | 3777 -> One (S (N N_imp_stmts) :: r1952) - | 3781 -> One (S (N N_imp_stmts) :: r1953) - | 3786 -> One (S (N N_imp_stmts) :: r1954) - | 3790 -> One (S (N N_imp_stmts) :: r1955) - | 3795 -> One (S (N N_imp_stmts) :: r1956) - | 3803 -> One (S (N N_imp_stmts) :: r1957) - | 3809 -> One (S (N N_imp_stmts) :: r1958) - | 3811 -> One (S (N N_imp_stmts) :: r1959) - | 3819 -> One (S (N N_imp_stmts) :: r1960) - | 3821 -> One (S (N N_imp_stmts) :: r1961) - | 2393 -> One (S (N N_idents) :: r1238) - | 2595 -> One (S (N N_idents) :: r1379) - | 2606 -> One (S (N N_idents) :: r1386) - | 2919 -> One (S (N N_idents) :: r1571) - | 844 -> One (S (N N_ident_or_literal) :: r481) - | 2114 -> One (S (N N_ident_or_literal) :: r1083) - | 2370 -> One (S (N N_ident_or_literal) :: r1228) - | 2815 -> One (S (N N_ident_or_literal) :: r1514) - | 3105 -> One (S (N N_ident_or_literal) :: r1678) - | 2083 -> One (S (N N_ident) :: r1071) - | 2086 -> One (S (N N_ident) :: r1072) - | 2395 -> One (S (N N_ident) :: r1242) - | 2436 -> One (S (N N_ident) :: r1272) - | 2699 -> One (S (N N_ident) :: r1446) - | 2729 -> One (S (N N_ident) :: r1466) - | 2744 -> One (S (N N_ident) :: r1473) - | 2816 -> One (S (N N_ident) :: r1517) - | 2830 -> One (S (N N_ident) :: r1529) - | 2852 -> One (S (N N_ident) :: r1537) - | 3004 -> One (S (N N_ident) :: r1614) - | 3178 -> One (S (N N_ident) :: r1732) - | 3451 -> One (S (N N_ident) :: r1829) - | 3623 -> One (S (N N_ident) :: r1903) - | 816 -> One (S (N N_function_name) :: r469) - | 829 -> One (S (N N_expression_no_all) :: r474) - | 832 -> One (S (N N_expression_no_all) :: r477) - | 858 -> One (S (N N_expression_no_all) :: r488) - | 860 -> One (S (N N_expression_no_all) :: r492) - | 866 -> One (S (N N_expression_no_all) :: r497) - | 887 -> One (S (N N_expression_no_all) :: r513) - | 898 -> One (S (N N_expression_no_all) :: r520) - | 1015 -> One (S (N N_expression_no_all) :: r562) - | 1038 -> One (S (N N_expression_no_all) :: r569) - | 795 -> One (S (N N_expression) :: r461) - | 1057 -> One (S (N N_expression) :: r575) - | 1213 -> One (S (N N_expression) :: r645) - | 1218 -> One (S (N N_expression) :: r653) - | 1321 -> One (S (N N_expression) :: r689) - | 1342 -> One (S (N N_expression) :: r695) - | 2378 -> One (S (N N_expression) :: r1232) - | 3046 -> One (S (N N_expression) :: r1647) - | 3062 -> One (S (N N_expression) :: r1651) - | 3027 -> One (S (N N_exit_spec) :: r1622) - | 3071 -> One (S (N N_class_condition_no_ident) :: r1655) - | 831 -> One (S (N N_atomic_expression_no_all) :: r475) - | 839 -> One (S (N N_atomic_expression_no_all) :: r478) - | 856 -> One (S (N N_atomic_expression_no_all) :: r484) - | 801 -> One (S (N N_atomic_expression) :: r462) - | 959 -> One (S (N N_atomic_expression) :: r539) - | 969 -> One (S (N N_atomic_expression) :: r540) - | 457 -> One (Sub (r22) :: r262) - | 1437 -> One (Sub (r22) :: r743) - | 1447 -> One (Sub (r22) :: r748) - | 31 -> One (Sub (r28) :: r37) - | 36 -> One (Sub (r45) :: r46) - | 45 -> One (Sub (r48) :: r49) - | 56 -> One (Sub (r48) :: r50) - | 70 -> One (Sub (r52) :: r55) - | 86 -> One (Sub (r57) :: r60) - | 109 -> One (Sub (r57) :: r73) - | 1924 -> One (Sub (r57) :: r1004) - | 2452 -> One (Sub (r57) :: r1275) - | 2491 -> One (Sub (r57) :: r1312) - | 2917 -> One (Sub (r57) :: r1570) - | 3025 -> One (Sub (r57) :: r1621) - | 3908 -> One (Sub (r57) :: r2000) - | 3914 -> One (Sub (r57) :: r2002) - | 1630 -> One (Sub (r141) :: r837) - | 353 -> One (Sub (r219) :: r220) - | 379 -> One (Sub (r219) :: r229) - | 381 -> One (Sub (r219) :: r230) - | 395 -> One (Sub (r233) :: r234) - | 709 -> One (Sub (r393) :: r402) - | 884 -> One (Sub (r505) :: r509) - | 891 -> One (Sub (r505) :: r515) - | 894 -> One (Sub (r505) :: r516) - | 906 -> One (Sub (r505) :: r521) - | 908 -> One (Sub (r505) :: r522) - | 910 -> One (Sub (r505) :: r523) - | 944 -> One (Sub (r505) :: r527) - | 1025 -> One (Sub (r505) :: r563) - | 1030 -> One (Sub (r505) :: r564) - | 882 -> One (Sub (r507) :: r508) - | 889 -> One (Sub (r507) :: r514) - | 952 -> One (Sub (r529) :: r531) - | 1007 -> One (Sub (r529) :: r556) - | 972 -> One (Sub (r535) :: r541) - | 976 -> One (Sub (r535) :: r542) - | 978 -> One (Sub (r535) :: r543) - | 980 -> One (Sub (r535) :: r544) - | 982 -> One (Sub (r535) :: r545) - | 984 -> One (Sub (r535) :: r546) - | 990 -> One (Sub (r535) :: r548) - | 992 -> One (Sub (r535) :: r549) - | 994 -> One (Sub (r535) :: r550) - | 996 -> One (Sub (r535) :: r551) - | 998 -> One (Sub (r535) :: r552) - | 1002 -> One (Sub (r535) :: r553) - | 958 -> One (Sub (r537) :: r538) - | 987 -> One (Sub (r537) :: r547) - | 1049 -> One (Sub (r537) :: r573) - | 1051 -> One (Sub (r537) :: r574) - | 1143 -> One (Sub (r613) :: r614) - | 1148 -> One (Sub (r613) :: r615) - | 1150 -> One (Sub (r613) :: r616) - | 1167 -> One (Sub (r618) :: r619) - | 1173 -> One (Sub (r618) :: r620) - | 1175 -> One (Sub (r618) :: r621) - | 1177 -> One (Sub (r618) :: r622) - | 1221 -> One (Sub (r640) :: r655) - | 1329 -> One (Sub (r640) :: r691) - | 1332 -> One (Sub (r640) :: r692) - | 1337 -> One (Sub (r640) :: r694) - | 2995 -> One (Sub (r642) :: r1609) - | 1217 -> One (Sub (r651) :: r652) - | 1346 -> One (Sub (r651) :: r696) - | 1348 -> One (Sub (r651) :: r697) - | 1352 -> One (Sub (r651) :: r698) - | 1359 -> One (Sub (r651) :: r699) - | 1361 -> One (Sub (r651) :: r700) - | 1473 -> One (Sub (r762) :: r764) - | 1975 -> One (Sub (r762) :: r768) - | 1513 -> One (Sub (r778) :: r780) - | 1613 -> One (Sub (r828) :: r830) - | 1896 -> One (Sub (r989) :: r990) - | 1901 -> One (Sub (r989) :: r991) - | 1906 -> One (Sub (r989) :: r994) - | 1911 -> One (Sub (r989) :: r997) - | 1965 -> One (Sub (r1027) :: r1028) - | 1976 -> One (Sub (r1033) :: r1034) - | 2021 -> One (Sub (r1048) :: r1050) - | 2105 -> One (Sub (r1076) :: r1082) - | 2119 -> One (Sub (r1087) :: r1088) - | 2198 -> One (Sub (r1117) :: r1118) - | 2351 -> One (Sub (r1213) :: r1214) - | 2750 -> One (Sub (r1213) :: r1477) - | 3522 -> One (Sub (r1213) :: r1859) - | 2355 -> One (Sub (r1215) :: r1216) - | 2366 -> One (Sub (r1221) :: r1226) - | 2688 -> One (Sub (r1221) :: r1437) - | 2911 -> One (Sub (r1264) :: r1569) - | 3284 -> One (Sub (r1264) :: r1762) - | 2464 -> One (Sub (r1294) :: r1297) - | 2472 -> One (Sub (r1302) :: r1305) - | 2497 -> One (Sub (r1314) :: r1319) - | 2503 -> One (Sub (r1322) :: r1323) - | 2519 -> One (Sub (r1322) :: r1332) - | 2543 -> One (Sub (r1322) :: r1345) - | 2550 -> One (Sub (r1322) :: r1350) - | 2558 -> One (Sub (r1357) :: r1362) - | 2625 -> One (Sub (r1383) :: r1393) - | 2616 -> One (Sub (r1391) :: r1392) - | 2631 -> One (Sub (r1396) :: r1398) - | 2640 -> One (Sub (r1405) :: r1406) - | 2658 -> One (Sub (r1413) :: r1416) - | 2678 -> One (Sub (r1413) :: r1423) - | 3591 -> One (Sub (r1425) :: r1875) - | 2765 -> One (Sub (r1481) :: r1493) - | 2806 -> One (Sub (r1481) :: r1509) - | 3100 -> One (Sub (r1481) :: r1674) - | 3464 -> One (Sub (r1481) :: r1839) - | 2755 -> One (Sub (r1488) :: r1490) - | 2757 -> One (Sub (r1488) :: r1492) - | 2892 -> One (Sub (r1560) :: r1561) - | 2900 -> One (Sub (r1560) :: r1563) - | 3040 -> One (Sub (r1630) :: r1638) - | 3488 -> One (Sub (r1630) :: r1847) - | 3044 -> One (Sub (r1642) :: r1643) - | 3060 -> One (Sub (r1642) :: r1650) - | 3083 -> One (Sub (r1663) :: r1664) - | 3109 -> One (Sub (r1663) :: r1682) - | 3144 -> One (Sub (r1700) :: r1703) - | 3147 -> One (Sub (r1705) :: r1706) - | 3247 -> One (Sub (r1741) :: r1743) - | 3394 -> One (Sub (r1741) :: r1803) - | 3905 -> One (Sub (r1987) :: r1995) - | 3942 -> One (Sub (r2016) :: r2010) + | 214 -> One (S (T T_DIVISION) :: r137) + | 745 -> One (S (T T_DIVISION) :: r415) + | 2202 -> One (S (T T_DIVISION) :: r1099) + | 3918 -> One (S (T T_DIVISION) :: r1992) + | 3965 -> One (S (T T_DIVISION) :: r2016) + | 3989 -> One (S (T T_DIVISION) :: r2037) + | 4040 -> One (S (T T_DIVISION) :: r2074) + | 4078 -> One (S (T T_DIVISION) :: r2100) + | 1827 -> One (S (T T_DETAIL) :: r948) + | 1832 | 1842 -> One (S (T T_DETAIL) :: r951) + | 1721 -> One (S (T T_DESTINATION) :: r872) + | 3026 -> One (S (T T_DEPENDING) :: r1613) + | 226 -> One (S (T T_DEBUGGING) :: r149) + | 2350 -> One (S (T T_DEBUGGING) :: r1203) + | 1729 -> One (S (T T_DATE) :: r878) + | 1780 -> One (S (T T_COUNT) :: r912) + | 3284 -> One (S (T T_COUNT) :: r1749) + | 2299 -> One (S (T T_CONDITION) :: r1172) + | 2334 -> One (S (T T_CONDITION) :: r1193) + | 1856 -> One (S (T T_COLUMNS) :: r959) + | 1859 -> One (S (T T_COLUMNS) :: r960) + | 1054 -> One (S (T T_COLON) :: r566) + | 690 -> One (S (T T_CLOCK_UNITS) :: r387) + | 280 -> One (S (T T_CLASSIFICATION) :: r181) + | 3179 -> One (S (T T_CHARACTERS) :: r1714) + | 2643 -> One (S (T T_BY) :: r1393) + | 2872 -> One (S (T T_BY) :: r1537) + | 2890 -> One (S (T T_BY) :: r1546) + | 1633 -> One (S (T T_BIT) :: r828) + | 2368 -> One (S (T T_BEFORE) :: r1213) + | 2541 -> One (S (T T_ASCENDING) :: r1335) + | 1207 -> One (S (T T_AS) :: r624) + | 1974 -> One (S (T T_ARE) :: r1019) + | 55 -> One (S (T T_AMPERSAND) :: r37) + | 394 -> One (S (T T_AMPERSAND) :: r245) + | 880 -> One (S (T T_AMPERSAND) :: r495) + | 2454 -> One (S (T T_AMPERSAND) :: r1268) + | 260 | 274 -> One (S (T T_ALPHANUMERIC) :: r170) + | 300 -> One (S (T T_ALPHANUMERIC) :: r187) + | 317 -> One (S (T T_ALPHANUMERIC) :: r195) + | 491 -> One (S (T T_ALL) :: r283) + | 2693 -> One (S (T T_ALL) :: r1426) + | 3431 -> One (S (T T_ADVANCING) :: r1809) + | 1139 -> One (S (T T_ACTIVE_CLASS) :: r601) + | 1081 -> One (S (N N_subscripts) :: r575) + | 866 | 1078 -> One (S (N N_subscript_first) :: r477) + | 2482 -> One (S (N N_ro_with_status_) :: r1294) + | 2792 -> One (S (N N_ro_sharing_phrase_) :: r1493) + | 3014 -> One (S (N N_ro_raising_exception_) :: r1607) + | 3040 -> One (S (N N_ro_raising_exception_) :: r1617) + | 3046 -> One (S (N N_ro_raising_exception_) :: r1619) + | 3048 -> One (S (N N_ro_raising_exception_) :: r1620) + | 1120 -> One (S (N N_ro_pf_option_TO__name__) :: r593) + | 1125 -> One (S (N N_ro_pf_option_TO__name__) :: r595) + | 1212 -> One (S (N N_ro_pf___anonymous_44_property_kind__) :: r627) + | 1659 -> One (S (N N_ro_pf___anonymous_30_qualname_or_integer__) :: r836) + | 2424 -> One (S (N N_ro_pf___anonymous_100_ident__) :: r1247) + | 3633 -> One (S (N N_ro_pf_VARYING_ident__) :: r1896) + | 391 -> One (S (N N_ro_pf_THROUGH_string_or_int_literal__) :: r240) + | 717 -> One (S (N N_ro_pf_POSITION_integer__) :: r403) + | 673 -> One (S (N N_ro_pf_ON_name__) :: r379) + | 805 -> One (S (N N_ro_pf_FROM_expression__) :: r454) + | 3439 -> One (S (N N_ro_loc_upon__) :: r1814) + | 153 -> One (S (N N_ro_loc_options_paragraph__) :: r103) + | 3893 -> One (S (N N_ro_loc_options_paragraph__) :: r1978) + | 3914 -> One (S (N N_ro_loc_options_paragraph__) :: r1987) + | 3962 -> One (S (N N_ro_loc_options_paragraph__) :: r2013) + | 3995 -> One (S (N N_ro_loc_options_paragraph__) :: r2045) + | 4020 -> One (S (N N_ro_loc_options_paragraph__) :: r2054) + | 4031 -> One (S (N N_ro_loc_options_paragraph__) :: r2061) + | 4059 -> One (S (N N_ro_loc_options_paragraph__) :: r2084) + | 4069 -> One (S (N N_ro_loc_options_paragraph__) :: r2091) + | 800 -> One (S (N N_ro_loc_entry_name_clause__) :: r451) + | 1878 -> One (S (N N_ro_loc_entry_name_clause__) :: r971) + | 2089 -> One (S (N N_ro_loc_entry_name_clause__) :: r1062) + | 2243 -> One (S (N N_ro_integer_) :: r1134) + | 3851 -> One (S (N N_ro_integer_) :: r1963) + | 4077 -> One (S (N N_ro_instance_definition_) :: r2096) + | 1022 -> One (S (N N_ro_expression_no_all_) :: r552) + | 2498 -> One (S (N N_ro_collating_sequence_phrase_) :: r1304) + | 2500 -> One (S (N N_ro_collating_sequence_phrase_) :: r1305) + | 2552 -> One (S (N N_ro_collating_sequence_phrase_) :: r1338) + | 3135 -> One (S (N N_ro_close_format_) :: r1686) + | 1393 -> One (S (N N_ro_capacity_phrase_) :: r713) + | 2865 -> One (S (N N_rnell_rev_tallying_) :: r1532) + | 2568 -> One (S (N N_rnell_rev___anonymous_88_) :: r1349) + | 1103 -> One (S (N N_rnel_validation_stage_) :: r588) + | 3128 -> One (S (N N_rnel_rounded_ident_) :: r1683) + | 3357 -> One (S (N N_rnel_rounded_ident_) :: r1784) + | 2789 -> One (S (N N_rnel_open_phrase_) :: r1490) + | 2204 -> One (S (N N_rnel_loc_using_clause__) :: r1104) + | 3920 -> One (S (N N_rnel_loc_using_clause__) :: r1997) + | 2845 -> One (S (N N_rnel_loc_using_by__) :: r1524) + | 2868 -> One (S (N N_rnel_loc_replacing_phrase__) :: r1533) + | 2038 -> One (S (N N_rnel_line_position_) :: r1045) + | 3150 -> One (S (N N_rnel_ident_or_string_) :: r1692) + | 2468 -> One (S (N N_rnel_ident_or_numeric_) :: r1274) + | 3183 -> One (S (N N_rnel_ident_or_numeric_) :: r1718) + | 2869 -> One (S (N N_rnel_ident_by_after_before_) :: r1534) + | 2888 -> One (S (N N_rnel_ident_by_after_before_) :: r1543) + | 2894 -> One (S (N N_rnel_ident_by_after_before_) :: r1547) + | 2305 -> One (S (N N_rl_pf_FILE_name__) :: r1174) + | 1865 -> One (S (N N_rl_name_) :: r963) + | 1870 -> One (S (N N_rl_name_) :: r966) + | 3930 -> One (S (N N_rl_loc_section_paragraph__) :: r1998) + | 696 -> One (S (N N_rl_loc_same_area_clause__) :: r392) + | 236 -> One (S (N N_rl_loc_object_computer_clause__) :: r153) + | 1789 -> One (S (N N_rl_loc_communication_descr_clause__) :: r922) + | 2909 -> One (S (N N_rl_inspect_where_) :: r1556) + | 3663 -> One (S (N N_relop) :: r1905) + | 562 -> One (S (N N_qualname) :: r322) + | 1560 -> One (S (N N_qualname) :: r781) + | 2470 -> One (S (N N_qualname) :: r1281) + | 2496 -> One (S (N N_qualname) :: r1303) + | 3184 -> One (S (N N_qualname) :: r1722) + | 1940 -> One (S (N N_ntl_arithmetic_term_) :: r999) + | 2225 -> One (S (N N_nel_loc___anonymous_72__) :: r1116) + | 2955 -> One (S (N N_nel___anonymous_84_) :: r1573) + | 3133 -> One (S (N N_nel___anonymous_80_) :: r1685) + | 803 -> One (S (N N_nel___anonymous_42_) :: r452) + | 322 -> One (S (N N_name) :: r196) + | 341 -> One (S (N N_name) :: r209) + | 384 -> One (S (N N_name) :: r239) + | 405 -> One (S (N N_name) :: r251) + | 475 -> One (S (N N_name) :: r273) + | 478 -> One (S (N N_name) :: r275) + | 481 -> One (S (N N_name) :: r278) + | 484 -> One (S (N N_name) :: r281) + | 498 -> One (S (N N_name) :: r288) + | 604 -> One (S (N N_name) :: r348) + | 652 -> One (S (N N_name) :: r371) + | 674 -> One (S (N N_name) :: r380) + | 751 -> One (S (N N_name) :: r422) + | 814 -> One (S (N N_name) :: r457) + | 820 -> One (S (N N_name) :: r461) + | 823 -> One (S (N N_name) :: r462) + | 934 -> One (S (N N_name) :: r518) + | 1123 -> One (S (N N_name) :: r594) + | 1135 -> One (S (N N_name) :: r600) + | 1210 -> One (S (N N_name) :: r625) + | 1386 -> One (S (N N_name) :: r703) + | 1478 -> One (S (N N_name) :: r753) + | 1570 -> One (S (N N_name) :: r789) + | 1575 -> One (S (N N_name) :: r795) + | 1601 -> One (S (N N_name) :: r805) + | 1713 -> One (S (N N_name) :: r866) + | 1814 -> One (S (N N_name) :: r932) + | 2205 -> One (S (N N_name) :: r1105) + | 2215 -> One (S (N N_name) :: r1113) + | 2229 -> One (S (N N_name) :: r1118) + | 2300 -> One (S (N N_name) :: r1173) + | 2306 -> One (S (N N_name) :: r1176) + | 2320 -> One (S (N N_name) :: r1182) + | 2335 -> One (S (N N_name) :: r1194) + | 2346 -> One (S (N N_name) :: r1200) + | 2378 -> One (S (N N_name) :: r1221) + | 2442 -> One (S (N N_name) :: r1256) + | 2493 -> One (S (N N_name) :: r1300) + | 2665 -> One (S (N N_name) :: r1405) + | 2707 -> One (S (N N_name) :: r1439) + | 2721 -> One (S (N N_name) :: r1445) + | 2725 -> One (S (N N_name) :: r1451) + | 2734 -> One (S (N N_name) :: r1459) + | 2756 -> One (S (N N_name) :: r1468) + | 2759 -> One (S (N N_name) :: r1469) + | 2834 -> One (S (N N_name) :: r1517) + | 3018 -> One (S (N N_name) :: r1609) + | 3034 -> One (S (N N_name) :: r1614) + | 3090 -> One (S (N N_name) :: r1652) + | 3122 -> One (S (N N_name) :: r1679) + | 3175 -> One (S (N N_name) :: r1710) + | 3293 -> One (S (N N_name) :: r1754) + | 3425 -> One (S (N N_name) :: r1808) + | 879 -> One (S (N N_literal) :: r493) + | 1591 -> One (S (N N_literal) :: r801) + | 2030 -> One (S (N N_literal) :: r1040) + | 2481 -> One (S (N N_literal) :: r1293) + | 3166 -> One (S (N N_l_loc___anonymous_79__) :: r1702) + | 537 -> One (S (N N_integer) :: r308) + | 718 -> One (S (N N_integer) :: r404) + | 759 -> One (S (N N_integer) :: r434) + | 762 -> One (S (N N_integer) :: r436) + | 764 -> One (S (N N_integer) :: r438) + | 779 -> One (S (N N_integer) :: r443) + | 1392 -> One (S (N N_integer) :: r707) + | 1398 -> One (S (N N_integer) :: r716) + | 1401 -> One (S (N N_integer) :: r717) + | 1433 -> One (S (N N_integer) :: r734) + | 1646 -> One (S (N N_integer) :: r834) + | 1947 -> One (S (N N_integer) :: r1005) + | 1949 -> One (S (N N_integer) :: r1009) + | 1953 -> One (S (N N_integer) :: r1010) + | 1964 -> One (S (N N_integer) :: r1014) + | 1966 -> One (S (N N_integer) :: r1015) + | 2039 -> One (S (N N_integer) :: r1046) + | 2041 -> One (S (N N_integer) :: r1047) + | 2057 -> One (S (N N_integer) :: r1052) + | 2059 -> One (S (N N_integer) :: r1053) + | 2102 -> One (S (N N_integer) :: r1068) + | 2403 -> One (S (N N_imp_stmts) :: r1231) + | 2441 -> One (S (N N_imp_stmts) :: r1254) + | 2474 -> One (S (N N_imp_stmts) :: r1283) + | 2480 -> One (S (N N_imp_stmts) :: r1292) + | 2495 -> One (S (N N_imp_stmts) :: r1301) + | 2706 -> One (S (N N_imp_stmts) :: r1432) + | 2733 -> One (S (N N_imp_stmts) :: r1452) + | 2754 -> One (S (N N_imp_stmts) :: r1466) + | 2788 -> One (S (N N_imp_stmts) :: r1489) + | 2825 -> One (S (N N_imp_stmts) :: r1505) + | 3011 -> One (S (N N_imp_stmts) :: r1605) + | 3115 -> One (S (N N_imp_stmts) :: r1670) + | 3126 -> One (S (N N_imp_stmts) :: r1680) + | 3132 -> One (S (N N_imp_stmts) :: r1684) + | 3165 -> One (S (N N_imp_stmts) :: r1701) + | 3188 -> One (S (N N_imp_stmts) :: r1724) + | 3191 -> One (S (N N_imp_stmts) :: r1728) + | 3254 -> One (S (N N_imp_stmts) :: r1729) + | 3269 -> One (S (N N_imp_stmts) :: r1743) + | 3272 -> One (S (N N_imp_stmts) :: r1745) + | 3274 -> One (S (N N_imp_stmts) :: r1746) + | 3287 -> One (S (N N_imp_stmts) :: r1751) + | 3297 -> One (S (N N_imp_stmts) :: r1758) + | 3300 -> One (S (N N_imp_stmts) :: r1760) + | 3319 -> One (S (N N_imp_stmts) :: r1765) + | 3323 -> One (S (N N_imp_stmts) :: r1767) + | 3325 -> One (S (N N_imp_stmts) :: r1768) + | 3334 -> One (S (N N_imp_stmts) :: r1771) + | 3337 -> One (S (N N_imp_stmts) :: r1773) + | 3347 -> One (S (N N_imp_stmts) :: r1779) + | 3350 -> One (S (N N_imp_stmts) :: r1781) + | 3359 -> One (S (N N_imp_stmts) :: r1786) + | 3362 -> One (S (N N_imp_stmts) :: r1788) + | 3374 -> One (S (N N_imp_stmts) :: r1790) + | 3377 -> One (S (N N_imp_stmts) :: r1791) + | 3384 -> One (S (N N_imp_stmts) :: r1792) + | 3391 -> One (S (N N_imp_stmts) :: r1793) + | 3394 -> One (S (N N_imp_stmts) :: r1794) + | 3396 -> One (S (N N_imp_stmts) :: r1795) + | 3407 -> One (S (N N_imp_stmts) :: r1799) + | 3410 -> One (S (N N_imp_stmts) :: r1801) + | 3416 -> One (S (N N_imp_stmts) :: r1804) + | 3453 -> One (S (N N_imp_stmts) :: r1817) + | 3465 -> One (S (N N_imp_stmts) :: r1825) + | 3468 -> One (S (N N_imp_stmts) :: r1827) + | 3480 -> One (S (N N_imp_stmts) :: r1835) + | 3483 -> One (S (N N_imp_stmts) :: r1837) + | 3511 -> One (S (N N_imp_stmts) :: r1843) + | 3520 -> One (S (N N_imp_stmts) :: r1849) + | 3523 -> One (S (N N_imp_stmts) :: r1851) + | 3548 -> One (S (N N_imp_stmts) :: r1858) + | 3551 -> One (S (N N_imp_stmts) :: r1859) + | 3553 -> One (S (N N_imp_stmts) :: r1860) + | 3561 -> One (S (N N_imp_stmts) :: r1861) + | 3563 -> One (S (N N_imp_stmts) :: r1862) + | 3576 -> One (S (N N_imp_stmts) :: r1863) + | 3580 -> One (S (N N_imp_stmts) :: r1864) + | 3584 -> One (S (N N_imp_stmts) :: r1865) + | 3591 -> One (S (N N_imp_stmts) :: r1866) + | 3623 -> One (S (N N_imp_stmts) :: r1885) + | 3646 -> One (S (N N_imp_stmts) :: r1901) + | 3654 -> One (S (N N_imp_stmts) :: r1902) + | 3657 -> One (S (N N_imp_stmts) :: r1903) + | 3667 -> One (S (N N_imp_stmts) :: r1906) + | 3670 -> One (S (N N_imp_stmts) :: r1907) + | 3677 -> One (S (N N_imp_stmts) :: r1910) + | 3680 -> One (S (N N_imp_stmts) :: r1911) + | 3688 -> One (S (N N_imp_stmts) :: r1912) + | 3692 -> One (S (N N_imp_stmts) :: r1913) + | 3695 -> One (S (N N_imp_stmts) :: r1914) + | 3706 -> One (S (N N_imp_stmts) :: r1915) + | 3712 -> One (S (N N_imp_stmts) :: r1918) + | 3716 -> One (S (N N_imp_stmts) :: r1919) + | 3718 -> One (S (N N_imp_stmts) :: r1920) + | 3723 -> One (S (N N_imp_stmts) :: r1921) + | 3740 -> One (S (N N_imp_stmts) :: r1925) + | 3749 -> One (S (N N_imp_stmts) :: r1928) + | 3752 -> One (S (N N_imp_stmts) :: r1930) + | 3761 -> One (S (N N_imp_stmts) :: r1936) + | 3764 -> One (S (N N_imp_stmts) :: r1938) + | 3773 -> One (S (N N_imp_stmts) :: r1940) + | 3778 -> One (S (N N_imp_stmts) :: r1941) + | 3788 -> One (S (N N_imp_stmts) :: r1946) + | 3792 -> One (S (N N_imp_stmts) :: r1947) + | 3797 -> One (S (N N_imp_stmts) :: r1948) + | 3801 -> One (S (N N_imp_stmts) :: r1949) + | 3806 -> One (S (N N_imp_stmts) :: r1950) + | 3814 -> One (S (N N_imp_stmts) :: r1951) + | 3820 -> One (S (N N_imp_stmts) :: r1952) + | 3822 -> One (S (N N_imp_stmts) :: r1953) + | 3830 -> One (S (N N_imp_stmts) :: r1954) + | 3832 -> One (S (N N_imp_stmts) :: r1955) + | 2404 -> One (S (N N_idents) :: r1232) + | 2606 -> One (S (N N_idents) :: r1373) + | 2617 -> One (S (N N_idents) :: r1380) + | 2930 -> One (S (N N_idents) :: r1565) + | 855 -> One (S (N N_ident_or_literal) :: r475) + | 2125 -> One (S (N N_ident_or_literal) :: r1077) + | 2381 -> One (S (N N_ident_or_literal) :: r1222) + | 2826 -> One (S (N N_ident_or_literal) :: r1508) + | 3116 -> One (S (N N_ident_or_literal) :: r1672) + | 2094 -> One (S (N N_ident) :: r1065) + | 2097 -> One (S (N N_ident) :: r1066) + | 2406 -> One (S (N N_ident) :: r1236) + | 2447 -> One (S (N N_ident) :: r1266) + | 2710 -> One (S (N N_ident) :: r1440) + | 2740 -> One (S (N N_ident) :: r1460) + | 2755 -> One (S (N N_ident) :: r1467) + | 2827 -> One (S (N N_ident) :: r1511) + | 2841 -> One (S (N N_ident) :: r1523) + | 2863 -> One (S (N N_ident) :: r1531) + | 3015 -> One (S (N N_ident) :: r1608) + | 3189 -> One (S (N N_ident) :: r1726) + | 3462 -> One (S (N N_ident) :: r1823) + | 3634 -> One (S (N N_ident) :: r1897) + | 827 -> One (S (N N_function_name) :: r463) + | 840 -> One (S (N N_expression_no_all) :: r468) + | 843 -> One (S (N N_expression_no_all) :: r471) + | 869 -> One (S (N N_expression_no_all) :: r482) + | 871 -> One (S (N N_expression_no_all) :: r486) + | 877 -> One (S (N N_expression_no_all) :: r491) + | 898 -> One (S (N N_expression_no_all) :: r507) + | 909 -> One (S (N N_expression_no_all) :: r514) + | 1026 -> One (S (N N_expression_no_all) :: r556) + | 1049 -> One (S (N N_expression_no_all) :: r563) + | 806 -> One (S (N N_expression) :: r455) + | 1068 -> One (S (N N_expression) :: r569) + | 1224 -> One (S (N N_expression) :: r639) + | 1229 -> One (S (N N_expression) :: r647) + | 1332 -> One (S (N N_expression) :: r683) + | 1353 -> One (S (N N_expression) :: r689) + | 2389 -> One (S (N N_expression) :: r1226) + | 3057 -> One (S (N N_expression) :: r1641) + | 3073 -> One (S (N N_expression) :: r1645) + | 3038 -> One (S (N N_exit_spec) :: r1616) + | 3082 -> One (S (N N_class_condition_no_ident) :: r1649) + | 842 -> One (S (N N_atomic_expression_no_all) :: r469) + | 850 -> One (S (N N_atomic_expression_no_all) :: r472) + | 867 -> One (S (N N_atomic_expression_no_all) :: r478) + | 812 -> One (S (N N_atomic_expression) :: r456) + | 970 -> One (S (N N_atomic_expression) :: r533) + | 980 -> One (S (N N_atomic_expression) :: r534) + | 496 -> One (Sub (r20) :: r285) + | 1448 -> One (Sub (r20) :: r737) + | 1458 -> One (Sub (r20) :: r742) + | 32 -> One (Sub (r28) :: r29) + | 41 -> One (Sub (r31) :: r32) + | 52 -> One (Sub (r31) :: r33) + | 66 -> One (Sub (r35) :: r38) + | 98 -> One (Sub (r52) :: r55) + | 149 -> One (Sub (r52) :: r95) + | 1935 -> One (Sub (r52) :: r998) + | 2463 -> One (Sub (r52) :: r1269) + | 2502 -> One (Sub (r52) :: r1306) + | 2928 -> One (Sub (r52) :: r1564) + | 3036 -> One (Sub (r52) :: r1615) + | 4036 -> One (Sub (r52) :: r2066) + | 4046 -> One (Sub (r52) :: r2076) + | 3950 -> One (Sub (r57) :: r2005) + | 1641 -> One (Sub (r164) :: r831) + | 392 -> One (Sub (r242) :: r243) + | 418 -> One (Sub (r242) :: r252) + | 420 -> One (Sub (r242) :: r253) + | 434 -> One (Sub (r256) :: r257) + | 895 -> One (Sub (r499) :: r503) + | 902 -> One (Sub (r499) :: r509) + | 905 -> One (Sub (r499) :: r510) + | 917 -> One (Sub (r499) :: r515) + | 919 -> One (Sub (r499) :: r516) + | 921 -> One (Sub (r499) :: r517) + | 955 -> One (Sub (r499) :: r521) + | 1036 -> One (Sub (r499) :: r557) + | 1041 -> One (Sub (r499) :: r558) + | 893 -> One (Sub (r501) :: r502) + | 900 -> One (Sub (r501) :: r508) + | 963 -> One (Sub (r523) :: r525) + | 1018 -> One (Sub (r523) :: r550) + | 983 -> One (Sub (r529) :: r535) + | 987 -> One (Sub (r529) :: r536) + | 989 -> One (Sub (r529) :: r537) + | 991 -> One (Sub (r529) :: r538) + | 993 -> One (Sub (r529) :: r539) + | 995 -> One (Sub (r529) :: r540) + | 1001 -> One (Sub (r529) :: r542) + | 1003 -> One (Sub (r529) :: r543) + | 1005 -> One (Sub (r529) :: r544) + | 1007 -> One (Sub (r529) :: r545) + | 1009 -> One (Sub (r529) :: r546) + | 1013 -> One (Sub (r529) :: r547) + | 969 -> One (Sub (r531) :: r532) + | 998 -> One (Sub (r531) :: r541) + | 1060 -> One (Sub (r531) :: r567) + | 1062 -> One (Sub (r531) :: r568) + | 1154 -> One (Sub (r607) :: r608) + | 1159 -> One (Sub (r607) :: r609) + | 1161 -> One (Sub (r607) :: r610) + | 1178 -> One (Sub (r612) :: r613) + | 1184 -> One (Sub (r612) :: r614) + | 1186 -> One (Sub (r612) :: r615) + | 1188 -> One (Sub (r612) :: r616) + | 1232 -> One (Sub (r634) :: r649) + | 1340 -> One (Sub (r634) :: r685) + | 1343 -> One (Sub (r634) :: r686) + | 1348 -> One (Sub (r634) :: r688) + | 3006 -> One (Sub (r636) :: r1603) + | 1228 -> One (Sub (r645) :: r646) + | 1357 -> One (Sub (r645) :: r690) + | 1359 -> One (Sub (r645) :: r691) + | 1363 -> One (Sub (r645) :: r692) + | 1370 -> One (Sub (r645) :: r693) + | 1372 -> One (Sub (r645) :: r694) + | 1484 -> One (Sub (r756) :: r758) + | 1986 -> One (Sub (r756) :: r762) + | 1524 -> One (Sub (r772) :: r774) + | 1624 -> One (Sub (r822) :: r824) + | 1907 -> One (Sub (r983) :: r984) + | 1912 -> One (Sub (r983) :: r985) + | 1917 -> One (Sub (r983) :: r988) + | 1922 -> One (Sub (r983) :: r991) + | 1976 -> One (Sub (r1021) :: r1022) + | 1987 -> One (Sub (r1027) :: r1028) + | 2032 -> One (Sub (r1042) :: r1044) + | 2116 -> One (Sub (r1070) :: r1076) + | 2130 -> One (Sub (r1081) :: r1082) + | 2209 -> One (Sub (r1111) :: r1112) + | 2362 -> One (Sub (r1207) :: r1208) + | 2761 -> One (Sub (r1207) :: r1471) + | 3533 -> One (Sub (r1207) :: r1853) + | 2366 -> One (Sub (r1209) :: r1210) + | 2377 -> One (Sub (r1215) :: r1220) + | 2699 -> One (Sub (r1215) :: r1431) + | 2922 -> One (Sub (r1258) :: r1563) + | 3295 -> One (Sub (r1258) :: r1756) + | 2475 -> One (Sub (r1288) :: r1291) + | 2483 -> One (Sub (r1296) :: r1299) + | 2508 -> One (Sub (r1308) :: r1313) + | 2514 -> One (Sub (r1316) :: r1317) + | 2530 -> One (Sub (r1316) :: r1326) + | 2554 -> One (Sub (r1316) :: r1339) + | 2561 -> One (Sub (r1316) :: r1344) + | 2569 -> One (Sub (r1351) :: r1356) + | 2636 -> One (Sub (r1377) :: r1387) + | 2627 -> One (Sub (r1385) :: r1386) + | 2642 -> One (Sub (r1390) :: r1392) + | 2651 -> One (Sub (r1399) :: r1400) + | 2669 -> One (Sub (r1407) :: r1410) + | 2689 -> One (Sub (r1407) :: r1417) + | 3602 -> One (Sub (r1419) :: r1869) + | 2776 -> One (Sub (r1475) :: r1487) + | 2817 -> One (Sub (r1475) :: r1503) + | 3111 -> One (Sub (r1475) :: r1668) + | 3475 -> One (Sub (r1475) :: r1833) + | 2766 -> One (Sub (r1482) :: r1484) + | 2768 -> One (Sub (r1482) :: r1486) + | 2903 -> One (Sub (r1554) :: r1555) + | 2911 -> One (Sub (r1554) :: r1557) + | 3051 -> One (Sub (r1624) :: r1632) + | 3499 -> One (Sub (r1624) :: r1841) + | 3055 -> One (Sub (r1636) :: r1637) + | 3071 -> One (Sub (r1636) :: r1644) + | 3094 -> One (Sub (r1657) :: r1658) + | 3120 -> One (Sub (r1657) :: r1676) + | 3155 -> One (Sub (r1694) :: r1697) + | 3158 -> One (Sub (r1699) :: r1700) + | 3258 -> One (Sub (r1735) :: r1737) + | 3405 -> One (Sub (r1735) :: r1797) | 24 -> One (r0) | 3 -> One (r1) | 2 -> One (r2) @@ -7361,1959 +7419,1987 @@ let recover = | 18 -> One (r13) | 17 -> One (r14) | 16 -> One (r15) - | 4016 -> One (r16) - | 4015 -> One (r17) + | 3961 -> One (r16) + | 3960 -> One (r17) | 27 -> One (r18) - | 30 -> One (r19) - | 29 -> One (r20) + | 70 -> One (r19) | 74 -> One (r21) - | 94 -> One (r23) - | 93 -> One (r24) - | 92 -> One (r25) - | 91 -> One (r26) - | 90 -> One (r27) - | 3896 -> One (r29) - | 3895 -> One (r30) - | 3894 -> One (r31) - | 3893 -> One (r32) - | 3892 -> One (r33) - | 3891 -> One (r34) - | 3890 -> One (r35) - | 3889 -> One (r36) - | 3888 -> One (r37) - | 89 -> One (r38) - | 88 -> One (r39) - | 85 -> One (r40) - | 76 -> One (r41) - | 35 -> One (r42) - | 33 -> One (r43) - | 73 -> One (r44) - | 72 -> One (r46) - | 51 | 850 -> One (r47) - | 55 -> One (r49) - | 57 -> One (r50) - | 68 | 351 -> One (r51) - | 69 -> One (r53) - | 60 -> One (r54) - | 71 -> One (r55) - | 80 -> One (r56) - | 82 -> One (r58) - | 79 -> One (r59) - | 87 -> One (r60) - | 97 -> One (r61) - | 96 -> One (r62) - | 112 -> One (r63) - | 111 -> One (r64) + | 73 -> One (r22) + | 72 | 3907 -> One (r23) + | 31 | 3906 -> One (r24) + | 29 | 3905 -> One (r25) + | 28 | 3904 -> One (r26) + | 69 -> One (r27) + | 68 -> One (r29) + | 47 | 861 -> One (r30) + | 51 -> One (r32) + | 53 -> One (r33) + | 64 | 390 -> One (r34) + | 65 -> One (r36) + | 56 -> One (r37) + | 67 -> One (r38) + | 80 -> One (r39) + | 83 -> One (r41) + | 81 -> One (r42) + | 75 | 3908 -> One (r43) + | 78 -> One (r44) + | 101 -> One (r45) + | 100 -> One (r46) + | 97 -> One (r47) + | 88 -> One (r48) + | 87 -> One (r49) + | 85 -> One (r50) + | 92 -> One (r51) + | 94 -> One (r53) + | 91 -> One (r54) + | 99 -> One (r55) + | 127 -> One (r56) + | 3887 -> One (r59) + | 3886 -> One (r60) + | 129 | 3912 -> One (r61) + | 104 | 3911 -> One (r62) + | 103 | 3910 -> One (r63) + | 102 | 3909 -> One (r64) | 108 -> One (r65) - | 104 -> One (r66) - | 101 -> One (r67) - | 100 -> One (r68) - | 99 -> One (r69) - | 103 -> One (r70) - | 107 -> One (r71) - | 106 -> One (r72) - | 110 -> One (r73) - | 3885 -> One (r74) - | 3884 -> One (r75) - | 3883 -> One (r76) - | 3882 -> One (r77) - | 3881 -> One (r78) - | 705 -> One (r79) - | 173 -> One (r80) - | 172 -> One (r81) - | 115 -> One (r82) - | 126 -> One (r83) - | 127 -> One (r85) - | 118 -> One (r86) - | 117 -> One (r87) - | 135 -> One (r88) - | 138 -> One (r90) - | 140 -> One (r92) - | 131 -> One (r93) - | 130 -> One (r94) - | 133 -> One (r95) - | 144 -> One (r97) - | 143 -> One (r98) - | 142 -> One (r99) - | 147 -> One (r100) - | 146 -> One (r101) - | 153 -> One (r102) - | 152 -> One (r103) - | 151 -> One (r104) - | 149 -> One (r105) - | 159 -> One (r106) - | 160 -> One (r108) - | 155 -> One (r109) - | 163 -> One (r110) - | 700 -> One (r111) - | 478 -> One (r112) - | 176 -> One (r113) - | 175 -> One (r114) - | 471 -> One (r115) - | 433 -> One (r116) - | 271 -> One (r117) - | 192 -> One (r118) - | 179 -> One (r119) - | 178 -> One (r120) + | 106 -> One (r66) + | 111 -> One (r67) + | 110 -> One (r68) + | 114 -> One (r69) + | 113 -> One (r70) + | 117 -> One (r71) + | 116 -> One (r72) + | 120 -> One (r73) + | 119 -> One (r74) + | 123 -> One (r75) + | 122 -> One (r76) + | 126 -> One (r77) + | 125 -> One (r78) + | 134 -> One (r79) + | 133 -> One (r80) + | 132 -> One (r81) + | 131 -> One (r82) + | 137 -> One (r83) + | 136 -> One (r84) + | 152 -> One (r85) + | 151 -> One (r86) + | 148 -> One (r87) + | 144 -> One (r88) + | 141 -> One (r89) + | 140 -> One (r90) + | 139 -> One (r91) + | 143 -> One (r92) + | 147 -> One (r93) + | 146 -> One (r94) + | 150 -> One (r95) + | 3877 -> One (r96) + | 3876 -> One (r97) + | 3875 -> One (r98) + | 3874 -> One (r99) + | 3873 -> One (r100) + | 2201 -> One (r101) + | 744 -> One (r102) + | 213 -> One (r103) + | 212 -> One (r104) + | 155 -> One (r105) + | 166 -> One (r106) + | 167 -> One (r108) + | 158 -> One (r109) + | 157 -> One (r110) + | 175 -> One (r111) + | 178 -> One (r113) + | 180 -> One (r115) + | 171 -> One (r116) + | 170 -> One (r117) + | 173 -> One (r118) + | 184 -> One (r120) | 183 -> One (r121) - | 181 -> One (r122) - | 190 -> One (r123) - | 189 -> One (r124) - | 188 -> One (r125) - | 187 -> One (r126) - | 195 -> One (r127) - | 194 -> One (r128) - | 215 -> One (r129) - | 214 -> One (r130) - | 202 -> One (r131) - | 198 -> One (r132) - | 210 -> One (r133) - | 211 -> One (r135) - | 207 -> One (r136) - | 206 -> One (r137) - | 230 -> One (r138) - | 229 -> One (r139) - | 228 -> One (r140) - | 240 -> One (r142) - | 220 -> One (r143) - | 219 -> One (r144) - | 227 -> One (r145) - | 226 -> One (r146) - | 225 -> One (r147) - | 224 -> One (r148) - | 223 -> One (r149) - | 222 -> One (r150) - | 249 -> One (r151) - | 256 -> One (r153) - | 255 -> One (r154) - | 254 -> One (r155) - | 259 -> One (r157) - | 242 -> One (r158) - | 250 -> One (r159) + | 182 -> One (r122) + | 187 -> One (r123) + | 186 -> One (r124) + | 193 -> One (r125) + | 192 -> One (r126) + | 191 -> One (r127) + | 189 -> One (r128) + | 199 -> One (r129) + | 200 -> One (r131) + | 195 -> One (r132) + | 203 -> One (r133) + | 739 -> One (r134) + | 517 -> One (r135) + | 216 -> One (r136) + | 215 -> One (r137) + | 510 -> One (r138) + | 472 -> One (r139) + | 310 -> One (r140) + | 232 -> One (r141) + | 219 -> One (r142) + | 218 -> One (r143) + | 223 -> One (r144) + | 221 -> One (r145) + | 230 -> One (r146) + | 229 -> One (r147) + | 228 -> One (r148) + | 227 -> One (r149) + | 235 -> One (r150) + | 234 -> One (r151) + | 254 -> One (r152) + | 253 -> One (r153) + | 242 -> One (r154) + | 238 -> One (r155) + | 249 -> One (r156) + | 250 -> One (r158) + | 246 -> One (r159) | 245 -> One (r160) - | 244 -> One (r161) - | 253 -> One (r162) - | 252 -> One (r163) - | 251 -> One (r164) - | 268 -> One (r165) - | 430 -> One (r166) - | 273 -> One (r167) - | 285 -> One (r168) - | 282 -> One (r169) - | 281 -> One (r170) - | 276 -> One (r171) - | 280 -> One (r172) - | 284 -> One (r173) - | 291 -> One (r174) - | 293 -> One (r176) - | 290 -> One (r177) - | 301 -> One (r178) - | 300 -> One (r179) - | 299 -> One (r180) - | 298 -> One (r181) - | 307 -> One (r182) - | 306 -> One (r184) - | 304 -> One (r185) - | 303 -> One (r186) - | 317 -> One (r187) - | 316 -> One (r189) - | 313 -> One (r190) - | 312 -> One (r191) - | 311 -> One (r192) - | 309 -> One (r193) - | 321 -> One (r194) - | 320 -> One (r195) - | 324 -> One (r196) - | 323 -> One (r197) - | 327 -> One (r198) - | 326 -> One (r199) - | 333 -> One (r200) - | 332 -> One (r201) - | 331 -> One (r202) - | 330 -> One (r203) - | 340 -> One (r204) - | 339 -> One (r205) - | 338 -> One (r206) - | 337 -> One (r207) - | 336 -> One (r208) - | 344 -> One (r209) - | 343 -> One (r210) - | 342 -> One (r211) - | 365 -> One (r212) - | 364 -> One (r213) - | 348 -> One (r214) - | 347 -> One (r215) - | 346 -> One (r216) - | 361 -> One (r217) + | 269 -> One (r161) + | 268 -> One (r162) + | 267 -> One (r163) + | 279 -> One (r165) + | 259 -> One (r166) + | 258 -> One (r167) + | 266 -> One (r168) + | 265 -> One (r169) + | 264 -> One (r170) + | 263 -> One (r171) + | 262 -> One (r172) + | 261 -> One (r173) + | 288 -> One (r174) + | 295 -> One (r176) + | 294 -> One (r177) + | 293 -> One (r178) + | 298 -> One (r180) + | 281 -> One (r181) + | 289 -> One (r182) + | 284 -> One (r183) + | 283 -> One (r184) + | 292 -> One (r185) + | 291 -> One (r186) + | 290 -> One (r187) + | 307 -> One (r188) + | 469 -> One (r189) + | 312 -> One (r190) + | 324 -> One (r191) + | 321 -> One (r192) + | 320 -> One (r193) + | 315 -> One (r194) + | 319 -> One (r195) + | 323 -> One (r196) + | 330 -> One (r197) + | 332 -> One (r199) + | 329 -> One (r200) + | 340 -> One (r201) + | 339 -> One (r202) + | 338 -> One (r203) + | 337 -> One (r204) + | 346 -> One (r205) + | 345 -> One (r207) + | 343 -> One (r208) + | 342 -> One (r209) + | 356 -> One (r210) + | 355 -> One (r212) + | 352 -> One (r213) + | 351 -> One (r214) + | 350 -> One (r215) + | 348 -> One (r216) + | 360 -> One (r217) | 359 -> One (r218) - | 354 -> One (r220) - | 357 -> One (r221) - | 356 -> One (r222) - | 386 -> One (r223) - | 390 -> One (r225) + | 363 -> One (r219) + | 362 -> One (r220) + | 366 -> One (r221) + | 365 -> One (r222) + | 372 -> One (r223) + | 371 -> One (r224) + | 370 -> One (r225) | 369 -> One (r226) - | 368 -> One (r227) - | 367 -> One (r228) - | 380 -> One (r229) - | 382 -> One (r230) - | 414 -> One (r231) - | 413 -> One (r232) - | 418 -> One (r234) - | 400 -> One (r235) - | 399 -> One (r236) - | 398 -> One (r237) - | 404 -> One (r238) - | 403 -> One (r239) - | 402 -> One (r240) - | 408 -> One (r241) - | 407 -> One (r242) - | 406 -> One (r243) - | 412 -> One (r244) - | 411 -> One (r245) - | 410 -> One (r246) - | 429 -> One (r247) - | 435 -> One (r248) - | 438 -> One (r249) - | 437 -> One (r250) - | 441 -> One (r251) - | 440 -> One (r252) - | 449 -> One (r253) - | 444 -> One (r254) - | 443 -> One (r255) - | 448 -> One (r256) - | 447 -> One (r257) - | 446 -> One (r258) - | 454 -> One (r259) - | 453 -> One (r260) - | 456 -> One (r261) - | 458 -> One (r262) - | 462 -> One (r263) - | 461 -> One (r264) - | 460 -> One (r265) - | 469 -> One (r266) - | 695 -> One (r267) - | 631 -> One (r268) - | 481 -> One (r269) - | 480 -> One (r270) - | 629 -> One (r271) - | 483 -> One (r272) - | 625 -> One (r273) - | 624 -> One (r274) - | 487 -> One (r275) - | 486 -> One (r276) - | 496 -> One (r277) - | 495 -> One (r278) - | 497 -> One (r280) - | 489 -> One (r281) - | 491 -> One (r282) - | 494 -> One (r283) - | 502 -> One (r284) - | 499 -> One (r285) - | 507 -> One (r286) - | 506 -> One (r287) - | 505 -> One (r288) - | 519 -> One (r289) - | 515 -> One (r290) - | 514 -> One (r291) - | 513 -> One (r292) - | 511 -> One (r293) - | 512 -> One (r295) - | 510 -> One (r296) - | 518 -> One (r297) - | 517 -> One (r298) - | 524 -> One (r299) - | 531 -> One (r300) - | 530 -> One (r302) - | 527 -> One (r303) - | 526 -> One (r304) - | 536 -> One (r305) - | 537 -> One (r307) - | 533 -> One (r308) - | 539 -> One (r309) - | 544 -> One (r310) - | 553 -> One (r312) - | 545 -> One (r313) - | 542 -> One (r314) - | 541 -> One (r315) - | 552 -> One (r316) - | 550 -> One (r317) - | 548 -> One (r318) - | 547 -> One (r319) + | 379 -> One (r227) + | 378 -> One (r228) + | 377 -> One (r229) + | 376 -> One (r230) + | 375 -> One (r231) + | 383 -> One (r232) + | 382 -> One (r233) + | 381 -> One (r234) + | 404 -> One (r235) + | 403 -> One (r236) + | 387 -> One (r237) + | 386 -> One (r238) + | 385 -> One (r239) + | 400 -> One (r240) + | 398 -> One (r241) + | 393 -> One (r243) + | 396 -> One (r244) + | 395 -> One (r245) + | 425 -> One (r246) + | 429 -> One (r248) + | 408 -> One (r249) + | 407 -> One (r250) + | 406 -> One (r251) + | 419 -> One (r252) + | 421 -> One (r253) + | 453 -> One (r254) + | 452 -> One (r255) + | 457 -> One (r257) + | 439 -> One (r258) + | 438 -> One (r259) + | 437 -> One (r260) + | 443 -> One (r261) + | 442 -> One (r262) + | 441 -> One (r263) + | 447 -> One (r264) + | 446 -> One (r265) + | 445 -> One (r266) + | 451 -> One (r267) + | 450 -> One (r268) + | 449 -> One (r269) + | 468 -> One (r270) + | 474 -> One (r271) + | 477 -> One (r272) + | 476 -> One (r273) + | 480 -> One (r274) + | 479 -> One (r275) + | 488 -> One (r276) + | 483 -> One (r277) + | 482 -> One (r278) + | 487 -> One (r279) + | 486 -> One (r280) + | 485 -> One (r281) + | 493 -> One (r282) + | 492 -> One (r283) + | 495 -> One (r284) + | 497 -> One (r285) + | 501 -> One (r286) + | 500 -> One (r287) + | 499 -> One (r288) + | 508 -> One (r289) + | 734 -> One (r290) + | 670 -> One (r291) + | 520 -> One (r292) + | 519 -> One (r293) + | 668 -> One (r294) + | 522 -> One (r295) + | 664 -> One (r296) + | 663 -> One (r297) + | 526 -> One (r298) + | 525 -> One (r299) + | 535 -> One (r300) + | 534 -> One (r301) + | 536 -> One (r303) + | 528 -> One (r304) + | 530 -> One (r305) + | 533 -> One (r306) + | 541 -> One (r307) + | 538 -> One (r308) + | 546 -> One (r309) + | 545 -> One (r310) + | 544 -> One (r311) + | 558 -> One (r312) + | 554 -> One (r313) + | 553 -> One (r314) + | 552 -> One (r315) + | 550 -> One (r316) + | 551 -> One (r318) + | 549 -> One (r319) | 557 -> One (r320) | 556 -> One (r321) - | 567 -> One (r322) - | 564 -> One (r323) - | 561 -> One (r324) - | 566 -> One (r325) - | 585 -> One (r326) - | 582 -> One (r327) - | 578 -> One (r328) - | 577 -> One (r329) + | 563 -> One (r322) + | 570 -> One (r323) + | 569 -> One (r325) + | 566 -> One (r326) + | 565 -> One (r327) + | 575 -> One (r328) | 576 -> One (r330) - | 575 -> One (r331) - | 581 -> One (r332) - | 580 -> One (r333) - | 584 -> One (r334) - | 591 -> One (r335) - | 592 -> One (r337) - | 588 -> One (r338) - | 587 -> One (r339) - | 605 -> One (r340) - | 604 -> One (r341) - | 603 -> One (r342) - | 609 -> One (r343) - | 608 -> One (r344) - | 607 -> One (r345) - | 612 -> One (r346) - | 611 -> One (r347) - | 615 -> One (r348) - | 628 -> One (r349) - | 692 -> One (r350) - | 633 -> One (r351) - | 650 -> One (r352) - | 649 -> One (r354) - | 639 -> One (r355) - | 637 -> One (r356) - | 636 -> One (r357) - | 648 -> One (r358) - | 647 -> One (r359) - | 646 -> One (r360) - | 642 -> One (r361) - | 645 -> One (r362) + | 572 -> One (r331) + | 578 -> One (r332) + | 583 -> One (r333) + | 592 -> One (r335) + | 584 -> One (r336) + | 581 -> One (r337) + | 580 -> One (r338) + | 591 -> One (r339) + | 589 -> One (r340) + | 587 -> One (r341) + | 586 -> One (r342) + | 596 -> One (r343) + | 595 -> One (r344) + | 606 -> One (r345) + | 603 -> One (r346) + | 600 -> One (r347) + | 605 -> One (r348) + | 624 -> One (r349) + | 621 -> One (r350) + | 617 -> One (r351) + | 616 -> One (r352) + | 615 -> One (r353) + | 614 -> One (r354) + | 620 -> One (r355) + | 619 -> One (r356) + | 623 -> One (r357) + | 630 -> One (r358) + | 631 -> One (r360) + | 627 -> One (r361) + | 626 -> One (r362) | 644 -> One (r363) - | 655 -> One (r364) - | 654 -> One (r365) - | 653 -> One (r366) - | 685 -> One (r367) - | 684 -> One (r368) - | 670 -> One (r369) - | 667 -> One (r370) - | 666 -> One (r371) - | 665 -> One (r372) - | 664 -> One (r373) - | 662 -> One (r374) - | 669 -> One (r375) - | 677 -> One (r376) - | 676 -> One (r377) - | 674 -> One (r378) - | 672 -> One (r379) - | 681 -> One (r380) - | 680 -> One (r381) - | 687 -> One (r382) - | 691 -> One (r383) - | 3875 -> One (r384) - | 708 -> One (r385) - | 707 -> One (r386) - | 730 -> One (r387) - | 727 -> One (r388) - | 726 -> One (r389) - | 725 -> One (r390) - | 711 -> One (r391) - | 710 -> One (r392) - | 3866 -> One (r394) - | 3865 -> One (r395) - | 3864 -> One (r396) - | 3863 -> One (r397) - | 3862 -> One (r398) - | 2190 -> One (r399) - | 733 -> One (r400) - | 732 -> One (r401) - | 731 -> One (r402) - | 719 -> One (r403) - | 716 -> One (r404) - | 714 -> One (r405) - | 713 -> One (r406) - | 718 -> One (r407) - | 724 -> One (r408) - | 723 -> One (r409) - | 722 -> One (r410) - | 721 -> One (r411) - | 729 -> One (r412) - | 2177 -> One (r413) - | 2074 -> One (r414) - | 1799 -> One (r415) - | 1698 -> One (r416) - | 1693 -> One (r417) - | 1688 -> One (r418) - | 1682 -> One (r419) - | 736 -> One (r420) - | 735 -> One (r421) - | 1678 -> One (r422) - | 739 -> One (r423) - | 738 -> One (r424) - | 1554 -> One (r425) - | 787 -> One (r426) - | 786 -> One (r427) - | 741 -> One (r428) - | 771 -> One (r429) - | 767 -> One (r430) - | 766 -> One (r431) - | 757 -> One (r432) - | 763 -> One (r434) - | 758 -> One (r435) - | 747 -> One (r436) - | 746 -> One (r437) - | 744 -> One (r438) - | 750 -> One (r439) - | 749 -> One (r440) - | 756 -> One (r441) - | 752 -> One (r442) - | 755 -> One (r443) - | 754 -> One (r444) - | 762 -> One (r445) - | 761 -> One (r446) - | 759 -> One (r447) - | 770 -> One (r448) - | 769 -> One (r449) - | 777 -> One (r450) - | 776 -> One (r451) - | 780 -> One (r452) - | 779 -> One (r453) - | 783 -> One (r454) - | 1508 -> One (r455) - | 1507 -> One (r456) - | 791 -> One (r457) - | 793 -> One (r458) - | 1059 -> One (r459) - | 1056 -> One (r460) - | 1055 -> One (r461) - | 1054 -> One (r462) - | 804 -> One (r463) - | 1048 -> One (r464) - | 1047 -> One (r465) - | 806 -> One (r466) - | 810 -> One (r467) - | 813 -> One (r468) - | 824 -> One (r469) - | 828 -> One (r470) - | 1035 -> One (r471) - | 1034 -> One (r472) - | 1033 -> One (r473) - | 1032 -> One (r474) - | 1029 -> One (r475) - | 1028 -> One (r476) - | 1027 -> One (r477) - | 1024 -> One (r478) - | 1023 -> One (r479) - | 843 -> One (r480) - | 1021 -> One (r481) - | 948 -> One (r482) - | 947 -> One (r483) - | 943 -> One (r484) - | 942 -> One (r485) - | 941 -> One (r486) - | 940 -> One (r487) - | 939 -> One (r488) - | 938 -> One (r489) - | 937 -> One (r490) - | 936 -> One (r491) - | 935 -> One (r492) - | 863 -> One (r493) - | 934 -> One (r494) - | 933 -> One (r495) - | 932 -> One (r496) - | 931 -> One (r497) - | 918 -> One (r498) - | 872 -> One (r499) - | 871 -> One (r500) - | 870 -> One (r501) - | 874 -> One (r502) - | 877 -> One (r503) - | 893 -> One (r504) - | 912 -> One (r506) - | 883 -> One (r508) - | 885 -> One (r509) - | 915 -> One (r510) - | 914 -> One (r511) - | 913 -> One (r512) - | 888 -> One (r513) - | 890 -> One (r514) - | 892 -> One (r515) - | 895 -> One (r516) - | 902 -> One (r517) - | 901 -> One (r518) - | 900 -> One (r519) - | 899 -> One (r520) - | 907 -> One (r521) - | 909 -> One (r522) - | 911 -> One (r523) - | 929 -> One (r524) - | 927 -> One (r525) - | 926 -> One (r526) - | 945 -> One (r527) - | 954 -> One (r528) - | 956 -> One (r530) - | 955 -> One (r531) - | 974 -> One (r532) - | 971 -> One (r534) - | 986 -> One (r536) - | 975 -> One (r538) - | 967 -> One (r539) - | 970 -> One (r540) - | 973 -> One (r541) - | 977 -> One (r542) - | 979 -> One (r543) - | 981 -> One (r544) - | 983 -> One (r545) - | 985 -> One (r546) - | 988 -> One (r547) - | 991 -> One (r548) - | 993 -> One (r549) - | 995 -> One (r550) - | 997 -> One (r551) - | 999 -> One (r552) - | 1003 -> One (r553) - | 1005 -> One (r554) - | 1009 -> One (r555) - | 1008 -> One (r556) - | 1013 -> One (r557) - | 1012 -> One (r558) - | 1019 -> One (r559) - | 1018 -> One (r560) - | 1017 -> One (r561) - | 1016 -> One (r562) - | 1026 -> One (r563) - | 1031 -> One (r564) - | 1037 -> One (r565) - | 1042 -> One (r566) - | 1041 -> One (r567) - | 1040 -> One (r568) - | 1039 -> One (r569) - | 1046 -> One (r570) - | 1045 -> One (r571) - | 1044 -> One (r572) - | 1050 -> One (r573) - | 1052 -> One (r574) - | 1058 -> One (r575) - | 1078 -> One (r576) - | 1064 -> One (r577) - | 1072 -> One (r578) - | 1069 -> One (r579) - | 1066 -> One (r580) - | 1071 -> One (r581) - | 1082 -> One (r582) - | 1080 -> One (r583) - | 1090 -> One (r584) - | 1104 -> One (r586) - | 1101 -> One (r587) - | 1100 -> One (r588) - | 1091 -> One (r589) - | 1087 -> One (r590) - | 1085 -> One (r591) - | 1084 -> One (r592) - | 1089 -> One (r593) - | 1098 -> One (r594) - | 1179 -> One (r595) - | 1180 -> One (r597) - | 1108 -> One (r598) - | 1110 -> One (r599) - | 1113 -> One (r600) - | 1115 -> One (r601) - | 1121 -> One (r602) - | 1118 -> One (r603) - | 1120 -> One (r604) - | 1127 -> One (r605) - | 1125 -> One (r606) - | 1129 -> One (r607) - | 1134 -> One (r608) - | 1133 -> One (r609) - | 1139 -> One (r610) - | 1142 -> One (r611) - | 1144 -> One (r612) - | 1146 -> One (r614) - | 1149 -> One (r615) - | 1151 -> One (r616) - | 1171 -> One (r617) - | 1170 -> One (r619) - | 1174 -> One (r620) - | 1176 -> One (r621) - | 1178 -> One (r622) - | 1183 -> One (r623) - | 1186 -> One (r624) - | 1185 -> One (r625) - | 1191 -> One (r626) - | 1195 -> One (r627) - | 1193 -> One (r628) - | 1198 -> One (r629) - | 1197 -> One (r630) - | 1200 -> One (r631) - | 1205 -> One (r632) - | 1202 -> One (r633) - | 1204 -> One (r634) - | 1210 -> One (r635) - | 1208 -> One (r636) - | 1330 -> One (r637) - | 1222 -> One (r639) - | 1366 -> One (r641) + | 643 -> One (r364) + | 642 -> One (r365) + | 648 -> One (r366) + | 647 -> One (r367) + | 646 -> One (r368) + | 651 -> One (r369) + | 650 -> One (r370) + | 654 -> One (r371) + | 667 -> One (r372) + | 731 -> One (r373) + | 672 -> One (r374) + | 689 -> One (r375) + | 688 -> One (r377) + | 678 -> One (r378) + | 676 -> One (r379) + | 675 -> One (r380) + | 687 -> One (r381) + | 686 -> One (r382) + | 685 -> One (r383) + | 681 -> One (r384) + | 684 -> One (r385) + | 683 -> One (r386) + | 694 -> One (r387) + | 693 -> One (r388) + | 692 -> One (r389) + | 724 -> One (r390) + | 723 -> One (r391) + | 709 -> One (r392) + | 706 -> One (r393) + | 705 -> One (r394) + | 704 -> One (r395) + | 703 -> One (r396) + | 701 -> One (r397) + | 708 -> One (r398) + | 716 -> One (r399) + | 715 -> One (r400) + | 713 -> One (r401) + | 711 -> One (r402) + | 720 -> One (r403) + | 719 -> One (r404) + | 726 -> One (r405) + | 730 -> One (r406) + | 2188 -> One (r407) + | 2085 -> One (r408) + | 1810 -> One (r409) + | 1709 -> One (r410) + | 1704 -> One (r411) + | 1699 -> One (r412) + | 1693 -> One (r413) + | 747 -> One (r414) + | 746 -> One (r415) + | 1689 -> One (r416) + | 750 -> One (r417) + | 749 -> One (r418) + | 1565 -> One (r419) + | 798 -> One (r420) + | 797 -> One (r421) + | 752 -> One (r422) + | 782 -> One (r423) + | 778 -> One (r424) + | 777 -> One (r425) + | 768 -> One (r426) + | 774 -> One (r428) + | 769 -> One (r429) + | 758 -> One (r430) + | 757 -> One (r431) + | 755 -> One (r432) + | 761 -> One (r433) + | 760 -> One (r434) + | 767 -> One (r435) + | 763 -> One (r436) + | 766 -> One (r437) + | 765 -> One (r438) + | 773 -> One (r439) + | 772 -> One (r440) + | 770 -> One (r441) + | 781 -> One (r442) + | 780 -> One (r443) + | 788 -> One (r444) + | 787 -> One (r445) + | 791 -> One (r446) + | 790 -> One (r447) + | 794 -> One (r448) + | 1519 -> One (r449) + | 1518 -> One (r450) + | 802 -> One (r451) + | 804 -> One (r452) + | 1070 -> One (r453) + | 1067 -> One (r454) + | 1066 -> One (r455) + | 1065 -> One (r456) + | 815 -> One (r457) + | 1059 -> One (r458) + | 1058 -> One (r459) + | 817 -> One (r460) + | 821 -> One (r461) + | 824 -> One (r462) + | 835 -> One (r463) + | 839 -> One (r464) + | 1046 -> One (r465) + | 1045 -> One (r466) + | 1044 -> One (r467) + | 1043 -> One (r468) + | 1040 -> One (r469) + | 1039 -> One (r470) + | 1038 -> One (r471) + | 1035 -> One (r472) + | 1034 -> One (r473) + | 854 -> One (r474) + | 1032 -> One (r475) + | 959 -> One (r476) + | 958 -> One (r477) + | 954 -> One (r478) + | 953 -> One (r479) + | 952 -> One (r480) + | 951 -> One (r481) + | 950 -> One (r482) + | 949 -> One (r483) + | 948 -> One (r484) + | 947 -> One (r485) + | 946 -> One (r486) + | 874 -> One (r487) + | 945 -> One (r488) + | 944 -> One (r489) + | 943 -> One (r490) + | 942 -> One (r491) + | 929 -> One (r492) + | 883 -> One (r493) + | 882 -> One (r494) + | 881 -> One (r495) + | 885 -> One (r496) + | 888 -> One (r497) + | 904 -> One (r498) + | 923 -> One (r500) + | 894 -> One (r502) + | 896 -> One (r503) + | 926 -> One (r504) + | 925 -> One (r505) + | 924 -> One (r506) + | 899 -> One (r507) + | 901 -> One (r508) + | 903 -> One (r509) + | 906 -> One (r510) + | 913 -> One (r511) + | 912 -> One (r512) + | 911 -> One (r513) + | 910 -> One (r514) + | 918 -> One (r515) + | 920 -> One (r516) + | 922 -> One (r517) + | 940 -> One (r518) + | 938 -> One (r519) + | 937 -> One (r520) + | 956 -> One (r521) + | 965 -> One (r522) + | 967 -> One (r524) + | 966 -> One (r525) + | 985 -> One (r526) + | 982 -> One (r528) + | 997 -> One (r530) + | 986 -> One (r532) + | 978 -> One (r533) + | 981 -> One (r534) + | 984 -> One (r535) + | 988 -> One (r536) + | 990 -> One (r537) + | 992 -> One (r538) + | 994 -> One (r539) + | 996 -> One (r540) + | 999 -> One (r541) + | 1002 -> One (r542) + | 1004 -> One (r543) + | 1006 -> One (r544) + | 1008 -> One (r545) + | 1010 -> One (r546) + | 1014 -> One (r547) + | 1016 -> One (r548) + | 1020 -> One (r549) + | 1019 -> One (r550) + | 1024 -> One (r551) + | 1023 -> One (r552) + | 1030 -> One (r553) + | 1029 -> One (r554) + | 1028 -> One (r555) + | 1027 -> One (r556) + | 1037 -> One (r557) + | 1042 -> One (r558) + | 1048 -> One (r559) + | 1053 -> One (r560) + | 1052 -> One (r561) + | 1051 -> One (r562) + | 1050 -> One (r563) + | 1057 -> One (r564) + | 1056 -> One (r565) + | 1055 -> One (r566) + | 1061 -> One (r567) + | 1063 -> One (r568) + | 1069 -> One (r569) + | 1089 -> One (r570) + | 1075 -> One (r571) + | 1083 -> One (r572) + | 1080 -> One (r573) + | 1077 -> One (r574) + | 1082 -> One (r575) + | 1093 -> One (r576) + | 1091 -> One (r577) + | 1101 -> One (r578) + | 1115 -> One (r580) + | 1112 -> One (r581) + | 1111 -> One (r582) + | 1102 -> One (r583) + | 1098 -> One (r584) + | 1096 -> One (r585) + | 1095 -> One (r586) + | 1100 -> One (r587) + | 1109 -> One (r588) + | 1190 -> One (r589) + | 1191 -> One (r591) + | 1119 -> One (r592) + | 1121 -> One (r593) + | 1124 -> One (r594) + | 1126 -> One (r595) + | 1132 -> One (r596) + | 1129 -> One (r597) + | 1131 -> One (r598) + | 1138 -> One (r599) + | 1136 -> One (r600) + | 1140 -> One (r601) + | 1145 -> One (r602) + | 1144 -> One (r603) + | 1150 -> One (r604) + | 1153 -> One (r605) + | 1155 -> One (r606) + | 1157 -> One (r608) + | 1160 -> One (r609) + | 1162 -> One (r610) + | 1182 -> One (r611) + | 1181 -> One (r613) + | 1185 -> One (r614) + | 1187 -> One (r615) + | 1189 -> One (r616) + | 1194 -> One (r617) + | 1197 -> One (r618) + | 1196 -> One (r619) + | 1202 -> One (r620) + | 1206 -> One (r621) + | 1204 -> One (r622) + | 1209 -> One (r623) + | 1208 -> One (r624) + | 1211 -> One (r625) + | 1216 -> One (r626) + | 1213 -> One (r627) + | 1215 -> One (r628) + | 1221 -> One (r629) + | 1219 -> One (r630) + | 1341 -> One (r631) + | 1233 -> One (r633) + | 1377 -> One (r635) + | 1376 -> One (r637) + | 1223 -> One (r638) + | 1375 -> One (r639) + | 1368 -> One (r640) + | 1367 -> One (r641) + | 1366 -> One (r642) | 1365 -> One (r643) - | 1212 -> One (r644) - | 1364 -> One (r645) - | 1357 -> One (r646) - | 1356 -> One (r647) - | 1355 -> One (r648) - | 1354 -> One (r649) - | 1351 -> One (r650) - | 1345 -> One (r652) - | 1336 -> One (r653) - | 1328 -> One (r654) - | 1327 -> One (r655) - | 1228 -> One (r656) - | 1231 -> One (r657) - | 1230 -> One (r658) - | 1233 -> One (r659) - | 1235 -> One (r660) - | 1238 -> One (r661) - | 1237 -> One (r662) - | 1241 -> One (r663) - | 1246 -> One (r664) - | 1249 -> One (r665) - | 1248 -> One (r666) - | 1292 -> One (r667) - | 1289 -> One (r668) - | 1279 -> One (r669) - | 1256 -> One (r670) - | 1259 -> One (r671) - | 1258 -> One (r672) - | 1261 -> One (r673) - | 1263 -> One (r674) - | 1266 -> One (r675) - | 1265 -> One (r676) - | 1269 -> One (r677) - | 1274 -> One (r678) - | 1277 -> One (r679) - | 1276 -> One (r680) - | 1281 -> One (r681) - | 1284 -> One (r682) - | 1283 -> One (r683) - | 1287 -> One (r684) - | 1313 -> One (r685) - | 1316 -> One (r686) - | 1315 -> One (r687) - | 1319 -> One (r688) - | 1322 -> One (r689) - | 1324 -> One (r690) - | 1331 -> One (r691) - | 1333 -> One (r692) - | 1339 -> One (r693) - | 1338 -> One (r694) - | 1343 -> One (r695) - | 1347 -> One (r696) - | 1349 -> One (r697) - | 1353 -> One (r698) - | 1360 -> One (r699) - | 1362 -> One (r700) - | 1378 -> One (r701) - | 1377 -> One (r702) - | 1369 -> One (r703) - | 1368 -> One (r704) - | 1374 -> One (r705) - | 1373 -> One (r706) - | 1372 -> One (r707) - | 1371 -> One (r708) - | 1376 -> One (r709) - | 1431 -> One (r710) - | 1430 -> One (r711) - | 1429 -> One (r712) - | 1421 -> One (r713) - | 1412 -> One (r714) - | 1407 -> One (r715) - | 1394 -> One (r716) - | 1392 -> One (r717) - | 1389 -> One (r718) - | 1386 -> One (r719) - | 1385 -> One (r720) - | 1384 -> One (r721) - | 1388 -> One (r722) - | 1391 -> One (r723) - | 1398 -> One (r724) - | 1399 -> One (r726) - | 1397 -> One (r727) - | 1396 -> One (r728) - | 1406 -> One (r729) - | 1405 -> One (r730) - | 1404 -> One (r731) - | 1411 -> One (r732) - | 1410 -> One (r733) - | 1416 -> One (r734) - | 1428 -> One (r736) - | 1427 -> One (r737) - | 1426 -> One (r738) - | 1425 -> One (r739) - | 1423 -> One (r740) - | 1434 -> One (r741) - | 1436 -> One (r742) - | 1438 -> One (r743) - | 1441 -> One (r744) - | 1440 -> One (r745) - | 1446 -> One (r746) - | 1444 -> One (r747) - | 1448 -> One (r748) - | 1456 -> One (r749) - | 1452 -> One (r750) - | 1451 -> One (r751) - | 1455 -> One (r752) - | 1454 -> One (r753) - | 1460 -> One (r754) - | 1459 -> One (r755) - | 1464 -> One (r756) - | 1462 -> One (r757) - | 1466 -> One (r758) - | 1468 -> One (r759) - | 1472 -> One (r760) - | 1469 -> One (r761) - | 1478 -> One (r763) - | 1477 -> One (r764) - | 1476 -> One (r765) - | 1475 -> One (r766) - | 1480 -> One (r767) - | 1479 -> One (r768) - | 1488 -> One (r769) - | 1489 -> One (r771) - | 1482 -> One (r772) - | 1492 -> One (r773) - | 1491 -> One (r774) - | 1490 | 2138 -> One (r775) - | 1495 -> One (r776) - | 1515 -> One (r777) - | 1519 -> One (r779) - | 1516 -> One (r780) - | 1518 -> One (r781) - | 1538 -> One (r782) - | 1552 -> One (r783) - | 1551 -> One (r784) - | 1548 -> One (r785) - | 1547 -> One (r786) - | 1550 -> One (r787) - | 1558 -> One (r788) - | 1587 -> One (r789) - | 1586 -> One (r790) - | 1585 -> One (r791) - | 1584 -> One (r792) - | 1583 -> One (r793) - | 1582 -> One (r794) - | 1560 -> One (r795) - | 1568 -> One (r796) - | 1567 -> One (r797) - | 1566 -> One (r798) - | 1563 -> One (r799) - | 1562 -> One (r800) - | 1565 -> One (r801) - | 1575 -> One (r802) - | 1574 -> One (r803) - | 1573 -> One (r804) - | 1572 -> One (r805) - | 1571 -> One (r806) - | 1581 -> One (r807) - | 1644 -> One (r808) - | 1643 -> One (r809) - | 1642 -> One (r810) - | 1591 -> One (r811) - | 1594 -> One (r812) - | 1593 -> One (r813) - | 1600 -> One (r814) - | 1597 -> One (r816) - | 1596 -> One (r817) - | 1603 -> One (r818) - | 1602 -> One (r819) - | 1606 -> One (r820) - | 1605 -> One (r821) - | 1612 -> One (r822) - | 1609 -> One (r824) - | 1608 -> One (r825) - | 1617 -> One (r826) - | 1616 -> One (r827) - | 1621 -> One (r829) - | 1620 -> One (r830) - | 1615 -> One (r831) - | 1619 -> One (r832) - | 1629 -> One (r833) - | 1628 -> One (r834) - | 1625 -> One (r835) - | 1627 -> One (r836) - | 1631 -> One (r837) - | 1634 -> One (r838) - | 1633 -> One (r839) - | 1636 -> One (r840) - | 1651 -> One (r841) - | 1649 -> One (r842) - | 1658 -> One (r843) - | 1657 -> One (r844) - | 1656 -> One (r845) - | 1655 -> One (r846) - | 1662 -> One (r847) - | 1661 -> One (r848) - | 1660 -> One (r849) - | 1667 -> One (r850) - | 1666 -> One (r851) - | 1665 -> One (r852) - | 1673 -> One (r853) - | 1681 -> One (r854) - | 1686 -> One (r855) - | 1685 -> One (r856) - | 1684 -> One (r857) - | 1692 -> One (r858) - | 1691 -> One (r859) - | 1690 -> One (r860) - | 1697 -> One (r861) - | 1696 -> One (r862) - | 1695 -> One (r863) - | 1795 -> One (r864) - | 1701 -> One (r865) - | 1700 -> One (r866) - | 1749 -> One (r867) - | 1748 -> One (r868) - | 1747 -> One (r869) - | 1705 -> One (r870) - | 1704 -> One (r871) - | 1703 -> One (r872) - | 1709 -> One (r873) - | 1708 -> One (r874) - | 1707 -> One (r875) - | 1713 -> One (r876) - | 1712 -> One (r877) - | 1711 -> One (r878) - | 1717 -> One (r879) - | 1716 -> One (r880) - | 1715 -> One (r881) - | 1724 -> One (r882) - | 1723 -> One (r883) - | 1722 -> One (r884) - | 1721 -> One (r885) - | 1720 -> One (r886) - | 1728 -> One (r887) - | 1727 -> One (r888) - | 1726 -> One (r889) - | 1732 -> One (r890) - | 1731 -> One (r891) - | 1730 -> One (r892) - | 1746 -> One (r893) - | 1745 -> One (r894) - | 1741 -> One (r895) - | 1737 -> One (r896) - | 1736 -> One (r897) - | 1735 -> One (r898) - | 1740 -> One (r899) - | 1739 -> One (r900) - | 1744 -> One (r901) - | 1743 -> One (r902) - | 1768 -> One (r903) - | 1767 -> One (r904) - | 1766 -> One (r905) - | 1753 -> One (r906) - | 1752 -> One (r907) - | 1756 -> One (r908) - | 1755 -> One (r909) - | 1759 -> One (r910) - | 1758 -> One (r911) - | 1762 -> One (r912) - | 1761 -> One (r913) - | 1765 -> One (r914) - | 1764 -> One (r915) - | 1772 -> One (r916) - | 1771 -> One (r917) - | 1770 -> One (r918) - | 1775 -> One (r919) - | 1790 -> One (r920) - | 1789 -> One (r921) - | 1788 -> One (r922) - | 1787 -> One (r923) - | 1786 -> One (r924) - | 1782 -> One (r925) - | 1781 -> One (r926) - | 1780 -> One (r927) - | 1779 -> One (r928) - | 1784 -> One (r929) - | 1794 -> One (r930) - | 1798 -> One (r931) - | 2070 -> One (r932) - | 1802 -> One (r933) - | 1801 -> One (r934) - | 2057 -> One (r935) - | 1866 -> One (r936) - | 1865 -> One (r937) - | 1804 -> One (r938) - | 1850 -> One (r939) - | 1843 -> One (r940) - | 1840 -> One (r942) - | 1839 -> One (r943) - | 1820 -> One (r944) - | 1815 -> One (r945) - | 1811 -> One (r946) - | 1810 -> One (r947) - | 1807 -> One (r948) - | 1809 -> One (r949) - | 1814 -> One (r950) - | 1813 -> One (r951) - | 1819 -> One (r952) - | 1818 -> One (r953) - | 1817 -> One (r954) - | 1824 -> One (r955) - | 1823 -> One (r956) - | 1822 -> One (r957) - | 1826 -> One (r958) - | 1836 -> One (r959) - | 1832 -> One (r960) - | 1830 -> One (r961) - | 1829 -> One (r962) - | 1835 -> One (r963) - | 1834 -> One (r964) - | 1846 -> One (r965) - | 1849 -> One (r966) - | 1856 -> One (r967) - | 1853 -> One (r968) - | 1855 -> One (r969) - | 1861 -> One (r970) - | 1858 -> One (r971) - | 1860 -> One (r972) - | 1864 -> One (r973) - | 1863 -> One (r974) - | 1997 -> One (r975) - | 1996 -> One (r976) - | 1868 -> One (r977) - | 1870 -> One (r978) - | 1872 -> One (r979) - | 1876 -> One (r980) - | 1874 -> One (r981) - | 1889 -> One (r982) - | 1878 -> One (r983) - | 1882 -> One (r984) - | 1887 -> One (r985) - | 1891 -> One (r986) - | 1904 -> One (r987) - | 1899 -> One (r988) - | 1898 -> One (r990) - | 1902 -> One (r991) - | 1916 -> One (r992) - | 1910 -> One (r993) - | 1907 -> One (r994) - | 1909 -> One (r995) - | 1913 -> One (r996) - | 1912 -> One (r997) - | 1915 -> One (r998) - | 1928 -> One (r999) - | 1926 -> One (r1001) - | 1923 -> One (r1002) - | 1922 -> One (r1003) - | 1925 -> One (r1004) - | 1930 -> One (r1005) - | 1933 -> One (r1006) - | 1935 -> One (r1007) - | 1949 -> One (r1008) - | 1948 -> One (r1009) - | 1947 -> One (r1010) - | 1937 -> One (r1011) - | 1945 -> One (r1012) - | 1941 -> One (r1013) - | 1940 -> One (r1014) - | 1939 -> One (r1015) - | 1943 -> One (r1016) - | 1962 -> One (r1017) - | 1952 -> One (r1018) - | 1951 -> One (r1019) - | 1954 -> One (r1020) - | 1956 -> One (r1021) - | 1961 -> One (r1022) - | 1958 -> One (r1023) - | 1960 -> One (r1024) - | 1964 -> One (r1025) - | 1970 -> One (r1026) - | 1971 -> One (r1028) - | 1967 -> One (r1029) - | 1969 -> One (r1030) - | 1974 -> One (r1031) - | 1980 -> One (r1032) - | 1981 -> One (r1034) - | 1986 -> One (r1035) - | 1985 -> One (r1036) - | 1989 -> One (r1037) - | 1988 -> One (r1038) - | 2026 -> One (r1039) - | 2018 -> One (r1040) - | 2012 -> One (r1041) - | 2011 -> One (r1042) - | 2016 -> One (r1043) - | 2015 -> One (r1044) - | 2014 -> One (r1045) - | 2020 -> One (r1046) - | 2025 -> One (r1047) - | 2023 -> One (r1049) - | 2022 -> One (r1050) - | 2032 -> One (r1051) - | 2029 -> One (r1052) - | 2031 -> One (r1053) - | 2034 -> One (r1054) - | 2040 -> One (r1055) - | 2050 -> One (r1056) - | 2045 -> One (r1057) - | 2047 -> One (r1058) - | 2049 -> One (r1059) - | 2061 -> One (r1060) - | 2065 -> One (r1061) - | 2072 -> One (r1062) - | 2171 -> One (r1063) - | 2077 -> One (r1064) - | 2076 -> One (r1065) - | 2168 -> One (r1066) - | 2167 -> One (r1067) - | 2079 -> One (r1068) - | 2082 -> One (r1069) - | 2081 -> One (r1070) - | 2084 -> One (r1071) - | 2087 -> One (r1072) - | 2093 -> One (r1073) - | 2092 -> One (r1074) + | 1362 -> One (r644) + | 1356 -> One (r646) + | 1347 -> One (r647) + | 1339 -> One (r648) + | 1338 -> One (r649) + | 1239 -> One (r650) + | 1242 -> One (r651) + | 1241 -> One (r652) + | 1244 -> One (r653) + | 1246 -> One (r654) + | 1249 -> One (r655) + | 1248 -> One (r656) + | 1252 -> One (r657) + | 1257 -> One (r658) + | 1260 -> One (r659) + | 1259 -> One (r660) + | 1303 -> One (r661) + | 1300 -> One (r662) + | 1290 -> One (r663) + | 1267 -> One (r664) + | 1270 -> One (r665) + | 1269 -> One (r666) + | 1272 -> One (r667) + | 1274 -> One (r668) + | 1277 -> One (r669) + | 1276 -> One (r670) + | 1280 -> One (r671) + | 1285 -> One (r672) + | 1288 -> One (r673) + | 1287 -> One (r674) + | 1292 -> One (r675) + | 1295 -> One (r676) + | 1294 -> One (r677) + | 1298 -> One (r678) + | 1324 -> One (r679) + | 1327 -> One (r680) + | 1326 -> One (r681) + | 1330 -> One (r682) + | 1333 -> One (r683) + | 1335 -> One (r684) + | 1342 -> One (r685) + | 1344 -> One (r686) + | 1350 -> One (r687) + | 1349 -> One (r688) + | 1354 -> One (r689) + | 1358 -> One (r690) + | 1360 -> One (r691) + | 1364 -> One (r692) + | 1371 -> One (r693) + | 1373 -> One (r694) + | 1389 -> One (r695) + | 1388 -> One (r696) + | 1380 -> One (r697) + | 1379 -> One (r698) + | 1385 -> One (r699) + | 1384 -> One (r700) + | 1383 -> One (r701) + | 1382 -> One (r702) + | 1387 -> One (r703) + | 1442 -> One (r704) + | 1441 -> One (r705) + | 1440 -> One (r706) + | 1432 -> One (r707) + | 1423 -> One (r708) + | 1418 -> One (r709) + | 1405 -> One (r710) + | 1403 -> One (r711) + | 1400 -> One (r712) + | 1397 -> One (r713) + | 1396 -> One (r714) + | 1395 -> One (r715) + | 1399 -> One (r716) + | 1402 -> One (r717) + | 1409 -> One (r718) + | 1410 -> One (r720) + | 1408 -> One (r721) + | 1407 -> One (r722) + | 1417 -> One (r723) + | 1416 -> One (r724) + | 1415 -> One (r725) + | 1422 -> One (r726) + | 1421 -> One (r727) + | 1427 -> One (r728) + | 1439 -> One (r730) + | 1438 -> One (r731) + | 1437 -> One (r732) + | 1436 -> One (r733) + | 1434 -> One (r734) + | 1445 -> One (r735) + | 1447 -> One (r736) + | 1449 -> One (r737) + | 1452 -> One (r738) + | 1451 -> One (r739) + | 1457 -> One (r740) + | 1455 -> One (r741) + | 1459 -> One (r742) + | 1467 -> One (r743) + | 1463 -> One (r744) + | 1462 -> One (r745) + | 1466 -> One (r746) + | 1465 -> One (r747) + | 1471 -> One (r748) + | 1470 -> One (r749) + | 1475 -> One (r750) + | 1473 -> One (r751) + | 1477 -> One (r752) + | 1479 -> One (r753) + | 1483 -> One (r754) + | 1480 -> One (r755) + | 1489 -> One (r757) + | 1488 -> One (r758) + | 1487 -> One (r759) + | 1486 -> One (r760) + | 1491 -> One (r761) + | 1490 -> One (r762) + | 1499 -> One (r763) + | 1500 -> One (r765) + | 1493 -> One (r766) + | 1503 -> One (r767) + | 1502 -> One (r768) + | 1501 | 2149 -> One (r769) + | 1506 -> One (r770) + | 1526 -> One (r771) + | 1530 -> One (r773) + | 1527 -> One (r774) + | 1529 -> One (r775) + | 1549 -> One (r776) + | 1563 -> One (r777) + | 1562 -> One (r778) + | 1559 -> One (r779) + | 1558 -> One (r780) + | 1561 -> One (r781) + | 1569 -> One (r782) + | 1598 -> One (r783) + | 1597 -> One (r784) + | 1596 -> One (r785) + | 1595 -> One (r786) + | 1594 -> One (r787) + | 1593 -> One (r788) + | 1571 -> One (r789) + | 1579 -> One (r790) + | 1578 -> One (r791) + | 1577 -> One (r792) + | 1574 -> One (r793) + | 1573 -> One (r794) + | 1576 -> One (r795) + | 1586 -> One (r796) + | 1585 -> One (r797) + | 1584 -> One (r798) + | 1583 -> One (r799) + | 1582 -> One (r800) + | 1592 -> One (r801) + | 1655 -> One (r802) + | 1654 -> One (r803) + | 1653 -> One (r804) + | 1602 -> One (r805) + | 1605 -> One (r806) + | 1604 -> One (r807) + | 1611 -> One (r808) + | 1608 -> One (r810) + | 1607 -> One (r811) + | 1614 -> One (r812) + | 1613 -> One (r813) + | 1617 -> One (r814) + | 1616 -> One (r815) + | 1623 -> One (r816) + | 1620 -> One (r818) + | 1619 -> One (r819) + | 1628 -> One (r820) + | 1627 -> One (r821) + | 1632 -> One (r823) + | 1631 -> One (r824) + | 1626 -> One (r825) + | 1630 -> One (r826) + | 1640 -> One (r827) + | 1639 -> One (r828) + | 1636 -> One (r829) + | 1638 -> One (r830) + | 1642 -> One (r831) + | 1645 -> One (r832) + | 1644 -> One (r833) + | 1647 -> One (r834) + | 1662 -> One (r835) + | 1660 -> One (r836) + | 1669 -> One (r837) + | 1668 -> One (r838) + | 1667 -> One (r839) + | 1666 -> One (r840) + | 1673 -> One (r841) + | 1672 -> One (r842) + | 1671 -> One (r843) + | 1678 -> One (r844) + | 1677 -> One (r845) + | 1676 -> One (r846) + | 1684 -> One (r847) + | 1692 -> One (r848) + | 1697 -> One (r849) + | 1696 -> One (r850) + | 1695 -> One (r851) + | 1703 -> One (r852) + | 1702 -> One (r853) + | 1701 -> One (r854) + | 1708 -> One (r855) + | 1707 -> One (r856) + | 1706 -> One (r857) + | 1806 -> One (r858) + | 1712 -> One (r859) + | 1711 -> One (r860) + | 1760 -> One (r861) + | 1759 -> One (r862) + | 1758 -> One (r863) + | 1716 -> One (r864) + | 1715 -> One (r865) + | 1714 -> One (r866) + | 1720 -> One (r867) + | 1719 -> One (r868) + | 1718 -> One (r869) + | 1724 -> One (r870) + | 1723 -> One (r871) + | 1722 -> One (r872) + | 1728 -> One (r873) + | 1727 -> One (r874) + | 1726 -> One (r875) + | 1735 -> One (r876) + | 1734 -> One (r877) + | 1733 -> One (r878) + | 1732 -> One (r879) + | 1731 -> One (r880) + | 1739 -> One (r881) + | 1738 -> One (r882) + | 1737 -> One (r883) + | 1743 -> One (r884) + | 1742 -> One (r885) + | 1741 -> One (r886) + | 1757 -> One (r887) + | 1756 -> One (r888) + | 1752 -> One (r889) + | 1748 -> One (r890) + | 1747 -> One (r891) + | 1746 -> One (r892) + | 1751 -> One (r893) + | 1750 -> One (r894) + | 1755 -> One (r895) + | 1754 -> One (r896) + | 1779 -> One (r897) + | 1778 -> One (r898) + | 1777 -> One (r899) + | 1764 -> One (r900) + | 1763 -> One (r901) + | 1767 -> One (r902) + | 1766 -> One (r903) + | 1770 -> One (r904) + | 1769 -> One (r905) + | 1773 -> One (r906) + | 1772 -> One (r907) + | 1776 -> One (r908) + | 1775 -> One (r909) + | 1783 -> One (r910) + | 1782 -> One (r911) + | 1781 -> One (r912) + | 1786 -> One (r913) + | 1801 -> One (r914) + | 1800 -> One (r915) + | 1799 -> One (r916) + | 1798 -> One (r917) + | 1797 -> One (r918) + | 1793 -> One (r919) + | 1792 -> One (r920) + | 1791 -> One (r921) + | 1790 -> One (r922) + | 1795 -> One (r923) + | 1805 -> One (r924) + | 1809 -> One (r925) + | 2081 -> One (r926) + | 1813 -> One (r927) + | 1812 -> One (r928) + | 2068 -> One (r929) + | 1877 -> One (r930) + | 1876 -> One (r931) + | 1815 -> One (r932) + | 1861 -> One (r933) + | 1854 -> One (r934) + | 1851 -> One (r936) + | 1850 -> One (r937) + | 1831 -> One (r938) + | 1826 -> One (r939) + | 1822 -> One (r940) + | 1821 -> One (r941) + | 1818 -> One (r942) + | 1820 -> One (r943) + | 1825 -> One (r944) + | 1824 -> One (r945) + | 1830 -> One (r946) + | 1829 -> One (r947) + | 1828 -> One (r948) + | 1835 -> One (r949) + | 1834 -> One (r950) + | 1833 -> One (r951) + | 1837 -> One (r952) + | 1847 -> One (r953) + | 1843 -> One (r954) + | 1841 -> One (r955) + | 1840 -> One (r956) + | 1846 -> One (r957) + | 1845 -> One (r958) + | 1857 -> One (r959) + | 1860 -> One (r960) + | 1867 -> One (r961) + | 1864 -> One (r962) + | 1866 -> One (r963) + | 1872 -> One (r964) + | 1869 -> One (r965) + | 1871 -> One (r966) + | 1875 -> One (r967) + | 1874 -> One (r968) + | 2008 -> One (r969) + | 2007 -> One (r970) + | 1879 -> One (r971) + | 1881 -> One (r972) + | 1883 -> One (r973) + | 1887 -> One (r974) + | 1885 -> One (r975) + | 1900 -> One (r976) + | 1889 -> One (r977) + | 1893 -> One (r978) + | 1898 -> One (r979) + | 1902 -> One (r980) + | 1915 -> One (r981) + | 1910 -> One (r982) + | 1909 -> One (r984) + | 1913 -> One (r985) + | 1927 -> One (r986) + | 1921 -> One (r987) + | 1918 -> One (r988) + | 1920 -> One (r989) + | 1924 -> One (r990) + | 1923 -> One (r991) + | 1926 -> One (r992) + | 1939 -> One (r993) + | 1937 -> One (r995) + | 1934 -> One (r996) + | 1933 -> One (r997) + | 1936 -> One (r998) + | 1941 -> One (r999) + | 1944 -> One (r1000) + | 1946 -> One (r1001) + | 1960 -> One (r1002) + | 1959 -> One (r1003) + | 1958 -> One (r1004) + | 1948 -> One (r1005) + | 1956 -> One (r1006) + | 1952 -> One (r1007) + | 1951 -> One (r1008) + | 1950 -> One (r1009) + | 1954 -> One (r1010) + | 1973 -> One (r1011) + | 1963 -> One (r1012) + | 1962 -> One (r1013) + | 1965 -> One (r1014) + | 1967 -> One (r1015) + | 1972 -> One (r1016) + | 1969 -> One (r1017) + | 1971 -> One (r1018) + | 1975 -> One (r1019) + | 1981 -> One (r1020) + | 1982 -> One (r1022) + | 1978 -> One (r1023) + | 1980 -> One (r1024) + | 1985 -> One (r1025) + | 1991 -> One (r1026) + | 1992 -> One (r1028) + | 1997 -> One (r1029) + | 1996 -> One (r1030) + | 2000 -> One (r1031) + | 1999 -> One (r1032) + | 2037 -> One (r1033) + | 2029 -> One (r1034) + | 2023 -> One (r1035) + | 2022 -> One (r1036) + | 2027 -> One (r1037) + | 2026 -> One (r1038) + | 2025 -> One (r1039) + | 2031 -> One (r1040) + | 2036 -> One (r1041) + | 2034 -> One (r1043) + | 2033 -> One (r1044) + | 2043 -> One (r1045) + | 2040 -> One (r1046) + | 2042 -> One (r1047) + | 2045 -> One (r1048) + | 2051 -> One (r1049) + | 2061 -> One (r1050) + | 2056 -> One (r1051) + | 2058 -> One (r1052) + | 2060 -> One (r1053) + | 2072 -> One (r1054) + | 2076 -> One (r1055) + | 2083 -> One (r1056) + | 2182 -> One (r1057) + | 2088 -> One (r1058) + | 2087 -> One (r1059) + | 2179 -> One (r1060) + | 2178 -> One (r1061) + | 2090 -> One (r1062) + | 2093 -> One (r1063) + | 2092 -> One (r1064) + | 2095 -> One (r1065) + | 2098 -> One (r1066) + | 2104 -> One (r1067) + | 2103 -> One (r1068) + | 2119 -> One (r1069) + | 2122 -> One (r1071) + | 2115 -> One (r1073) + | 2109 -> One (r1074) | 2108 -> One (r1075) - | 2111 -> One (r1077) - | 2104 -> One (r1079) - | 2098 -> One (r1080) - | 2097 -> One (r1081) - | 2107 -> One (r1082) - | 2115 -> One (r1083) - | 2118 -> One (r1084) - | 2117 -> One (r1085) - | 2121 -> One (r1086) - | 2128 -> One (r1088) - | 2126 -> One (r1089) - | 2124 -> One (r1090) - | 2132 -> One (r1091) - | 2131 -> One (r1092) - | 2130 -> One (r1093) - | 2136 -> One (r1094) - | 2135 -> One (r1095) - | 2134 -> One (r1096) - | 2144 -> One (r1097) - | 2143 -> One (r1098) - | 2161 -> One (r1099) - | 2174 -> One (r1100) - | 3857 -> One (r1101) - | 3856 -> One (r1102) - | 3855 -> One (r1103) - | 3854 -> One (r1104) - | 2192 -> One (r1105) - | 3846 -> One (r1106) - | 3837 -> One (r1107) - | 2221 -> One (r1108) + | 2118 -> One (r1076) + | 2126 -> One (r1077) + | 2129 -> One (r1078) + | 2128 -> One (r1079) + | 2132 -> One (r1080) + | 2139 -> One (r1082) + | 2137 -> One (r1083) + | 2135 -> One (r1084) + | 2143 -> One (r1085) + | 2142 -> One (r1086) + | 2141 -> One (r1087) + | 2147 -> One (r1088) + | 2146 -> One (r1089) + | 2145 -> One (r1090) + | 2155 -> One (r1091) + | 2154 -> One (r1092) + | 2172 -> One (r1093) + | 2185 -> One (r1094) + | 3868 -> One (r1095) + | 3867 -> One (r1096) + | 3866 -> One (r1097) + | 3865 -> One (r1098) + | 2203 -> One (r1099) + | 3857 -> One (r1100) + | 3848 -> One (r1101) + | 2232 -> One (r1102) + | 2224 -> One (r1103) + | 2221 -> One (r1104) + | 2206 -> One (r1105) + | 2218 -> One (r1106) + | 2214 -> One (r1108) | 2213 -> One (r1109) - | 2210 -> One (r1110) - | 2195 -> One (r1111) - | 2207 -> One (r1112) - | 2203 -> One (r1114) - | 2202 -> One (r1115) - | 2201 -> One (r1116) - | 2199 -> One (r1118) - | 2205 -> One (r1119) - | 2212 -> One (r1120) - | 2211 -> One (r1121) - | 2217 -> One (r1122) - | 2216 -> One (r1123) - | 2219 -> One (r1124) - | 2230 -> One (r1125) - | 2229 -> One (r1126) - | 2228 -> One (r1127) - | 2227 -> One (r1128) - | 2223 -> One (r1129) - | 2226 | 2752 -> One (r1130) - | 3831 -> One (r1131) - | 2365 -> One (r1132) - | 2364 -> One (r1133) - | 2312 -> One (r1134) - | 2311 -> One (r1135) - | 2235 -> One (r1136) - | 2361 -> One (r1138) - | 2234 -> One (r1139) - | 2233 -> One (r1140) - | 2247 -> One (r1141) - | 2246 -> One (r1143) - | 2240 -> One (r1144) - | 2239 -> One (r1145) - | 2237 -> One (r1146) - | 2251 -> One (r1147) - | 2250 -> One (r1148) - | 2249 -> One (r1149) - | 2257 -> One (r1150) - | 2256 -> One (r1151) - | 2255 -> One (r1152) - | 2254 -> One (r1153) - | 2261 -> One (r1154) - | 2260 -> One (r1155) - | 2259 -> One (r1156) - | 2265 -> One (r1157) - | 2264 -> One (r1158) - | 2263 -> One (r1159) - | 2269 -> One (r1160) - | 2268 -> One (r1161) - | 2267 -> One (r1162) - | 2283 -> One (r1163) - | 2282 -> One (r1164) - | 2281 -> One (r1165) - | 2280 -> One (r1166) - | 2275 -> One (r1167) - | 2274 -> One (r1168) - | 2273 -> One (r1169) - | 2272 -> One (r1170) - | 2279 -> One (r1171) - | 2278 -> One (r1172) - | 2277 -> One (r1173) - | 2287 -> One (r1174) - | 2286 -> One (r1175) - | 2285 -> One (r1176) - | 2300 -> One (r1177) - | 2291 -> One (r1178) - | 2290 -> One (r1179) - | 2298 -> One (r1180) - | 2297 -> One (r1181) - | 2296 -> One (r1182) - | 2304 -> One (r1183) - | 2303 -> One (r1184) - | 2308 -> One (r1185) - | 2307 -> One (r1186) - | 2306 -> One (r1187) - | 2310 -> One (r1188) - | 2338 -> One (r1189) - | 2337 -> One (r1190) - | 2318 -> One (r1191) - | 2317 -> One (r1192) - | 2316 -> One (r1193) - | 2315 -> One (r1194) - | 2322 -> One (r1195) - | 2321 -> One (r1196) - | 2320 -> One (r1197) - | 2327 -> One (r1198) - | 2326 -> One (r1199) - | 2325 -> One (r1200) - | 2330 -> One (r1201) - | 2329 -> One (r1202) - | 2334 -> One (r1203) - | 2333 -> One (r1204) - | 2332 -> One (r1205) - | 2336 -> One (r1206) - | 2347 -> One (r1207) - | 2341 -> One (r1208) - | 2340 -> One (r1209) - | 2344 -> One (r1210) - | 2346 -> One (r1211) - | 2352 | 3520 -> One (r1212) - | 2353 -> One (r1214) - | 2356 -> One (r1216) - | 2360 -> One (r1217) - | 2359 -> One (r1218) - | 2358 -> One (r1219) - | 3586 -> One (r1220) - | 2391 -> One (r1222) - | 2383 -> One (r1223) - | 2375 -> One (r1224) - | 2372 -> One (r1225) - | 2369 -> One (r1226) - | 2368 -> One (r1227) - | 2371 -> One (r1228) - | 2374 -> One (r1229) - | 2377 -> One (r1230) - | 2380 -> One (r1231) - | 2379 -> One (r1232) - | 2382 -> One (r1233) - | 2387 -> One (r1234) - | 2386 -> One (r1235) - | 2389 -> One (r1236) - | 3801 -> One (r1237) - | 2394 -> One (r1238) - | 2424 -> One (r1239) - | 2410 -> One (r1240) - | 2409 -> One (r1241) - | 2396 -> One (r1242) - | 2407 -> One (r1243) - | 2408 -> One (r1245) - | 2402 -> One (r1246) - | 2400 -> One (r1247) - | 2398 -> One (r1248) - | 2406 -> One (r1249) - | 2405 -> One (r1250) - | 2404 -> One (r1251) - | 2421 -> One (r1252) - | 2417 -> One (r1253) - | 2416 -> One (r1254) - | 2415 -> One (r1255) - | 2420 -> One (r1256) - | 2419 -> One (r1257) - | 2427 -> One (r1258) - | 2426 -> One (r1259) - | 3759 -> One (r1260) - | 2435 -> One (r1261) - | 2432 -> One (r1262) - | 2451 -> One (r1263) - | 2448 -> One (r1265) - | 2447 -> One (r1267) - | 2442 -> One (r1268) - | 2441 -> One (r1269) - | 2439 -> One (r1270) - | 2438 -> One (r1271) - | 2437 -> One (r1272) - | 2445 -> One (r1273) - | 2444 -> One (r1274) - | 2453 -> One (r1275) - | 2456 -> One (r1276) - | 3746 -> One (r1277) - | 3737 -> One (r1278) - | 3736 -> One (r1279) - | 3735 -> One (r1280) - | 2812 -> One (r1281) - | 2811 -> One (r1282) - | 3734 -> One (r1284) - | 2462 -> One (r1285) - | 2461 -> One (r1286) - | 2460 -> One (r1287) - | 3728 -> One (r1288) - | 3726 -> One (r1289) - | 3724 -> One (r1290) - | 3718 -> One (r1291) - | 2465 -> One (r1293) - | 2468 -> One (r1295) - | 2467 -> One (r1296) - | 2466 -> One (r1297) - | 3693 -> One (r1298) - | 2481 -> One (r1299) - | 2479 -> One (r1300) - | 2474 -> One (r1301) - | 2477 -> One (r1303) - | 2476 -> One (r1304) - | 2475 -> One (r1305) - | 2483 -> One (r1306) - | 3640 -> One (r1307) - | 2540 -> One (r1308) - | 2486 -> One (r1309) - | 2488 -> One (r1310) - | 2490 -> One (r1311) - | 2492 -> One (r1312) - | 2499 -> One (r1313) - | 2501 -> One (r1315) - | 2496 -> One (r1316) - | 2495 -> One (r1317) - | 2494 -> One (r1318) - | 2498 -> One (r1319) - | 2510 -> One (r1320) - | 2509 -> One (r1321) - | 2511 -> One (r1323) - | 2508 -> One (r1324) - | 2507 -> One (r1325) - | 2506 -> One (r1326) - | 2505 -> One (r1327) - | 2518 -> One (r1328) - | 2517 -> One (r1329) - | 2515 -> One (r1330) - | 2514 -> One (r1331) - | 2520 -> One (r1332) - | 2523 -> One (r1333) - | 2522 -> One (r1334) - | 2529 -> One (r1335) - | 2528 -> One (r1336) - | 2527 -> One (r1337) - | 2526 -> One (r1338) - | 2536 -> One (r1339) - | 2535 -> One (r1340) - | 2534 -> One (r1341) - | 2533 -> One (r1342) - | 2532 -> One (r1343) - | 2542 -> One (r1344) - | 2544 -> One (r1345) - | 2549 -> One (r1346) - | 2548 -> One (r1347) - | 2547 -> One (r1348) - | 2546 -> One (r1349) - | 2551 -> One (r1350) - | 2556 -> One (r1351) - | 2555 -> One (r1352) - | 2554 -> One (r1353) - | 2553 -> One (r1354) - | 2612 -> One (r1355) - | 2559 -> One (r1356) - | 2572 -> One (r1358) - | 2571 -> One (r1360) - | 2568 -> One (r1361) - | 2567 -> One (r1362) - | 2577 -> One (r1363) - | 2576 -> One (r1364) - | 2575 -> One (r1365) - | 2587 -> One (r1366) - | 2592 -> One (r1368) - | 2590 -> One (r1369) - | 2581 -> One (r1370) - | 2580 -> One (r1371) - | 2579 -> One (r1372) - | 2584 -> One (r1373) - | 2589 -> One (r1374) - | 2599 -> One (r1375) - | 2600 -> One (r1377) - | 2597 -> One (r1378) - | 2596 -> One (r1379) - | 2604 -> One (r1380) - | 2603 -> One (r1381) - | 2610 -> One (r1382) - | 2611 -> One (r1384) - | 2608 -> One (r1385) - | 2607 -> One (r1386) - | 2615 -> One (r1387) - | 2614 -> One (r1388) - | 2628 -> One (r1389) - | 2617 -> One (r1390) - | 2630 -> One (r1392) - | 2626 -> One (r1393) - | 2635 -> One (r1394) - | 2634 -> One (r1395) - | 2637 -> One (r1397) - | 2636 -> One (r1398) - | 2633 -> One (r1399) - | 2646 -> One (r1400) - | 2645 -> One (r1402) - | 2639 -> One (r1403) - | 2642 -> One (r1404) - | 2643 -> One (r1406) - | 2652 -> One (r1407) - | 2650 -> One (r1408) - | 2657 -> One (r1409) - | 2656 -> One (r1410) - | 2655 -> One (r1411) - | 2662 -> One (r1412) - | 2667 -> One (r1414) - | 2664 -> One (r1415) - | 2663 -> One (r1416) - | 2666 -> One (r1417) - | 2672 -> One (r1418) - | 2671 -> One (r1419) - | 2676 -> One (r1420) - | 2681 -> One (r1421) - | 2680 -> One (r1422) - | 2679 -> One (r1423) - | 3593 -> One (r1424) - | 3610 -> One (r1426) - | 3609 -> One (r1427) - | 2687 -> One (r1428) - | 2686 -> One (r1429) - | 2685 -> One (r1430) - | 2684 -> One (r1431) - | 2683 -> One (r1432) - | 2694 -> One (r1433) - | 2693 -> One (r1434) - | 2692 -> One (r1435) - | 2691 -> One (r1436) - | 2689 -> One (r1437) - | 3578 -> One (r1438) - | 2703 -> One (r1439) - | 3572 -> One (r1441) - | 2704 -> One (r1442) - | 2701 -> One (r1443) - | 2698 -> One (r1444) - | 2697 -> One (r1445) - | 2700 -> One (r1446) - | 2708 -> One (r1447) - | 2707 -> One (r1448) - | 2706 -> One (r1449) - | 2712 -> One (r1450) - | 2711 -> One (r1451) - | 2717 -> One (r1452) - | 2720 -> One (r1454) - | 2719 -> One (r1455) - | 2718 -> One (r1456) - | 2715 -> One (r1457) - | 3562 -> One (r1458) - | 2742 -> One (r1459) - | 2738 -> One (r1460) - | 2737 -> One (r1461) - | 2731 -> One (r1462) - | 2728 -> One (r1463) - | 2727 -> One (r1464) - | 2724 -> One (r1465) - | 2730 -> One (r1466) - | 2733 -> One (r1467) - | 2736 -> One (r1468) - | 2735 -> One (r1469) - | 2741 -> One (r1470) - | 2740 -> One (r1471) - | 3535 -> One (r1472) - | 2747 -> One (r1473) - | 2746 -> One (r1474) - | 2749 -> One (r1475) - | 3524 -> One (r1476) - | 3521 -> One (r1477) - | 2776 -> One (r1478) + | 2212 -> One (r1110) + | 2210 -> One (r1112) + | 2216 -> One (r1113) + | 2223 -> One (r1114) + | 2222 -> One (r1115) + | 2228 -> One (r1116) + | 2227 -> One (r1117) + | 2230 -> One (r1118) + | 2241 -> One (r1119) + | 2240 -> One (r1120) + | 2239 -> One (r1121) + | 2238 -> One (r1122) + | 2234 -> One (r1123) + | 2237 | 2763 -> One (r1124) + | 3842 -> One (r1125) + | 2376 -> One (r1126) + | 2375 -> One (r1127) + | 2323 -> One (r1128) + | 2322 -> One (r1129) + | 2246 -> One (r1130) + | 2372 -> One (r1132) + | 2245 -> One (r1133) + | 2244 -> One (r1134) + | 2258 -> One (r1135) + | 2257 -> One (r1137) + | 2251 -> One (r1138) + | 2250 -> One (r1139) + | 2248 -> One (r1140) + | 2262 -> One (r1141) + | 2261 -> One (r1142) + | 2260 -> One (r1143) + | 2268 -> One (r1144) + | 2267 -> One (r1145) + | 2266 -> One (r1146) + | 2265 -> One (r1147) + | 2272 -> One (r1148) + | 2271 -> One (r1149) + | 2270 -> One (r1150) + | 2276 -> One (r1151) + | 2275 -> One (r1152) + | 2274 -> One (r1153) + | 2280 -> One (r1154) + | 2279 -> One (r1155) + | 2278 -> One (r1156) + | 2294 -> One (r1157) + | 2293 -> One (r1158) + | 2292 -> One (r1159) + | 2291 -> One (r1160) + | 2286 -> One (r1161) + | 2285 -> One (r1162) + | 2284 -> One (r1163) + | 2283 -> One (r1164) + | 2290 -> One (r1165) + | 2289 -> One (r1166) + | 2288 -> One (r1167) + | 2298 -> One (r1168) + | 2297 -> One (r1169) + | 2296 -> One (r1170) + | 2311 -> One (r1171) + | 2302 -> One (r1172) + | 2301 -> One (r1173) + | 2309 -> One (r1174) + | 2308 -> One (r1175) + | 2307 -> One (r1176) + | 2315 -> One (r1177) + | 2314 -> One (r1178) + | 2319 -> One (r1179) + | 2318 -> One (r1180) + | 2317 -> One (r1181) + | 2321 -> One (r1182) + | 2349 -> One (r1183) + | 2348 -> One (r1184) + | 2329 -> One (r1185) + | 2328 -> One (r1186) + | 2327 -> One (r1187) + | 2326 -> One (r1188) + | 2333 -> One (r1189) + | 2332 -> One (r1190) + | 2331 -> One (r1191) + | 2338 -> One (r1192) + | 2337 -> One (r1193) + | 2336 -> One (r1194) + | 2341 -> One (r1195) + | 2340 -> One (r1196) + | 2345 -> One (r1197) + | 2344 -> One (r1198) + | 2343 -> One (r1199) + | 2347 -> One (r1200) + | 2358 -> One (r1201) + | 2352 -> One (r1202) + | 2351 -> One (r1203) + | 2355 -> One (r1204) + | 2357 -> One (r1205) + | 2363 | 3531 -> One (r1206) + | 2364 -> One (r1208) + | 2367 -> One (r1210) + | 2371 -> One (r1211) + | 2370 -> One (r1212) + | 2369 -> One (r1213) + | 3597 -> One (r1214) + | 2402 -> One (r1216) + | 2394 -> One (r1217) + | 2386 -> One (r1218) + | 2383 -> One (r1219) + | 2380 -> One (r1220) + | 2379 -> One (r1221) + | 2382 -> One (r1222) + | 2385 -> One (r1223) + | 2388 -> One (r1224) + | 2391 -> One (r1225) + | 2390 -> One (r1226) + | 2393 -> One (r1227) + | 2398 -> One (r1228) + | 2397 -> One (r1229) + | 2400 -> One (r1230) + | 3812 -> One (r1231) + | 2405 -> One (r1232) + | 2435 -> One (r1233) + | 2421 -> One (r1234) + | 2420 -> One (r1235) + | 2407 -> One (r1236) + | 2418 -> One (r1237) + | 2419 -> One (r1239) + | 2413 -> One (r1240) + | 2411 -> One (r1241) + | 2409 -> One (r1242) + | 2417 -> One (r1243) + | 2416 -> One (r1244) + | 2415 -> One (r1245) + | 2432 -> One (r1246) + | 2428 -> One (r1247) + | 2427 -> One (r1248) + | 2426 -> One (r1249) + | 2431 -> One (r1250) + | 2430 -> One (r1251) + | 2438 -> One (r1252) + | 2437 -> One (r1253) + | 3770 -> One (r1254) + | 2446 -> One (r1255) + | 2443 -> One (r1256) + | 2462 -> One (r1257) + | 2459 -> One (r1259) + | 2458 -> One (r1261) + | 2453 -> One (r1262) + | 2452 -> One (r1263) + | 2450 -> One (r1264) + | 2449 -> One (r1265) + | 2448 -> One (r1266) + | 2456 -> One (r1267) + | 2455 -> One (r1268) + | 2464 -> One (r1269) + | 2467 -> One (r1270) + | 3757 -> One (r1271) + | 3748 -> One (r1272) + | 3747 -> One (r1273) + | 3746 -> One (r1274) + | 2823 -> One (r1275) + | 2822 -> One (r1276) + | 3745 -> One (r1278) + | 2473 -> One (r1279) + | 2472 -> One (r1280) + | 2471 -> One (r1281) + | 3739 -> One (r1282) + | 3737 -> One (r1283) + | 3735 -> One (r1284) + | 3729 -> One (r1285) + | 2476 -> One (r1287) + | 2479 -> One (r1289) + | 2478 -> One (r1290) + | 2477 -> One (r1291) + | 3704 -> One (r1292) + | 2492 -> One (r1293) + | 2490 -> One (r1294) + | 2485 -> One (r1295) + | 2488 -> One (r1297) + | 2487 -> One (r1298) + | 2486 -> One (r1299) + | 2494 -> One (r1300) + | 3651 -> One (r1301) + | 2551 -> One (r1302) + | 2497 -> One (r1303) + | 2499 -> One (r1304) + | 2501 -> One (r1305) + | 2503 -> One (r1306) + | 2510 -> One (r1307) + | 2512 -> One (r1309) + | 2507 -> One (r1310) + | 2506 -> One (r1311) + | 2505 -> One (r1312) + | 2509 -> One (r1313) + | 2521 -> One (r1314) + | 2520 -> One (r1315) + | 2522 -> One (r1317) + | 2519 -> One (r1318) + | 2518 -> One (r1319) + | 2517 -> One (r1320) + | 2516 -> One (r1321) + | 2529 -> One (r1322) + | 2528 -> One (r1323) + | 2526 -> One (r1324) + | 2525 -> One (r1325) + | 2531 -> One (r1326) + | 2534 -> One (r1327) + | 2533 -> One (r1328) + | 2540 -> One (r1329) + | 2539 -> One (r1330) + | 2538 -> One (r1331) + | 2537 -> One (r1332) + | 2547 -> One (r1333) + | 2546 -> One (r1334) + | 2545 -> One (r1335) + | 2544 -> One (r1336) + | 2543 -> One (r1337) + | 2553 -> One (r1338) + | 2555 -> One (r1339) + | 2560 -> One (r1340) + | 2559 -> One (r1341) + | 2558 -> One (r1342) + | 2557 -> One (r1343) + | 2562 -> One (r1344) + | 2567 -> One (r1345) + | 2566 -> One (r1346) + | 2565 -> One (r1347) + | 2564 -> One (r1348) + | 2623 -> One (r1349) + | 2570 -> One (r1350) + | 2583 -> One (r1352) + | 2582 -> One (r1354) + | 2579 -> One (r1355) + | 2578 -> One (r1356) + | 2588 -> One (r1357) + | 2587 -> One (r1358) + | 2586 -> One (r1359) + | 2598 -> One (r1360) + | 2603 -> One (r1362) + | 2601 -> One (r1363) + | 2592 -> One (r1364) + | 2591 -> One (r1365) + | 2590 -> One (r1366) + | 2595 -> One (r1367) + | 2600 -> One (r1368) + | 2610 -> One (r1369) + | 2611 -> One (r1371) + | 2608 -> One (r1372) + | 2607 -> One (r1373) + | 2615 -> One (r1374) + | 2614 -> One (r1375) + | 2621 -> One (r1376) + | 2622 -> One (r1378) + | 2619 -> One (r1379) + | 2618 -> One (r1380) + | 2626 -> One (r1381) + | 2625 -> One (r1382) + | 2639 -> One (r1383) + | 2628 -> One (r1384) + | 2641 -> One (r1386) + | 2637 -> One (r1387) + | 2646 -> One (r1388) + | 2645 -> One (r1389) + | 2648 -> One (r1391) + | 2647 -> One (r1392) + | 2644 -> One (r1393) + | 2657 -> One (r1394) + | 2656 -> One (r1396) + | 2650 -> One (r1397) + | 2653 -> One (r1398) + | 2654 -> One (r1400) + | 2663 -> One (r1401) + | 2661 -> One (r1402) + | 2668 -> One (r1403) + | 2667 -> One (r1404) + | 2666 -> One (r1405) + | 2673 -> One (r1406) + | 2678 -> One (r1408) + | 2675 -> One (r1409) + | 2674 -> One (r1410) + | 2677 -> One (r1411) + | 2683 -> One (r1412) + | 2682 -> One (r1413) + | 2687 -> One (r1414) + | 2692 -> One (r1415) + | 2691 -> One (r1416) + | 2690 -> One (r1417) + | 3604 -> One (r1418) + | 3621 -> One (r1420) + | 3620 -> One (r1421) + | 2698 -> One (r1422) + | 2697 -> One (r1423) + | 2696 -> One (r1424) + | 2695 -> One (r1425) + | 2694 -> One (r1426) + | 2705 -> One (r1427) + | 2704 -> One (r1428) + | 2703 -> One (r1429) + | 2702 -> One (r1430) + | 2700 -> One (r1431) + | 3589 -> One (r1432) + | 2714 -> One (r1433) + | 3583 -> One (r1435) + | 2715 -> One (r1436) + | 2712 -> One (r1437) + | 2709 -> One (r1438) + | 2708 -> One (r1439) + | 2711 -> One (r1440) + | 2719 -> One (r1441) + | 2718 -> One (r1442) + | 2717 -> One (r1443) + | 2723 -> One (r1444) + | 2722 -> One (r1445) + | 2728 -> One (r1446) + | 2731 -> One (r1448) + | 2730 -> One (r1449) + | 2729 -> One (r1450) + | 2726 -> One (r1451) + | 3573 -> One (r1452) + | 2753 -> One (r1453) + | 2749 -> One (r1454) + | 2748 -> One (r1455) + | 2742 -> One (r1456) + | 2739 -> One (r1457) + | 2738 -> One (r1458) + | 2735 -> One (r1459) + | 2741 -> One (r1460) + | 2744 -> One (r1461) + | 2747 -> One (r1462) + | 2746 -> One (r1463) + | 2752 -> One (r1464) + | 2751 -> One (r1465) + | 3546 -> One (r1466) + | 2758 -> One (r1467) + | 2757 -> One (r1468) + | 2760 -> One (r1469) + | 3535 -> One (r1470) + | 3532 -> One (r1471) + | 2787 -> One (r1472) + | 2786 -> One (r1473) + | 2778 | 3356 -> One (r1474) + | 2783 -> One (r1476) + | 2782 -> One (r1477) + | 2781 -> One (r1478) | 2775 -> One (r1479) - | 2767 | 3345 -> One (r1480) - | 2772 -> One (r1482) - | 2771 -> One (r1483) - | 2770 -> One (r1484) - | 2764 -> One (r1485) - | 2761 -> One (r1486) - | 2760 -> One (r1487) - | 2774 -> One (r1489) - | 2756 -> One (r1490) - | 2759 -> One (r1491) - | 2758 -> One (r1492) - | 2766 -> One (r1493) - | 3519 -> One (r1494) - | 3518 -> One (r1495) - | 2779 -> One (r1496) - | 2788 -> One (r1497) - | 2787 -> One (r1498) - | 2786 -> One (r1499) - | 2784 -> One (r1500) - | 2783 -> One (r1501) - | 2797 -> One (r1502) - | 2793 -> One (r1503) - | 2792 -> One (r1504) - | 2796 -> One (r1505) - | 3505 -> One (r1506) - | 2813 -> One (r1507) - | 2808 -> One (r1508) - | 2807 -> One (r1509) - | 3499 -> One (r1510) - | 3497 -> One (r1511) - | 2822 -> One (r1512) - | 2821 -> One (r1513) - | 2820 -> One (r1514) - | 2819 -> One (r1515) - | 2818 -> One (r1516) - | 2817 -> One (r1517) - | 2829 -> One (r1518) - | 2828 -> One (r1519) - | 2827 -> One (r1520) - | 2826 -> One (r1521) - | 2825 -> One (r1522) - | 2824 -> One (r1523) - | 2851 -> One (r1524) - | 2848 -> One (r1526) - | 2847 -> One (r1527) - | 2833 -> One (r1528) - | 2831 -> One (r1529) - | 2845 -> One (r1530) - | 2837 -> One (r1531) - | 2841 -> One (r1532) - | 2910 -> One (r1533) - | 2909 -> One (r1534) - | 2916 -> One (r1536) - | 2853 -> One (r1537) - | 2856 -> One (r1538) - | 2885 -> One (r1539) - | 2859 -> One (r1540) - | 2871 -> One (r1541) - | 2863 -> One (r1542) - | 2862 -> One (r1543) - | 2867 -> One (r1544) - | 2866 -> One (r1545) - | 2870 -> One (r1546) - | 2869 -> One (r1547) - | 2874 -> One (r1548) - | 2878 -> One (r1549) - | 2882 -> One (r1550) - | 2881 -> One (r1551) - | 2880 -> One (r1552) - | 2884 -> One (r1553) - | 2904 -> One (r1554) - | 2891 -> One (r1555) - | 2894 -> One (r1556) - | 2893 -> One (r1557) - | 2896 -> One (r1559) - | 2895 -> One (r1561) - | 2899 -> One (r1562) - | 2901 -> One (r1563) - | 2908 -> One (r1564) - | 2907 -> One (r1565) - | 2915 -> One (r1566) - | 2914 -> One (r1567) - | 2913 -> One (r1568) - | 2912 -> One (r1569) - | 2918 -> One (r1570) - | 2920 -> One (r1571) - | 2922 -> One (r1572) - | 2938 -> One (r1573) - | 2937 -> One (r1574) - | 2942 -> One (r1575) - | 2941 -> One (r1576) - | 2952 -> One (r1577) - | 2951 -> One (r1578) - | 2945 -> One (r1579) - | 2949 -> One (r1580) - | 2948 -> One (r1581) - | 2947 -> One (r1582) - | 2955 -> One (r1583) - | 2954 -> One (r1584) - | 2960 -> One (r1585) - | 2959 -> One (r1586) - | 2963 -> One (r1587) - | 2962 -> One (r1588) - | 2968 -> One (r1589) - | 2967 -> One (r1590) - | 2971 -> One (r1591) - | 2970 -> One (r1592) - | 2976 -> One (r1593) - | 2975 -> One (r1594) - | 2979 -> One (r1595) - | 2978 -> One (r1596) - | 2983 -> One (r1597) - | 2982 -> One (r1598) - | 2986 -> One (r1599) - | 2985 -> One (r1600) - | 2991 -> One (r1601) - | 2990 -> One (r1602) - | 2994 -> One (r1603) - | 2993 -> One (r1604) - | 3493 -> One (r1605) - | 3495 -> One (r1607) - | 2997 -> One (r1608) - | 2996 -> One (r1609) - | 2999 -> One (r1610) - | 3491 -> One (r1611) - | 3002 -> One (r1612) - | 3010 -> One (r1613) - | 3009 -> One (r1614) - | 3008 -> One (r1615) - | 3014 -> One (r1616) - | 3018 -> One (r1617) - | 3017 -> One (r1618) - | 3016 -> One (r1619) - | 3024 -> One (r1620) - | 3026 -> One (r1621) - | 3039 -> One (r1622) - | 3030 -> One (r1623) - | 3033 -> One (r1624) - | 3036 -> One (r1625) - | 3038 -> One (r1626) - | 3042 -> One (r1627) - | 3487 -> One (r1629) - | 3478 -> One (r1631) - | 3078 -> One (r1632) - | 3077 -> One (r1634) - | 3484 -> One (r1636) - | 3479 -> One (r1637) - | 3043 -> One (r1638) - | 3057 -> One (r1639) - | 3059 -> One (r1641) - | 3058 -> One (r1643) - | 3050 -> One (r1644) - | 3049 -> One (r1645) - | 3048 -> One (r1646) - | 3047 -> One (r1647) - | 3053 -> One (r1648) - | 3052 -> One (r1649) - | 3061 -> One (r1650) - | 3063 -> One (r1651) - | 3069 -> One (r1652) - | 3068 -> One (r1653) - | 3067 -> One (r1654) - | 3074 -> One (r1655) - | 3082 -> One (r1656) - | 3081 -> One (r1657) - | 3080 -> One (r1658) - | 3084 -> One (r1659) - | 3091 -> One (r1661) - | 3090 -> One (r1662) - | 3099 -> One (r1664) - | 3086 -> One (r1665) - | 3089 -> One (r1666) - | 3098 -> One (r1667) - | 3097 -> One (r1669) - | 3094 -> One (r1670) - | 3447 -> One (r1671) - | 3103 -> One (r1672) - | 3102 -> One (r1673) - | 3101 -> One (r1674) - | 3441 -> One (r1675) - | 3439 -> One (r1676) - | 3438 -> One (r1677) - | 3410 -> One (r1678) - | 3393 -> One (r1679) - | 3391 -> One (r1680) - | 3108 -> One (r1681) - | 3110 -> One (r1682) - | 3114 -> One (r1683) - | 3113 -> One (r1684) - | 3112 -> One (r1685) - | 3379 -> One (r1686) - | 3120 -> One (r1687) - | 3119 -> One (r1688) - | 3118 -> One (r1689) - | 3371 -> One (r1690) - | 3123 -> One (r1691) - | 3131 -> One (r1692) - | 3128 -> One (r1693) - | 3127 -> One (r1694) - | 3130 -> One (r1695) - | 3137 -> One (r1696) - | 3136 -> One (r1697) - | 3140 -> One (r1698) - | 3145 -> One (r1699) - | 3153 -> One (r1701) - | 3152 -> One (r1702) - | 3151 -> One (r1703) - | 3150 -> One (r1704) - | 3149 -> One (r1706) - | 3360 -> One (r1707) - | 3163 -> One (r1708) - | 3162 -> One (r1709) - | 3161 -> One (r1710) - | 3160 -> One (r1711) - | 3157 -> One (r1712) - | 3159 -> One (r1713) - | 3167 -> One (r1714) - | 3166 -> One (r1715) - | 3165 -> One (r1716) - | 3171 -> One (r1718) - | 3170 -> One (r1719) - | 3169 -> One (r1720) - | 3331 -> One (r1721) - | 3322 -> One (r1722) - | 3321 -> One (r1723) - | 3320 -> One (r1724) - | 3319 -> One (r1725) - | 3176 -> One (r1726) - | 3175 -> One (r1727) - | 3174 -> One (r1728) - | 3311 -> One (r1729) - | 3307 -> One (r1730) - | 3306 -> One (r1731) - | 3281 -> One (r1732) - | 3245 -> One (r1733) - | 3240 -> One (r1734) - | 3244 -> One (r1735) - | 3256 -> One (r1736) - | 3255 -> One (r1737) - | 3254 -> One (r1738) - | 3271 -> One (r1740) - | 3268 -> One (r1742) - | 3257 -> One (r1743) - | 3250 -> One (r1744) - | 3249 -> One (r1745) - | 3253 -> One (r1746) - | 3252 -> One (r1747) - | 3260 -> One (r1748) - | 3259 -> One (r1749) - | 3265 -> One (r1750) - | 3262 -> One (r1751) - | 3264 -> One (r1752) - | 3267 -> One (r1753) - | 3275 -> One (r1754) - | 3274 -> One (r1755) - | 3278 -> One (r1756) - | 3277 -> One (r1757) - | 3280 -> One (r1758) - | 3303 -> One (r1759) - | 3302 -> One (r1760) - | 3294 -> One (r1761) - | 3285 -> One (r1762) - | 3288 -> One (r1763) - | 3287 -> One (r1764) - | 3291 -> One (r1765) - | 3290 -> One (r1766) - | 3293 -> One (r1767) - | 3298 -> One (r1768) - | 3301 -> One (r1769) - | 3305 -> One (r1770) - | 3309 -> One (r1771) - | 3316 -> One (r1772) - | 3313 -> One (r1773) - | 3315 -> One (r1774) - | 3318 -> One (r1775) - | 3325 -> One (r1776) - | 3324 -> One (r1777) - | 3328 -> One (r1778) - | 3327 -> One (r1779) - | 3330 -> One (r1780) - | 3344 -> One (r1781) - | 3335 -> One (r1782) - | 3334 -> One (r1783) - | 3338 -> One (r1784) - | 3337 -> One (r1785) - | 3341 -> One (r1786) - | 3340 -> One (r1787) - | 3343 -> One (r1788) - | 3356 -> One (r1789) - | 3347 -> One (r1790) - | 3350 -> One (r1791) - | 3349 -> One (r1792) - | 3353 -> One (r1793) - | 3352 -> One (r1794) - | 3355 -> One (r1795) - | 3364 -> One (r1796) - | 3367 -> One (r1797) - | 3374 -> One (r1798) - | 3381 -> One (r1799) - | 3384 -> One (r1800) - | 3386 -> One (r1801) - | 3404 -> One (r1802) - | 3395 -> One (r1803) - | 3398 -> One (r1804) - | 3397 -> One (r1805) - | 3401 -> One (r1806) - | 3400 -> One (r1807) - | 3403 -> One (r1808) - | 3407 -> One (r1809) - | 3406 -> One (r1810) - | 3409 -> One (r1811) - | 3413 -> One (r1812) - | 3412 -> One (r1813) - | 3419 -> One (r1814) - | 3421 -> One (r1815) - | 3423 -> One (r1816) - | 3427 -> One (r1817) - | 3426 -> One (r1818) - | 3433 -> One (r1819) - | 3430 -> One (r1820) - | 3432 -> One (r1821) - | 3444 -> One (r1822) - | 3443 -> One (r1823) - | 3446 -> One (r1824) - | 3462 -> One (r1825) - | 3453 -> One (r1826) - | 3450 -> One (r1827) - | 3449 -> One (r1828) - | 3452 -> One (r1829) - | 3456 -> One (r1830) - | 3455 -> One (r1831) - | 3459 -> One (r1832) - | 3458 -> One (r1833) - | 3461 -> One (r1834) - | 3477 -> One (r1835) - | 3468 -> One (r1836) - | 3467 -> One (r1837) - | 3466 -> One (r1838) - | 3465 -> One (r1839) - | 3471 -> One (r1840) - | 3470 -> One (r1841) - | 3474 -> One (r1842) - | 3473 -> One (r1843) - | 3476 -> One (r1844) - | 3482 -> One (r1845) - | 3481 -> One (r1846) - | 3489 -> One (r1847) - | 3502 -> One (r1848) - | 3501 -> One (r1849) - | 3504 -> One (r1850) - | 3517 -> One (r1851) - | 3508 -> One (r1852) - | 3507 -> One (r1853) - | 3511 -> One (r1854) - | 3510 -> One (r1855) - | 3514 -> One (r1856) - | 3513 -> One (r1857) - | 3516 -> One (r1858) - | 3523 -> One (r1859) - | 3529 -> One (r1861) - | 3528 -> One (r1862) - | 3531 -> One (r1863) - | 3538 -> One (r1864) - | 3541 -> One (r1865) - | 3543 -> One (r1866) - | 3551 -> One (r1867) - | 3553 -> One (r1868) - | 3566 -> One (r1869) - | 3570 -> One (r1870) - | 3574 -> One (r1871) - | 3581 -> One (r1872) - | 3590 -> One (r1873) - | 3588 -> One (r1874) - | 3592 -> One (r1875) - | 3598 -> One (r1876) - | 3597 -> One (r1877) - | 3596 -> One (r1878) - | 3601 -> One (r1879) - | 3600 -> One (r1880) - | 3605 -> One (r1881) - | 3604 -> One (r1882) - | 3603 -> One (r1883) - | 3608 -> One (r1884) - | 3607 -> One (r1885) - | 3621 -> One (r1886) - | 3620 -> One (r1887) - | 3616 -> One (r1888) - | 3615 -> One (r1889) - | 3614 -> One (r1890) - | 3613 -> One (r1891) - | 3619 -> One (r1892) - | 3618 -> One (r1893) - | 3630 -> One (r1894) - | 3627 -> One (r1895) - | 3626 -> One (r1896) - | 3631 -> One (r1898) - | 3634 -> One (r1900) - | 3632 -> One (r1901) - | 3625 -> One (r1902) - | 3624 -> One (r1903) - | 3629 -> One (r1904) - | 3638 -> One (r1905) - | 3637 -> One (r1906) - | 3636 -> One (r1907) - | 3644 -> One (r1908) - | 3647 -> One (r1909) - | 3655 -> One (r1910) - | 3654 -> One (r1911) - | 3657 -> One (r1912) - | 3660 -> One (r1913) - | 3665 -> One (r1914) - | 3664 -> One (r1915) - | 3667 -> One (r1916) - | 3670 -> One (r1917) - | 3678 -> One (r1918) - | 3682 -> One (r1919) - | 3685 -> One (r1920) - | 3696 -> One (r1921) - | 3700 -> One (r1922) - | 3699 -> One (r1923) - | 3702 -> One (r1924) - | 3706 -> One (r1925) - | 3708 -> One (r1926) - | 3713 -> One (r1927) - | 3721 -> One (r1928) - | 3720 -> One (r1929) - | 3731 -> One (r1930) - | 3730 -> One (r1931) - | 3733 -> One (r1932) - | 3740 -> One (r1933) - | 3739 -> One (r1934) - | 3743 -> One (r1935) - | 3742 -> One (r1936) - | 3745 -> One (r1937) - | 3758 -> One (r1938) - | 3749 -> One (r1939) - | 3748 -> One (r1940) - | 3752 -> One (r1941) - | 3751 -> One (r1942) - | 3755 -> One (r1943) - | 3754 -> One (r1944) - | 3757 -> One (r1945) - | 3763 -> One (r1946) - | 3768 -> One (r1947) - | 3773 -> One (r1948) - | 3772 -> One (r1949) - | 3776 -> One (r1950) - | 3775 -> One (r1951) - | 3778 -> One (r1952) - | 3782 -> One (r1953) - | 3787 -> One (r1954) - | 3791 -> One (r1955) - | 3796 -> One (r1956) - | 3804 -> One (r1957) - | 3810 -> One (r1958) - | 3812 -> One (r1959) - | 3820 -> One (r1960) - | 3822 -> One (r1961) - | 3828 -> One (r1962) - | 3826 -> One (r1963) - | 3830 -> One (r1964) - | 3845 -> One (r1965) - | 3844 -> One (r1966) - | 3843 -> One (r1967) - | 3842 -> One (r1968) - | 3841 -> One (r1969) - | 3852 -> One (r1970) - | 3851 -> One (r1971) - | 3850 -> One (r1972) - | 3861 -> One (r1973) - | 3860 -> One (r1974) - | 3859 -> One (r1975) - | 3878 -> One (r1976) - | 3904 -> One (r1977) - | 3903 -> One (r1978) - | 3902 -> One (r1979) - | 3901 -> One (r1980) - | 3900 -> One (r1981) - | 3899 -> One (r1982) - | 3898 -> One (r1983) - | 3917 -> One (r1984) - | 3913 -> One (r1985) - | 3912 -> One (r1986) - | 3933 -> One (r1988) - | 3932 -> One (r1989) - | 3931 -> One (r1990) - | 3930 -> One (r1991) - | 3929 -> One (r1992) - | 3928 -> One (r1993) - | 3927 -> One (r1994) - | 3926 -> One (r1995) - | 3911 -> One (r1996) - | 3907 -> One (r1997) - | 3906 -> One (r1998) - | 3910 -> One (r1999) - | 3909 -> One (r2000) - | 3916 -> One (r2001) - | 3915 -> One (r2002) - | 3925 -> One (r2003) - | 3924 -> One (r2004) - | 3923 -> One (r2005) - | 3922 -> One (r2006) - | 3921 -> One (r2007) - | 3920 -> One (r2008) - | 3919 -> One (r2009) - | 3918 -> One (r2010) - | 3941 -> One (r2011) - | 3940 -> One (r2012) - | 3939 -> One (r2013) - | 3938 -> One (r2014) - | 3937 -> One (r2015) - | 4013 -> One (r2017) - | 4012 -> One (r2018) - | 4011 -> One (r2019) - | 4010 -> One (r2020) - | 4009 -> One (r2021) - | 3947 -> One (r2022) - | 3955 -> One (r2023) - | 3954 -> One (r2024) - | 3953 | 4026 -> One (r2025) - | 3952 | 4025 -> One (r2026) - | 3951 | 4024 -> One (r2027) - | 3950 | 4023 -> One (r2028) - | 3972 -> One (r2030) - | 3970 -> One (r2031) - | 3968 -> One (r2032) - | 3966 -> One (r2033) - | 3964 -> One (r2034) - | 4006 -> One (r2036) - | 3976 -> One (r2037) - | 3975 -> One (r2038) - | 3974 -> One (r2039) - | 3973 -> One (r2040) - | 3962 -> One (r2041) - | 3949 | 4022 -> One (r2042) - | 3959 -> One (r2043) - | 3961 -> One (r2045) - | 3960 -> One (r2046) - | 3956 | 4027 -> One (r2047) - | 4001 -> One (r2048) - | 4000 -> One (r2049) - | 3999 -> One (r2050) - | 3998 -> One (r2051) - | 3978 -> One (r2052) - | 3986 -> One (r2053) - | 3983 -> One (r2054) - | 3982 -> One (r2055) - | 3981 -> One (r2056) - | 3980 -> One (r2057) - | 3990 -> One (r2058) - | 3997 -> One (r2059) - | 3996 -> One (r2060) - | 3995 -> One (r2061) - | 4005 -> One (r2062) - | 4004 -> One (r2063) - | 4003 -> One (r2064) - | 4029 -> One (r2065) - | 4038 -> One (r2066) - | 4037 -> One (r2067) - | 4036 -> One (r2068) - | 4035 -> One (r2069) - | 4034 -> One (r2070) - | 4033 -> One (r2071) - | 4032 -> One (r2072) - | 4031 -> One (r2073) - | 4046 -> One (r2074) - | 1251 -> Select (function - | 1217 | 1346 | 1348 | 1352 | 1359 | 1361 -> S (T T_GT) :: r669 - | _ -> R 128 :: r668) - | 862 -> Select (function - | 2750 -> [R 677] - | _ -> S (T T_SUPER) :: r493) - | 1214 -> Select (function - | 3044 | 3060 | 3480 -> r466 - | _ -> Sub (r640) :: r647) - | 1215 -> Select (function - | -1 -> r466 - | _ -> Sub (r640) :: r649) - | 1224 -> Select (function - | -1 -> r465 - | _ -> r637) + | 2772 -> One (r1480) + | 2771 -> One (r1481) + | 2785 -> One (r1483) + | 2767 -> One (r1484) + | 2770 -> One (r1485) + | 2769 -> One (r1486) + | 2777 -> One (r1487) + | 3530 -> One (r1488) + | 3529 -> One (r1489) + | 2790 -> One (r1490) + | 2799 -> One (r1491) + | 2798 -> One (r1492) + | 2797 -> One (r1493) + | 2795 -> One (r1494) + | 2794 -> One (r1495) + | 2808 -> One (r1496) + | 2804 -> One (r1497) + | 2803 -> One (r1498) + | 2807 -> One (r1499) + | 3516 -> One (r1500) + | 2824 -> One (r1501) + | 2819 -> One (r1502) + | 2818 -> One (r1503) + | 3510 -> One (r1504) + | 3508 -> One (r1505) + | 2833 -> One (r1506) + | 2832 -> One (r1507) + | 2831 -> One (r1508) + | 2830 -> One (r1509) + | 2829 -> One (r1510) + | 2828 -> One (r1511) + | 2840 -> One (r1512) + | 2839 -> One (r1513) + | 2838 -> One (r1514) + | 2837 -> One (r1515) + | 2836 -> One (r1516) + | 2835 -> One (r1517) + | 2862 -> One (r1518) + | 2859 -> One (r1520) + | 2858 -> One (r1521) + | 2844 -> One (r1522) + | 2842 -> One (r1523) + | 2856 -> One (r1524) + | 2848 -> One (r1525) + | 2852 -> One (r1526) + | 2921 -> One (r1527) + | 2920 -> One (r1528) + | 2927 -> One (r1530) + | 2864 -> One (r1531) + | 2867 -> One (r1532) + | 2896 -> One (r1533) + | 2870 -> One (r1534) + | 2882 -> One (r1535) + | 2874 -> One (r1536) + | 2873 -> One (r1537) + | 2878 -> One (r1538) + | 2877 -> One (r1539) + | 2881 -> One (r1540) + | 2880 -> One (r1541) + | 2885 -> One (r1542) + | 2889 -> One (r1543) + | 2893 -> One (r1544) + | 2892 -> One (r1545) + | 2891 -> One (r1546) + | 2895 -> One (r1547) + | 2915 -> One (r1548) + | 2902 -> One (r1549) + | 2905 -> One (r1550) + | 2904 -> One (r1551) + | 2907 -> One (r1553) + | 2906 -> One (r1555) + | 2910 -> One (r1556) + | 2912 -> One (r1557) + | 2919 -> One (r1558) + | 2918 -> One (r1559) + | 2926 -> One (r1560) + | 2925 -> One (r1561) + | 2924 -> One (r1562) + | 2923 -> One (r1563) + | 2929 -> One (r1564) + | 2931 -> One (r1565) + | 2933 -> One (r1566) + | 2949 -> One (r1567) + | 2948 -> One (r1568) + | 2953 -> One (r1569) + | 2952 -> One (r1570) + | 2963 -> One (r1571) + | 2962 -> One (r1572) + | 2956 -> One (r1573) + | 2960 -> One (r1574) + | 2959 -> One (r1575) + | 2958 -> One (r1576) + | 2966 -> One (r1577) + | 2965 -> One (r1578) + | 2971 -> One (r1579) + | 2970 -> One (r1580) + | 2974 -> One (r1581) + | 2973 -> One (r1582) + | 2979 -> One (r1583) + | 2978 -> One (r1584) + | 2982 -> One (r1585) + | 2981 -> One (r1586) + | 2987 -> One (r1587) + | 2986 -> One (r1588) + | 2990 -> One (r1589) + | 2989 -> One (r1590) + | 2994 -> One (r1591) + | 2993 -> One (r1592) + | 2997 -> One (r1593) + | 2996 -> One (r1594) + | 3002 -> One (r1595) + | 3001 -> One (r1596) + | 3005 -> One (r1597) + | 3004 -> One (r1598) + | 3504 -> One (r1599) + | 3506 -> One (r1601) + | 3008 -> One (r1602) + | 3007 -> One (r1603) + | 3010 -> One (r1604) + | 3502 -> One (r1605) + | 3013 -> One (r1606) + | 3021 -> One (r1607) + | 3020 -> One (r1608) + | 3019 -> One (r1609) + | 3025 -> One (r1610) + | 3029 -> One (r1611) + | 3028 -> One (r1612) + | 3027 -> One (r1613) + | 3035 -> One (r1614) + | 3037 -> One (r1615) + | 3050 -> One (r1616) + | 3041 -> One (r1617) + | 3044 -> One (r1618) + | 3047 -> One (r1619) + | 3049 -> One (r1620) + | 3053 -> One (r1621) + | 3498 -> One (r1623) + | 3489 -> One (r1625) + | 3089 -> One (r1626) + | 3088 -> One (r1628) + | 3495 -> One (r1630) + | 3490 -> One (r1631) + | 3054 -> One (r1632) + | 3068 -> One (r1633) + | 3070 -> One (r1635) + | 3069 -> One (r1637) + | 3061 -> One (r1638) + | 3060 -> One (r1639) + | 3059 -> One (r1640) + | 3058 -> One (r1641) + | 3064 -> One (r1642) + | 3063 -> One (r1643) + | 3072 -> One (r1644) + | 3074 -> One (r1645) + | 3080 -> One (r1646) + | 3079 -> One (r1647) + | 3078 -> One (r1648) + | 3085 -> One (r1649) + | 3093 -> One (r1650) + | 3092 -> One (r1651) + | 3091 -> One (r1652) + | 3095 -> One (r1653) + | 3102 -> One (r1655) + | 3101 -> One (r1656) + | 3110 -> One (r1658) + | 3097 -> One (r1659) + | 3100 -> One (r1660) + | 3109 -> One (r1661) + | 3108 -> One (r1663) + | 3105 -> One (r1664) + | 3458 -> One (r1665) + | 3114 -> One (r1666) + | 3113 -> One (r1667) + | 3112 -> One (r1668) + | 3452 -> One (r1669) + | 3450 -> One (r1670) + | 3449 -> One (r1671) + | 3421 -> One (r1672) + | 3404 -> One (r1673) + | 3402 -> One (r1674) + | 3119 -> One (r1675) + | 3121 -> One (r1676) + | 3125 -> One (r1677) + | 3124 -> One (r1678) + | 3123 -> One (r1679) + | 3390 -> One (r1680) + | 3131 -> One (r1681) + | 3130 -> One (r1682) + | 3129 -> One (r1683) + | 3382 -> One (r1684) + | 3134 -> One (r1685) + | 3142 -> One (r1686) + | 3139 -> One (r1687) + | 3138 -> One (r1688) + | 3141 -> One (r1689) + | 3148 -> One (r1690) + | 3147 -> One (r1691) + | 3151 -> One (r1692) + | 3156 -> One (r1693) + | 3164 -> One (r1695) + | 3163 -> One (r1696) + | 3162 -> One (r1697) + | 3161 -> One (r1698) + | 3160 -> One (r1700) + | 3371 -> One (r1701) + | 3174 -> One (r1702) + | 3173 -> One (r1703) + | 3172 -> One (r1704) + | 3171 -> One (r1705) + | 3168 -> One (r1706) + | 3170 -> One (r1707) + | 3178 -> One (r1708) + | 3177 -> One (r1709) + | 3176 -> One (r1710) + | 3182 -> One (r1712) + | 3181 -> One (r1713) + | 3180 -> One (r1714) + | 3342 -> One (r1715) + | 3333 -> One (r1716) + | 3332 -> One (r1717) + | 3331 -> One (r1718) + | 3330 -> One (r1719) + | 3187 -> One (r1720) + | 3186 -> One (r1721) + | 3185 -> One (r1722) + | 3322 -> One (r1723) + | 3318 -> One (r1724) + | 3317 -> One (r1725) + | 3292 -> One (r1726) + | 3256 -> One (r1727) + | 3251 -> One (r1728) + | 3255 -> One (r1729) + | 3267 -> One (r1730) + | 3266 -> One (r1731) + | 3265 -> One (r1732) + | 3282 -> One (r1734) + | 3279 -> One (r1736) + | 3268 -> One (r1737) + | 3261 -> One (r1738) + | 3260 -> One (r1739) + | 3264 -> One (r1740) + | 3263 -> One (r1741) + | 3271 -> One (r1742) + | 3270 -> One (r1743) + | 3276 -> One (r1744) + | 3273 -> One (r1745) + | 3275 -> One (r1746) + | 3278 -> One (r1747) + | 3286 -> One (r1748) + | 3285 -> One (r1749) + | 3289 -> One (r1750) + | 3288 -> One (r1751) + | 3291 -> One (r1752) + | 3314 -> One (r1753) + | 3313 -> One (r1754) + | 3305 -> One (r1755) + | 3296 -> One (r1756) + | 3299 -> One (r1757) + | 3298 -> One (r1758) + | 3302 -> One (r1759) + | 3301 -> One (r1760) + | 3304 -> One (r1761) + | 3309 -> One (r1762) + | 3312 -> One (r1763) + | 3316 -> One (r1764) + | 3320 -> One (r1765) + | 3327 -> One (r1766) + | 3324 -> One (r1767) + | 3326 -> One (r1768) + | 3329 -> One (r1769) + | 3336 -> One (r1770) + | 3335 -> One (r1771) + | 3339 -> One (r1772) + | 3338 -> One (r1773) + | 3341 -> One (r1774) + | 3355 -> One (r1775) + | 3346 -> One (r1776) + | 3345 -> One (r1777) + | 3349 -> One (r1778) + | 3348 -> One (r1779) + | 3352 -> One (r1780) + | 3351 -> One (r1781) + | 3354 -> One (r1782) + | 3367 -> One (r1783) + | 3358 -> One (r1784) + | 3361 -> One (r1785) + | 3360 -> One (r1786) + | 3364 -> One (r1787) + | 3363 -> One (r1788) + | 3366 -> One (r1789) + | 3375 -> One (r1790) + | 3378 -> One (r1791) + | 3385 -> One (r1792) + | 3392 -> One (r1793) + | 3395 -> One (r1794) + | 3397 -> One (r1795) + | 3415 -> One (r1796) + | 3406 -> One (r1797) + | 3409 -> One (r1798) + | 3408 -> One (r1799) + | 3412 -> One (r1800) + | 3411 -> One (r1801) + | 3414 -> One (r1802) + | 3418 -> One (r1803) + | 3417 -> One (r1804) + | 3420 -> One (r1805) + | 3424 -> One (r1806) + | 3423 -> One (r1807) + | 3430 -> One (r1808) + | 3432 -> One (r1809) + | 3434 -> One (r1810) + | 3438 -> One (r1811) + | 3437 -> One (r1812) + | 3444 -> One (r1813) + | 3441 -> One (r1814) + | 3443 -> One (r1815) + | 3455 -> One (r1816) + | 3454 -> One (r1817) + | 3457 -> One (r1818) + | 3473 -> One (r1819) + | 3464 -> One (r1820) + | 3461 -> One (r1821) + | 3460 -> One (r1822) + | 3463 -> One (r1823) + | 3467 -> One (r1824) + | 3466 -> One (r1825) + | 3470 -> One (r1826) + | 3469 -> One (r1827) + | 3472 -> One (r1828) + | 3488 -> One (r1829) + | 3479 -> One (r1830) + | 3478 -> One (r1831) + | 3477 -> One (r1832) + | 3476 -> One (r1833) + | 3482 -> One (r1834) + | 3481 -> One (r1835) + | 3485 -> One (r1836) + | 3484 -> One (r1837) + | 3487 -> One (r1838) + | 3493 -> One (r1839) + | 3492 -> One (r1840) + | 3500 -> One (r1841) + | 3513 -> One (r1842) + | 3512 -> One (r1843) + | 3515 -> One (r1844) + | 3528 -> One (r1845) + | 3519 -> One (r1846) + | 3518 -> One (r1847) + | 3522 -> One (r1848) + | 3521 -> One (r1849) + | 3525 -> One (r1850) + | 3524 -> One (r1851) + | 3527 -> One (r1852) + | 3534 -> One (r1853) + | 3540 -> One (r1855) + | 3539 -> One (r1856) + | 3542 -> One (r1857) + | 3549 -> One (r1858) + | 3552 -> One (r1859) + | 3554 -> One (r1860) + | 3562 -> One (r1861) + | 3564 -> One (r1862) + | 3577 -> One (r1863) + | 3581 -> One (r1864) + | 3585 -> One (r1865) + | 3592 -> One (r1866) + | 3601 -> One (r1867) + | 3599 -> One (r1868) + | 3603 -> One (r1869) + | 3609 -> One (r1870) + | 3608 -> One (r1871) + | 3607 -> One (r1872) + | 3612 -> One (r1873) + | 3611 -> One (r1874) + | 3616 -> One (r1875) + | 3615 -> One (r1876) + | 3614 -> One (r1877) + | 3619 -> One (r1878) + | 3618 -> One (r1879) + | 3632 -> One (r1880) + | 3631 -> One (r1881) + | 3627 -> One (r1882) + | 3626 -> One (r1883) + | 3625 -> One (r1884) + | 3624 -> One (r1885) + | 3630 -> One (r1886) + | 3629 -> One (r1887) + | 3641 -> One (r1888) + | 3638 -> One (r1889) + | 3637 -> One (r1890) + | 3642 -> One (r1892) + | 3645 -> One (r1894) + | 3643 -> One (r1895) + | 3636 -> One (r1896) + | 3635 -> One (r1897) + | 3640 -> One (r1898) + | 3649 -> One (r1899) + | 3648 -> One (r1900) + | 3647 -> One (r1901) + | 3655 -> One (r1902) + | 3658 -> One (r1903) + | 3666 -> One (r1904) + | 3665 -> One (r1905) + | 3668 -> One (r1906) + | 3671 -> One (r1907) + | 3676 -> One (r1908) + | 3675 -> One (r1909) + | 3678 -> One (r1910) + | 3681 -> One (r1911) + | 3689 -> One (r1912) + | 3693 -> One (r1913) + | 3696 -> One (r1914) + | 3707 -> One (r1915) + | 3711 -> One (r1916) + | 3710 -> One (r1917) + | 3713 -> One (r1918) + | 3717 -> One (r1919) + | 3719 -> One (r1920) + | 3724 -> One (r1921) + | 3732 -> One (r1922) + | 3731 -> One (r1923) + | 3742 -> One (r1924) + | 3741 -> One (r1925) + | 3744 -> One (r1926) + | 3751 -> One (r1927) + | 3750 -> One (r1928) + | 3754 -> One (r1929) + | 3753 -> One (r1930) + | 3756 -> One (r1931) + | 3769 -> One (r1932) + | 3760 -> One (r1933) + | 3759 -> One (r1934) + | 3763 -> One (r1935) + | 3762 -> One (r1936) + | 3766 -> One (r1937) + | 3765 -> One (r1938) + | 3768 -> One (r1939) + | 3774 -> One (r1940) + | 3779 -> One (r1941) + | 3784 -> One (r1942) + | 3783 -> One (r1943) + | 3787 -> One (r1944) + | 3786 -> One (r1945) + | 3789 -> One (r1946) + | 3793 -> One (r1947) + | 3798 -> One (r1948) + | 3802 -> One (r1949) + | 3807 -> One (r1950) + | 3815 -> One (r1951) + | 3821 -> One (r1952) + | 3823 -> One (r1953) + | 3831 -> One (r1954) + | 3833 -> One (r1955) + | 3839 -> One (r1956) + | 3837 -> One (r1957) + | 3841 -> One (r1958) + | 3856 -> One (r1959) + | 3855 -> One (r1960) + | 3854 -> One (r1961) + | 3853 -> One (r1962) + | 3852 -> One (r1963) + | 3863 -> One (r1964) + | 3862 -> One (r1965) + | 3861 -> One (r1966) + | 3872 -> One (r1967) + | 3871 -> One (r1968) + | 3870 -> One (r1969) + | 3889 -> One (r1970) + | 3901 -> One (r1971) + | 3900 -> One (r1972) + | 3899 -> One (r1973) + | 3898 -> One (r1974) + | 3897 -> One (r1975) + | 3896 -> One (r1976) + | 3895 -> One (r1977) + | 3894 -> One (r1978) + | 3958 -> One (r1979) + | 3957 -> One (r1980) + | 3956 -> One (r1981) + | 3955 -> One (r1982) + | 3954 -> One (r1983) + | 3947 -> One (r1984) + | 3917 -> One (r1985) + | 3916 -> One (r1986) + | 3915 -> One (r1987) + | 3942 -> One (r1988) + | 3941 -> One (r1989) + | 3940 -> One (r1990) + | 3939 -> One (r1991) + | 3919 -> One (r1992) + | 3927 -> One (r1993) + | 3924 -> One (r1994) + | 3923 -> One (r1995) + | 3922 -> One (r1996) + | 3921 -> One (r1997) + | 3931 -> One (r1998) + | 3938 -> One (r1999) + | 3937 -> One (r2000) + | 3936 -> One (r2001) + | 3946 -> One (r2002) + | 3945 -> One (r2003) + | 3944 -> One (r2004) + | 3951 -> One (r2005) + | 3953 -> One (r2006) + | 4014 -> One (r2007) + | 4013 -> One (r2008) + | 4012 -> One (r2009) + | 4011 -> One (r2010) + | 4010 -> One (r2011) + | 3964 -> One (r2012) + | 3963 -> One (r2013) + | 3994 -> One (r2014) + | 3967 -> One (r2015) + | 3966 -> One (r2016) + | 3988 -> One (r2017) + | 3985 -> One (r2018) + | 3984 -> One (r2019) + | 3983 -> One (r2020) + | 3969 -> One (r2021) + | 3968 -> One (r2022) + | 3977 -> One (r2023) + | 3974 -> One (r2024) + | 3972 -> One (r2025) + | 3971 -> One (r2026) + | 3976 -> One (r2027) + | 3982 -> One (r2028) + | 3981 -> One (r2029) + | 3980 -> One (r2030) + | 3979 -> One (r2031) + | 3987 -> One (r2032) + | 3993 -> One (r2034) + | 3992 -> One (r2035) + | 3991 -> One (r2036) + | 3990 -> One (r2037) + | 4003 -> One (r2038) + | 4002 -> One (r2039) + | 4001 -> One (r2040) + | 4000 -> One (r2041) + | 3999 -> One (r2042) + | 3998 -> One (r2043) + | 3997 -> One (r2044) + | 3996 -> One (r2045) + | 4008 -> One (r2046) + | 4028 -> One (r2047) + | 4027 -> One (r2048) + | 4026 -> One (r2049) + | 4025 -> One (r2050) + | 4024 -> One (r2051) + | 4023 -> One (r2052) + | 4022 -> One (r2053) + | 4021 -> One (r2054) + | 4056 -> One (r2055) + | 4055 -> One (r2056) + | 4054 -> One (r2057) + | 4053 -> One (r2058) + | 4052 -> One (r2059) + | 4033 -> One (r2060) + | 4032 -> One (r2061) + | 4039 -> One (r2062) + | 4035 -> One (r2063) + | 4034 -> One (r2064) + | 4038 -> One (r2065) + | 4037 -> One (r2066) + | 4049 -> One (r2067) + | 4045 -> One (r2068) + | 4044 -> One (r2069) + | 4051 -> One (r2071) + | 4043 -> One (r2072) + | 4042 -> One (r2073) + | 4041 -> One (r2074) + | 4048 -> One (r2075) + | 4047 -> One (r2076) + | 4050 -> One (r2077) + | 4066 -> One (r2078) + | 4065 -> One (r2079) + | 4064 -> One (r2080) + | 4063 -> One (r2081) + | 4062 -> One (r2082) + | 4061 -> One (r2083) + | 4060 -> One (r2084) + | 4076 -> One (r2085) + | 4075 -> One (r2086) + | 4074 -> One (r2087) + | 4073 -> One (r2088) + | 4072 -> One (r2089) + | 4071 -> One (r2090) + | 4070 -> One (r2091) + | 4086 -> One (r2092) + | 4085 -> One (r2093) + | 4084 -> One (r2094) + | 4083 -> One (r2095) + | 4082 -> One (r2096) + | 4081 -> One (r2098) + | 4080 -> One (r2099) + | 4079 -> One (r2100) + | 4094 -> One (r2101) + | 1262 -> Select (function + | 1228 | 1357 | 1359 | 1363 | 1370 | 1372 -> S (T T_GT) :: r663 + | _ -> R 128 :: r662) + | 873 -> Select (function + | 2761 -> [R 681] + | _ -> S (T T_SUPER) :: r487) + | 1225 -> Select (function + | 3055 | 3071 | 3491 -> r460 + | _ -> Sub (r634) :: r641) + | 1226 -> Select (function + | -1 -> r460 + | _ -> Sub (r634) :: r643) + | 1235 -> Select (function + | -1 -> r459 + | _ -> r631) | _ -> raise Not_found diff --git a/src/lsp/cobol_parser/grammar_tokens.mly b/src/lsp/cobol_parser/grammar_tokens.mly index c3cf696de..09892308c 100644 --- a/src/lsp/cobol_parser/grammar_tokens.mly +++ b/src/lsp/cobol_parser/grammar_tokens.mly @@ -26,6 +26,8 @@ %token WORD [@recovery "_"] (* [@symbol ""] *) %token WORD_IN_AREA_A [@recovery "_"] (* [@symbol ""] *) +%token INFO_WORD [@recovery "_"] +%token COMMENT_ENTRY [@recovery ["_"]] %token ALPHANUM [@recovery ("_", Quote)] %token ALPHANUM_PREFIX [@recovery ("_", Quote)] %token BOOLIT [@recovery boolean_zero] @@ -104,6 +106,7 @@ %token AT [@keyword] %token ATTRIBUTE [@keyword] [@contexts set_stmt] %token ATTRIBUTES [@keyword] [@contexts ] +%token AUTHOR [@keyword] %token AUTO [@keyword] [@contexts screen_descr_entry] %token AUTOMATIC [@keyword] [@contexts lock_mode_clause] %token AUTO_DECIMAL [@keyword] [@contexts ] @@ -214,20 +217,20 @@ %token COMMIT [@keyword] %token COMMON [@keyword] %token COMMUNICATION [@keyword] -%token COMPUTE [@keyword] %token COMP [@keyword "COMPUTATIONAL", "COMP"] +%token COMPUTE [@keyword] %token COMP_0 [@keyword "COMPUTATIONAL-0", "COMP-0"] %token COMP_1 [@keyword "COMPUTATIONAL-1", "COMP-1"] +%token COMP_10 [@keyword] +%token COMP_15 [@keyword] %token COMP_2 [@keyword "COMPUTATIONAL-2", "COMP-2"] %token COMP_3 [@keyword "COMPUTATIONAL-3", "COMP-3"] %token COMP_4 [@keyword "COMPUTATIONAL-4", "COMP-4"] %token COMP_5 [@keyword "COMPUTATIONAL-5", "COMP-5"] %token COMP_6 [@keyword "COMPUTATIONAL-6", "COMP-6"] +%token COMP_9 [@keyword] %token COMP_N [@keyword "COMPUTATIONAL-N", "COMP-N"] %token COMP_X [@keyword "COMPUTATIONAL-X", "COMP-X"] -%token COMP_9 [@keyword] -%token COMP_10 [@keyword] -%token COMP_15 [@keyword] %token CONDITION [@keyword] %token CONFIGURATION [@keyword] %token CONSTANT [@keyword] @@ -265,7 +268,10 @@ %token DATA_POINTER [@keyword] %token DATA_TYPES [@keyword] [@contexts ] %token DATE [@keyword] +%token DATE_COMPILED [@keyword] %token DATE_ENTRY [@keyword] [@contexts ] +%token DATE_MODIFIED [@keyword] +%token DATE_WRITTEN [@keyword] %token DAY [@keyword] %token DAY_OF_WEEK [@keyword] %token DEBUGGING [@keyword] @@ -500,6 +506,7 @@ %token INSERTION_INDEX [@keyword] [@contexts ] %token INSERT_ROWS [@keyword] [@contexts ] %token INSPECT [@keyword] +%token INSTALLATION [@keyword] %token INTERFACE [@keyword] %token INTERFACE_ID [@keyword] %token INTERMEDIATE [@keyword] [@contexts options_pragraph] @@ -756,6 +763,7 @@ %token RELATIVE [@keyword] %token RELEASE [@keyword] %token REMAINDER [@keyword] +%token REMARKS [@keyword] %token REMOVAL [@keyword] %token RENAMES [@keyword] %token REORG_CRITERIA [@keyword] [@contexts ] @@ -813,6 +821,7 @@ %token SECONDS [@keyword] [@contexts retry_phrase] %token SECTION [@keyword] %token SECURE [@keyword] [@contexts screen_descr_entry] +%token SECURITY [@keyword] %token SEGMENT [@keyword] %token SEGMENT_LIMIT [@keyword] %token SELECT [@keyword] @@ -1012,14 +1021,6 @@ %token ZERO [@keyword "ZERO", "ZEROES", "ZEROS"] %token ZERO_FILL [@keyword] [@contexts ] -%token AUTHOR [@keyword] [@recovery "_"] -%token DATE_COMPILED [@keyword] [@recovery "_"] -%token DATE_MODIFIED [@keyword] [@recovery "_"] -%token DATE_WRITTEN [@keyword] [@recovery "_"] -%token INSTALLATION [@keyword] [@recovery "_"] -%token REMARKS [@keyword] [@recovery "_"] -%token SECURITY [@keyword] [@recovery "_"] - (* + exception names are context-sensitive: can only appear in RAISE, RAISING, USE EXCEPTION, and in the TURN directives *) diff --git a/src/lsp/cobol_parser/text_keywords.ml b/src/lsp/cobol_parser/text_keywords.ml index 95a064e5d..793f2a5de 100644 --- a/src/lsp/cobol_parser/text_keywords.ml +++ b/src/lsp/cobol_parser/text_keywords.ml @@ -206,7 +206,7 @@ let keywords = Grammar_tokens.[ "SELECT", SELECT; "SEGMENT-LIMIT", SEGMENT_LIMIT; "SEGMENT", SEGMENT; - "SECURITY", SECURITY ""; + "SECURITY", SECURITY; "SECURE", SECURE; "SECTION", SECTION; "SECONDS", SECONDS; @@ -264,7 +264,7 @@ let keywords = Grammar_tokens.[ "REORG-CRITERIA", REORG_CRITERIA; "RENAMES", RENAMES; "REMOVAL", REMOVAL; - "REMARKS", REMARKS ""; + "REMARKS", REMARKS; "REMAINDER", REMAINDER; "RELEASE", RELEASE; "RELATIVE", RELATIVE; @@ -525,7 +525,7 @@ let keywords = Grammar_tokens.[ "INTERMEDIATE", INTERMEDIATE; "INTERFACE-ID", INTERFACE_ID; "INTERFACE", INTERFACE; - "INSTALLATION", INSTALLATION ""; + "INSTALLATION", INSTALLATION; "INSPECT", INSPECT; "INSERT-ROWS", INSERT_ROWS; "INSERTION-INDEX", INSERTION_INDEX; @@ -762,10 +762,10 @@ let keywords = Grammar_tokens.[ "DEBUGGING", DEBUGGING; "DAY-OF-WEEK", DAY_OF_WEEK; "DAY", DAY; - "DATE-WRITTEN", DATE_WRITTEN ""; - "DATE-MODIFIED", DATE_MODIFIED ""; + "DATE-WRITTEN", DATE_WRITTEN; + "DATE-MODIFIED", DATE_MODIFIED; "DATE-ENTRY", DATE_ENTRY; - "DATE-COMPILED", DATE_COMPILED ""; + "DATE-COMPILED", DATE_COMPILED; "DATE", DATE; "DATA-TYPES", DATA_TYPES; "DATA-POINTER", DATA_POINTER; @@ -939,7 +939,7 @@ let keywords = Grammar_tokens.[ "AUTO-DECIMAL", AUTO_DECIMAL; "AUTOMATIC", AUTOMATIC; "AUTO", AUTO; - "AUTHOR", AUTHOR ""; + "AUTHOR", AUTHOR; "ATTRIBUTES", ATTRIBUTES; "ATTRIBUTE", ATTRIBUTE; "AT", AT; diff --git a/src/lsp/cobol_parser/text_tokenizer.ml b/src/lsp/cobol_parser/text_tokenizer.ml index 0af619ff7..6d3d6a9ac 100644 --- a/src/lsp/cobol_parser/text_tokenizer.ml +++ b/src/lsp/cobol_parser/text_tokenizer.ml @@ -54,6 +54,33 @@ let combined_tokens = NEXT_PAGE, "NEXT_PAGE"; ] +let pp_token_string: Grammar_tokens.token Pretty.printer = fun ppf -> + let string s = Pretty.string ppf s + and print format = Pretty.print ppf format in + function + | WORD w + | WORD_IN_AREA_A w + | PICTURE_STRING w + | INFO_WORD w + | DIGITS w + | SINTLIT w -> string w + | EIGHTY_EIGHT -> string "88" + | FIXEDLIT (i, sep, d) -> print "%s%c%s" i sep d + | FLOATLIT (i, sep, d, e) -> print "%s%c%sE%s" i sep d e + | ALPHANUM (s, q) -> print "%a%s%a" TEXT.pp_quote q s TEXT.pp_quote q + | ALPHANUM_PREFIX (s, q) -> print "%a%s" TEXT.pp_quote q s + | NATLIT s -> print "N\"%s\"" s + | BOOLIT b -> print "B\"%a\"" Cobol_ast.pp_boolean b + | HEXLIT s -> print "X\"%s\"" s + | NULLIT s -> print "Z\"%s\"" s + | COMMENT_ENTRY e -> print "%a" Fmt.(list ~sep:sp string) e + | INTERVENING_ c -> print "%c" c + | t -> string @@ + try Text_lexer.show_token t + with Not_found -> + try Hashtbl.find combined_tokens t + with Not_found -> "" + let pp_token: token Pretty.printer = fun ppf -> let string s = Pretty.string ppf s and print format = Pretty.print ppf format in @@ -61,25 +88,15 @@ let pp_token: token Pretty.printer = fun ppf -> | WORD w -> print "WORD[%s]" w | WORD_IN_AREA_A w -> print "WORD_IN_AREA_A[%s]" w | PICTURE_STRING w -> print "PICTURE_STRING[%s]" w - | AUTHOR s -> print "AUTHOR[%s]" s + | INFO_WORD s -> print "INFO_WORD[%s]" s + | COMMENT_ENTRY _ -> print "COMMENT_ENTRY[%a]" pp_token_string ~&t | DIGITS i -> print "DIGITS[%s]" i | SINTLIT i -> print "SINT[%s]" i - | EIGHTY_EIGHT -> string "88" | FIXEDLIT (i, sep, d) -> print "FIXED[%s%c%s]" i sep d | FLOATLIT (i, sep, d, e) -> print "FLOAT[%s%c%sE%s]" i sep d e - | ALPHANUM (s, q) -> print "%a%s%a" TEXT.pp_quote q s TEXT.pp_quote q - | ALPHANUM_PREFIX (s, q) -> print "%a%s" TEXT.pp_quote q s - | NATLIT s -> print "N\"%s\"" s - | BOOLIT b -> print "B\"%a\"" Cobol_ast.pp_boolean b - | HEXLIT s -> print "X\"%s\"" s - | NULLIT s -> print "Z\"%s\"" s | INTERVENING_ c -> print "<%c>" c | EOF -> string "EOF" - | t -> string @@ - try Text_lexer.show_token t - with Not_found -> - try Hashtbl.find combined_tokens t - with Not_found -> "" + | t -> pp_token_string ppf t let pp_tokens = Pretty.list ~fopen:"@[" ~fclose:"@]" pp_token @@ -93,11 +110,23 @@ let token_in_area_a: token -> bool = fun t -> loc_in_area_a ~@t (* Tokenization of manipulated text, to feed the compilation group parser: *) let preproc_n_combine_tokens (module Config: Cobol_config.T) ~source_format = - (* Simplifies the grammar. *) + (* Simplifies the grammar, and applies some token-based pre-processsing to + deal with old-style informational paragraphs (COBOL85). *) let ( +@+ ) = Cobol_common.Srcloc.concat - and start_pos = Cobol_common.Srcloc.start_pos - and comment_entry_termination - = Cobol_preproc.Src_lexing.comment_entry_termination source_format in + and start_pos = Cobol_common.Srcloc.start_pos in + let comment_entry_termination + = Cobol_preproc.Src_lexing.comment_entry_termination source_format + and info_word = function + | WORD w -> + INFO_WORD w + | t -> + (* Try de-tokenizing to accept, e.g, PROGRAM-ID. nested. (as NESTED is a + keyword). *) + try INFO_WORD (Hashtbl.find Text_lexer.keyword_of_token t) + with Not_found -> t + and comment_entry revtoks = + COMMENT_ENTRY (List.rev_map (Pretty.to_string "%a" pp_token_string) revtoks) + in let open List in let rec skip ((p', l', dgs) as acc) ((p, l) as pl) = function | 0 -> acc, pl @@ -110,36 +139,34 @@ let preproc_n_combine_tokens (module Config: Cobol_config.T) ~source_format = | i -> cons x acc (tl p, hd l +@+ hd (tl l) :: tl (tl l)) (i - 1) in cons x acc (p, l) y - and word_after n = - let word = function - | WORD _ as t -> t - | t -> try WORD (Hashtbl.find Text_lexer.keyword_of_token t) with - | Not_found -> t - in + and info_word_after n = let (p', l', dgs), (p, l) = skip acc (p, l) n in match p with | [] -> Result.Error `MissingInputs - | t :: _ -> aux (word t :: p', hd l :: l', dgs) (tl p, tl l) (* XXX: +@+ ? *) + | t :: _ -> aux (info_word t :: p', hd l :: l', dgs) (tl p, tl l) and lex_err msg = Pretty.delayed_to begin fun dmsg -> let (p', l', diags), pl = skip acc (p, l) 1 in aux (p', l', DIAGS.Acc.error diags ~loc:(hd l) "%t" dmsg) pl end msg - and comment_paragraph t = - let subst_comment_entry = match comment_entry_termination with - | Newline -> - subst_comment_line ~init_pos:(Cobol_common.Srcloc.start_pos @@ hd l) - | Period -> - subst_comment_entry ?stop_column:None - | AreaB { first_area_b_column } -> - subst_comment_entry ~stop_column:first_area_b_column - and at_end ~loc ((p', l', diags) as acc) = - match Config.comment_paragraphs#verify ~loc:(Some loc) with - | Ok ((), None) | Error None -> acc - | Ok ((), Some d) | Error (Some d) -> p', l', DIAGS.Set.cons d diags - in - subst_comment_entry ~loc:(hd l) ~at_end - ("comment@ paragraph": Pretty.simple) t acc (tl (tl p), tl (tl l)) + and comment_entry_after n = + let acc, ((p, _) as suff) = skip acc (p, l) n in + if p = [] then Result.Error `MissingInputs else + let consume_comment = match comment_entry_termination with + | Newline -> + comment_line ~init_pos:(Cobol_common.Srcloc.start_pos @@ hd l) + | Period -> + comment_paragraph ?stop_column:None + | AreaB { first_area_b_column } -> + comment_paragraph ~stop_column:first_area_b_column + and at_end ~loc ~revtoks (p', l', diags) = + let p', l' = comment_entry revtoks :: p', loc :: l' in + match Config.comment_paragraphs#verify ~loc:(Some loc) with + | Ok ((), None) | Error None -> p', l', diags + | Ok ((), Some d) | Error (Some d) -> p', l', DIAGS.Set.cons d diags + in + consume_comment ~loc:(hd l) ~revtoks:[] ~at_end + ("comment@ entry": Pretty.simple) acc suff in match p with @@ -190,49 +217,55 @@ let preproc_n_combine_tokens (module Config: Cobol_config.T) ~source_format = | [NEXT] -> Error `MissingInputs | NEXT :: PAGE :: _ -> subst_n NEXT_PAGE 2 - | PROGRAM_ID :: PERIOD :: _ -> word_after 2 + | [PROGRAM_ID] -> Error `MissingInputs + | PROGRAM_ID :: PERIOD :: _ -> info_word_after 2 - | (AUTHOR _ | - INSTALLATION _ | - DATE_WRITTEN _ | - DATE_MODIFIED _ | - DATE_COMPILED _ | - REMARKS _ | - SECURITY _) as t :: PERIOD :: _ -> comment_paragraph t + | [AUTHOR | INSTALLATION | + DATE_WRITTEN | DATE_MODIFIED | + DATE_COMPILED | REMARKS | + SECURITY] -> Error `MissingInputs + | (AUTHOR | INSTALLATION | + DATE_WRITTEN | DATE_MODIFIED | + DATE_COMPILED | REMARKS | + SECURITY) :: PERIOD :: _ -> comment_entry_after 2 | ALPHANUM_PREFIX (s, _) :: _ -> lex_err "Missing continuation of `%s'" s | tok :: _ -> subst_n tok 1 | [] -> Ok acc - and subst_comment_entry ?stop_column ~loc ~at_end descr x acc = function - | [], _ -> - Result.Error `MissingInputs (* no word starting in Area A, or not period yet *) - | EOF :: _ as p, l -> - let _, _, diags = at_end ~loc acc in (* ignore all tokens until EOF *) + + and comment_paragraph ?stop_column ~loc ~revtoks ~at_end descr acc = function + | [], _ -> (* no word starting in Area A, or not period yet *) + Result.Error `MissingInputs + | EOF :: _ as p, l -> (* ignore all tokens until EOF *) + let _, _, diags = at_end ~loc ~revtoks acc in Error (`ReachedEOF (loc, descr, diags, p, l)) - | PERIOD :: p, period_loc :: l + | PERIOD as period :: p, period_loc :: l when Option.is_none stop_column -> - aux (at_end ~loc:(loc +@+ period_loc) acc) (p, l) + let revtoks = period :: revtoks and loc = loc +@+ period_loc in + aux (at_end ~loc ~revtoks acc) (p, l) | p, (p_loc :: _ as l) when (let Lexing.{ pos_bol; pos_cnum; _ } = start_pos p_loc in - Option.fold stop_column - ~some:(fun col -> pos_cnum - pos_bol < col) ~none:false) -> - aux (at_end ~loc acc) (p, l) - | _ :: tlp, l -> - subst_comment_entry ?stop_column ~loc:(loc +@+ hd l) ~at_end - descr x acc (tlp, tl l) - and subst_comment_line ~init_pos ~loc ~at_end descr x acc = function - | [], _ -> - Result.Error `MissingInputs (* found no word starting on anther line *) + Option.fold stop_column (* stop_column starts at 1 *) + ~some:(fun col -> pos_cnum - pos_bol + 1 < col) ~none:false) -> + aux (at_end ~loc ~revtoks acc) (p, l) + | t :: tlp, l -> + comment_paragraph ?stop_column ~at_end descr acc (tlp, tl l) + ~loc:(loc +@+ hd l) ~revtoks:(t :: revtoks) + + and comment_line ~init_pos ~loc ~revtoks ~at_end descr acc = function + | [], _ -> (* found no word starting on anther line (yet) *) + Result.Error `MissingInputs | p, (p_loc :: _ as l) when (let Lexing.{ pos_fname; pos_bol; _ } = start_pos p_loc in pos_bol > init_pos.Lexing.pos_bol || pos_fname <> init_pos.pos_fname) -> - aux (at_end ~loc acc) (p, l) - | _ :: tlp, l -> - subst_comment_line ~init_pos ~loc:(loc +@+ hd l) ~at_end - descr x acc (tlp, tl l) + aux (at_end ~loc ~revtoks acc) (p, l) + | t :: tlp, l -> + comment_line ~init_pos ~at_end descr acc (tlp, tl l) + ~loc:(loc +@+ hd l) ~revtoks:(t :: revtoks) + in fun tokens -> let p, srclocs = split @@ map (~&@) tokens in diff --git a/test/cobol_parsing/cS_tokens.ml b/test/cobol_parsing/cS_tokens.ml index 594fbb35a..52be2af1e 100644 --- a/test/cobol_parsing/cS_tokens.ml +++ b/test/cobol_parsing/cS_tokens.ml @@ -30,15 +30,15 @@ let%expect_test "context-sensitive-tokens" = STOP RUN. |}; [%expect {| - IDENTIFICATION, DIVISION, ., PROGRAM-ID, ., WORD[PROG], ., DATA, DIVISION, ., - WORKING-STORAGE, SECTION, ., DIGITS[01], WORD[AWAY-FROM-ZERO], PICTURE, - PICTURE_STRING[9], VALUE, DIGITS[0], ., DIGITS[01], WORD[BYTE-LENGTH], - PICTURE, PICTURE_STRING[9], ., DIGITS[01], WORD[X], CONSTANT, AS, - BYTE-LENGTH, OF, WORD[BYTE-LENGTH], ., DIGITS[01], WORD[Y], CONSTANT, AS, - LENGTH, OF, WORD[BYTE-LENGTH], ., PROCEDURE, DIVISION, ., COMPUTE, WORD[X], - ROUNDED, MODE, AWAY-FROM-ZERO, WORD[AWAY-FROM-ZERO], =, FIXED[1.1], - END-COMPUTE, DISPLAY, WORD[X], WORD[AWAY-FROM-ZERO], NO, ADVANCING, - END-DISPLAY, ., STOP, RUN, ., EOF + IDENTIFICATION, DIVISION, ., PROGRAM-ID, ., INFO_WORD[PROG], ., DATA, + DIVISION, ., WORKING-STORAGE, SECTION, ., DIGITS[01], WORD[AWAY-FROM-ZERO], + PICTURE, PICTURE_STRING[9], VALUE, DIGITS[0], ., DIGITS[01], + WORD[BYTE-LENGTH], PICTURE, PICTURE_STRING[9], ., DIGITS[01], WORD[X], + CONSTANT, AS, BYTE-LENGTH, OF, WORD[BYTE-LENGTH], ., DIGITS[01], WORD[Y], + CONSTANT, AS, LENGTH, OF, WORD[BYTE-LENGTH], ., PROCEDURE, DIVISION, ., + COMPUTE, WORD[X], ROUNDED, MODE, AWAY-FROM-ZERO, WORD[AWAY-FROM-ZERO], =, + FIXED[1.1], END-COMPUTE, DISPLAY, WORD[X], WORD[AWAY-FROM-ZERO], NO, + ADVANCING, END-DISPLAY, ., STOP, RUN, ., EOF |}];; let%expect_test "context-sensitive-tokens-with-syntax-errors" = @@ -60,12 +60,13 @@ let%expect_test "context-sensitive-tokens-with-syntax-errors" = STOP RUN. |}; [%expect {| - IDENTIFICATION, DIVISION, ., PROGRAM-ID, ., WORD[PROG], ., DATA, DIVISION, ., - WORKING-STORAGE, SECTION, ., DIGITS[01], WORD[AWAY-FROM-ZERO], PICTURE, - PICTURE_STRING[9], VALUE, DIGITS[0], ., DIGITS[01], WORD[BYTE-LENGTH], - PICTURE, PICTURE_STRING[9], ., DIGITS[01], WORD[X], CONSTANT, AS, - BYTE-LENGTH, WORD[BYTE-LENGTH], ., DIGITS[01], WORD[Y], CONSTANT, LENGTH, OF, - WORD[BYTE-LENGTH], ., PROCEDURE, DIVISION, ., COMPUTE, WORD[X], ROUNDED, - AWAY-FROM-ZERO, AWAY-FROM-ZERO, =, FIXED[1.1], END-COMPUTE, DISPLAY, WORD[X], - WORD[AWAY-FROM-ZERO], NO, ADVANCING, END-DISPLAY, ., STOP, RUN, ., EOF + IDENTIFICATION, DIVISION, ., PROGRAM-ID, ., INFO_WORD[PROG], ., DATA, + DIVISION, ., WORKING-STORAGE, SECTION, ., DIGITS[01], WORD[AWAY-FROM-ZERO], + PICTURE, PICTURE_STRING[9], VALUE, DIGITS[0], ., DIGITS[01], + WORD[BYTE-LENGTH], PICTURE, PICTURE_STRING[9], ., DIGITS[01], WORD[X], + CONSTANT, AS, BYTE-LENGTH, WORD[BYTE-LENGTH], ., DIGITS[01], WORD[Y], + CONSTANT, LENGTH, OF, WORD[BYTE-LENGTH], ., PROCEDURE, DIVISION, ., COMPUTE, + WORD[X], ROUNDED, AWAY-FROM-ZERO, AWAY-FROM-ZERO, =, FIXED[1.1], END-COMPUTE, + DISPLAY, WORD[X], WORD[AWAY-FROM-ZERO], NO, ADVANCING, END-DISPLAY, ., STOP, + RUN, ., EOF |}];; diff --git a/test/cobol_parsing/decimal_point.ml b/test/cobol_parsing/decimal_point.ml index bd25e86d2..281cdd17f 100644 --- a/test/cobol_parsing/decimal_point.ml +++ b/test/cobol_parsing/decimal_point.ml @@ -22,7 +22,7 @@ let%expect_test "default-point/comma" = DISPLAY -1,1. |}; [%expect {| - IDENTIFICATION, DIVISION, ., PROGRAM-ID, ., WORD[PROG], ., PROCEDURE, + IDENTIFICATION, DIVISION, ., PROGRAM-ID, ., INFO_WORD[PROG], ., PROCEDURE, DIVISION, ., DISPLAY, FIXED[1.1], DISPLAY, DIGITS[1], DIGITS[1], DISPLAY, FIXED[-1.1], DISPLAY, SINT[-1], DIGITS[1], ., EOF |}];; @@ -42,7 +42,7 @@ let%expect_test "decimal-point-is-comma" = DISPLAY -1,1. |}; [%expect {| - IDENTIFICATION, DIVISION, ., PROGRAM-ID, ., WORD[PROG], ., ENVIRONMENT, + IDENTIFICATION, DIVISION, ., PROGRAM-ID, ., INFO_WORD[PROG], ., ENVIRONMENT, DIVISION, ., CONFIGURATION, SECTION, ., SPECIAL-NAMES, ., DECIMAL-POINT, IS, COMMA, ., PROCEDURE, DIVISION, ., DISPLAY, DIGITS[1], DIGITS[1], DISPLAY, FIXED[1,1], DISPLAY, SINT[-1], DIGITS[1], DISPLAY, FIXED[-1,1], ., EOF @@ -66,7 +66,7 @@ let%expect_test "decimal-point-is-comma-with-missing-period" = DISPLAY -1,1. |}; [%expect {| - IDENTIFICATION, DIVISION, ., PROGRAM-ID, ., WORD[PROG], ., ENVIRONMENT, + IDENTIFICATION, DIVISION, ., PROGRAM-ID, ., INFO_WORD[PROG], ., ENVIRONMENT, DIVISION, ., CONFIGURATION, SECTION, ., SPECIAL-NAMES, ., DECIMAL-POINT, IS, COMMA, PROCEDURE, DIVISION, DISPLAY, DIGITS[1], DIGITS[1], DISPLAY, FIXED[1,1], DISPLAY, SINT[-1], DIGITS[1], DISPLAY, FIXED[-1,1], ., EOF diff --git a/test/cobol_parsing/tokens.ml b/test/cobol_parsing/tokens.ml index 9ac17a9cc..421c75056 100644 --- a/test/cobol_parsing/tokens.ml +++ b/test/cobol_parsing/tokens.ml @@ -20,7 +20,7 @@ let%expect_test "tokens" = STOP RUN. |}; [%expect {| - IDENTIFICATION, DIVISION, ., PROGRAM-ID, ., WORD[PROG], ., PROCEDURE, + IDENTIFICATION, DIVISION, ., PROGRAM-ID, ., INFO_WORD[PROG], ., PROCEDURE, DIVISION, ., STOP, RUN, ., EOF |}];; @@ -34,6 +34,6 @@ let%expect_test "tokens-after-syntax-errors" = STOP RUN. |}; [%expect {| - IDENTIFICATION, PROGRAM-ID, ., PROCEDURE, DIVISION, MOVE, WORD[X], WORD[Y], - STOP, RUN, ., EOF + IDENTIFICATION, PROGRAM-ID, ., INFO_WORD[PROCEDURE], DIVISION, MOVE, WORD[X], + WORD[Y], STOP, RUN, ., EOF |}];; diff --git a/test/output-tests/configuration.expected b/test/output-tests/configuration.expected index 2c49d09e4..804329210 100644 --- a/test/output-tests/configuration.expected +++ b/test/output-tests/configuration.expected @@ -312,26 +312,6 @@ configuration.at-768-defunc.cfg:2.8-2.27: >> Error: Invalid syntax Considering: import/gnucobol/tests/testsuite.src/configuration.at:851:0 -configuration.at-851-fixed.cob:4.18: - 1 - 2 *Example prog in fixed format (the default) - 3 IDENTIFICATION DIVISION. - 4 > PROGRAM-ID. fixed. ----- ^ - 5 DATA DIVISION. - 6 WORKING-STORAGE SECTION. ->> Hint: Missing - -configuration.at-851-fixed.cob:4.24-4.29: - 1 - 2 *Example prog in fixed format (the default) - 3 IDENTIFICATION DIVISION. - 4 > PROGRAM-ID. fixed. ----- ^^^^^ - 5 DATA DIVISION. - 6 WORKING-STORAGE SECTION. ->> Error: Invalid syntax - Considering: import/gnucobol/tests/testsuite.src/configuration.at:880:0 configuration.at-880-wide.cob:9.19-9.72: 6 WORKING-STORAGE SECTION. diff --git a/test/output-tests/reparse.ml b/test/output-tests/reparse.ml index 5ea789e4e..eb5d90b22 100644 --- a/test/output-tests/reparse.ml +++ b/test/output-tests/reparse.ml @@ -41,10 +41,6 @@ let mf_root = srcdir // mf_testsuite module Diags = Cobol_common.Diagnostics.InitStateful () -let preprocess_file ~source_format ?config = - preprocess_file ~source_format ?config ~verbose:false ~libpath:[] - ~ppf:std_formatter ~epf:std_formatter - let reparse_file ~source_format ~config filename = let parse ~source_format input = Cobol_parser.parse_simple diff --git a/test/output-tests/run_extensions.expected b/test/output-tests/run_extensions.expected index 743b5b55a..00e3bb2da 100644 --- a/test/output-tests/run_extensions.expected +++ b/test/output-tests/run_extensions.expected @@ -1880,26 +1880,6 @@ Considering: import/gnucobol/tests/testsuite.src/run_extensions.at:2166:0 Considering: import/gnucobol/tests/testsuite.src/run_extensions.at:2213:0 Considering: import/gnucobol/tests/testsuite.src/run_extensions.at:2210:0 Considering: import/gnucobol/tests/testsuite.src/run_extensions.at:2279:0 -run_extensions.at-2279-prog.cob:10.18: - 7 STOP RUN. - 8 - 9 IDENTIFICATION DIVISION. - 10 > PROGRAM-ID. nested. ----- ^ - 11 PROCEDURE DIVISION. - 12 DISPLAY tally WITH NO ADVANCING. ->> Hint: Missing - -run_extensions.at-2279-prog.cob:10.24-10.30: - 7 STOP RUN. - 8 - 9 IDENTIFICATION DIVISION. - 10 > PROGRAM-ID. nested. ----- ^^^^^^ - 11 PROCEDURE DIVISION. - 12 DISPLAY tally WITH NO ADVANCING. ->> Error: Invalid syntax - run_extensions.at-2279-prog.cob:14.18: 11 PROCEDURE DIVISION. 12 DISPLAY tally WITH NO ADVANCING. @@ -5746,62 +5726,8 @@ run_extensions.at-5732-prog.cob:77.27-77.33: Considering: import/gnucobol/tests/testsuite.src/run_extensions.at:5786:0 Considering: import/gnucobol/tests/testsuite.src/run_extensions.at:5757:0 Considering: import/gnucobol/tests/testsuite.src/run_extensions.at:5865:0 -run_extensions.at-5865-corr.cob:3.18: - 1 - 2 IDENTIFICATION DIVISION. - 3 > PROGRAM-ID. corr. ----- ^ - 4 DATA DIVISION. - 5 WORKING-STORAGE SECTION. ->> Hint: Missing - -run_extensions.at-5865-corr.cob:3.24-3.28: - 1 - 2 IDENTIFICATION DIVISION. - 3 > PROGRAM-ID. corr. ----- ^^^^ - 4 DATA DIVISION. - 5 WORKING-STORAGE SECTION. ->> Error: Invalid syntax - Considering: import/gnucobol/tests/testsuite.src/run_extensions.at:5934:0 -run_extensions.at-5934-nested.cob:3.18: - 1 - 2 IDENTIFICATION DIVISION. - 3 > PROGRAM-ID. nested. ----- ^ - 4 DATA DIVISION. - 5 WORKING-STORAGE SECTION. ->> Hint: Missing - -run_extensions.at-5934-nested.cob:3.24-3.30: - 1 - 2 IDENTIFICATION DIVISION. - 3 > PROGRAM-ID. nested. ----- ^^^^^^ - 4 DATA DIVISION. - 5 WORKING-STORAGE SECTION. ->> Error: Invalid syntax - Considering: import/gnucobol/tests/testsuite.src/run_extensions.at:6022:0 -run_extensions.at-6022-redefines.cob:3.18: - 1 - 2 IDENTIFICATION DIVISION. - 3 > PROGRAM-ID. redefines. ----- ^ - 4 DATA DIVISION. - 5 WORKING-STORAGE SECTION. ->> Hint: Missing - -run_extensions.at-6022-redefines.cob:3.24-3.33: - 1 - 2 IDENTIFICATION DIVISION. - 3 > PROGRAM-ID. redefines. ----- ^^^^^^^^^ - 4 DATA DIVISION. - 5 WORKING-STORAGE SECTION. ->> Error: Invalid syntax - Considering: import/gnucobol/tests/testsuite.src/run_extensions.at:6094:0 run_extensions.at-6094-prog.cob:15.42-15.50: 12 *> diff --git a/test/output-tests/run_file.expected b/test/output-tests/run_file.expected index e25b647c1..8d9de3037 100644 --- a/test/output-tests/run_file.expected +++ b/test/output-tests/run_file.expected @@ -409,26 +409,6 @@ run_file.at-2398-prog.cob:206.18-206.22: >> Error: Invalid syntax Considering: import/gnucobol/tests/testsuite.src/run_file.at:2774:0 -run_file.at-2774-prog.cob:4.18: - 1 - 2 - 3 identification division. - 4 > program-id. linage. ----- ^ - 5 - 6 environment division. ->> Hint: Missing - -run_file.at-2774-prog.cob:4.19-4.25: - 1 - 2 - 3 identification division. - 4 > program-id. linage. ----- ^^^^^^ - 5 - 6 environment division. ->> Error: Invalid syntax - run_file.at-2774-prog.cob:79.21: 76 open i-o indexed-file 77 perform indexing-check diff --git a/test/output-tests/run_misc.expected b/test/output-tests/run_misc.expected index eba57730d..a82ab1455 100644 --- a/test/output-tests/run_misc.expected +++ b/test/output-tests/run_misc.expected @@ -136,44 +136,8 @@ Considering: import/gnucobol/tests/testsuite.src/run_misc.at:464:0 Considering: import/gnucobol/tests/testsuite.src/run_misc.at:506:0 Considering: import/gnucobol/tests/testsuite.src/run_misc.at:507:0 Considering: import/gnucobol/tests/testsuite.src/run_misc.at:570:0 -run_misc.at-570-bigger.cob:3.18: - 1 - 2 IDENTIFICATION DIVISION. - 3 > PROGRAM-ID. error. ----- ^ - 4 DATA DIVISION. - 5 WORKING-STORAGE SECTION. ->> Hint: Missing - -run_misc.at-570-bigger.cob:3.24-3.29: - 1 - 2 IDENTIFICATION DIVISION. - 3 > PROGRAM-ID. error. ----- ^^^^^ - 4 DATA DIVISION. - 5 WORKING-STORAGE SECTION. ->> Error: Invalid syntax - Considering: import/gnucobol/tests/testsuite.src/run_misc.at:569:0 Considering: import/gnucobol/tests/testsuite.src/run_misc.at:573:0 -run_misc.at-573-smaller.cob:3.18: - 1 - 2 IDENTIFICATION DIVISION. - 3 > PROGRAM-ID. error. ----- ^ - 4 DATA DIVISION. - 5 WORKING-STORAGE SECTION. ->> Hint: Missing - -run_misc.at-573-smaller.cob:3.24-3.29: - 1 - 2 IDENTIFICATION DIVISION. - 3 > PROGRAM-ID. error. ----- ^^^^^ - 4 DATA DIVISION. - 5 WORKING-STORAGE SECTION. ->> Error: Invalid syntax - Considering: import/gnucobol/tests/testsuite.src/run_misc.at:610:0 Considering: import/gnucobol/tests/testsuite.src/run_misc.at:634:0 Considering: import/gnucobol/tests/testsuite.src/run_misc.at:658:0 diff --git a/test/output-tests/syn_misc.expected b/test/output-tests/syn_misc.expected index bb03b4ea5..097493198 100644 --- a/test/output-tests/syn_misc.expected +++ b/test/output-tests/syn_misc.expected @@ -3016,22 +3016,6 @@ syn_misc.at-5874-valid.cob:2.7-2.15: 4 000300 IDENTIFICATION DIVISION. >> Error: Invalid syntax -syn_misc.at-5874-valid.cob:5.18: - 2 000100 @OPTIONS NOMAIN,APOST - 3 000200 @OPTIONS APOST - 4 000300 IDENTIFICATION DIVISION. - 5 > 000400 PROGRAM-ID. VALID. ----- ^ ->> Hint: Missing - -syn_misc.at-5874-valid.cob:5.19-5.24: - 2 000100 @OPTIONS NOMAIN,APOST - 3 000200 @OPTIONS APOST - 4 000300 IDENTIFICATION DIVISION. - 5 > 000400 PROGRAM-ID. VALID. ----- ^^^^^ ->> Error: Invalid syntax - Considering: import/gnucobol/tests/testsuite.src/syn_misc.at:5963:0 syn_misc.at-5963-valid.cob:2.7-2.14: 1 @@ -3041,22 +3025,6 @@ syn_misc.at-5963-valid.cob:2.7-2.14: 4 000300 CBL >> Error: Invalid syntax -syn_misc.at-5963-valid.cob:6.18: - 3 000200 CBL CODEPAGE(1208) - 4 000300 CBL - 5 000400 IDENTIFICATION DIVISION. - 6 > 000500 PROGRAM-ID. VALID. ----- ^ ->> Hint: Missing - -syn_misc.at-5963-valid.cob:6.19-6.24: - 3 000200 CBL CODEPAGE(1208) - 4 000300 CBL - 5 000400 IDENTIFICATION DIVISION. - 6 > 000500 PROGRAM-ID. VALID. ----- ^^^^^ ->> Error: Invalid syntax - Considering: import/gnucobol/tests/testsuite.src/syn_misc.at:5999:0 syn_misc.at-5999-valid.cob:3.8-3.16: 1 @@ -3085,22 +3053,6 @@ syn_misc.at-5999-valid.cob:3.17-3.23: 5 000100 *CBL NOMAP NOSOURCE NOLIST >> Error: Invalid syntax -syn_misc.at-5999-valid.cob:7.18: - 4 *CBL MAP LIST - 5 000100 *CBL NOMAP NOSOURCE NOLIST - 6 000200 IDENTIFICATION DIVISION. - 7 > 000300 PROGRAM-ID. VALID. ----- ^ ->> Hint: Missing - -syn_misc.at-5999-valid.cob:7.19-7.24: - 4 *CBL MAP LIST - 5 000100 *CBL NOMAP NOSOURCE NOLIST - 6 000200 IDENTIFICATION DIVISION. - 7 > 000300 PROGRAM-ID. VALID. ----- ^^^^^ ->> Error: Invalid syntax - Considering: import/gnucobol/tests/testsuite.src/syn_misc.at:6601:0 syn_misc.at-6601-prog.cob:9.15-9.26: 6 INPUT-OUTPUT SECTION. @@ -4181,26 +4133,6 @@ syn_misc.at-7729-replace.cob:2.7-2.33: 4 REPLACE ==TEST-VAR== BY ==VAR==. >> Error: CONTROL DIVISION does not conform to default -syn_misc.at-7729-replace.cob:6.18: - 3 SUBSTITUTION SECTION. - 4 REPLACE ==TEST-VAR== BY ==VAR==. - 5 IDENTIFICATION DIVISION. - 6 > PROGRAM-ID. replace. ----- ^ - 7 DATA DIVISION. - 8 WORKING-STORAGE SECTION. ->> Hint: Missing - -syn_misc.at-7729-replace.cob:6.24-6.31: - 3 SUBSTITUTION SECTION. - 4 REPLACE ==TEST-VAR== BY ==VAR==. - 5 IDENTIFICATION DIVISION. - 6 > PROGRAM-ID. replace. ----- ^^^^^^^ - 7 DATA DIVISION. - 8 WORKING-STORAGE SECTION. ->> Error: Invalid syntax - Considering: import/gnucobol/tests/testsuite.src/syn_misc.at:7772:0 syn_misc.at-7772-prog.cob:2.7-3.24: 1 From 20ac7a8c23896852e073845729870c1c663e3d83 Mon Sep 17 00:00:00 2001 From: Nicolas Berthier Date: Tue, 3 Oct 2023 12:54:50 +0200 Subject: [PATCH 05/12] Add some missing headers --- src/lsp/cobol_ast/unparse.ml | 15 ++++++++++++++- src/lsp/cobol_ast/unparse.mli | 18 +++++++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/lsp/cobol_ast/unparse.ml b/src/lsp/cobol_ast/unparse.ml index aaa8b0e40..00d42b246 100644 --- a/src/lsp/cobol_ast/unparse.ml +++ b/src/lsp/cobol_ast/unparse.ml @@ -1,3 +1,16 @@ +(**************************************************************************) +(* *) +(* SuperBOL OSS Studio *) +(* *) +(* Copyright (c) 2022-2023 OCamlPro SAS *) +(* *) +(* All rights reserved. *) +(* This source code is licensed under the GNU Affero General Public *) +(* License version 3 found in the LICENSE.md file in the root directory *) +(* of this source tree. *) +(* *) +(**************************************************************************) + module Expression : sig type precedence = int @@ -105,4 +118,4 @@ end = struct AnyOp op, Fmt.(lhs ++ any " " ++ name ++ sp ++ rhs) let pp ppf (_, pp) = pp ppf () -end \ No newline at end of file +end diff --git a/src/lsp/cobol_ast/unparse.mli b/src/lsp/cobol_ast/unparse.mli index bd48d6121..4c5a33cf6 100644 --- a/src/lsp/cobol_ast/unparse.mli +++ b/src/lsp/cobol_ast/unparse.mli @@ -1,3 +1,19 @@ +(**************************************************************************) +(* *) +(* SuperBOL OSS Studio *) +(* *) +(* Copyright (c) 2022-2023 OCamlPro SAS *) +(* *) +(* All rights reserved. *) +(* This source code is licensed under the GNU Affero General Public *) +(* License version 3 found in the LICENSE.md file in the root directory *) +(* of this source tree. *) +(* *) +(**************************************************************************) + +(* NB: This module is not specific to COBOL; it does not really fit within + `cobol_ast`. *) + module Expression : sig type precedence = int (** Operator precedence is represented using integers. Operators with a higher @@ -38,4 +54,4 @@ module Expression : sig val unary : unary_op -> t -> t val binary : t -> binary_op -> t -> t -end \ No newline at end of file +end From c4ae60ab6b565e2fca5154ddab773fc7e0749373 Mon Sep 17 00:00:00 2001 From: Nicolas Berthier Date: Wed, 4 Oct 2023 09:05:49 +0200 Subject: [PATCH 06/12] Permit simpler specifications of rewinding positions --- src/lsp/cobol_lsp/lsp_document.ml | 49 +++++++++----------------- src/lsp/cobol_parser/parser_engine.ml | 36 ++++++++++++++----- src/lsp/cobol_parser/parser_engine.mli | 20 +++++++++-- src/lsp/cobol_parser/parser_outputs.ml | 1 - 4 files changed, 61 insertions(+), 45 deletions(-) diff --git a/src/lsp/cobol_lsp/lsp_document.ml b/src/lsp/cobol_lsp/lsp_document.ml index 47ae1fbb0..30dedc0ae 100644 --- a/src/lsp/cobol_lsp/lsp_document.ml +++ b/src/lsp/cobol_lsp/lsp_document.ml @@ -127,8 +127,7 @@ let lazy_references ast cus defs = let no_artifacts = Cobol_parser.Outputs.{ tokens = lazy []; pplog = Cobol_preproc.Trace.empty; - comments = []; - newline_cnums = [] } + comments = [] } let gather_parsed_data ptree = Cobol_typeck.analyze_compilation_group ptree |> @@ -205,37 +204,27 @@ let load ~project ?copybook doc = try parse_and_analyze doc with e -> raise @@ Internal_error (doc, e) -let first_change_pos ({ artifacts = { newline_cnums; _ }; _ } as doc) changes = - if newline_cnums = [] then None (* straight out of cache: missing info *) - else - match - List.fold_left begin fun pos -> function - | Lsp.Types.TextDocumentContentChangeEvent.{ range = None; _ } -> - Some (0, 0, 0) (* meaning: full text change *) - | { range = Some { start = { line; character }; _ }; _ } -> - let bol = - try List.nth newline_cnums (line - 1) - with Not_found | Invalid_argument _ -> 0 - in - let cnum = bol + character in - match pos with - | Some (_, _, cnum') when cnum' > cnum -> pos - | _ -> Some (line + 1, bol, cnum) - end None changes - with - | Some (pos_lnum, pos_bol, pos_cnum) -> - Some Lexing.{ pos_fname = Lsp.Uri.to_path (uri doc); - pos_bol; pos_cnum; pos_lnum } - | None -> (* Humm... can |changes|=0 really happen? *) - None +let first_change_pos changes = + let line, char = + List.fold_left begin fun ((l, c) as acc) -> function + | Lsp.Types.TextDocumentContentChangeEvent.{ range = None; _ } -> + (0, 0) (* meaning: full text change *) + | { range = Some { start = { line; character }; _ }; _ } + when line < l || line = l && character < c -> + line, character + | _ -> + acc + end Int.(max_int, max_int) changes (* can |changes|=0 really happen? *) + in + Cobol_parser.Indexed { line; char } let update ({ textdoc; _ } as doc) changes = - let position = first_change_pos doc changes in + let position = first_change_pos changes in let doc = { doc with textdoc = Lsp.Text_document.apply_content_changes textdoc changes } in - try reparse_and_analyze ?position doc + try reparse_and_analyze ~position doc with e -> raise @@ Internal_error (doc, e) (** Raises {!Unparseable} in case the document cannot be parsed entierely, or @@ -292,11 +281,7 @@ let of_cache ~project { ast; cus; definitions; references }) parsed in - { doc with artifacts = { pplog; tokens = lazy tokens; comments; - (* We leave the folloing out of the cache: only - used upon document update, which should only - happen after a full parse in each session. *) - newline_cnums = [] }; + { doc with artifacts = { pplog; tokens = lazy tokens; comments }; diags = DIAGS.Set.of_serializable diags; parsed } diff --git a/src/lsp/cobol_parser/parser_engine.ml b/src/lsp/cobol_parser/parser_engine.ml index 6528ab452..0eb5c8f3f 100644 --- a/src/lsp/cobol_parser/parser_engine.ml +++ b/src/lsp/cobol_parser/parser_engine.ml @@ -22,11 +22,14 @@ open Parser_outputs (* import types for outputs *) type 'x rewinder = { - rewind_n_parse: preprocessor_rewind -> position: Lexing.position -> + rewind_n_parse: preprocessor_rewind -> position: position -> ('x * ('x rewinder)) with_diags; } and preprocessor_rewind = - ?new_position:Lexing.position -> (Cobol_preproc.preprocessor as 'r) -> 'r + ?new_position: Lexing.position -> (Cobol_preproc.preprocessor as 'r) -> 'r +and position = + | Lexing of Lexing.position + | Indexed of { line: int; char: int } (* all starting at 0 *) type 'm simple_parsing = ?options:parser_options @@ -530,8 +533,7 @@ module Make (Config: Cobol_config.T) = struct let artifacts = { tokens = Tokzr.parsed_tokens ps.preproc.tokzr; pplog = Cobol_preproc.log ps.preproc.pp; - comments = Cobol_preproc.comments ps.preproc.pp; - newline_cnums = Cobol_preproc.newline_cnums ps.preproc.pp } in + comments = Cobol_preproc.comments ps.preproc.pp } in WithArtifacts (res, artifacts) let parse_once @@ -541,13 +543,29 @@ module Make (Config: Cobol_config.T) = struct let res, ps = full_parse @@ init_parse ~make_checkpoint ps in DIAGS.with_diags (aggregate_output res ps) (all_diags ps) - let find_history_event_preceding ~(position: Lexing.position) store = + let lexing_postion_of ~position rwps = match position with + | Lexing pos -> + pos + | Indexed { line; char } -> + let ps = rewindable_parser_state rwps in + let lexpos = Cobol_preproc.position ps.preproc.pp in + let newline_cnums = Cobol_preproc.newline_cnums ps.preproc.pp in + let pos_bol = + try List.nth newline_cnums (line - 1) + with Not_found | Invalid_argument _ -> 0 + in + Lexing.{ lexpos with pos_bol; + pos_cnum = pos_bol + char; + pos_lnum = line + 1 } + + let find_history_event_preceding ~position ({ store; _ } as rwps) = + let lexpos = lexing_postion_of ~position rwps in let rec aux = function | [] -> raise Not_found | { preproc_position; _ } as event :: store - when preproc_position.pos_cnum <= position.pos_cnum && - preproc_position.pos_fname = position.pos_fname -> + when preproc_position.pos_cnum <= lexpos.pos_cnum && + preproc_position.pos_fname = lexpos.pos_fname -> event, store | _ :: store -> aux store @@ -556,12 +574,12 @@ module Make (Config: Cobol_config.T) = struct let rec rewind_n_parse : type m. ('a, m) rewindable_parsing_state -> make_checkpoint:_ - -> preprocessor_rewind -> position:Lexing.position + -> preprocessor_rewind -> position: position -> ((('a option, m) output as 'x) * 'x rewinder) with_diags = fun rwps ~make_checkpoint pp_rewind ~position -> let rwps = try - let event, store = find_history_event_preceding ~position rwps.store in + let event, store = find_history_event_preceding ~position rwps in let (ps, token, tokens), env = event.event_step in let pp = ps.preproc.pp in let pp = pp_rewind ?new_position:(Some event.preproc_position) pp in diff --git a/src/lsp/cobol_parser/parser_engine.mli b/src/lsp/cobol_parser/parser_engine.mli index 60cdcedb8..2653b4d5f 100644 --- a/src/lsp/cobol_parser/parser_engine.mli +++ b/src/lsp/cobol_parser/parser_engine.mli @@ -36,8 +36,7 @@ type 'm rewindable_parsing = ?options:parser_options -> ?config:Cobol_config.t -> Cobol_preproc.preprocessor - -> (((PTree.compilation_group option, 'm) output as 'x) * - 'x rewinder) + -> (((PTree.compilation_group option, 'm) output as 'x) * 'x rewinder) Cobol_common.Diagnostics.with_diags and 'x rewinder and preprocessor_rewind = @@ -51,10 +50,25 @@ val rewindable_parse_simple val rewindable_parse_with_artifacts : Cobol_common.Behaviors.eidetic rewindable_parsing +(** Specification of positions to rewind to. *) +type position = + | Lexing of + Lexing.position (** raw lexing position *) + | Indexed of + { + line: int; (** line number (starting at 0) *) + char: int; (** character number in line (starting at 0) *) + } + +(** [rewind_and_parse rewinder preprocessor_rewind ~position] uses [rewinder] to + restart parsing before the given [position]. Note that the [new_position] + argument that is given to [preprocessor_rewind] may {e not} correspond to + [position], as the parser typically needs to rewind earlier than + [position]. *) val rewind_and_parse : 'x rewinder -> preprocessor_rewind - -> position: Lexing.position + -> position: position -> (((PTree.compilation_group option, 'm) output as 'x) * 'x rewinder) Cobol_common.Diagnostics.with_diags diff --git a/src/lsp/cobol_parser/parser_outputs.ml b/src/lsp/cobol_parser/parser_outputs.ml index fc347f9f5..ecc869dd0 100644 --- a/src/lsp/cobol_parser/parser_outputs.ml +++ b/src/lsp/cobol_parser/parser_outputs.ml @@ -23,7 +23,6 @@ type artifacts = tokens: tokens_with_locs Lazy.t; pplog: Cobol_preproc.log; comments: Cobol_preproc.comments; - newline_cnums: int list; } type ('a, 'm) output = From e420514372c77e615f3de2d50c50b5600c7079aa Mon Sep 17 00:00:00 2001 From: Nicolas Berthier Date: Wed, 4 Oct 2023 09:28:59 +0200 Subject: [PATCH 07/12] Minor editions, and document `Cobol_parser.Parser_engine` --- src/lsp/cobol_parser/parser_engine.ml | 243 ++++++++++++++----------- src/lsp/cobol_parser/parser_engine.mli | 48 ++++- 2 files changed, 180 insertions(+), 111 deletions(-) diff --git a/src/lsp/cobol_parser/parser_engine.ml b/src/lsp/cobol_parser/parser_engine.ml index 0eb5c8f3f..13b161e4d 100644 --- a/src/lsp/cobol_parser/parser_engine.ml +++ b/src/lsp/cobol_parser/parser_engine.ml @@ -102,10 +102,7 @@ module Make (Config: Cobol_config.T) = struct show: [`Pending] list; } - (* TODO: reset/restore text lexer's state w.r.t reserved/alias and - context-stack will be needed when we want a persistent parser state. Best - place for this is probaly in the tokenizer.*) - + (** Initializes a parser state, given a preprocessor. *) let make_parser (type m) Parser_options.{ verbose; show; recovery } ?(show_if_verbose = [`Tks; `Ctx]) ~(tokenizer_memory: m memory) pp = @@ -156,6 +153,8 @@ module Make (Config: Cobol_config.T) = struct let all_diags { preproc = { pp; tokzr; _ }; _ } = DIAGS.Set.union (Cobol_preproc.diags pp) @@ Tokzr.diagnostics tokzr + (* --- *) + let rec produce_tokens (ps: _ state as 's) : 's * Text_tokenizer.tokens = let text, pp = Cobol_preproc.next_sentence ps.preproc.pp in let { preproc = { pp; tokzr; _ }; _ } as ps = update_pp ps pp in @@ -172,28 +171,28 @@ module Make (Config: Cobol_config.T) = struct Pretty.error "Tks: %a@." Text_tokenizer.pp_tokens tokens; update_tokzr ps tokzr, tokens - let update_context_stack ~stack_update ~tokenizer_update - ({ preproc; _ } as ps) tokens : Context.t list -> 's * 'a = - function - | [] -> - ps, tokens - | contexts -> - let context_stack, tokens_set = - List.fold_left begin fun (context_stack, set) ctx -> - let context_stack, set' = stack_update context_stack ctx in - context_stack, Text_lexer.TokenHandles.union set set' - end (preproc.context_stack, Text_lexer.TokenHandles.empty) contexts - in + let rec next_token ({ preproc = { tokzr; _ }; _ } as ps) tokens = + match Tokzr.next_token tokzr tokens with + | Some (tokzr, token, tokens) -> + (update_tokzr ps tokzr, token, tokens) + | None -> + let ps, tokens = produce_tokens ps in + next_token ps tokens - (* Update tokenizer state *) - let tokzr, tokens = tokenizer_update preproc.tokzr tokens tokens_set in - if show `Tks ps then - Pretty.error "Tks': %a@." Text_tokenizer.pp_tokens tokens; + let token_n_srcloc_limits ?prev_limit token = + let s, e = Overlay_manager.limits ~@token in + Option.iter (fun e -> Overlay_manager.link_limits e s) prev_limit; + ~&token, s, e - (if context_stack == preproc.context_stack && tokzr == preproc.tokzr - then ps - else { ps with preproc = { preproc with tokzr; context_stack }}), - tokens + let put_token_back ({ preproc; _ } as ps) token tokens = + let tokzr, tokens = Tokzr.put_token_back preproc.tokzr token tokens in + (* The limits of the re-submitted token will be re-constructed in + `token_n_srcloc_limits`, so `prev_limit` needs to be re-adjusted to the + second-to-last right-limit. *) + { ps with prev_limit = ps.prev_limit'; + preproc = { ps.preproc with tokzr } }, tokens + + (* --- *) (** Use recovery trace (assumptions on missing tokens) to generate syntax hints and report on an invalid syntax error. *) @@ -243,23 +242,27 @@ module Make (Config: Cobol_config.T) = struct (* --- *) - let rec next_token ({ preproc = { tokzr; _ }; _ } as ps) tokens = - match Tokzr.next_token tokzr tokens with - | Some (tokzr, token, tokens) -> - (update_tokzr ps tokzr, token, tokens) - | None -> - let ps, tokens = produce_tokens ps in - next_token ps tokens + let update_context_stack ~stack_update ~tokenizer_update + ({ preproc; _ } as ps) tokens : Context.t list -> 's * 'a = function + | [] -> + ps, tokens + | contexts -> + let context_stack, tokens_set = + List.fold_left begin fun (context_stack, set) ctx -> + let context_stack, set' = stack_update context_stack ctx in + context_stack, Text_lexer.TokenHandles.union set set' + end (preproc.context_stack, Text_lexer.TokenHandles.empty) contexts + in - let token_n_srcloc_limits ?prev_limit token = - let s, e = Overlay_manager.limits ~@token in - Option.iter (fun e -> Overlay_manager.link_limits e s) prev_limit; - ~&token, s, e + (* Update tokenizer state *) + let tokzr, tokens = tokenizer_update preproc.tokzr tokens tokens_set in + if show `Tks ps then + Pretty.error "Tks': %a@." Text_tokenizer.pp_tokens tokens; - let put_token_back ({ preproc; _ } as ps) token tokens = - let tokzr, tokens = Tokzr.put_token_back preproc.tokzr token tokens in - { ps with prev_limit = ps.prev_limit'; - preproc = { ps.preproc with tokzr } }, tokens + (if context_stack == preproc.context_stack && tokzr == preproc.tokzr + then ps + else { ps with preproc = { preproc with tokzr; context_stack }}), + tokens let leaving_context ps prod = match Context.top ps.preproc.context_stack with @@ -314,6 +317,8 @@ module Make (Config: Cobol_config.T) = struct | Grammar_recovery.Prod p -> pop_outgoing_context ps tokens p end (ps, tokens) operations + (* --- *) + let env_loc env = match Grammar_interpr.top env with | None -> None @@ -349,6 +354,7 @@ module Make (Config: Cobol_config.T) = struct | NoPost -> ps, token, tokens + (** To be called {e after} a reduction of production [prod]. *) let on_reduction ps token tokens prod = function | Grammar_interpr.HandlingError env | AboutToReduce (env, _) @@ -359,16 +365,21 @@ module Make (Config: Cobol_config.T) = struct (* Main code for driving the parser with recovery and lexical contexts: *) - type ('a, 'm) step = - | OnTok of ('a, 'm) new_token_step + (** We call "stage" a high(er)-level parsing state (than {!type:state}). *) + type ('a, 'm) stage = + | Trans of ('a, 'm) interim_stage | Final of ('a option * 'm state) - and ('a, 'm) new_token_step = - (('m state * Text_tokenizer.token * Text_tokenizer.tokens) * - 'a Grammar_interpr.env) (* Always valid input_needed env. *) + + (** Interim stage, at which the parser may be stopped, restarted or + rewound. *) + and ('a, 'm) interim_stage = + 'm state * + Text_tokenizer.tokens * + 'a Grammar_interpr.env (* Always valid input_needed env. *) let rec normal ps tokens = function | Grammar_interpr.InputNeeded env -> - OnTok (next_token ps tokens, env) + Trans (ps, tokens, env) | Shifting (_e1, e2, _) as c -> let ps, tokens = push_incoming_contexts ps tokens e2 in normal ps tokens @@ Grammar_interpr.resume c @@ -378,8 +389,9 @@ module Make (Config: Cobol_config.T) = struct | Rejected | HandlingError _ -> assert false (* should never happen *) - and on_new_token (({ prev_limit; _ } as ps, token, tokens), env) = + and on_interim_stage ({ prev_limit; _ } as ps, tokens, env) = let c = Grammar_interpr.input_needed env in + let ps, token, tokens = next_token ps tokens in let _t, _, e as tok = token_n_srcloc_limits ?prev_limit token in let ps = { ps with prev_limit = Some e; prev_limit' = prev_limit } in check ps token tokens env @@ Grammar_interpr.offer c tok @@ -413,9 +425,6 @@ module Make (Config: Cobol_config.T) = struct in match ps.preproc.persist.recovery with | EnableRecovery recovery_options -> - (* The limits of the re-submitted token will be re-constructed in - `token_n_srcloc_limits`, so `prev_limit` needs to be re-adjusted to - the second-to-last right-limit. *) let ps, tokens = put_token_back ps token tokens in recover ps tokens (Grammar_recovery.generate env) ~report_syntax_hints_n_error:(report_syntax_hints_n_error @@ -450,7 +459,9 @@ module Make (Config: Cobol_config.T) = struct (* --- *) - let init_parse ps ~make_checkpoint = + (** [first_stage ps ~make_checkpoint] is the first stage for parsing a ['a] out + of a parser in state [ps]. *) + let first_stage (ps: 'm state) ~make_checkpoint : ('a, 'm) stage = let ps, tokens = produce_tokens ps in let first_pos = match tokens with | [] -> Cobol_preproc.position ps.preproc.pp @@ -458,29 +469,71 @@ module Make (Config: Cobol_config.T) = struct in normal ps tokens (make_checkpoint first_pos) - let rec full_parse = function + (** [full_parse stage] completes parsing from the given stage [stage]. *) + let rec full_parse: ('a, 'm) stage -> 'a option * 'm state = function | Final (res, ps) -> res, ps - | OnTok (((ps, _, _), _) as state) -> - full_parse @@ try on_new_token state with e -> on_exn ps e + | Trans ((ps, _, _) as state) -> + full_parse @@ try on_interim_stage state with e -> on_exn ps e + + (* --- *) + + (** Gathers outputs that depend on the memorization behavior of the parser. *) + let aggregate_output (type m) (ps: m state) res + : ('a option, m) output = + match ps.preproc.persist.tokenizer_memory with + | Amnesic -> + Only res + | Eidetic -> + let artifacts = + { tokens = Tokzr.parsed_tokens ps.preproc.tokzr; + pplog = Cobol_preproc.log ps.preproc.pp; + comments = Cobol_preproc.comments ps.preproc.pp } in + WithArtifacts (res, artifacts) + + (** Simple parsing *) + let parse_once + ~options (type m) ~(memory: m memory) ~make_checkpoint pp + : (('a option, m) output) with_diags = + let ps = make_parser options ~tokenizer_memory:memory pp in + let res, ps = full_parse @@ first_stage ~make_checkpoint ps in + DIAGS.with_diags (aggregate_output ps res) (all_diags ps) (* --- *) + (* Rewindable parsing *) + + (** The state of a rewindable parser combines a current stage [stage], and a + store [store] that represent a rewindable history. The initial state is + kept in case parsing needs to restart at the very beginning of the + input. *) type ('a, 'm) rewindable_parsing_state = { init: 'm state; - step: ('a, 'm) step; + stage: ('a, 'm) stage; store: ('a, 'm) rewindable_history; } + + (** The rewindable history is a list of events... *) and ('a, 'm) rewindable_history = ('a, 'm) rewindable_history_event list + + (** ... that associate pre-processor lexing positions ([preproc_position]) + with intermediate parsing stages [event_stage]. *) and ('a, 'm) rewindable_history_event = { preproc_position: Lexing.position; - event_step: ('a, 'm) new_token_step; + event_stage: ('a, 'm) interim_stage; } - let save_history_event - (((ps, _, _), _) as state) (store: _ rewindable_history) = + let init_rewindable_parse ps ~make_checkpoint = + { + init = ps; + stage = first_stage ps ~make_checkpoint; + store = []; + } + + (** Stores a stage as part of the memorized rewindable history events. *) + let save_history_event ((ps, _, _) as stage) (store: _ rewindable_history) = let preproc_position = Cobol_preproc.position ps.preproc.pp in match store with | { preproc_position = prev_pos; _ } :: store' @@ -488,61 +541,37 @@ module Make (Config: Cobol_config.T) = struct prev_pos.pos_fname = preproc_position.pos_fname -> (* Preprocessor did not advance further since last save: replace event with new parser state: *) - { preproc_position; event_step = state } :: store' + { preproc_position; event_stage = stage } :: store' | store' -> - { preproc_position; event_step = state } :: store' - - let init_rewindable_parse ps ~make_checkpoint = - { - init = ps; - step = init_parse ps ~make_checkpoint; - store = []; - } + { preproc_position; event_stage = stage } :: store' let rewindable_parser_state = function - | { step = Final (_, ps) | OnTok ((ps, _, _), _); _ } -> ps - - let with_context_sensitive_tokens ~f = function - | { step = Final (_, ps) | OnTok ((ps, _, _), _); _ } -> - f (Context.all_tokens ps.preproc.context_stack) - - let parse_with_trace ?(save_step = 10) rwps = - let rec loop count ({ store; step; _ } as rwps) = match step with - | Final (res, _ps) -> + | { stage = Final (_, ps) | Trans (ps, _, _); _ } -> ps + + (** Applies [f] on the set of all context-sensitive tokens that belong to the + context stack of the given parsing state. *) + let with_context_sensitive_tokens ~f rwps = + f (Context.all_tokens (rewindable_parser_state rwps).preproc.context_stack) + + (** Parses all the input, saving some rewindable history along the way. *) + (* TODO: configurable [save_stage] *) + let parse_with_history ?(save_stage = 10) rwps = + let rec loop count ({ store; stage; _ } as rwps) = match stage with + | Final (res, _) -> with_context_sensitive_tokens rwps ~f:Text_lexer.disable_tokens; res, rwps - | OnTok (((ps, _, _), _) as state) -> + | Trans ((ps, _, _) as state) -> let store, count = - if count = save_step then store, succ count + if count = save_stage then store, succ count else save_history_event state store, 0 - and step = - try on_new_token state with e -> on_exn ps e + and stage = + try on_interim_stage state with e -> on_exn ps e in - loop count { rwps with store; step } + loop count { rwps with store; stage } in with_context_sensitive_tokens rwps ~f:Text_lexer.enable_tokens; loop 0 rwps - (* --- *) - - let aggregate_output (type m) res (ps: m state) : ('a option, m) output = - match ps.preproc.persist.tokenizer_memory with - | Amnesic -> - Only res - | Eidetic -> - let artifacts = - { tokens = Tokzr.parsed_tokens ps.preproc.tokzr; - pplog = Cobol_preproc.log ps.preproc.pp; - comments = Cobol_preproc.comments ps.preproc.pp } in - WithArtifacts (res, artifacts) - - let parse_once - ~options (type m) ~(memory: m memory) ~make_checkpoint pp - : (('a option, m) output) with_diags = - let ps = make_parser options ~tokenizer_memory:memory pp in - let res, ps = full_parse @@ init_parse ~make_checkpoint ps in - DIAGS.with_diags (aggregate_output res ps) (all_diags ps) - let lexing_postion_of ~position rwps = match position with | Lexing pos -> pos @@ -572,6 +601,8 @@ module Make (Config: Cobol_config.T) = struct in aux store + (* --- *) + let rec rewind_n_parse : type m. ('a, m) rewindable_parsing_state -> make_checkpoint:_ -> preprocessor_rewind -> position: position @@ -580,19 +611,19 @@ module Make (Config: Cobol_config.T) = struct let rwps = try let event, store = find_history_event_preceding ~position rwps in - let (ps, token, tokens), env = event.event_step in + let ps, tokens, env = event.event_stage in let pp = ps.preproc.pp in let pp = pp_rewind ?new_position:(Some event.preproc_position) pp in let ps = { ps with preproc = { ps.preproc with pp } } in - { rwps with step = OnTok ((ps, token, tokens), env); store } + { rwps with stage = Trans (ps, tokens, env); store } with Not_found -> (* rewinding before first checkpoint *) let pp = pp_rewind rwps.init.preproc.pp in let ps = { rwps.init with preproc = { rwps.init.preproc with pp } } in init_rewindable_parse ~make_checkpoint ps in - let res, rwps = parse_with_trace rwps in + let res, rwps = parse_with_history rwps in let ps = rewindable_parser_state rwps in - let output = aggregate_output res ps in + let output = aggregate_output ps res in let rewind_n_parse = rewind_n_parse rwps ~make_checkpoint in DIAGS.with_diags (output, { rewind_n_parse }) (all_diags ps) @@ -604,10 +635,10 @@ module Make (Config: Cobol_config.T) = struct let res, rwps = make_parser options ~tokenizer_memory:memory pp |> init_rewindable_parse ~make_checkpoint |> - parse_with_trace + parse_with_history in let ps = rewindable_parser_state rwps in - let output = aggregate_output res ps in + let output = aggregate_output ps res in let rewind_n_parse = rewind_n_parse rwps ~make_checkpoint in DIAGS.with_diags (output, { rewind_n_parse }) (all_diags ps) diff --git a/src/lsp/cobol_parser/parser_engine.mli b/src/lsp/cobol_parser/parser_engine.mli index 2653b4d5f..2e8a12512 100644 --- a/src/lsp/cobol_parser/parser_engine.mli +++ b/src/lsp/cobol_parser/parser_engine.mli @@ -14,8 +14,27 @@ open Parser_options open Parser_outputs +(** Parsing functions essentially parse a stream of tokens that is produced by a + given preprocessor (typically returned by + {!val:Cobol_preproc.preprocessor}). The result always consists in a + (possibly empty) set of diagnostics, along with either: + + - an optional parse-tree [Only (Some ptree)] only; + + - an optional parse-tree along with some artifacts + [WithArtifacts (Some ptree, artifacts)]. + + The set of diagnostics attached to the result of parsing functions + ([result.diags]) should {e always} be checked for errors upon return ({i + i.e,} {!Cobol_common.Diagnostics.Set.has_errors} holds). This is in + particular the case when the resulting parse-tree is provided and recovery + is enabled ([options.recovery <> DisableRecovery]), as in such a case, the + parse-tree returned may contain dummy nodes and source locations produced + using the recovery mechanism. *) + (** {1 Basic (one-shot) parsing} *) +(** Simple parsing functions traverse the inputs once to produce a result. *) type 'm simple_parsing = ?options:Parser_options.parser_options -> ?config:Cobol_config.t @@ -23,30 +42,49 @@ type 'm simple_parsing -> (PTree.compilation_group option, 'm) output Cobol_common.Diagnostics.with_diags -val parse - : memory: 'm memory -> 'm simple_parsing +(* val parse *) +(* : memory: 'm memory -> 'm simple_parsing *) + +(** Simple parsing function that does not return any artifact. *) val parse_simple : Cobol_common.Behaviors.amnesic simple_parsing + +(** Simple parsing function does return some artifacts. *) val parse_with_artifacts : Cobol_common.Behaviors.eidetic simple_parsing (** {1 Rewindable parsing} *) +(** Rewindable parsing functions extend the behaviors of simple parsing + functions, with the ability to {i rewind} the parser (and pre-processor) + before a given lexing position. To this end, their results include a + {!rewinder} that may then be given to {!rewind_and_parse}. *) type 'm rewindable_parsing = ?options:parser_options -> ?config:Cobol_config.t -> Cobol_preproc.preprocessor -> (((PTree.compilation_group option, 'm) output as 'x) * 'x rewinder) Cobol_common.Diagnostics.with_diags + +(** Rewinder for parsing functions that produce results of type ['x] *) and 'x rewinder + +(** Functions for rewinding the pre-processor. Such a function should return a + preprocessor in the {e exact same state} as the one given in argument, with + the only exception that the input text is now read from [new_position]. If + [new_position] is not given, the text should be read from the very begining + of the input. *) and preprocessor_rewind = ?new_position:Lexing.position -> (Cobol_preproc.preprocessor as 'r) -> 'r -val rewindable_parse - : memory:'m memory - -> 'm rewindable_parsing +(* val rewindable_parse *) +(* : memory:'m memory -> 'm rewindable_parsing *) + +(** Rewindable parsing function that does not return any artifact. *) val rewindable_parse_simple : Cobol_common.Behaviors.amnesic rewindable_parsing + +(** Rewindable parsing function that does return some artifacts. *) val rewindable_parse_with_artifacts : Cobol_common.Behaviors.eidetic rewindable_parsing From b7699b3ff060f3046b8217bb96196c1c3d55e808 Mon Sep 17 00:00:00 2001 From: Nicolas Berthier Date: Wed, 4 Oct 2023 10:44:23 +0200 Subject: [PATCH 08/12] Move source format types and management into `Cobol_preproc.Src_format` --- src/lsp/cobol_parser/parser_engine.ml | 3 +- src/lsp/cobol_parser/text_tokenizer.ml | 5 +- src/lsp/cobol_parser/text_tokenizer.mli | 4 +- src/lsp/cobol_preproc/cobol_preproc.ml | 2 +- src/lsp/cobol_preproc/preproc.ml | 19 ++- src/lsp/cobol_preproc/preproc.mli | 10 +- src/lsp/cobol_preproc/preproc_engine.ml | 5 +- src/lsp/cobol_preproc/preproc_engine.mli | 2 +- src/lsp/cobol_preproc/preproc_grammar.mly | 2 +- src/lsp/cobol_preproc/src_format.ml | 137 ++++++++++++++++++++++ src/lsp/cobol_preproc/src_format.mli | 55 +++++++++ src/lsp/cobol_preproc/src_lexing.ml | 117 +----------------- src/lsp/cobol_preproc/src_lexing.mli | 110 ++++++----------- 13 files changed, 258 insertions(+), 213 deletions(-) create mode 100644 src/lsp/cobol_preproc/src_format.ml create mode 100644 src/lsp/cobol_preproc/src_format.mli diff --git a/src/lsp/cobol_parser/parser_engine.ml b/src/lsp/cobol_parser/parser_engine.ml index 13b161e4d..ecde96cdd 100644 --- a/src/lsp/cobol_parser/parser_engine.ml +++ b/src/lsp/cobol_parser/parser_engine.ml @@ -160,8 +160,7 @@ module Make (Config: Cobol_config.T) = struct let { preproc = { pp; tokzr; _ }; _ } as ps = update_pp ps pp in assert (text <> []); (* Note: this is the source format in use at the end of the sentence. *) - let Plx (pl, _) = Cobol_preproc.srclexer pp in - let source_format = Cobol_preproc.Src_lexing.source_format pl in + let source_format = Cobol_preproc.source_format pp in match Tokzr.tokenize_text ~source_format tokzr text with | Error `MissingInputs, tokzr -> produce_tokens (update_tokzr ps tokzr) diff --git a/src/lsp/cobol_parser/text_tokenizer.ml b/src/lsp/cobol_parser/text_tokenizer.ml index 6d3d6a9ac..719fb762c 100644 --- a/src/lsp/cobol_parser/text_tokenizer.ml +++ b/src/lsp/cobol_parser/text_tokenizer.ml @@ -114,8 +114,9 @@ let preproc_n_combine_tokens (module Config: Cobol_config.T) ~source_format = deal with old-style informational paragraphs (COBOL85). *) let ( +@+ ) = Cobol_common.Srcloc.concat and start_pos = Cobol_common.Srcloc.start_pos in - let comment_entry_termination - = Cobol_preproc.Src_lexing.comment_entry_termination source_format + let comment_entry_termination = + let Cobol_preproc.Src_format.SF sf = source_format in + Cobol_preproc.Src_format.comment_entry_termination sf and info_word = function | WORD w -> INFO_WORD w diff --git a/src/lsp/cobol_parser/text_tokenizer.mli b/src/lsp/cobol_parser/text_tokenizer.mli index 5c71eb18c..8a37acca2 100644 --- a/src/lsp/cobol_parser/text_tokenizer.mli +++ b/src/lsp/cobol_parser/text_tokenizer.mli @@ -48,7 +48,7 @@ module Make (Config: Cobol_config.T): sig when needed. *) val init : 'a memory - -> context_sensitive_tokens:Text_lexer.TokenHandles.t + -> context_sensitive_tokens: Text_lexer.TokenHandles.t -> 'a state val diagnostics @@ -60,7 +60,7 @@ module Make (Config: Cobol_config.T): sig -> tokens Lazy.t val tokenize_text - : source_format: _ Cobol_preproc.Src_lexing.source_format + : source_format: Cobol_preproc.Src_format.any -> 'a state -> TEXT.t -> (tokens, [>`MissingInputs | `ReachedEOF of tokens]) result * 'a state diff --git a/src/lsp/cobol_preproc/cobol_preproc.ml b/src/lsp/cobol_preproc/cobol_preproc.ml index ebcce066f..31ba6032c 100644 --- a/src/lsp/cobol_preproc/cobol_preproc.ml +++ b/src/lsp/cobol_preproc/cobol_preproc.ml @@ -12,7 +12,7 @@ (**************************************************************************) module Src_overlay = Src_overlay -module Src_lexing = Src_lexing +module Src_format = Src_format module Text = Text module Text_printer = Text_printer diff --git a/src/lsp/cobol_preproc/preproc.ml b/src/lsp/cobol_preproc/preproc.ml index 7c72bbf06..56a975b73 100644 --- a/src/lsp/cobol_preproc/preproc.ml +++ b/src/lsp/cobol_preproc/preproc.ml @@ -35,10 +35,10 @@ let srclex_diags (Plx (pl, _)) = Src_lexing.diagnostics pl let srclex_comments (Plx (pl, _)) = Src_lexing.comments pl +let source_format (Plx (pl, _)) = + Src_format.SF (Src_lexing.source_format pl) let srclex_newline_cnums (Plx (pl, _)) = Src_lexing.newline_cnums pl -let srclex_source_format (Plx (pl, _)) = - Src_lexing.(source_format_spec @@ source_format pl) type 'k source_line = | Line: 'k srclexer * text -> 'k source_line @@ -81,16 +81,16 @@ let fold_source_lines pl f acc = (* --- *) let with_source_format - : 'k Src_lexing.source_format with_loc -> (any_srclexer as 'x) -> 'x + : 'k Src_format.source_format with_loc -> (any_srclexer as 'x) -> 'x = fun format ((Plx (s, lexbuf)) as pl) -> - if Src_lexing.(same_source_formats @@ source_format s) ~&format + if Src_format.equal (Src_lexing.source_format s) ~&format then pl else match Src_lexing.change_source_format s format with | Ok s -> Plx (s, lexbuf) | Error s -> Plx (s, lexbuf) let make_srclex make_lexing ?filename ~source_format input = - let SF source_format = Src_lexing.select_source_format source_format in + let SF source_format = Src_format.from_config source_format in (* Be sure to provide position informations *) let lexbuf = make_lexing ?with_positions:(Some true) input in Option.iter (Lexing.set_filename lexbuf) filename; @@ -127,13 +127,12 @@ let srclex_restart_on_file ?position filename = (* SOURCE FORMAT *) type lexing_directive = - | LexDirSource - : 'k Src_lexing.source_format with_loc -> lexing_directive [@@unboxed] + | LexDirSource: + 'k Src_format.source_format with_loc -> lexing_directive [@@unboxed] let cdir_source_format ~dialect format = - match Src_lexing.decypher_source_format ~dialect ~&format with - | Ok sf -> - let SF sf = Src_lexing.select_source_format sf in + match Src_format.decypher ~dialect ~&format with + | Ok (SF sf) -> DIAGS.some_result @@ LexDirSource (sf &@<- format) | Error (`SFUnknown f) -> DIAGS.no_result diff --git a/src/lsp/cobol_preproc/preproc.mli b/src/lsp/cobol_preproc/preproc.mli index 25b45d6aa..49d820e89 100644 --- a/src/lsp/cobol_preproc/preproc.mli +++ b/src/lsp/cobol_preproc/preproc.mli @@ -25,7 +25,7 @@ and any_srclexer = type lexing_directive = | LexDirSource: - 'k Src_lexing.source_format with_loc -> lexing_directive [@@unboxed] + 'k Src_format.source_format with_loc -> lexing_directive [@@unboxed] (* COPY/REPLACING *) @@ -103,15 +103,15 @@ val apply_replacing (** {3 Source format} *) +val source_format + : any_srclexer + -> Src_format.any val cdir_source_format : dialect: Cobol_config.dialect -> string with_loc -> lexing_directive option with_diags -val srclex_source_format - : any_srclexer - -> Cobol_config.source_format val with_source_format - : 'k Src_lexing.source_format with_loc + : 'k Src_format.source_format with_loc -> any_srclexer -> any_srclexer diff --git a/src/lsp/cobol_preproc/preproc_engine.ml b/src/lsp/cobol_preproc/preproc_engine.ml index 2ed9e00c4..cf566840e 100644 --- a/src/lsp/cobol_preproc/preproc_engine.ml +++ b/src/lsp/cobol_preproc/preproc_engine.ml @@ -62,7 +62,7 @@ let diags { diags; srclex; _ } = let add_diag lp d = { lp with diags = DIAGS.Set.cons d lp.diags } let add_diags lp d = { lp with diags = DIAGS.Set.union d lp.diags } let log { pplog; _ } = pplog -let srclexer { srclex; _ } = srclex +let source_format { srclex; _ } = Preproc.source_format srclex let position { srclex; _ } = Preproc.srclex_pos srclex let comments { srclex; _ } = Preproc.srclex_comments srclex let newline_cnums { srclex; _ } = Preproc.srclex_newline_cnums srclex @@ -135,7 +135,8 @@ let preprocessor ?(verbose = false) input = function }; } | `Fork ({ persist; _ } as from, copyloc, copybook) -> - let source_format = Preproc.srclex_source_format from.srclex in + let SF source_format = Preproc.source_format from.srclex in + let source_format = Src_format.to_config source_format in { from with buff = []; diff --git a/src/lsp/cobol_preproc/preproc_engine.mli b/src/lsp/cobol_preproc/preproc_engine.mli index f28ec513e..039ff6d20 100644 --- a/src/lsp/cobol_preproc/preproc_engine.mli +++ b/src/lsp/cobol_preproc/preproc_engine.mli @@ -43,8 +43,8 @@ val add_diag: preprocessor -> Cobol_common.Diagnostics.t -> preprocessor val add_diags: preprocessor -> Cobol_common.Diagnostics.Set.t -> preprocessor val log: preprocessor -> Preproc_trace.log val comments: preprocessor -> Text.comments -val srclexer: preprocessor -> Preproc.any_srclexer val position: preprocessor -> Lexing.position +val source_format: preprocessor -> Src_format.any val newline_cnums: preprocessor -> int list val next_sentence: preprocessor -> Text.text * preprocessor diff --git a/src/lsp/cobol_preproc/preproc_grammar.mly b/src/lsp/cobol_preproc/preproc_grammar.mly index f297825fa..f8f814e92 100644 --- a/src/lsp/cobol_preproc/preproc_grammar.mly +++ b/src/lsp/cobol_preproc/preproc_grammar.mly @@ -60,7 +60,7 @@ let lexdir_microfocus_phrase := let lexdir_source_format := | CDIR_SOURCE; FORMAT?; IS?; _free = loc(FREE); - { let SF sf = Src_lexing.select_source_format Cobol_config.SFFree in + { let SF sf = Src_format.from_config Cobol_config.SFFree in Cobol_common.Diagnostics.some_result @@ Preproc.LexDirSource (sf &@<- _free) } | CDIR_SOURCE; FORMAT?; IS?; i = text_word; diff --git a/src/lsp/cobol_preproc/src_format.ml b/src/lsp/cobol_preproc/src_format.ml new file mode 100644 index 000000000..deb19e0cc --- /dev/null +++ b/src/lsp/cobol_preproc/src_format.ml @@ -0,0 +1,137 @@ +(**************************************************************************) +(* *) +(* SuperBOL OSS Studio *) +(* *) +(* Copyright (c) 2022-2023 OCamlPro SAS *) +(* *) +(* All rights reserved. *) +(* This source code is licensed under the GNU Affero General Public *) +(* License version 3 found in the LICENSE.md file in the root directory *) +(* of this source tree. *) +(* *) +(**************************************************************************) + +(* Paging *) + +type free = UnlimitedLines +type fixed = LimitedLines +type _ paging = + | FreePaging: free paging + | FixedWidth: fixed_paging_params -> fixed paging +and fixed_paging_params = + { + cut_at_col: int; + alphanum_padding: char option; + } + +let fixed_paging = { cut_at_col = 72; alphanum_padding = Some ' ' } +let variable_paging = { fixed_paging with cut_at_col = 250 } +let xcard_paging = { fixed_paging with cut_at_col = 255 } +let xopen_paging = { fixed_paging with cut_at_col = 80 } +let crt_paging = { fixed_paging with cut_at_col = 320 } +let terminal_paging = crt_paging +let cobolx_paging = { cut_at_col = 255; alphanum_padding = None } + +(* Actual format and indicator positioning *) + +type 'k source_format = 'k indicator_position * 'k paging +and _ indicator_position = + | NoIndic: free indicator_position + | FixedIndic: fixed indicator_position + | XOpenIndic: fixed indicator_position + | CRTIndic: fixed indicator_position + | TrmIndic: fixed indicator_position + | CBLXIndic: fixed indicator_position +and any = + | SF: 'k source_format -> any [@@unboxed] + +let equal + (type k r) : k source_format -> r source_format -> bool = + fun (i1, p1) (i2, p2) -> match i1, i2 with + | NoIndic, NoIndic -> true + | FixedIndic, FixedIndic -> p1 = p2 + | XOpenIndic, XOpenIndic -> p1 = p2 + | CRTIndic, CRTIndic -> p1 = p2 + | TrmIndic, TrmIndic -> p1 = p2 + | CBLXIndic, CBLXIndic -> p1 = p2 + | _ -> false + +let to_config + (type k) : k source_format -> Cobol_config.source_format = function + | NoIndic, _ -> SFFree + | FixedIndic, FixedWidth p when p == fixed_paging -> SFFixed + | FixedIndic, FixedWidth p when p == variable_paging -> SFVariable + | FixedIndic, FixedWidth _ (* when p == xcard_paging *) -> SFxCard + | XOpenIndic, FixedWidth _ (* when p == xopen_paging *) -> SFXOpen + | CRTIndic, FixedWidth _ (* when p == crt_paging *) -> SFCRT + | TrmIndic, FixedWidth _ (* when p == terminal_paging *) -> SFTrm + | CBLXIndic, FixedWidth _ (* when p == cobolx_paging *) -> SFCOBOLX + +let from_config + : Cobol_config.source_format -> any = function + | SFFree -> SF ( NoIndic, FreePaging) + | SFFixed -> SF (FixedIndic, FixedWidth fixed_paging) + | SFVariable -> SF (FixedIndic, FixedWidth variable_paging) + | SFXOpen -> SF (XOpenIndic, FixedWidth xopen_paging) + | SFxCard -> SF (FixedIndic, FixedWidth xcard_paging) + | SFCRT -> SF ( CRTIndic, FixedWidth crt_paging) + | SFTrm -> SF ( TrmIndic, FixedWidth terminal_paging) + | SFCOBOLX -> SF ( CBLXIndic, FixedWidth cobolx_paging) + +let decypher ~dialect format = + Result.map from_config @@ + match String.uppercase_ascii @@format, dialect with + (* SOURCEFORMAT"FREE" on MF means: X/Open free format *) + (* cf https://www.microfocus.com/documentation/visual-\ + cobol/vc50pu7/VS2019/HRLHLHINTR01U008.html *) + | "FREE", Cobol_config.DIALECT.MicroFocus -> Ok Cobol_config.SFXOpen + | "FREE", _ -> Ok SFFree + | "FIXED", _ -> Ok SFFixed + | "VARIABLE", _ -> Ok SFVariable + | "XOPEN", _ -> Ok SFXOpen + | "XCARD", _ -> Ok SFxCard + | "CRT", _ -> Ok SFCRT + | "TERMINAL", _ -> Ok SFTrm + | "COBOLX", _ -> Ok SFCOBOLX + | _ -> Error (`SFUnknown format) + +(* --- *) + +let first_area_b_column + (type k) : k source_format -> int option = function + | _, FreePaging + | XOpenIndic, _ -> None + | FixedIndic, FixedWidth _ -> Some (7 + 4) + |(CRTIndic | TrmIndic | + CBLXIndic), FixedWidth _ -> Some (1 + 4) + +(* --- *) + +type comment_entry_termination = (* skip until... *) + | Newline (* ... newline *) + | Period (* ... next period (unused) *) + | AreaB of { first_area_b_column: int } (* ... next word in area A *) + +(* let comment_entry_termination *) +(* : type k. k source_format -> comment_entry_termination = fun sf -> *) +(* match sf, first_area_b_column sf with *) +(* |(_ , FreePaging ), _ *) +(* |(XOpenIndic, _ ), _ *) +(* |(_ , _ ), None -> Newline *) +(* | (FixedIndic, FixedWidth _), Some c -> AreaB { first_area_b_column = c } *) +(* |((CRTIndic | *) +(* TrmIndic | *) +(* CBLXIndic), FixedWidth _), Some c -> AreaB { first_area_b_column = c } *) + +let comment_entry_termination + (type k) : k source_format -> comment_entry_termination = fun sf -> + match sf, first_area_b_column sf with + |(_ , FreePaging ), _ + |(XOpenIndic, _ ), _ + |(_ , _ ), None -> Newline + | (FixedIndic, FixedWidth _), Some c -> AreaB { first_area_b_column = c } + |((CRTIndic | + TrmIndic | + CBLXIndic), FixedWidth _), Some c -> AreaB { first_area_b_column = c } + +(* --- *) diff --git a/src/lsp/cobol_preproc/src_format.mli b/src/lsp/cobol_preproc/src_format.mli new file mode 100644 index 000000000..253d9928a --- /dev/null +++ b/src/lsp/cobol_preproc/src_format.mli @@ -0,0 +1,55 @@ +(**************************************************************************) +(* *) +(* SuperBOL OSS Studio *) +(* *) +(* Copyright (c) 2022-2023 OCamlPro SAS *) +(* *) +(* All rights reserved. *) +(* This source code is licensed under the GNU Affero General Public *) +(* License version 3 found in the LICENSE.md file in the root directory *) +(* of this source tree. *) +(* *) +(**************************************************************************) + +(* Paging *) + +type free = UnlimitedLines +type fixed = LimitedLines +type _ paging = + | FreePaging: free paging + | FixedWidth: fixed_paging_params -> fixed paging +and fixed_paging_params = + { + cut_at_col: int; + alphanum_padding: char option; + } + +(* Actual format and indicator positioning *) + +type 'k source_format = 'k indicator_position * 'k paging +and _ indicator_position = + | NoIndic: free indicator_position + | FixedIndic: fixed indicator_position + | XOpenIndic: fixed indicator_position + | CRTIndic: fixed indicator_position + | TrmIndic: fixed indicator_position + | CBLXIndic: fixed indicator_position +and any = + | SF: 'k source_format -> any [@@unboxed] + +type comment_entry_termination = (* skip until... *) + | Newline (* ... newline *) + | Period (* ... next period (unused) *) + | AreaB of { first_area_b_column: int } (* ... next word in area A *) + +val from_config: Cobol_config.source_format -> any +val to_config: 'k source_format -> Cobol_config.source_format +val equal: 'k source_format -> 'r source_format -> bool + +val decypher + : dialect:Cobol_config.dialect + -> string + -> (any, [> `SFUnknown of string ]) result + +val comment_entry_termination: _ source_format -> comment_entry_termination +val first_area_b_column: _ source_format -> int option diff --git a/src/lsp/cobol_preproc/src_lexing.ml b/src/lsp/cobol_preproc/src_lexing.ml index 1aa3dc649..0c56fd669 100644 --- a/src/lsp/cobol_preproc/src_lexing.ml +++ b/src/lsp/cobol_preproc/src_lexing.ml @@ -16,6 +16,7 @@ open Cobol_common.Srcloc.TYPES open Cobol_common.Srcloc.INFIX open Text.TYPES +open Src_format module DIAGS = Cobol_common.Diagnostics @@ -23,119 +24,6 @@ module DIAGS = Cobol_common.Diagnostics let remove_blanks = Str.global_replace (Str.regexp " ") "" (* '\t'? *) -(* SOURCE FORMAT *) - -(* Paging *) - -type free = | -type fixed = | -type _ paging = - | FreePaging: free paging - | FixedWidth: fixed_paging_params -> fixed paging -and fixed_paging_params = - { - cut_at_col: int; - alphanum_padding: char option; - } - -let fixed_paging = { cut_at_col = 72; alphanum_padding = Some ' ' } -let variable_paging = { fixed_paging with cut_at_col = 250 } -let xcard_paging = { fixed_paging with cut_at_col = 255 } -let xopen_paging = { fixed_paging with cut_at_col = 80 } -let crt_paging = { fixed_paging with cut_at_col = 320 } -let terminal_paging = crt_paging -let cobolx_paging = { cut_at_col = 255; alphanum_padding = None } - -(* Actual format and indicator positioning *) - -type 'k source_format = 'k indicator_position * 'k paging -and _ indicator_position = - | NoIndic: free indicator_position - | FixedIndic: fixed indicator_position - | XOpenIndic: fixed indicator_position - | CRTIndic: fixed indicator_position - | TrmIndic: fixed indicator_position - | CBLXIndic: fixed indicator_position -and any_source_format = - | SF: 'k source_format -> any_source_format [@@unboxed] - -let same_source_formats - : type k r. k source_format -> r source_format -> bool = - fun (i1, p1) (i2, p2) -> match i1, i2 with - | NoIndic, NoIndic -> true - | FixedIndic, FixedIndic -> p1 = p2 - | XOpenIndic, XOpenIndic -> p1 = p2 - | CRTIndic, CRTIndic -> p1 = p2 - | TrmIndic, TrmIndic -> p1 = p2 - | CBLXIndic, CBLXIndic -> p1 = p2 - | _ -> false - -let source_format_spec - : type k. k source_format -> Cobol_config.source_format = function - | NoIndic, _ -> SFFree - | FixedIndic, FixedWidth p when p == fixed_paging -> SFFixed - | FixedIndic, FixedWidth p when p == variable_paging -> SFVariable - | FixedIndic, FixedWidth _ (* when p == xcard_paging *) -> SFxCard - | XOpenIndic, FixedWidth _ (* when p == xopen_paging *) -> SFXOpen - | CRTIndic, FixedWidth _ (* when p == crt_paging *) -> SFCRT - | TrmIndic, FixedWidth _ (* when p == terminal_paging *) -> SFTrm - | CBLXIndic, FixedWidth _ (* when p == cobolx_paging *) -> SFCOBOLX - -let decypher_source_format ~dialect format = - match String.uppercase_ascii @@format, dialect with - (* SOURCEFORMAT"FREE" on MF means: X/Open free format *) - (* cf https://www.microfocus.com/documentation/visual-\ - cobol/vc50pu7/VS2019/HRLHLHINTR01U008.html *) - | "FREE", Cobol_config.DIALECT.MicroFocus -> Ok Cobol_config.SFXOpen - | "FREE", _ -> Ok SFFree - | "FIXED", _ -> Ok SFFixed - | "VARIABLE", _ -> Ok SFVariable - | "XOPEN", _ -> Ok SFXOpen - | "XCARD", _ -> Ok SFxCard - | "CRT", _ -> Ok SFCRT - | "TERMINAL", _ -> Ok SFTrm - | "COBOLX", _ -> Ok SFCOBOLX - | _ -> Error (`SFUnknown format) - -let select_source_format - : Cobol_config.source_format -> any_source_format = function - | SFFree -> SF ( NoIndic, FreePaging) - | SFFixed -> SF (FixedIndic, FixedWidth fixed_paging) - | SFVariable -> SF (FixedIndic, FixedWidth variable_paging) - | SFXOpen -> SF (XOpenIndic, FixedWidth xopen_paging) - | SFxCard -> SF (FixedIndic, FixedWidth xcard_paging) - | SFCRT -> SF ( CRTIndic, FixedWidth crt_paging) - | SFTrm -> SF ( TrmIndic, FixedWidth terminal_paging) - | SFCOBOLX -> SF ( CBLXIndic, FixedWidth cobolx_paging) - -(* --- *) - -let first_area_b_column - : type k. k source_format -> int option = function - | _, FreePaging - | XOpenIndic, _ -> None - | FixedIndic, FixedWidth _ -> Some (7 + 4) - |(CRTIndic | TrmIndic | - CBLXIndic), FixedWidth _ -> Some (1 + 4) - -(* --- *) - -type comment_entry_termination = (* skip until... *) - | Newline (* ... newline *) - | Period (* ... next period (unused) *) - | AreaB of { first_area_b_column: int } (* ... next word in area A *) - -let comment_entry_termination - : type k. k source_format -> comment_entry_termination = fun sf -> - match sf, first_area_b_column sf with - |(_ , FreePaging ), _ - |(XOpenIndic, _ ), _ - |(_ , _ ), None -> Newline - | (FixedIndic, FixedWidth _), Some c -> AreaB { first_area_b_column = c } - |((CRTIndic | - TrmIndic | - CBLXIndic), FixedWidth _), Some c -> AreaB { first_area_b_column = c } - (* --- *) type 'k state = @@ -220,7 +108,8 @@ let pos_column Lexing.{ pos_bol; pos_cnum; _ } = (* count cols from 1 *) pos_cnum - pos_bol + 1 let raw_loc ~start_pos ~end_pos { newline; config = { source_format; _ }; _ } = - let in_area_a = newline && match first_area_b_column source_format with + let in_area_a = + newline && match Src_format.first_area_b_column source_format with | None -> false | Some c -> pos_column start_pos < c in diff --git a/src/lsp/cobol_preproc/src_lexing.mli b/src/lsp/cobol_preproc/src_lexing.mli index c1ce5e1ba..4ec2ca8d6 100644 --- a/src/lsp/cobol_preproc/src_lexing.mli +++ b/src/lsp/cobol_preproc/src_lexing.mli @@ -11,54 +11,16 @@ (* *) (**************************************************************************) -(* Paging *) - -type free = | -type fixed = | -type _ paging = - | FreePaging: free paging - | FixedWidth: fixed_paging_params -> fixed paging -and fixed_paging_params = - { - cut_at_col: int; - alphanum_padding: char option; - } - -(* Actual format and indicator positioning *) - -type 'k source_format = 'k indicator_position * 'k paging -and _ indicator_position = - | NoIndic: free indicator_position - | FixedIndic: fixed indicator_position - | XOpenIndic: fixed indicator_position - | CRTIndic: fixed indicator_position - | TrmIndic: fixed indicator_position - | CBLXIndic: fixed indicator_position -and any_source_format = - | SF: 'k source_format -> any_source_format [@@unboxed] - -type comment_entry_termination = (* skip until... *) - | Newline (* ... newline *) - | Period (* ... next period (unused) *) - | AreaB of { first_area_b_column: int } (* ... next word in area A *) - -val select_source_format: Cobol_config.source_format -> any_source_format -val source_format_spec: 'k source_format -> Cobol_config.source_format -val same_source_formats: 'k source_format -> 'r source_format -> bool -val comment_entry_termination: 'k source_format -> comment_entry_termination -val decypher_source_format - : dialect:Cobol_config.dialect - -> string - -> (Cobol_config.source_format, [> `SFUnknown of string ]) result - type 'k state -val init_state: 'k source_format -> 'k state +val init_state: 'k Src_format.source_format -> 'k state val diagnostics: _ state -> Cobol_common.Diagnostics.Set.t val comments: _ state -> Text.comments val newline_cnums: _ state -> int list -val source_format: 'k state -> 'k source_format -val change_source_format: 'k state -> 'c source_format Cobol_common.Srcloc.with_loc +val source_format: 'k state -> 'k Src_format.source_format +val change_source_format + : 'k state + -> 'c Src_format.source_format Cobol_common.Srcloc.with_loc -> ('c state, 'k state) result val allow_debug: 'a state -> bool val flush: 'a state -> 'a state * Text.text @@ -81,37 +43,39 @@ val continue_quoted_alphanum : 'a state -> alphanumeric_continuation -val eqeq : - fixed state -> - ktkd:(fixed state -> Lexing.lexbuf -> 'a) -> - knom:(fixed state -> Lexing.lexbuf -> 'a) -> Lexing.lexbuf -> 'a -val eqeq' : - k:('a state -> Lexing.lexbuf -> 'b) -> - 'a state -> Lexing.lexbuf -> 'b +val eqeq + : (Src_format.fixed state as 's) + -> ktkd:('s -> Lexing.lexbuf -> 'a) + -> knom:('s -> Lexing.lexbuf -> 'a) + -> Lexing.lexbuf -> 'a +val eqeq' + : k:('a state -> Lexing.lexbuf -> 'b) + -> 'a state -> Lexing.lexbuf -> 'b -val cdir_word : - fixed state -> - ktkd:(fixed state -> Lexing.lexbuf -> 'a) -> - knom:(fixed state -> Lexing.lexbuf -> 'a) -> Lexing.lexbuf -> 'a -val cdir_word' : - k:('a state -> Lexing.lexbuf -> 'b) -> - 'a state -> Lexing.lexbuf -> 'b -val text_word : - ?cont:bool -> - ktkd:(fixed state -> Lexing.lexbuf -> 'a) -> - knom:(fixed state -> Lexing.lexbuf -> 'a) -> - fixed state -> Lexing.lexbuf -> 'a -val text_word' : - k:('a state -> Lexing.lexbuf -> 'b) -> - 'a state -> Lexing.lexbuf -> 'b -val alphanum_lit : - ?doubled_opener:bool -> - ktkd:(fixed state -> Lexing.lexbuf -> 'a) -> - knom:(fixed state -> Lexing.lexbuf -> 'a) -> - fixed state -> Lexing.lexbuf -> 'a -val alphanum_lit' : - k:('a state -> Lexing.lexbuf -> 'b) -> - 'a state -> Lexing.lexbuf -> 'b +val cdir_word + : (Src_format.fixed state as 's) + -> ktkd:('s -> Lexing.lexbuf -> 'a) + -> knom:('s -> Lexing.lexbuf -> 'a) + -> Lexing.lexbuf -> 'a +val cdir_word' + : k:('a state -> Lexing.lexbuf -> 'b) + -> 'a state -> Lexing.lexbuf -> 'b +val text_word + : ?cont:bool + -> ktkd:('s -> Lexing.lexbuf -> 'a) + -> knom:('s -> Lexing.lexbuf -> 'a) + -> (Src_format.fixed state as 's) -> Lexing.lexbuf -> 'a +val text_word' + : k:('a state -> Lexing.lexbuf -> 'b) + -> 'a state -> Lexing.lexbuf -> 'b +val alphanum_lit + : ?doubled_opener:bool + -> ktkd:('s -> Lexing.lexbuf -> 'a) + -> knom:('s -> Lexing.lexbuf -> 'a) + -> (Src_format.fixed state as 's) -> Lexing.lexbuf -> 'a +val alphanum_lit' + : k:('a state -> Lexing.lexbuf -> 'b) + -> 'a state -> Lexing.lexbuf -> 'b (* --- *) From 74870b3bd0651d9373738d074d2dad5b4c14e313 Mon Sep 17 00:00:00 2001 From: Nicolas Berthier Date: Wed, 4 Oct 2023 11:30:03 +0200 Subject: [PATCH 09/12] Unify the way one passes options to the preprocessor and to the parser --- src/lsp/cobol_lsp/lsp_document.ml | 13 +++--- src/lsp/cobol_parser/parser_engine.ml | 10 ++--- src/lsp/cobol_parser/parser_engine.mli | 2 - src/lsp/cobol_parser/parser_options.ml | 2 + src/lsp/cobol_preproc/cobol_preproc.ml | 19 ++++++-- src/lsp/cobol_preproc/preproc_engine.ml | 45 ++++++------------- src/lsp/cobol_preproc/preproc_engine.mli | 25 ++--------- src/lsp/cobol_preproc/preproc_options.ml | 28 ++++++++++++ .../superbol_free_lib/command_indent_file.ml | 3 +- .../superbol_free_lib/command_indent_range.ml | 3 +- src/lsp/superbol_free_lib/command_pp.ml | 19 ++++---- src/lsp/superbol_free_lib/common_args.ml | 9 ++-- src/lsp/superbol_free_lib/common_args.mli | 4 +- test/cobol_parsing/parser_testing.ml | 8 ++-- test/output-tests/gnucobol.ml | 7 ++- test/output-tests/preproc.ml | 7 +-- test/output-tests/reparse.ml | 11 +++-- 17 files changed, 110 insertions(+), 105 deletions(-) create mode 100644 src/lsp/cobol_preproc/preproc_options.ml diff --git a/src/lsp/cobol_lsp/lsp_document.ml b/src/lsp/cobol_lsp/lsp_document.ml index 30dedc0ae..b3b49c8ef 100644 --- a/src/lsp/cobol_lsp/lsp_document.ml +++ b/src/lsp/cobol_lsp/lsp_document.ml @@ -92,12 +92,15 @@ let rewindable_parse ({ project; textdoc; _ } as doc) = ~options:Cobol_parser.Options.{ default with recovery = EnableRecovery { silence_benign_recoveries = true }; - } - ~config:project.cobol_config @@ + config = project.cobol_config; + } @@ Cobol_preproc.preprocessor - { init_libpath = Lsp_project.libpath_for ~uri:(uri doc) project; - init_config = project.cobol_config; - init_source_format = project.source_format } @@ + ~options:Cobol_preproc.Options.{ + default with + libpath = Lsp_project.libpath_for ~uri:(uri doc) project; + config = project.cobol_config; + source_format = project.source_format + } @@ String { contents = Lsp.Text_document.text textdoc; filename = Lsp.Uri.to_path (uri doc) } diff --git a/src/lsp/cobol_parser/parser_engine.ml b/src/lsp/cobol_parser/parser_engine.ml index ecde96cdd..e2dd80d8f 100644 --- a/src/lsp/cobol_parser/parser_engine.ml +++ b/src/lsp/cobol_parser/parser_engine.ml @@ -33,13 +33,11 @@ and position = type 'm simple_parsing = ?options:parser_options - -> ?config:Cobol_config.t -> Cobol_preproc.preprocessor -> (PTree.compilation_group option, 'm) output DIAGS.with_diags type 'm rewindable_parsing = ?options:parser_options - -> ?config:Cobol_config.t -> Cobol_preproc.preprocessor -> (((PTree.compilation_group option, 'm) output as 'x) * 'x rewinder) DIAGS.with_diags @@ -104,7 +102,7 @@ module Make (Config: Cobol_config.T) = struct (** Initializes a parser state, given a preprocessor. *) let make_parser - (type m) Parser_options.{ verbose; show; recovery } + (type m) Parser_options.{ verbose; show; recovery; _ } ?(show_if_verbose = [`Tks; `Ctx]) ~(tokenizer_memory: m memory) pp = let tokzr: m Tokzr.state = let memory: m Tokzr.memory = match tokenizer_memory with @@ -651,10 +649,9 @@ let parse (type m) ~(memory: m memory) ?(options = Parser_options.default) - ?(config = Cobol_config.default) : Cobol_preproc.preprocessor -> (PTree.compilation_group option, m) output with_diags = - let module P = Make (val config) in + let module P = Make (val options.config) in P.parse_once ~options ~memory ~make_checkpoint:Grammar.Incremental.compilation_group @@ -665,11 +662,10 @@ let rewindable_parse (type m) ~(memory: m memory) ?(options = Parser_options.default) - ?(config = Cobol_config.default) : Cobol_preproc.preprocessor -> (((PTree.compilation_group option, m) output as 'x) * 'x rewinder) with_diags = - let module P = Make (val config) in + let module P = Make (val options.config) in P.rewindable_parse ~options ~memory ~make_checkpoint:Grammar.Incremental.compilation_group diff --git a/src/lsp/cobol_parser/parser_engine.mli b/src/lsp/cobol_parser/parser_engine.mli index 2e8a12512..c3c293e2a 100644 --- a/src/lsp/cobol_parser/parser_engine.mli +++ b/src/lsp/cobol_parser/parser_engine.mli @@ -37,7 +37,6 @@ open Parser_outputs (** Simple parsing functions traverse the inputs once to produce a result. *) type 'm simple_parsing = ?options:Parser_options.parser_options - -> ?config:Cobol_config.t -> Cobol_preproc.preprocessor -> (PTree.compilation_group option, 'm) output Cobol_common.Diagnostics.with_diags @@ -61,7 +60,6 @@ val parse_with_artifacts {!rewinder} that may then be given to {!rewind_and_parse}. *) type 'm rewindable_parsing = ?options:parser_options - -> ?config:Cobol_config.t -> Cobol_preproc.preprocessor -> (((PTree.compilation_group option, 'm) output as 'x) * 'x rewinder) Cobol_common.Diagnostics.with_diags diff --git a/src/lsp/cobol_parser/parser_options.ml b/src/lsp/cobol_parser/parser_options.ml index 44a659b88..a218d9165 100644 --- a/src/lsp/cobol_parser/parser_options.ml +++ b/src/lsp/cobol_parser/parser_options.ml @@ -33,6 +33,7 @@ type parser_options = verbose: bool; show: [`Pending] list; recovery: recovery; + config: Cobol_config.t; } let default_recovery = @@ -43,4 +44,5 @@ let default = verbose = false; show = [`Pending]; recovery = default_recovery; + config = Cobol_config.default; } diff --git a/src/lsp/cobol_preproc/cobol_preproc.ml b/src/lsp/cobol_preproc/cobol_preproc.ml index 31ba6032c..f59e5fcf1 100644 --- a/src/lsp/cobol_preproc/cobol_preproc.ml +++ b/src/lsp/cobol_preproc/cobol_preproc.ml @@ -11,16 +11,27 @@ (* *) (**************************************************************************) -module Src_overlay = Src_overlay +(** {1 Source format} *) + module Src_format = Src_format +(** {1 Text} + + "Text" refers to the source after manipulations by preprocessor statements. *) + +type text = Text.text +type comments = Text.comments module Text = Text module Text_printer = Text_printer +(** {1 Miscellaneous support modules} *) + +module Src_overlay = Src_overlay module Copybook = Copybook module Trace = Preproc_trace - -type text = Text.text -type comments = Text.comments include Trace.TYPES + +(** {1 Main entry points for the processor itself} *) + +module Options = Preproc_options include Preproc_engine diff --git a/src/lsp/cobol_preproc/preproc_engine.ml b/src/lsp/cobol_preproc/preproc_engine.ml index cf566840e..a64994a93 100644 --- a/src/lsp/cobol_preproc/preproc_engine.ml +++ b/src/lsp/cobol_preproc/preproc_engine.ml @@ -14,6 +14,7 @@ open Cobol_common.Srcloc.TYPES open Cobol_common.Srcloc.INFIX open Cobol_common.Diagnostics.TYPES +open Preproc_options module DIAGS = Cobol_common.Diagnostics @@ -101,17 +102,9 @@ let rewind_srclex srclex ?position = function | Channel { contents; _ } -> (* ditto *) Preproc.srclex_restart_on_channel ?position contents srclex -type init = - { - init_libpath: string list; - init_config: Cobol_config.t; - init_source_format: Cobol_config.source_format_spec; - } - -let preprocessor ?(verbose = false) input = function - | `WithLibpath { init_libpath = libpath; - init_config = (module Config); - init_source_format = source_format; } -> +let preprocessor input = function + | `WithOptions { libpath; verbose; source_format; + config = (module Config) } -> let module Om_name = struct let name = __MODULE__ end in let module Om = Src_overlay.New_manager (Om_name) in let module Pp = Preproc_grammar.Make (Config) (Om) in @@ -146,7 +139,6 @@ let preprocessor ?(verbose = false) input = function persist with copybooks = Cobol_common.Srcloc.new_copy ~copyloc copybook persist.copybooks; - verbose = persist.verbose || verbose; }; } | `ResetPosition ({ srclex; _ } as pp, position) -> @@ -397,13 +389,12 @@ let pp_pptokens: pptokens Pretty.printer = (* --- *) let reset_preprocessor ?new_position pp input = - preprocessor ~verbose:pp.persist.verbose input - (`ResetPosition (pp, new_position)) + preprocessor input (`ResetPosition (pp, new_position)) (* --- *) -let preprocessor ?verbose init input = - preprocessor ?verbose input (`WithLibpath init) +let preprocessor ?(options = Preproc_options.default) input = + preprocessor input (`WithOptions options) (** Default pretty-printing formatter for {!lex_file}, {!lex_lib}, and {!preprocess_file}. *) @@ -441,27 +432,17 @@ let fold_text_lines ~source_format ?epf f = let pp_preprocessed ppf lp = Pretty.print ppf "%a@." Text.pp_text (fst @@ full_text ~item:"file" lp) -let preprocess_file ~source_format ?verbose ?(config = Cobol_config.default) - ~libpath ?(ppf = default_oppf) = - let preprocessor = preprocessor ?verbose in +let preprocess_file ?options ?(ppf = default_oppf) = Cobol_common.do_unit begin fun _init_diags filename -> - pp_preprocessed ppf @@ - preprocessor { init_libpath = libpath; - init_config = config; - init_source_format = source_format } (Filename filename) + pp_preprocessed ppf @@ preprocessor ?options (Filename filename) end -let text_of_input ~source_format ?verbose ?(config = Cobol_config.default) - ~libpath ?epf a = - let preprocessor = preprocessor ?verbose in +let text_of_input ?options ?epf a = Cobol_common.do_any begin fun _init_diags input -> fst @@ full_text ~item:"file" @@ - preprocessor { init_libpath = libpath; - init_config = config; - init_source_format = source_format } input + preprocessor ?options input end ?epf a -let text_of_file ~source_format ?verbose ?(config = Cobol_config.default) - ~libpath ?epf filename = - text_of_input ~source_format ?verbose ~config ~libpath ?epf (Filename filename) +let text_of_file ?options ?epf filename = + text_of_input ?options ?epf (Filename filename) diff --git a/src/lsp/cobol_preproc/preproc_engine.mli b/src/lsp/cobol_preproc/preproc_engine.mli index 039ff6d20..03392429d 100644 --- a/src/lsp/cobol_preproc/preproc_engine.mli +++ b/src/lsp/cobol_preproc/preproc_engine.mli @@ -18,16 +18,8 @@ type input = | String of { contents: string; filename: string } | Channel of { contents: in_channel; filename: string } -type init = - { - init_libpath: string list; - init_config: Cobol_config.t; - init_source_format: Cobol_config.source_format_spec; - } - val preprocessor - : ?verbose:bool - -> init + : ?options: Preproc_options.preproc_options -> input -> preprocessor val reset_preprocessor @@ -80,29 +72,20 @@ val lex_lib -> unit val preprocess_file - : source_format: Cobol_config.source_format_spec - -> ?verbose:bool - -> ?config:Cobol_config.t - -> libpath:string list + : ?options: Preproc_options.preproc_options -> ?ppf:Format.formatter -> ?epf:Format.formatter -> string -> unit val text_of_file - : source_format: Cobol_config.source_format_spec - -> ?verbose:bool - -> ?config:Cobol_config.t - -> libpath:string list + : ?options: Preproc_options.preproc_options -> ?epf:Format.formatter -> string -> Text.text val text_of_input - : source_format: Cobol_config.source_format_spec - -> ?verbose:bool - -> ?config:Cobol_config.t - -> libpath:string list + : ?options: Preproc_options.preproc_options -> ?epf:Format.formatter -> input -> Text.text diff --git a/src/lsp/cobol_preproc/preproc_options.ml b/src/lsp/cobol_preproc/preproc_options.ml new file mode 100644 index 000000000..2c8e9acc6 --- /dev/null +++ b/src/lsp/cobol_preproc/preproc_options.ml @@ -0,0 +1,28 @@ +(**************************************************************************) +(* *) +(* SuperBOL OSS Studio *) +(* *) +(* Copyright (c) 2022-2023 OCamlPro SAS *) +(* *) +(* All rights reserved. *) +(* This source code is licensed under the GNU Affero General Public *) +(* License version 3 found in the LICENSE.md file in the root directory *) +(* of this source tree. *) +(* *) +(**************************************************************************) + +type preproc_options = + { + verbose: bool; + libpath: string list; + config: Cobol_config.t; + source_format: Cobol_config.source_format_spec; + } + +let default = + { + verbose = false; + libpath = []; + config = Cobol_config.default; + source_format = Cobol_config.Auto; + } diff --git a/src/lsp/superbol_free_lib/command_indent_file.ml b/src/lsp/superbol_free_lib/command_indent_file.ml index 0911b1346..e1b144835 100644 --- a/src/lsp/superbol_free_lib/command_indent_file.ml +++ b/src/lsp/superbol_free_lib/command_indent_file.ml @@ -17,7 +17,8 @@ open Cobol_indent open Common_args -let action { source_format; _ } ~indent_config files = +let action { preproc_options = { source_format; _ } ; _ } ~indent_config + files = List.to_seq files |> Seq.map (fun file -> indent_file ~source_format ~file ~indent_config) diff --git a/src/lsp/superbol_free_lib/command_indent_range.ml b/src/lsp/superbol_free_lib/command_indent_range.ml index fd0b36fc5..1682c653e 100644 --- a/src/lsp/superbol_free_lib/command_indent_range.ml +++ b/src/lsp/superbol_free_lib/command_indent_range.ml @@ -17,7 +17,8 @@ open Cobol_indent open Common_args -let action { source_format; _ } ~file ~range ~indent_config = +let action { preproc_options = { source_format; _ }; _ } ~file ~range + ~indent_config = indent_range ~source_format ~file ~range ~indent_config let cmd = diff --git a/src/lsp/superbol_free_lib/command_pp.ml b/src/lsp/superbol_free_lib/command_pp.ml index bf82a9d64..74acf9188 100644 --- a/src/lsp/superbol_free_lib/command_pp.ml +++ b/src/lsp/superbol_free_lib/command_pp.ml @@ -56,14 +56,15 @@ let cmd = if !parse || !check then let parse ?source_format input = let common = common_get () in - let source_format = - Option.value ~default:common.source_format source_format + let preproc_options = + { common.preproc_options with + source_format = + Option.value source_format + ~default: common.preproc_options.source_format } in - Cobol_parser.parse_simple ~options:common.parser_options @@ - Cobol_preproc.preprocessor { init_libpath = common.libpath; - init_config = common.config; - init_source_format = source_format } - input + input |> + Cobol_preproc.preprocessor ~options:preproc_options |> + Cobol_parser.parse_simple ~options:common.parser_options in let my_text = parse (Filename file) in Format.eprintf "%a@." Cobol_common.Diagnostics.Set.pp my_text.diags; @@ -95,9 +96,7 @@ let cmd = let text = let common = common_get () in Cobol_preproc.text_of_file file - ~verbose: common.parser_options.verbose - ~source_format:common.source_format - ~libpath:common.libpath + ~options:common.preproc_options in let s = Cobol_preproc.Text_printer.string_of_text diff --git a/src/lsp/superbol_free_lib/common_args.ml b/src/lsp/superbol_free_lib/common_args.ml index 21f0e45e4..f96f4c1d2 100644 --- a/src/lsp/superbol_free_lib/common_args.ml +++ b/src/lsp/superbol_free_lib/common_args.ml @@ -15,12 +15,11 @@ open EzCompat open Ezcmd.V2 open EZCMD.TYPES +open Cobol_preproc.Options open Cobol_parser.Options type t = { - config: (module Cobol_config.T); - source_format: Cobol_config.source_format_spec; - libpath: string list; + preproc_options: preproc_options; parser_options: parser_options; } @@ -134,8 +133,8 @@ let get () = else DisableRecovery in let verbose = !Globals.verbosity > 0 in - { config; source_format; libpath = !libpath; - parser_options = { recovery; verbose; show = !show } } + { preproc_options = { config; verbose; source_format; libpath = !libpath }; + parser_options = { config; recovery; verbose; show = !show } } in get, args diff --git a/src/lsp/superbol_free_lib/common_args.mli b/src/lsp/superbol_free_lib/common_args.mli index f3bc30815..d4e4670ce 100644 --- a/src/lsp/superbol_free_lib/common_args.mli +++ b/src/lsp/superbol_free_lib/common_args.mli @@ -12,9 +12,7 @@ (**************************************************************************) type t = { - config: (module Cobol_config.T); - source_format: Cobol_config.source_format_spec; - libpath: string list; + preproc_options: Cobol_preproc.Options.preproc_options; parser_options: Cobol_parser.Options.parser_options; } diff --git a/test/cobol_parsing/parser_testing.ml b/test/cobol_parsing/parser_testing.ml index 0182ce674..7019b004b 100644 --- a/test/cobol_parsing/parser_testing.ml +++ b/test/cobol_parsing/parser_testing.ml @@ -25,9 +25,11 @@ let show_parsed_tokens recovery = EnableRecovery { silence_benign_recoveries = true }; } @@ Cobol_preproc.preprocessor - { init_libpath = []; - init_config = Cobol_config.default; - init_source_format = source_format } @@ + ~options:Cobol_preproc.Options.{ + default with + libpath = []; + source_format + } @@ String { filename = "prog.cob"; contents = prog } in Cobol_parser.INTERNAL.pp_tokens Fmt.stdout (Lazy.force tokens) diff --git a/test/output-tests/gnucobol.ml b/test/output-tests/gnucobol.ml index 3a2c5c9c7..df858cad9 100644 --- a/test/output-tests/gnucobol.ml +++ b/test/output-tests/gnucobol.ml @@ -158,11 +158,10 @@ let do_check_parse (test_filename, contents, _, { check_loc; else Cobol_config.(SF SFFixed) in let parse_simple input = - Cobol_parser.parse_simple @@ + input |> Cobol_preproc.preprocessor - { init_source_format = source_format; - init_config = Cobol_config.default; - init_libpath = [] } input + ~options:Cobol_preproc.Options.{ default with source_format } |> + Cobol_parser.parse_simple in try let input = setup_input ~filename contents in diff --git a/test/output-tests/preproc.ml b/test/output-tests/preproc.ml index a7246e34a..76201dee2 100644 --- a/test/output-tests/preproc.ml +++ b/test/output-tests/preproc.ml @@ -41,9 +41,10 @@ let mf_root = srcdir // mf_testsuite module Diags = Cobol_common.Diagnostics.InitStateful () -let preprocess_file ~source_format ?config = - preprocess_file ~source_format ?config ~verbose:false ~libpath:[] - ~ppf:std_formatter ~epf:std_formatter +let preprocess_file ~source_format ~config = + preprocess_file ~ppf:std_formatter ~epf:std_formatter + ~options:Cobol_preproc.Options.{ source_format; config; + verbose = false; libpath = [] } let from_dialect = Cobol_config.from_dialect (module Diags) diff --git a/test/output-tests/reparse.ml b/test/output-tests/reparse.ml index eb5d90b22..0e070fa84 100644 --- a/test/output-tests/reparse.ml +++ b/test/output-tests/reparse.ml @@ -49,10 +49,13 @@ let reparse_file ~source_format ~config filename = recovery = DisableRecovery } @@ Cobol_preproc.preprocessor - { init_libpath = []; - init_config = config; - init_source_format = source_format } - input + ~options:Cobol_preproc.Options.{ + default with + libpath = []; + config; + source_format + } @@ + input in let print = Format.asprintf "@[%a@]@." Cobol_parser.PTree.pp_compilation_group From b5ec9a5ea207e62ebf0c2a34f1db3dfbe6457597 Mon Sep 17 00:00:00 2001 From: Nicolas Berthier Date: Wed, 4 Oct 2023 11:51:05 +0200 Subject: [PATCH 10/12] Avoid redundant representation of source formats in `Cobol_preproc.Src_format` These changes remove pointless uses of `Cobol_config.source_format` in the pre-processor. --- src/lsp/cobol_preproc/preproc.ml | 2 +- src/lsp/cobol_preproc/preproc.mli | 6 +++--- src/lsp/cobol_preproc/preproc_engine.ml | 9 ++++----- src/lsp/cobol_preproc/preproc_engine.mli | 2 +- src/lsp/cobol_preproc/src_format.ml | 20 ++++++++++---------- src/lsp/cobol_preproc/src_format.mli | 8 +++++--- 6 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/lsp/cobol_preproc/preproc.ml b/src/lsp/cobol_preproc/preproc.ml index 56a975b73..b6f3a77fc 100644 --- a/src/lsp/cobol_preproc/preproc.ml +++ b/src/lsp/cobol_preproc/preproc.ml @@ -90,7 +90,7 @@ let with_source_format | Error s -> Plx (s, lexbuf) let make_srclex make_lexing ?filename ~source_format input = - let SF source_format = Src_format.from_config source_format in + let Src_format.SF source_format = source_format in (* Be sure to provide position informations *) let lexbuf = make_lexing ?with_positions:(Some true) input in Option.iter (Lexing.set_filename lexbuf) filename; diff --git a/src/lsp/cobol_preproc/preproc.mli b/src/lsp/cobol_preproc/preproc.mli index 49d820e89..ff81ee2ba 100644 --- a/src/lsp/cobol_preproc/preproc.mli +++ b/src/lsp/cobol_preproc/preproc.mli @@ -118,17 +118,17 @@ val with_source_format (** {3 Instantiation} *) val srclex_from_file - : source_format:Cobol_config.source_format + : source_format: Src_format.any -> string -> any_srclexer val srclex_from_string : ?filename: string - -> source_format:Cobol_config.source_format + -> source_format: Src_format.any -> string -> any_srclexer val srclex_from_channel : ?filename: string - -> source_format:Cobol_config.source_format + -> source_format: Src_format.any -> in_channel -> any_srclexer diff --git a/src/lsp/cobol_preproc/preproc_engine.ml b/src/lsp/cobol_preproc/preproc_engine.ml index a64994a93..390150a0d 100644 --- a/src/lsp/cobol_preproc/preproc_engine.ml +++ b/src/lsp/cobol_preproc/preproc_engine.ml @@ -27,11 +27,11 @@ type input = let decide_source_format _input : Cobol_config.source_format_spec -> - Cobol_config.source_format with_diags = function + Src_format.any with_diags = function | SF result -> - { result; diags = DIAGS.Set.none } + { result = Src_format.from_config result; diags = DIAGS.Set.none } | Auto -> - { result = SFFixed; + { result = Src_format.from_config SFFixed; diags = DIAGS.(Acc.warn Set.none) "Source format `auto` is not supported \ yet, using `fixed`" } @@ -128,8 +128,7 @@ let preprocessor input = function }; } | `Fork ({ persist; _ } as from, copyloc, copybook) -> - let SF source_format = Preproc.source_format from.srclex in - let source_format = Src_format.to_config source_format in + let source_format = Preproc.source_format from.srclex in { from with buff = []; diff --git a/src/lsp/cobol_preproc/preproc_engine.mli b/src/lsp/cobol_preproc/preproc_engine.mli index 03392429d..d6aebc9c4 100644 --- a/src/lsp/cobol_preproc/preproc_engine.mli +++ b/src/lsp/cobol_preproc/preproc_engine.mli @@ -46,7 +46,7 @@ val next_sentence: preprocessor -> Text.text * preprocessor val decide_source_format : string -> Cobol_config.source_format_spec - -> Cobol_config.source_format Cobol_common.Diagnostics.with_diags + -> Src_format.any Cobol_common.Diagnostics.with_diags val lex_file : source_format: Cobol_config.source_format_spec diff --git a/src/lsp/cobol_preproc/src_format.ml b/src/lsp/cobol_preproc/src_format.ml index deb19e0cc..1d3cdd30e 100644 --- a/src/lsp/cobol_preproc/src_format.ml +++ b/src/lsp/cobol_preproc/src_format.ml @@ -56,16 +56,16 @@ let equal | CBLXIndic, CBLXIndic -> p1 = p2 | _ -> false -let to_config - (type k) : k source_format -> Cobol_config.source_format = function - | NoIndic, _ -> SFFree - | FixedIndic, FixedWidth p when p == fixed_paging -> SFFixed - | FixedIndic, FixedWidth p when p == variable_paging -> SFVariable - | FixedIndic, FixedWidth _ (* when p == xcard_paging *) -> SFxCard - | XOpenIndic, FixedWidth _ (* when p == xopen_paging *) -> SFXOpen - | CRTIndic, FixedWidth _ (* when p == crt_paging *) -> SFCRT - | TrmIndic, FixedWidth _ (* when p == terminal_paging *) -> SFTrm - | CBLXIndic, FixedWidth _ (* when p == cobolx_paging *) -> SFCOBOLX +(* let to_config *) +(* (type k) : k source_format -> Cobol_config.source_format = function *) +(* | NoIndic, _ -> SFFree *) +(* | FixedIndic, FixedWidth p when p == fixed_paging -> SFFixed *) +(* | FixedIndic, FixedWidth p when p == variable_paging -> SFVariable *) +(* | FixedIndic, FixedWidth _ (\* when p == xcard_paging *\) -> SFxCard *) +(* | XOpenIndic, FixedWidth _ (\* when p == xopen_paging *\) -> SFXOpen *) +(* | CRTIndic, FixedWidth _ (\* when p == crt_paging *\) -> SFCRT *) +(* | TrmIndic, FixedWidth _ (\* when p == terminal_paging *\) -> SFTrm *) +(* | CBLXIndic, FixedWidth _ (\* when p == cobolx_paging *\) -> SFCOBOLX *) let from_config : Cobol_config.source_format -> any = function diff --git a/src/lsp/cobol_preproc/src_format.mli b/src/lsp/cobol_preproc/src_format.mli index 253d9928a..fb965cb50 100644 --- a/src/lsp/cobol_preproc/src_format.mli +++ b/src/lsp/cobol_preproc/src_format.mli @@ -42,12 +42,14 @@ type comment_entry_termination = (* skip until... *) | Period (* ... next period (unused) *) | AreaB of { first_area_b_column: int } (* ... next word in area A *) -val from_config: Cobol_config.source_format -> any -val to_config: 'k source_format -> Cobol_config.source_format +(* --- *) + val equal: 'k source_format -> 'r source_format -> bool +val from_config: Cobol_config.source_format -> any +(* val to_config: 'k source_format -> Cobol_config.source_format *) val decypher - : dialect:Cobol_config.dialect + : dialect: Cobol_config.dialect -> string -> (any, [> `SFUnknown of string ]) result From fa0abb52dd0237e3fdf14066bc91655cd2ca4f57 Mon Sep 17 00:00:00 2001 From: Nicolas Berthier Date: Thu, 5 Oct 2023 10:02:10 +0200 Subject: [PATCH 11/12] Finishing touches to the rewindable parser, with some tests --- src/lsp/cobol_lsp/lsp_document.ml | 15 +- src/lsp/cobol_parser/parser_engine.ml | 48 +- src/lsp/cobol_parser/parser_engine.mli | 8 +- src/lsp/cobol_parser/text_lexer.ml | 13 +- src/lsp/cobol_parser/text_lexer.mli | 2 +- src/lsp/cobol_parser/text_tokenizer.ml | 3 +- src/lsp/cobol_preproc/preproc.ml | 6 +- src/lsp/cobol_preproc/preproc_engine.ml | 7 + src/lsp/cobol_preproc/preproc_engine.mli | 6 + test/cobol_parsing/dune | 20 +- test/cobol_parsing/parser_testing.ml | 191 +++++- test/cobol_parsing/test_appending.ml | 296 ++++++++++ test/cobol_parsing/test_appending_large.ml | 360 ++++++++++++ test/cobol_parsing/test_cutnpaste_large.ml | 648 +++++++++++++++++++++ test/output-tests/dune | 10 +- test/output-tests/preproc.ml | 33 +- test/output-tests/reparse.ml | 29 +- test/output-tests/testsuite_utils.ml | 49 ++ 18 files changed, 1634 insertions(+), 110 deletions(-) create mode 100644 test/cobol_parsing/test_appending.ml create mode 100644 test/cobol_parsing/test_appending_large.ml create mode 100644 test/cobol_parsing/test_cutnpaste_large.ml create mode 100644 test/output-tests/testsuite_utils.ml diff --git a/src/lsp/cobol_lsp/lsp_document.ml b/src/lsp/cobol_lsp/lsp_document.ml index b3b49c8ef..3688a9c04 100644 --- a/src/lsp/cobol_lsp/lsp_document.ml +++ b/src/lsp/cobol_lsp/lsp_document.ml @@ -169,18 +169,9 @@ let reparse_and_analyze ?position ({ copybook; rewinder; textdoc; _ } as doc) = { doc with artifacts = no_artifacts; rewinder = None; parsed = None } | Some position, Some rewinder -> extract_parsed_infos doc @@ - Cobol_parser.rewind_and_parse rewinder ~position - begin fun ?new_position pp -> - let contents = Lsp.Text_document.text textdoc in - let contents = match new_position with - | None -> contents - | Some (Lexing.{ pos_cnum; _ } as _pos) -> - EzString.after contents (pos_cnum - 1) - in - (* Pretty.error "contents = %S@." contents; *) - Cobol_preproc.reset_preprocessor ?new_position pp - (String { contents; filename = Lsp.Uri.to_path (uri doc) }) - end + Cobol_parser.rewind_and_parse rewinder ~position @@ + Cobol_preproc.reset_preprocessor_for_string @@ + Lsp.Text_document.text textdoc (** Creates a record for a document that is not yet parsed or analyzed. *) let blank ~project ?copybook textdoc = diff --git a/src/lsp/cobol_parser/parser_engine.ml b/src/lsp/cobol_parser/parser_engine.ml index e2dd80d8f..c06b3b3ab 100644 --- a/src/lsp/cobol_parser/parser_engine.ml +++ b/src/lsp/cobol_parser/parser_engine.ml @@ -519,9 +519,12 @@ module Make (Config: Cobol_config.T) = struct and ('a, 'm) rewindable_history_event = { preproc_position: Lexing.position; - event_stage: ('a, 'm) interim_stage; + event_stage: ('a, 'm) interim_stage_without_tokens; } + and ('a, 'm) interim_stage_without_tokens = + 'm state * 'a Grammar_interpr.env (* Always valid input_needed env. *) + let init_rewindable_parse ps ~make_checkpoint = { init = ps; @@ -530,17 +533,23 @@ module Make (Config: Cobol_config.T) = struct } (** Stores a stage as part of the memorized rewindable history events. *) - let save_history_event ((ps, _, _) as stage) (store: _ rewindable_history) = + let save_interim_stage (ps, _, env) (store: _ rewindable_history) = let preproc_position = Cobol_preproc.position ps.preproc.pp in match store with + | store' + when preproc_position.pos_cnum <> preproc_position.pos_bol -> + (* We must only save positions that correspond to beginning of lines; + this should only make us skip recording events at the end of + inputs. *) + store' | { preproc_position = prev_pos; _ } :: store' when prev_pos.pos_cnum = preproc_position.pos_cnum && prev_pos.pos_fname = preproc_position.pos_fname -> (* Preprocessor did not advance further since last save: replace event with new parser state: *) - { preproc_position; event_stage = stage } :: store' + { preproc_position; event_stage = (ps, env) } :: store' | store' -> - { preproc_position; event_stage = stage } :: store' + { preproc_position; event_stage = (ps, env) } :: store' let rewindable_parser_state = function | { stage = Final (_, ps) | Trans (ps, _, _); _ } -> ps @@ -560,7 +569,7 @@ module Make (Config: Cobol_config.T) = struct | Trans ((ps, _, _) as state) -> let store, count = if count = save_stage then store, succ count - else save_history_event state store, 0 + else save_interim_stage state store, 0 and stage = try on_interim_stage state with e -> on_exn ps e in @@ -574,15 +583,23 @@ module Make (Config: Cobol_config.T) = struct pos | Indexed { line; char } -> let ps = rewindable_parser_state rwps in - let lexpos = Cobol_preproc.position ps.preproc.pp in let newline_cnums = Cobol_preproc.newline_cnums ps.preproc.pp in - let pos_bol = - try List.nth newline_cnums (line - 1) - with Not_found | Invalid_argument _ -> 0 - in - Lexing.{ lexpos with pos_bol; - pos_cnum = pos_bol + char; - pos_lnum = line + 1 } + if newline_cnums = [] + then raise Not_found (* no complete line was processed yet; just skip *) + else + let lexpos = Cobol_preproc.position ps.preproc.pp in + try + let pos_bol = + try List.nth newline_cnums (line - 1) + with Not_found | Invalid_argument _ -> 0 + in + Lexing.{ lexpos with pos_bol; + pos_cnum = pos_bol + char; + pos_lnum = line + 1 } + with Failure _ -> + (* The given line exceeds what was already processed, so we restart + from the current preprocessor position. *) + lexpos let find_history_event_preceding ~position ({ store; _ } as rwps) = let lexpos = lexing_postion_of ~position rwps in @@ -608,10 +625,11 @@ module Make (Config: Cobol_config.T) = struct let rwps = try let event, store = find_history_event_preceding ~position rwps in - let ps, tokens, env = event.event_stage in + let ps, env = event.event_stage in let pp = ps.preproc.pp in - let pp = pp_rewind ?new_position:(Some event.preproc_position) pp in + let pp = pp_rewind ~new_position:event.preproc_position pp in let ps = { ps with preproc = { ps.preproc with pp } } in + let ps, tokens = produce_tokens ps in { rwps with stage = Trans (ps, tokens, env); store } with Not_found -> (* rewinding before first checkpoint *) let pp = pp_rewind rwps.init.preproc.pp in diff --git a/src/lsp/cobol_parser/parser_engine.mli b/src/lsp/cobol_parser/parser_engine.mli index c3c293e2a..9fd274417 100644 --- a/src/lsp/cobol_parser/parser_engine.mli +++ b/src/lsp/cobol_parser/parser_engine.mli @@ -29,8 +29,8 @@ open Parser_outputs i.e,} {!Cobol_common.Diagnostics.Set.has_errors} holds). This is in particular the case when the resulting parse-tree is provided and recovery is enabled ([options.recovery <> DisableRecovery]), as in such a case, the - parse-tree returned may contain dummy nodes and source locations produced - using the recovery mechanism. *) + parse-tree returned may contain dummy nodes and source locations produced by + the recovery mechanism. *) (** {1 Basic (one-shot) parsing} *) @@ -92,8 +92,8 @@ type position = Lexing.position (** raw lexing position *) | Indexed of { - line: int; (** line number (starting at 0) *) - char: int; (** character number in line (starting at 0) *) + line: int; (** line number (starting from 0) *) + char: int; (** character number in line (starting from 0) *) } (** [rewind_and_parse rewinder preprocessor_rewind ~position] uses [rewinder] to diff --git a/src/lsp/cobol_parser/text_lexer.ml b/src/lsp/cobol_parser/text_lexer.ml index dda4e55fc..2b5ec370f 100644 --- a/src/lsp/cobol_parser/text_lexer.ml +++ b/src/lsp/cobol_parser/text_lexer.ml @@ -109,15 +109,16 @@ module Make (Words: module type of Text_keywords) = struct let silenced_keywords = StringSet.of_list Words.silenced_keywords - let reserve_words: Cobol_config.words_spec -> unit = + let reserve_words: Cobol_config.words_spec -> DIAGS.Set.t = let on_token_handle_of kwd descr ~f = - try f @@ handle_of_keyword kwd with + try f @@ handle_of_keyword kwd; DIAGS.Set.none with | Not_found when StringSet.mem kwd silenced_keywords -> - () (* Ignore silently? Warn? *) + DIAGS.Set.none (* Ignore silently? Warn? *) | Not_found -> - Pretty.error "@[Unable@ to@ %s@ keyword:@ %s@]@." descr kwd + DIAGS.Set.error "@[Unable@ to@ %s@ keyword:@ %s@]@." descr kwd in - List.iter begin fun (w, word_spec) -> match word_spec with + List.fold_left begin fun diags (w, word_spec) -> + DIAGS.Set.union diags @@ match word_spec with | Cobol_config.ReserveWord { preserve_context_sensitivity } -> on_token_handle_of w "reserve" ~f:begin fun h -> if preserve_context_sensitivity @@ -132,7 +133,7 @@ module Make (Words: module type of Text_keywords) = struct end | NotReserved -> on_token_handle_of w "unreserve" ~f:unreserve_token - end + end DIAGS.Set.none let enable_tokens tokens = TokenHandles.iter enable_token tokens diff --git a/src/lsp/cobol_parser/text_lexer.mli b/src/lsp/cobol_parser/text_lexer.mli index fb36ebf3a..7aa6e28f4 100644 --- a/src/lsp/cobol_parser/text_lexer.mli +++ b/src/lsp/cobol_parser/text_lexer.mli @@ -31,7 +31,7 @@ val show_token_of_handle: token_handle -> string (* --- *) val handle_of_token: Grammar_tokens.token -> token_handle -val reserve_words: Cobol_config.words_spec -> unit +val reserve_words: Cobol_config.words_spec -> Cobol_common.Diagnostics.Set.t val enable_tokens: TokenHandles.t -> unit val disable_tokens: TokenHandles.t -> unit diff --git a/src/lsp/cobol_parser/text_tokenizer.ml b/src/lsp/cobol_parser/text_tokenizer.ml index 719fb762c..71c1b9d56 100644 --- a/src/lsp/cobol_parser/text_tokenizer.ml +++ b/src/lsp/cobol_parser/text_tokenizer.ml @@ -303,12 +303,11 @@ module Make (Config: Cobol_config.T) = struct let amnesic = Amnesic let eidetic = Eidetic [] let init memory ~context_sensitive_tokens = - init_text_lexer ~context_sensitive_tokens; { expect_picture_string = false; leftover_tokens = []; memory; - diags = DIAGS.Set.none; + diags = init_text_lexer ~context_sensitive_tokens; lexing_options = Text_lexer.default_lexing_options; } diff --git a/src/lsp/cobol_preproc/preproc.ml b/src/lsp/cobol_preproc/preproc.ml index b6f3a77fc..08bc387b7 100644 --- a/src/lsp/cobol_preproc/preproc.ml +++ b/src/lsp/cobol_preproc/preproc.ml @@ -101,9 +101,9 @@ let srclex_from_channel = make_srclex Lexing.from_channel let srclex_from_file ~source_format filename : any_srclexer = srclex_from_string ~source_format ~filename (EzFile.read_file filename) -(** Note: If given, assumes [position] corresponds to the begining of the - input. If absent, restarts from first position. File name is kept from the - previous input. *) +(** Note: If given, assumes [position] corresponds to the beginning of the + input, which {e must} also be at the beginning of a line. If absent, + restarts from first position. File name is kept from the previous input. *) let srclex_restart make_lexing ?position input (Plx (s, prev_lexbuf)) = let lexbuf = make_lexing ?with_positions:(Some true) input in let pos_fname = match position with diff --git a/src/lsp/cobol_preproc/preproc_engine.ml b/src/lsp/cobol_preproc/preproc_engine.ml index 390150a0d..0773084d7 100644 --- a/src/lsp/cobol_preproc/preproc_engine.ml +++ b/src/lsp/cobol_preproc/preproc_engine.ml @@ -390,6 +390,13 @@ let pp_pptokens: pptokens Pretty.printer = let reset_preprocessor ?new_position pp input = preprocessor input (`ResetPosition (pp, new_position)) +let reset_preprocessor_for_string string ?new_position pp = + let contents = match new_position with + | Some Lexing.{ pos_cnum; _ } -> EzString.after string (pos_cnum - 1) + | None -> string + in (* filename is ignored *) + reset_preprocessor ?new_position pp @@ String { contents; filename = "" } + (* --- *) let preprocessor ?(options = Preproc_options.default) input = diff --git a/src/lsp/cobol_preproc/preproc_engine.mli b/src/lsp/cobol_preproc/preproc_engine.mli index d6aebc9c4..0210debce 100644 --- a/src/lsp/cobol_preproc/preproc_engine.mli +++ b/src/lsp/cobol_preproc/preproc_engine.mli @@ -27,6 +27,12 @@ val reset_preprocessor -> preprocessor -> input -> preprocessor +val reset_preprocessor_for_string + : string + -> ?new_position:Lexing.position + -> preprocessor + -> preprocessor + (* --- *) diff --git a/test/cobol_parsing/dune b/test/cobol_parsing/dune index abef4bca8..93eaf3464 100644 --- a/test/cobol_parsing/dune +++ b/test/cobol_parsing/dune @@ -3,12 +3,28 @@ (modules test_picture_parsing test_combined_relations_parsing) (libraries alcotest cobol_parser cobol_data)) +(library + (name parser_testing) + (modules Parser_testing) + (libraries cobol_parser) + ) + (library (name test_cobol_parser) - (modules cS_tokens decimal_point tokens parser_testing) + (modules cS_tokens decimal_point tokens) (preprocess (pps ppx_expect)) (inline_tests (modes best)) ; add js for testing with nodejs - (libraries cobol_parser) + (libraries parser_testing) + ) + +(library + (name test_cobol_parser_rewind) + (modules test_appending test_appending_large test_cutnpaste_large) + (preprocess + (pps ppx_expect)) + (inline_tests + (modes best)) ; add js for testing with nodejs + (libraries parser_testing testsuite_utils) ) diff --git a/test/cobol_parsing/parser_testing.ml b/test/cobol_parsing/parser_testing.ml index 7019b004b..568df5249 100644 --- a/test/cobol_parsing/parser_testing.ml +++ b/test/cobol_parsing/parser_testing.ml @@ -12,24 +12,203 @@ (**************************************************************************) module DIAGS = Cobol_common.Diagnostics +module StrMap = EzCompat.StringMap let show_parsed_tokens ?(verbose = false) ?(source_format = Cobol_config.(SF SFFixed)) prog = let DIAGS.{ result = WithArtifacts (_, { tokens; _ }); _ } = + String { filename = "prog.cob"; contents = prog } |> + Cobol_preproc.preprocessor + ~options:Cobol_preproc.Options.{ + default with + libpath = []; + source_format + } |> Cobol_parser.parse_with_artifacts ~options:Cobol_parser.Options.{ default with verbose; recovery = EnableRecovery { silence_benign_recoveries = true }; - } @@ + } + in + Cobol_parser.INTERNAL.pp_tokens Fmt.stdout (Lazy.force tokens) + +(* --- *) + +(** Structure returned by {!extract_position_markers} below. *) +type positions = + { + pos_anonymous: position list; + pos_map: position StrMap.t; + } +and position = + { + line: int; + char: int; + cnum: int; + } + +let position_marker = "_|_\\|_|[0-9a-zA-Z-+]+|_" +let position_or_newline_regexp = Str.(regexp @@ position_marker ^ "\\|\n") + +(** [extract_position_markers text] records and removes any cursor position + marker from [text], and returns the resulting text along with a set of + cursor positions. + + Anonymous markers are denoted {[_|_]}. They are listed in order of + appearance in [text] ([pos_anonymous]). + + Named markers are denoted {[_|some-name|_]}, where {[some-name]} may + comprise alphanumeric and [+] or [-] characters. They are recorded in + [pos_map]. *) +let extract_position_markers + ?(with_start_pos = true) ?(with_end_pos = true) + text = + let splits = Str.full_split position_or_newline_regexp text in + let positions = + if with_start_pos + then [{ line = 0; char = 0; cnum = 0 }, None] + else [] + in + let acc, line, char, cnum, positions = + List.fold_left begin fun (acc, line, char, cnum, positions) -> function + | Str.Text t -> + let len = String.length t in + t :: acc, line, char + len, cnum + len, positions + | Str.Delim "\n" -> + "\n" :: acc, succ line, 0, cnum + 1, positions + | Str.Delim "_|_" -> + acc, line, char, cnum, ({ line; char; cnum }, + None) :: positions + | Str.Delim d -> + let position_ident = Scanf.sscanf d "_|%s@|_" Fun.id in + acc, line, char, cnum, ({ line; char; cnum }, + Some position_ident) :: positions + end ([], 0, 0, 0, positions) splits + in + let positions = + if with_end_pos + then ({ line; char; cnum }, None) :: positions + else positions + in + String.concat "" (List.rev acc), + List.fold_left begin fun acc (pos, ident) -> + match ident with + | None -> { acc with pos_anonymous = pos :: acc.pos_anonymous } + | Some id -> { acc with pos_map = StrMap.add id pos acc.pos_map } + end { pos_anonymous = []; pos_map = StrMap.empty } positions + +let insert_periodic_position_markers ?(period = 1) prog = + let rec aux acc prog = + if String.length prog <= period + then + String.concat "_|_" (List.rev (prog :: acc)) + else + let chunk, rem = EzString.before prog period, + EzString.after prog (period - 1) in + aux (chunk :: acc) rem + in + aux [] prog + +let pairwise positions = + List.(combine (rev (tl (rev positions))) (tl positions)) + +(* --- *) + +let rewindable_parse + ?(verbose = false) + ?(source_format = Cobol_config.(SF SFFixed)) + ?config + prog + = + let DIAGS.{ result = Only ptree, rewinder; diags } = + String { filename = "prog.cob"; contents = prog } |> Cobol_preproc.preprocessor ~options:Cobol_preproc.Options.{ + verbose; libpath = []; source_format; + config = Option.value config ~default:default.config; + } |> + Cobol_parser.rewindable_parse_simple + ~options:Cobol_parser.Options.{ default with - libpath = []; - source_format - } @@ - String { filename = "prog.cob"; contents = prog } + verbose; recovery = DisableRecovery; + config = Option.value config ~default:default.config; + } in - Cobol_parser.INTERNAL.pp_tokens Fmt.stdout (Lazy.force tokens) + ptree, diags, rewinder + +let rewind_n_parse ~f rewinder { line; char; _ } preproc_rewind = + let DIAGS.{ result = Only ptree, rewinder; diags } = + Cobol_parser.rewind_and_parse rewinder preproc_rewind + ~position:(Indexed { line; char }) + in + f ptree diags; + rewinder + +(** [iteratively_append_chunks ?config ~f (prog, positions)] starts a rewindable + parser on a first chunk of input (until the first position in + [positions.pos_anonymous]), and then iteralively appends the remaining + chunks (from one position to the next). [f] is called after each successive + chunk has been parsed, with chunk number and total number of chunks as first + and second arguments, respectively. *) +let iteratively_append_chunks ?config ~f (prog, positions) = + let _, _, rewinder = + rewindable_parse ?config @@ (* start with first chunk of input *) + EzString.before prog (List.hd positions.pos_anonymous).cnum + in + let num_chunks = List.length positions.pos_anonymous - 1 in + ignore @@ List.fold_left begin fun (i, rewinder) (pos, next_pos) -> + let prog = EzString.before prog next_pos.cnum in + Pretty.out "Appending chunk %u/%u @@ %d:%d-%d:%d (%a)@." + i num_chunks + pos.line pos.char next_pos.line next_pos.char + Fmt.(truncated ~max:30) + Pretty.(to_string "%S" @@ EzString.after prog (pos.cnum - 1)); + succ i, + rewind_n_parse ~f:(f i num_chunks) rewinder pos + (Cobol_preproc.reset_preprocessor_for_string prog) + end (1, rewinder) (pairwise positions.pos_anonymous) + +(** [simulate_cut_n_paste ?config ~f (prog, positions)] starts a rewindable + parser on [prog], and then repeatedly cuts a chunk [c] form the input (from + one position to the next in [positions.pos_anonymous]), try to parse, and + paste [c] back in its original place. [f0] is called once at the very + beginning with the results obtained by parsing the original program [prog]. + [f] is called after a chunk has been cut and pasted back. *) +let simulate_cut_n_paste ?config ~f0 ~f ?verbose ?(repeat = 1) + (prog, positions) = + Random.init 42; + let ptree0, diags, rewinder = rewindable_parse ?verbose ?config prog in + f0 ~ptree0 diags; + let positions = Array.of_list positions.pos_anonymous in + let num_chunks = Array.length positions - 1 in + let rec loop i rewinder = + if i < repeat then begin + let chunk_num = Random.int num_chunks in (* pick a chunk *) + let pos = positions.(chunk_num) + and next_pos = positions.(chunk_num + 1) in + let chunk = + EzString.(after (before prog next_pos.cnum) (pos.cnum - 1)) in + Pretty.out "Cutting chunk %u/%u @@ %d:%d(%d)-%d:%d(%d) (%a)@." + chunk_num num_chunks + pos.line pos.char pos.cnum + next_pos.line next_pos.char next_pos.cnum + Fmt.(truncated ~max:30) Pretty.(to_string "%S" chunk); + let prog_prefix = EzString.before prog pos.cnum + and prog_suffix = EzString.after prog (next_pos.cnum - 1) in + let rewinder = + rewind_n_parse ~f:(fun _ _ -> ()) rewinder pos @@ + Cobol_preproc.reset_preprocessor_for_string @@ + prog_prefix ^ prog_suffix + in + Pretty.out "Putting it back@."; + let rewinder = + rewind_n_parse ~f:(f chunk_num num_chunks ~ptree0) rewinder pos @@ + Cobol_preproc.reset_preprocessor_for_string prog + in + loop (succ i) rewinder + end + in + loop 0 rewinder diff --git a/test/cobol_parsing/test_appending.ml b/test/cobol_parsing/test_appending.ml new file mode 100644 index 000000000..7261158de --- /dev/null +++ b/test/cobol_parsing/test_appending.ml @@ -0,0 +1,296 @@ +(**************************************************************************) +(* *) +(* SuperBOL OSS Studio *) +(* *) +(* Copyright (c) 2022-2023 OCamlPro SAS *) +(* *) +(* All rights reserved. *) +(* This source code is licensed under the GNU Affero General Public *) +(* License version 3 found in the LICENSE.md file in the root directory *) +(* of this source tree. *) +(* *) +(**************************************************************************) + +let pp_ptree = + Fmt.option Cobol_parser.PTree.pp_compilation_group + ~none:(Fmt.any "None") + +let show_ptree _i _n ptree (* _art *) _diags = + (* let Cobol_parser.Outputs.{ tokens; _ } = art in *) + (* Pretty.out "@[%a@]@." Cobol_parser.INTERNAL.pp_tokens (Lazy.force tokens); *) + Pretty.out "@[Parse-tree:@;%a@]@\n@." pp_ptree ptree + +(* --- *) + +let%expect_test "line-by-line-incremental-small-1" = + Parser_testing.iteratively_append_chunks ~f:show_ptree @@ + Parser_testing.extract_position_markers {| +_|_ IDENTIFICATION DIVISION. +_|_ PROGRAM-ID. prog. +_|_ PROCEDURE DIVISION. +_|_ STOP RUN. + |}; + [%expect {| + Appending chunk 1/5 @ 0:0-1:0 ("\n") + Parse-tree: + + + Appending chunk 2/5 @ 1:0-2:0 (" IDENTIFICATION DIV...) + Parse-tree: + None + + Appending chunk 3/5 @ 2:0-3:0 (" PROGRAM-ID. prog.\n") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + + Appending chunk 4/5 @ 3:0-4:0 (" PROCEDURE DIVISION...) + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + PROCEDURE DIVISION. + + + Appending chunk 5/5 @ 4:0-5:2 (" STOP RUN.\n ") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + PROCEDURE DIVISION. + STOP RUN. +|}];; + +let%expect_test "line-by-line-incremental-small-2" = + Parser_testing.iteratively_append_chunks ~f:show_ptree @@ + Parser_testing.extract_position_markers {| + _|_ IDENTIFICATION DIVISION. + _|_ PROGRAM-ID. prog. + _|_ PROCEDURE DIVISION. + _|_ STOP RUN. + |}; + [%expect {| + Appending chunk 1/5 @ 0:0-1:7 ("\n ") + Parse-tree: + + + Appending chunk 2/5 @ 1:7-2:7 (" IDENTIFICATION DIVISION.\...) + Parse-tree: + None + + Appending chunk 3/5 @ 2:7-3:7 (" PROGRAM-ID. prog.\n ") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + + Appending chunk 4/5 @ 3:7-4:7 (" PROCEDURE DIVISION.\n ...) + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + PROCEDURE DIVISION. + + + Appending chunk 5/5 @ 4:7-5:2 (" STOP RUN.\n ") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + PROCEDURE DIVISION. + STOP RUN. +|}];; + +let%expect_test "line-by-line-incremental-small-3" = + Parser_testing.iteratively_append_chunks ~f:show_ptree @@ + Parser_testing.extract_position_markers {| +_|_ IDENTIFICATION DIVISION._|_ +_|_ PROGRAM-ID. prog._|_ +_|_ PROCEDURE DIVISION._|_ +_|_ STOP RUN._|_ + |}; + [%expect {| + Appending chunk 1/9 @ 0:0-1:0 ("\n") + Parse-tree: + + + Appending chunk 2/9 @ 1:0-1:32 (" IDENTIFICATION DIV...) + Parse-tree: + None + + Appending chunk 3/9 @ 1:32-2:0 ("\n") + Parse-tree: + None + + Appending chunk 4/9 @ 2:0-2:25 (" PROGRAM-ID. prog.") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + + Appending chunk 5/9 @ 2:25-3:0 ("\n") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + + Appending chunk 6/9 @ 3:0-3:27 (" PROCEDURE DIVISION.") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + PROCEDURE DIVISION. + + + Appending chunk 7/9 @ 3:27-4:0 ("\n") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + PROCEDURE DIVISION. + + + Appending chunk 8/9 @ 4:0-4:21 (" STOP RUN.") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + PROCEDURE DIVISION. + STOP RUN. + + Appending chunk 9/9 @ 4:21-5:2 ("\n ") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + PROCEDURE DIVISION. + STOP RUN. +|}];; + +let%expect_test "line-by-line-incremental-small-4" = + Parser_testing.iteratively_append_chunks ~f:show_ptree @@ + Parser_testing.extract_position_markers @@ + Parser_testing.insert_periodic_position_markers ~period:5 {| + IDENTIFICATION DIVISION. + PROGRAM-ID. prog. + PROCEDURE DIVISION. + STOP RUN. + |}; + [%expect {| + Appending chunk 1/23 @ 0:0-1:4 ("\n ") + Parse-tree: + + + Appending chunk 2/23 @ 1:4-1:9 (" I") + Parse-tree: + None + + Appending chunk 3/23 @ 1:9-1:14 ("DENTI") + Parse-tree: + None + + Appending chunk 4/23 @ 1:14-1:19 ("FICAT") + Parse-tree: + None + + Appending chunk 5/23 @ 1:19-1:24 ("ION D") + Parse-tree: + None + + Appending chunk 6/23 @ 1:24-1:29 ("IVISI") + Parse-tree: + None + + Appending chunk 7/23 @ 1:29-2:1 ("ON.\n ") + Parse-tree: + None + + Appending chunk 8/23 @ 2:1-2:6 (" ") + Parse-tree: + None + + Appending chunk 9/23 @ 2:6-2:11 (" PRO") + Parse-tree: + None + + Appending chunk 10/23 @ 2:11-2:16 ("GRAM-") + Parse-tree: + None + + Appending chunk 11/23 @ 2:16-2:21 ("ID. p") + Parse-tree: + None + + Appending chunk 12/23 @ 2:21-3:0 ("rog.\n") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + + Appending chunk 13/23 @ 3:0-3:5 (" ") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + + Appending chunk 14/23 @ 3:5-3:10 (" PR") + Parse-tree: + None + + Appending chunk 15/23 @ 3:10-3:15 ("OCEDU") + Parse-tree: + None + + Appending chunk 16/23 @ 3:15-3:20 ("RE DI") + Parse-tree: + None + + Appending chunk 17/23 @ 3:20-3:25 ("VISIO") + Parse-tree: + None + + Appending chunk 18/23 @ 3:25-4:2 ("N.\n ") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + PROCEDURE DIVISION. + + + Appending chunk 19/23 @ 4:2-4:7 (" ") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + PROCEDURE DIVISION. + + + Appending chunk 20/23 @ 4:7-4:12 (" ") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + PROCEDURE DIVISION. + + + Appending chunk 21/23 @ 4:12-4:17 ("STOP ") + Parse-tree: + None + + Appending chunk 22/23 @ 4:17-5:0 ("RUN.\n") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + PROCEDURE DIVISION. + STOP RUN. + + Appending chunk 23/23 @ 5:0-5:2 (" ") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. PROG. + + PROCEDURE DIVISION. + STOP RUN. +|}];; diff --git a/test/cobol_parsing/test_appending_large.ml b/test/cobol_parsing/test_appending_large.ml new file mode 100644 index 000000000..5ca326445 --- /dev/null +++ b/test/cobol_parsing/test_appending_large.ml @@ -0,0 +1,360 @@ +(**************************************************************************) +(* *) +(* SuperBOL OSS Studio *) +(* *) +(* Copyright (c) 2022-2023 OCamlPro SAS *) +(* *) +(* All rights reserved. *) +(* This source code is licensed under the GNU Affero General Public *) +(* License version 3 found in the LICENSE.md file in the root directory *) +(* of this source tree. *) +(* *) +(**************************************************************************) + +open Ez_file +open FileString.OP +open Testsuite_utils (* implemented in `../output-tests' *) + +let show_last_ptree i n ptree diags = + if i = n then Test_appending.show_ptree i n ptree diags + +let%expect_test "line-by-line-incremental-mf" = + (* find . \( -type f -a -iname '*.cbl' \) -printf '%s %p\n' | sort -nr | head *) + (* 6554 ./ReportWriter/RepWriteSumm.cbl *) + (* 6543 ./ReportWriter/RepWriteFull.cbl *) + (* 6093 ./SubProg/DayDiff/DayDiffDriver.cbl *) + (* 4493 ./SubProg/Multiply/DriverProg.cbl *) + (* 4477 ./Strings/RefMod.cbl *) + (* 3821 ./ReportWriter/RepWriteB.cbl *) + (* 3156 ./SeqRpt/SeqRpt.CBL *) + (* 3142 ./ReportWriter/RepWriteA.cbl *) + (* 3087 ./Strings/UnstringFileEg.cbl *) + (* 2413 ./SubProg/DateValid/ValiDate.cbl *) + let config = + Testsuite_utils.from_dialect ~strict:true Cobol_config.DIALECT.MicroFocus in + deep_iter mf_root ~glob:"RepWriteSumm.[cC][bB][lL]" (* <- pick largest file *) + ~f:begin fun path -> + let file = srcdir // mf_testsuite // path in + Pretty.out "Considering `%s'.@." file; + Parser_testing.iteratively_append_chunks ~config ~f:show_last_ptree @@ + Parser_testing.extract_position_markers @@ + Parser_testing.insert_periodic_position_markers ~period:42 @@ + FileString.read_file file; + end; + end_with_postproc [%expect.output]; + [%expect {| + Loading configuration from + `__srcdir__/import/gnucobol/config/mf-strict.conf' + Considering `__srcdir__/test/testsuite/microfocus/www.csis.ul.ie/ReportWriter/RepWriteSumm.cbl'. + Appending chunk 1/157 @ 0:0-1:10 (" $ SET SOURCEFORMAT\"...) + Appending chunk 2/157 @ 1:10-2:26 ("TION DIVISION.\r\nPROGRAM-...) + Appending chunk 3/157 @ 2:26-5:2 ("Summary.\r\nAUTHOR. Micha...) + Appending chunk 4/157 @ 5:2-6:21 ("VIRONMENT DIVISION.\r\nINP...) + Appending chunk 5/157 @ 6:21-8:25 ("\r\nFILE-CONTROL.\r\n S...) + Appending chunk 6/157 @ 8:25-9:21 ("GN TO \"GBSALES.DAT\"\r\n ...) + Appending chunk 7/157 @ 9:21-10:18 ("ON IS LINE SEQUENTIAL.\r\n...) + Appending chunk 8/157 @ 10:18-12:0 ("le ASSIGN TO \"SUMMARYSALE...) + Appending chunk 9/157 @ 12:0-15:9 ("\r\nDATA DIVISION.\r\nFILE...) + Appending chunk 10/157 @ 15:9-17:17 ("File.\r\n01 SalesRecord.\...) + Appending chunk 11/157 @ 17:17-18:21 (" VALUE HIGH-VALUES.\r\n ...) + Appending chunk 12/157 @ 18:21-19:31 (" PIC 9.\r\n 02 SalesP...) + Appending chunk 13/157 @ 19:31-22:1 ("\n 02 ValueOfSale ...) + Appending chunk 14/157 @ 22:1-24:0 ("D PrintFile\r\n REPORT...) + Appending chunk 15/157 @ 24:0-26:14 ("\r\nWORKING-STORAGE SECTIO...) + Appending chunk 16/157 @ 26:14-28:19 ("\r\n 02 TableValues.\r\...) + Appending chunk 17/157 @ 28:19-28:61 (" PIC X(18) VALUE \"Dub...) + Appending chunk 18/157 @ 28:61-29:40 ("\r\n 03 FILLER ...) + Appending chunk 19/157 @ 29:40-30:19 ("\"Cork Galway \".\r\...) + Appending chunk 20/157 @ 30:19-30:61 (" PIC X(18) VALUE \"Sli...) + Appending chunk 21/157 @ 30:61-31:40 ("\r\n 03 FILLER ...) + Appending chunk 22/157 @ 31:40-32:29 ("\"Limerick\".\r\n 02 FI...) + Appending chunk 23/157 @ 32:29-33:33 ("Values.\r\n 03 CityN...) + Appending chunk 24/157 @ 33:33-36:8 ("CCURS 7 TIMES.\r\n\r\n01 ...) + Appending chunk 25/157 @ 36:8-37:29 ("ableValues.\r\n 03 F...) + Appending chunk 26/157 @ 37:29-38:36 ("(35)\r\n ...) + Appending chunk 27/157 @ 38:36-39:8 ("32100435005670012300234003...) + Appending chunk 28/157 @ 39:8-40:15 ("3 FILLER PIC X(35)\...) + Appending chunk 29/157 @ 40:15-40:57 (" VALUE \"123005430...) + Appending chunk 30/157 @ 40:57-41:29 ("220013300\".\r\n 03 ...) + Appending chunk 31/157 @ 41:29-42:36 ("(35)\r\n ...) + Appending chunk 32/157 @ 42:36-43:8 ("32100176001870013300144001...) + Appending chunk 33/157 @ 43:8-44:15 ("3 FILLER PIC X(35)\...) + Appending chunk 34/157 @ 44:15-44:57 (" VALUE \"321001230...) + Appending chunk 35/157 @ 44:57-45:29 ("770018800\".\r\n 03 ...) + Appending chunk 36/157 @ 45:29-46:36 ("(35)\r\n ...) + Appending chunk 37/157 @ 46:36-47:8 ("34500456005430011100122001...) + Appending chunk 38/157 @ 47:8-48:15 ("3 FILLER PIC X(35)\...) + Appending chunk 39/157 @ 48:15-48:57 (" VALUE \"190001800...) + Appending chunk 40/157 @ 48:57-49:29 ("330022200\".\r\n 03 ...) + Appending chunk 41/157 @ 49:29-50:36 ("(35)\r\n ...) + Appending chunk 42/157 @ 50:36-51:8 ("15600145001460022200111002...) + Appending chunk 43/157 @ 51:8-52:15 ("3 FILLER PIC X(35)\...) + Appending chunk 44/157 @ 52:15-52:57 (" VALUE \"120001320...) + Appending chunk 45/157 @ 52:57-53:29 ("210043200\".\r\n 03 ...) + Appending chunk 46/157 @ 53:29-54:36 ("(35)\r\n ...) + Appending chunk 47/157 @ 54:36-56:6 ("16500164001760011100777003...) + Appending chunk 48/157 @ 56:6-57:10 (" FILLER REDEFINES TableVal...) + Appending chunk 49/157 @ 57:10-58:20 ("City OCCURS 7 TIMES.\r\n ...) + Appending chunk 50/157 @ 58:20-60:7 ("te PIC 9(3)V99 OCCURS 9 T...) + Appending chunk 51/157 @ 60:7-61:29 ("cVariables.\r\n 02 Comm...) + Appending chunk 52/157 @ 61:29-62:33 ("(4)V99.\r\n 02 Percenta...) + Appending chunk 53/157 @ 62:33-63:31 ("ALUE .05.\r\n 02 Salary...) + Appending chunk 54/157 @ 63:31-65:3 (")V99.\r\n 02 SalesPerso...) + Appending chunk 55/157 @ 65:3-68:9 (" 02 CityNow PIC 9...) + Appending chunk 56/157 @ 68:9-70:17 ("CTION.\r\nRD SalesReport\...) + Appending chunk 57/157 @ 70:17-72:9 ("FINAL\r\n C...) + Appending chunk 58/157 @ 72:9-73:18 (" SalesPersonNum \r\n...) + Appending chunk 59/157 @ 73:18-76:3 ("66\r\n HEADING 1\r\n ...) + Appending chunk 60/157 @ 76:3-79:6 (" LAST DETAIL 42\r\n FOO...) + Appending chunk 61/157 @ 79:6-81:5 ("PE IS PAGE HEADING.\r\n ...) + Appending chunk 62/157 @ 81:5-82:12 (" 03 COLUMN 12 PIC X(3...) + Appending chunk 63/157 @ 82:12-82:54 (" VALUE \"An exa...) + Appending chunk 64/157 @ 82:54-85:12 (" Program\".\r\n\r\n 02 ...) + Appending chunk 65/157 @ 85:12-86:19 ("LUMN 6 PIC X(17)\r\n ...) + Appending chunk 66/157 @ 86:19-87:23 ("ble Salesperson\".\r\n ...) + Appending chunk 67/157 @ 87:23-88:30 (" PIC X(26)\r\n VA...) + Appending chunk 68/157 @ 88:30-91:7 ("Salary Report\".\r\n\r\n ...) + Appending chunk 69/157 @ 91:7-92:1 ("03 COLUMN 2 PIC X(4) ...) + Appending chunk 70/157 @ 92:1-92:43 (" 03 COLUMN 12 PIC...) + Appending chunk 71/157 @ 92:43-93:29 ("lesperson\".\r\n 03 ...) + Appending chunk 72/157 @ 93:29-96:5 ("(4) VALUE \"Sale\".\r\n\r\...) + Appending chunk 73/157 @ 96:5-96:47 (" 03 COLUMN 2 PIC X(4...) + Appending chunk 74/157 @ 96:47-97:41 ("\n 03 COLUMN 13 ...) + Appending chunk 75/157 @ 97:41-98:33 ("umber\".\r\n 03 COLU...) + Appending chunk 76/157 @ 98:33-101:22 ("VALUE \"Value\".\r\n\r\n\r...) + Appending chunk 77/157 @ 101:22-103:8 (" DETAIL.\r\n 02 LINE IS...) + Appending chunk 78/157 @ 103:8-104:16 ("3 COLUMN 1 PIC X(9)\r...) + Appending chunk 79/157 @ 104:16-104:58 (" SOURCE CityName(Ci...) + Appending chunk 80/157 @ 104:58-106:2 ("DICATE.\r\n 03 COLUM...) + Appending chunk 81/157 @ 106:2-106:44 (" SOUR...) + Appending chunk 82/157 @ 106:44-107:22 ("m GROUP INDICATE.\r\n ...) + Appending chunk 83/157 @ 107:22-109:1 (" PIC $$,$$$.99 SOURCE Val...) + Appending chunk 84/157 @ 109:1-111:21 ("\n01 SalesPersonGrp\r\n ...) + Appending chunk 85/157 @ 111:21-111:63 ("OOTING SalesPersonNum NEX...) + Appending chunk 86/157 @ 111:63-113:17 ("\n 02 LINE IS PLUS 1.\r...) + Appending chunk 87/157 @ 113:17-113:59 ("15 PIC X(21) VALUE \"S...) + Appending chunk 88/157 @ 113:59-114:35 ("son\".\r\n 03 COLUMN...) + Appending chunk 89/157 @ 114:35-115:23 ("E SalesPersonNum.\r\n ...) + Appending chunk 90/157 @ 115:23-116:23 (" PIC X VALUE \"=\".\r\n ...) + Appending chunk 91/157 @ 116:23-118:4 (" PIC $$$$$,$$$.99 SUM Valu...) + Appending chunk 92/157 @ 118:4-119:22 ("02 LINE IS PLUS 1.\r\n ...) + Appending chunk 93/157 @ 119:22-120:0 (" PIC X(19) VALUE \"Sales ...) + Appending chunk 94/157 @ 120:0-121:0 (" 03 COLUMN 43 PI...) + Appending chunk 95/157 @ 121:0-121:42 (" 03 COLUMN 45 PI...) + Appending chunk 96/157 @ 121:42-123:21 ("OURCE Commission.\r\n\r\n ...) + Appending chunk 97/157 @ 123:21-124:39 (".\r\n 03 COLUMN 15 ...) + Appending chunk 98/157 @ 124:39-125:15 (" \"Salesperson salary is\"...) + Appending chunk 99/157 @ 125:15-126:15 ("N 43 PIC X VALUE \"=\"...) + Appending chunk 100/157 @ 126:15-127:0 ("N 45 PIC $$$$$,$$$.99 ...) + Appending chunk 101/157 @ 127:0-129:16 ("\r\n 02 LINE IS PLUS 1....) + Appending chunk 102/157 @ 129:16-130:23 (" 15 PIC X(30)\r\n ...) + Appending chunk 103/157 @ 130:23-131:0 (" VALUE \"Current salesper...) + Appending chunk 104/157 @ 131:0-131:42 (" 03 COLUMN 45 PI...) + Appending chunk 105/157 @ 131:42-134:4 ("PersonNow.\r\n\r\n 02 L...) + Appending chunk 106/157 @ 134:4-135:11 (" 03 COLUMN 15 PIC X(...) + Appending chunk 107/157 @ 135:11-135:53 (" VALUE \"Previ...) + Appending chunk 108/157 @ 135:53-136:30 ("umber = \".\r\n 03 C...) + Appending chunk 109/157 @ 136:30-140:12 ("SOURCE SalesPersonNum.\r\n...) + Appending chunk 110/157 @ 140:12-140:54 ("TYPE IS CONTROL FOOTING Ci...) + Appending chunk 111/157 @ 140:54-142:7 ("P PLUS 2.\r\n 02 LINE I...) + Appending chunk 112/157 @ 142:7-142:49 ("03 COLUMN 15 PIC X(9) ...) + Appending chunk 113/157 @ 142:49-143:38 ("\".\r\n 03 COLUMN 25...) + Appending chunk 114/157 @ 143:38-144:19 ("E CityName(CityCode).\r\n ...) + Appending chunk 115/157 @ 144:19-145:19 (" PIC X VALUE \"=\".\r\...) + Appending chunk 116/157 @ 145:19-147:8 (" 45 PIC $$$$$,$$$.99 SUM ...) + Appending chunk 117/157 @ 147:8-148:26 ("INE IS PLUS 1.\r\n 0...) + Appending chunk 118/157 @ 148:26-149:33 ("C X(12)\r\n ...) + Appending chunk 119/157 @ 149:33-150:28 ("rrent city\".\r\n 03...) + Appending chunk 120/157 @ 150:28-151:28 ("X VALUE \"=\".\r\n 0...) + Appending chunk 121/157 @ 151:28-153:21 ("9 SOURCE CityNow.\r\n\r\n ...) + Appending chunk 122/157 @ 153:21-155:4 (".\r\n 03 COLUMN 15 ...) + Appending chunk 123/157 @ 155:4-155:46 (" VALUE ...) + Appending chunk 124/157 @ 155:46-156:40 ("\r\n 03 COLUMN 43 ...) + Appending chunk 125/157 @ 156:40-157:40 ("\r\n 03 COLUMN 45 ...) + Appending chunk 126/157 @ 157:40-160:28 ("ityCode.\r\n\r\n\r\n01 To...) + Appending chunk 127/157 @ 160:28-161:20 ("NTROL FOOTING FINAL.\r\n ...) + Appending chunk 128/157 @ 161:20-163:3 ("4.\r\n 03 COLUMN 15 ...) + Appending chunk 129/157 @ 163:3-163:45 (" VALUE...) + Appending chunk 130/157 @ 163:45-164:41 ("\n 03 COLUMN 43 ...) + Appending chunk 131/157 @ 164:41-165:41 ("\n 03 COLUMN 45 ...) + Appending chunk 132/157 @ 165:41-169:2 ("SUM CS.\r\n\r\n\r\n01 TYP...) + Appending chunk 133/157 @ 169:2-170:24 (" 02 LINE IS 53.\r\n ...) + Appending chunk 134/157 @ 170:24-170:66 ("PIC X(29) VALUE \"Programm...) + Appending chunk 135/157 @ 170:66-171:34 ("hlan\".\r\n 03 COLUM...) + Appending chunk 136/157 @ 171:34-172:26 ("ALUE \"Page :\".\r\n ...) + Appending chunk 137/157 @ 172:26-175:11 ("C Z9 SOURCE PAGE-COUNTER.\...) + Appending chunk 138/157 @ 175:11-178:2 ("IVISION.\r\nDECLARATIVES.\...) + Appending chunk 139/157 @ 178:2-179:2 (" USE BEFORE REPORTING Sal...) + Appending chunk 140/157 @ 179:2-180:25 ("lculate-Salary.\r\n MUL...) + Appending chunk 141/157 @ 180:25-181:35 ("ntage\r\n GIVING ...) + Appending chunk 142/157 @ 181:35-182:39 (".\r\n ADD Commission, F...) + Appending chunk 143/157 @ 182:39-183:24 ("SalesPersonNum )\r\n ...) + Appending chunk 144/157 @ 183:24-187:4 ("\r\nEND DECLARATIVES.\r\n\...) + Appending chunk 145/157 @ 187:4-189:11 ("n.\r\n OPEN INPUT Sales...) + Appending chunk 146/157 @ 189:11-191:5 ("TPUT PrintFile.\r\n REA...) + Appending chunk 147/157 @ 191:5-192:8 (" AT END SET EndOfFile T...) + Appending chunk 148/157 @ 192:8-194:8 ("READ.\r\n INITIATE Sale...) + Appending chunk 149/157 @ 194:8-195:19 ("ORM PrintSalaryReport\r\n ...) + Appending chunk 150/157 @ 195:19-197:3 ("ndOfFile.\r\n TERMINATE...) + Appending chunk 151/157 @ 197:3-198:12 (" CLOSE SalesFile, PrintFil...) + Appending chunk 152/157 @ 198:12-202:15 (".\r\n\r\n\r\nPrintSalaryRe...) + Appending chunk 153/157 @ 202:15-203:26 ("de TO CityNow.\r\n MOVE...) + Appending chunk 154/157 @ 203:26-204:23 ("O SalesPersonNow.\r\n G...) + Appending chunk 155/157 @ 204:23-206:18 ("t.\r\n READ SalesFile\r...) + Appending chunk 156/157 @ 206:18-210:1 ("ET EndOfFile TO TRUE\r\n ...) + Appending chunk 157/157 @ 210:1-211:0 ("\r\n") + Parse-tree: + IDENTIFICATION DIVISION. + PROGRAM-ID. REPORTEXAMPLESUMMARY. + AUTHOR. MICHAEL COUGHLAN . + ENVIRONMENT DIVISION. + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT SALESFILE ASSIGN "GBSALES.DAT" SEQUENTIAL. + SELECT PRINTFILE ASSIGN "SUMMARYSALESREPORT.LPT". + DATA DIVISION. + FILE SECTION. + FD SALESFILE. + 01 SALESRECORD. + 88 ENDOFFILE VALUE HIGH-VALUES. + 02 CITYCODE PIC 9. + 02 SALESPERSONNUM PIC 9. + 02 VALUEOFSALE PIC 9(4)V99. + FD PRINTFILE + REPORT IS SALESREPORT. + WORKING-STORAGE SECTION. + 01 NAMETABLE. + 02 TABLEVALUES. + 03 FILLER PIC X(18) VALUE "Dublin Belfast ". + 03 FILLER PIC X(18) VALUE "Cork Galway ". + 03 FILLER PIC X(18) VALUE "Sligo Waterford". + 03 FILLER PIC X(9) VALUE "Limerick". + 02 FILLER REDEFINES TABLEVALUES. + 03 CITYNAME PIC X(9) OCCURS 7. + 01 RATETABLE. + 02 TABLEVALUES. + 03 FILLER PIC X(35) VALUE "12300321004350056700123002340034500". + 03 FILLER PIC X(35) VALUE "12300543001230034200111001220013300". + 03 FILLER PIC X(35) VALUE "12000321001760018700133001440015500". + 03 FILLER PIC X(35) VALUE "32100123003210012000166001770018800". + 03 FILLER PIC X(35) VALUE "34500345004560054300111001220013200". + 03 FILLER PIC X(35) VALUE "19000180001780017900444003330022200". + 03 FILLER PIC X(35) VALUE "16700156001450014600222001110021200". + 03 FILLER PIC X(35) VALUE "12000132001230014300121003210043200". + 03 FILLER PIC X(35) VALUE "15400165001640017600111007770033300". + 02 FILLER REDEFINES TABLEVALUES. + 03 CITY OCCURS 7. + 04 FIXEDRATE PIC 9(3)V99 OCCURS 9. + 01 MISCVARIABLES. + 02 COMMISSION PIC 9(4)V99. + 02 PERCENTAGE PIC V99 VALUE .05. + 02 SALARY PIC 9(6)V99. + 02 SALESPERSONNOW PIC 9. + 02 CITYNOW PIC 9. + REPORT SECTION. + RD SALESREPORT + CONTROL FINAL CITYCODE + SALESPERSONNUM + PAGE LIMIT IS 66 LINES + HEADING 1 + FIRST DETAIL 6 + LAST DETAIL 42 + FOOTING 52. + 01 TYPE PH. + 02 LINE NUMBER 1. + 03 COLUMN LEFT 12 PIC X(32) VALUE "An example COBOL Report Program". + 02 LINE NUMBER 2. + 03 COLUMN LEFT 6 PIC X(17) VALUE "Bible Salesperson". + 03 COLUMN LEFT 23 PIC X(26) VALUE " - Sales and Salary Report". + 02 LINE NUMBER 4. + 03 COLUMN LEFT 2 PIC X(4) VALUE "City". + 03 COLUMN LEFT 12 PIC X(11) VALUE "Salesperson". + 03 COLUMN LEFT 28 PIC X(4) VALUE "Sale". + 02 LINE NUMBER 5. + 03 COLUMN LEFT 2 PIC X(4) VALUE "Name". + 03 COLUMN LEFT 13 PIC X(6) VALUE "Number". + 03 COLUMN LEFT 28 PIC X(5) VALUE "Value". + 01 DETAILLINE TYPE DETAIL. + 02 LINE NUMBER PLUS 1. + 03 COLUMN LEFT 1 PIC X(9) SOURCE CITYNAME(CITYCODE) GROUP. + 03 COLUMN LEFT 15 PIC 9 SOURCE SALESPERSONNUM GROUP. + 03 COLUMN LEFT 25 PIC $$,$$$.99 SOURCE VALUEOFSALE . + 01 SALESPERSONGRP TYPE CF FOR SALESPERSONNUM NEXT GROUP IS PLUS 2. + 02 LINE NUMBER PLUS 1. + 03 COLUMN LEFT 15 PIC X(21) VALUE "Sales for salesperson". + 03 COLUMN LEFT 37 PIC 9 SOURCE SALESPERSONNUM . + 03 COLUMN LEFT 43 PIC X VALUE "=". + 03 SMS COLUMN LEFT 45 PIC $$$$$,$$$.99 SUM VALUEOFSALE . + 02 LINE NUMBER PLUS 1. + 03 COLUMN LEFT 15 PIC X(19) VALUE "Sales commission is". + 03 COLUMN LEFT 43 PIC X VALUE "=". + 03 COLUMN LEFT 45 PIC $$$$$,$$$.99 SOURCE COMMISSION . + 02 LINE NUMBER PLUS 1. + 03 COLUMN LEFT 15 PIC X(22) VALUE "Salesperson salary is". + 03 COLUMN LEFT 43 PIC X VALUE "=". + 03 COLUMN LEFT 45 PIC $$$$$,$$$.99 SOURCE SALARY . + 02 LINE NUMBER PLUS 1. + 03 COLUMN LEFT 15 PIC X(30) VALUE "Current salesperson number = ". + 03 COLUMN LEFT 45 PIC 9 SOURCE SALESPERSONNOW . + 02 LINE NUMBER PLUS 1. + 03 COLUMN LEFT 15 PIC X(30) VALUE "Previous salesperson number = ". + 03 COLUMN LEFT 45 PIC 9 SOURCE SALESPERSONNUM . + 01 CITYGRP TYPE CF FOR CITYCODE NEXT GROUP IS PLUS 2. + 02 LINE NUMBER PLUS 2. + 03 COLUMN LEFT 15 PIC X(9) VALUE "Sales for". + 03 COLUMN LEFT 25 PIC X(9) SOURCE CITYNAME(CITYCODE) . + 03 COLUMN LEFT 43 PIC X VALUE "=". + 03 CS COLUMN LEFT 45 PIC $$$$$,$$$.99 SUM SMS . + 02 LINE NUMBER PLUS 1. + 03 COLUMN LEFT 15 PIC X(12) VALUE "Current city". + 03 COLUMN LEFT 43 PIC X VALUE "=". + 03 COLUMN LEFT 45 PIC 9 SOURCE CITYNOW . + 02 LINE NUMBER PLUS 1. + 03 COLUMN LEFT 15 PIC X(13) VALUE "Previous city". + 03 COLUMN LEFT 43 PIC X VALUE "=". + 03 COLUMN LEFT 45 PIC 9 SOURCE CITYCODE . + 01 TOTALSALESGRP TYPE CF FOR FINAL. + 02 LINE NUMBER PLUS 4. + 03 COLUMN LEFT 15 PIC X(11) VALUE "Total sales". + 03 COLUMN LEFT 43 PIC X VALUE "=". + 03 COLUMN LEFT 45 PIC $$$$$,$$$.99 SUM CS . + 01 TYPE PF. + 02 LINE NUMBER 53. + 03 COLUMN LEFT 1 PIC X(29) VALUE "Programmer - Michael Coughlan". + 03 COLUMN LEFT 45 PIC X(6) VALUE "Page :". + 03 COLUMN LEFT 52 PIC Z9 SOURCE PAGE-COUNTER . + PROCEDURE DIVISION. + DECLARATIVES. + CALC SECTION. + USE BEFORE REPORTING SALESPERSONGRP. + CALCULATE-SALARY. + MULTIPLY SMS BY PERCENTAGE GIVING COMMISSION ROUNDED END-MULTIPLY. + ADD COMMISSION TO FIXEDRATE(CITYCODE, SALESPERSONNUM) GIVING SALARY END-ADD. + END DECLARATIVES. + MAIN SECTION. + + BEGIN. + OPEN INPUT SALESFILE. + + OPEN OUTPUT PRINTFILE. + + READ SALESFILE AT END SET ENDOFFILE TO TRUE END-READ. + + INITIATE SALESREPORT. + + PERFORM PRINTSALARYREPORT UNTIL ENDOFFILE. + + TERMINATE SALESREPORT. + + CLOSE SALESFILE PRINTFILE. + + STOP RUN. + PRINTSALARYREPORT. + MOVE CITYCODE TO CITYNOW. + + MOVE SALESPERSONNUM TO SALESPERSONNOW. + + GENERATE SALESREPORT. + + READ SALESFILE AT END SET ENDOFFILE TO TRUE END-READ. +|}];; diff --git a/test/cobol_parsing/test_cutnpaste_large.ml b/test/cobol_parsing/test_cutnpaste_large.ml new file mode 100644 index 000000000..e515a4cb5 --- /dev/null +++ b/test/cobol_parsing/test_cutnpaste_large.ml @@ -0,0 +1,648 @@ +(**************************************************************************) +(* *) +(* SuperBOL OSS Studio *) +(* *) +(* Copyright (c) 2022-2023 OCamlPro SAS *) +(* *) +(* All rights reserved. *) +(* This source code is licensed under the GNU Affero General Public *) +(* License version 3 found in the LICENSE.md file in the root directory *) +(* of this source tree. *) +(* *) +(**************************************************************************) + +open Ez_file +open FileString.OP +open Testsuite_utils (* implemented in `../output-tests' *) + +let check_initial_ptree ~ptree0 diags = + if ptree0 = None then begin + Pretty.out "%a@." Cobol_common.Diagnostics.Set.pp diags; + Pretty.failwith "Unable to parse the original program."; + end (* else Test_appending.show_ptree 0 0 ptree0 diags *) + +let check_new_ptree i n ~ptree0 ptree' diags = + if Option.compare + Cobol_parser.PTree.compare_compilation_group ptree0 ptree' = 0 + then Pretty.out "Ok@." + else Test_appending.show_ptree i n ptree' diags + +let%expect_test "cut-n-paste-mf" = + let config = + Testsuite_utils.from_dialect ~strict:true Cobol_config.DIALECT.MicroFocus in + deep_iter mf_root ~glob:"DayDiffDriver.[cC][bB][lL]" (* <- pick large-ish file *) + ~f:begin fun path -> + let file = srcdir // mf_testsuite // path in + Pretty.out "Considering `%s'.@." file; + Parser_testing.simulate_cut_n_paste ~config ~repeat:200 + ~f0:check_initial_ptree ~f:check_new_ptree @@ + Parser_testing.extract_position_markers @@ + Parser_testing.insert_periodic_position_markers ~period:51 @@ + FileString.read_file file; + end; + end_with_postproc [%expect.output]; + [%expect {| + Loading configuration from + `__srcdir__/import/gnucobol/config/mf-strict.conf' + Considering `__srcdir__/test/testsuite/microfocus/www.csis.ul.ie/SubProg/DayDiff/DayDiffDriver.cbl'. + Cutting chunk 54/120 @ 75:10(2754)-79:7(2805) ("RFORM DisplayErrorMessage\...) + Putting it back + Ok + Cutting chunk 15/120 @ 15:41(765)-18:9(816) ("uroDate\" is used to conve...) + Putting it back + Ok + Cutting chunk 63/120 @ 91:60(3213)-93:29(3264) ("t\r\n EVALUATE TRUE\r\n...) + Putting it back + Ok + Cutting chunk 33/120 @ 45:14(1683)-47:13(1734) ("tValidFirstDate UNTIL Date...) + Putting it back + Ok + Cutting chunk 57/120 @ 81:68(2907)-83:19(2958) ("NCING.\r\n ACCEPT Secon...) + Putting it back + Ok + Cutting chunk 35/120 @ 48:31(1785)-50:25(1836) ("UNTIL DateIsValid.\r\n ...) + Putting it back + Ok + Cutting chunk 114/120 @ 184:7(5814)-187:7(5865) ("ference ...) + Putting it back + Ok + Cutting chunk 41/120 @ 56:32(2091)-57:24(2142) ("ING FirstDate, FirstDate.\...) + Putting it back + Ok + Cutting chunk 11/120 @ 12:41(561)-13:21(612) ("ser and the date required ...) + Putting it back + Ok + Cutting chunk 58/120 @ 83:19(2958)-84:16(3009) (" USING BY CONTENT Seco...) + Putting it back + Ok + Cutting chunk 81/120 @ 121:24(4131)-122:31(4182) (" PIC XX.\r\n ...) + Putting it back + Ok + Cutting chunk 40/120 @ 54:40(2040)-56:32(2091) (" DayDifference.\r\n\r\n ...) + Putting it back + Ok + Cutting chunk 15/120 @ 15:41(765)-18:9(816) ("uroDate\" is used to conve...) + Putting it back + Ok + Cutting chunk 96/120 @ 151:10(4896)-153:24(4947) ("CTION.\r\n01 YYYYDDMMDate...) + Putting it back + Ok + Cutting chunk 100/120 @ 157:41(5100)-159:44(5151) ("8).\r\n\r\nPROCEDURE DIVIS...) + Putting it back + Ok + Cutting chunk 106/120 @ 172:3(5406)-174:2(5457) ("GRAM-ID. GetDayDiff.\r\nAU...) + Putting it back + Ok + Cutting chunk 6/120 @ 8:12(306)-9:8(357) ("yDiff\" program is include...) + Putting it back + Ok + Cutting chunk 1/120 @ 1:29(51)-3:21(102) ("E\"\r\nIDENTIFICATION DIVI...) + Putting it back + Ok + Cutting chunk 17/120 @ 20:21(867)-22:34(918) ("ON.\r\n01 Dates.\r\n 0...) + Putting it back + Ok + Cutting chunk 11/120 @ 12:41(561)-13:21(612) ("ser and the date required ...) + Putting it back + Ok + Cutting chunk 75/120 @ 110:19(3825)-113:5(3876) ("N.\r\nDATA DIVISION.\r\nWO...) + Putting it back + Ok + Cutting chunk 63/120 @ 91:60(3213)-93:29(3264) ("t\r\n EVALUATE TRUE\r\n...) + Putting it back + Ok + Cutting chunk 89/120 @ 138:22(4539)-140:14(4590) ("N.\r\nPROGRAM-ID. SortDate...) + Putting it back + Ok + Cutting chunk 62/120 @ 91:9(3162)-91:60(3213) ("AY \"Invalid date . Return...) + Putting it back + Ok + Cutting chunk 85/120 @ 128:26(4335)-130:5(4386) ("YYYDay.\r\n MOVE DDMMMo...) + Putting it back + Ok + Cutting chunk 73/120 @ 107:6(3723)-108:27(3774) (". Michael Coughlan.\r\n...) + Putting it back + Ok + Cutting chunk 41/120 @ 56:32(2091)-57:24(2142) ("ING FirstDate, FirstDate.\...) + Putting it back + Ok + Cutting chunk 113/120 @ 183:2(5763)-184:7(5814) (" Date2 ...) + Putting it back + Ok + Cutting chunk 68/120 @ 96:32(3468)-97:16(3519) ("DISPLAY \"Day contains all...) + Putting it back + Ok + Cutting chunk 54/120 @ 75:10(2754)-79:7(2805) ("RFORM DisplayErrorMessage\...) + Putting it back + Ok + Cutting chunk 80/120 @ 120:17(4080)-121:24(4131) (" PIC XX.\...) + Putting it back + Ok + Cutting chunk 59/120 @ 84:16(3009)-85:7(3060) (" BY REFERENCE V...) + Putting it back + Ok + Cutting chunk 12/120 @ 13:21(612)-14:18(663) ("ogram are in different for...) + Putting it back + Ok + Cutting chunk 109/120 @ 175:48(5559)-176:49(5610) ("\r\n* The first date passe...) + Putting it back + Ok + Cutting chunk 119/120 @ 195:2(6069)-197:0(6093) ("D PROGRAM DayDriver.\r\n\r\n") + Putting it back + Ok + Cutting chunk 108/120 @ 174:53(5508)-175:48(5559) ("o\r\n* Dates. The dates mu...) + Putting it back + Ok + Cutting chunk 73/120 @ 107:6(3723)-108:27(3774) (". Michael Coughlan.\r\n...) + Putting it back + Ok + Cutting chunk 109/120 @ 175:48(5559)-176:49(5610) ("\r\n* The first date passe...) + Putting it back + Ok + Cutting chunk 61/120 @ 86:34(3111)-91:9(3162) ("e\r\n END-IF.\r\n\r\n\r...) + Putting it back + Ok + Cutting chunk 20/120 @ 24:46(1020)-25:46(1071) ("XX.\r\n 02 SecondDatePr...) + Putting it back + Ok + Cutting chunk 28/120 @ 36:13(1428)-37:20(1479) ("ontainsZeros VALUE...) + Putting it back + Ok + Cutting chunk 58/120 @ 83:19(2958)-84:16(3009) (" USING BY CONTENT Seco...) + Putting it back + Ok + Cutting chunk 24/120 @ 31:34(1224)-32:43(1275) ("PIC 9.\r\n 88 DateIsVal...) + Putting it back + Ok + Cutting chunk 105/120 @ 167:17(5355)-172:3(5406) ("ateToEuroDate.\r\n\r\n\r\n...) + Putting it back + Ok + Cutting chunk 40/120 @ 54:40(2040)-56:32(2091) (" DayDifference.\r\n\r\n ...) + Putting it back + Ok + Cutting chunk 64/120 @ 93:29(3264)-94:16(3315) (" DISPLAY \"Date is not n...) + Putting it back + Ok + Cutting chunk 67/120 @ 95:50(3417)-96:32(3468) ("tains all zeros.\"\r\n ...) + Putting it back + Ok + Cutting chunk 27/120 @ 35:6(1377)-36:13(1428) (" YearContainsZeros ...) + Putting it back + Ok + Cutting chunk 31/120 @ 39:34(1581)-43:4(1632) ("VALUE 6.\r\n \r...) + Putting it back + Ok + Cutting chunk 94/120 @ 148:0(4794)-149:7(4845) (" 02 DDMMMonth ...) + Putting it back + Ok + Cutting chunk 110/120 @ 176:49(5610)-179:3(5661) ("cond\r\n* Date and the dif...) + Putting it back + Ok + Cutting chunk 37/120 @ 51:17(1887)-53:1(1938) ("eToSortDate\" USING Second...) + Putting it back + Ok + Cutting chunk 93/120 @ 146:12(4743)-148:0(4794) ("Temp.\r\n 02 DDMMDay ...) + Putting it back + Ok + Cutting chunk 47/120 @ 63:16(2397)-64:5(2448) ("ondDatePrn \" is \" DayDif...) + Putting it back + Ok + Cutting chunk 3/120 @ 5:17(153)-6:5(204) ("ts the difference in days ...) + Putting it back + Ok + Cutting chunk 96/120 @ 151:10(4896)-153:24(4947) ("CTION.\r\n01 YYYYDDMMDate...) + Putting it back + Ok + Cutting chunk 14/120 @ 14:69(714)-15:41(765) ("Y format\r\n* to YYYYMMDD ...) + Putting it back + Ok + Cutting chunk 103/120 @ 163:12(5253)-164:27(5304) ("YYear TO DDMMYear.\r\n...) + Putting it back + Ok + Cutting chunk 33/120 @ 45:14(1683)-47:13(1734) ("tValidFirstDate UNTIL Date...) + Putting it back + Ok + Cutting chunk 6/120 @ 8:12(306)-9:8(357) ("yDiff\" program is include...) + Putting it back + Ok + Cutting chunk 106/120 @ 172:3(5406)-174:2(5457) ("GRAM-ID. GetDayDiff.\r\nAU...) + Putting it back + Ok + Cutting chunk 87/120 @ 131:20(4437)-134:10(4488) ("P TO YYYYDDMMDate.\r\n ...) + Putting it back + Ok + Cutting chunk 51/120 @ 71:17(2601)-72:45(2652) ("ate.\r\n CALL \"Validat...) + Putting it back + Ok + Cutting chunk 14/120 @ 14:69(714)-15:41(765) ("Y format\r\n* to YYYYMMDD ...) + Putting it back + Ok + Cutting chunk 112/120 @ 181:15(5712)-183:2(5763) (".\r\n01 Date1 ...) + Putting it back + Ok + Cutting chunk 90/120 @ 140:14(4590)-141:34(4641) ("chael Coughlan.\r\n* Conve...) + Putting it back + Ok + Cutting chunk 14/120 @ 14:69(714)-15:41(765) ("Y format\r\n* to YYYYMMDD ...) + Putting it back + Ok + Cutting chunk 104/120 @ 164:27(5304)-167:17(5355) ("MMYYYYDate.\r\n EXIT PR...) + Putting it back + Ok + Cutting chunk 51/120 @ 71:17(2601)-72:45(2652) ("ate.\r\n CALL \"Validat...) + Putting it back + Ok + Cutting chunk 31/120 @ 39:34(1581)-43:4(1632) ("VALUE 6.\r\n \r...) + Putting it back + Ok + Cutting chunk 90/120 @ 140:14(4590)-141:34(4641) ("chael Coughlan.\r\n* Conve...) + Putting it back + Ok + Cutting chunk 36/120 @ 50:25(1836)-51:17(1887) ("ate\" USING FirstDate, Fir...) + Putting it back + Ok + Cutting chunk 91/120 @ 141:34(4641)-144:3(4692) ("at to one in DDMMYYYY\r\n\...) + Putting it back + Ok + Cutting chunk 108/120 @ 174:53(5508)-175:48(5559) ("o\r\n* Dates. The dates mu...) + Putting it back + Ok + Cutting chunk 59/120 @ 84:16(3009)-85:7(3060) (" BY REFERENCE V...) + Putting it back + Ok + Cutting chunk 44/120 @ 59:20(2244)-60:34(2295) ("O FirstDatePrn.\r\n MOV...) + Putting it back + Ok + Cutting chunk 116/120 @ 188:6(5916)-190:24(5967) ("\r\n COMPUTE Difference ...) + Putting it back + Ok + Cutting chunk 101/120 @ 159:44(5151)-161:33(5202) ("YYYDate.\r\nBegin.\r\n ...) + Putting it back + Ok + Cutting chunk 17/120 @ 20:21(867)-22:34(918) ("ON.\r\n01 Dates.\r\n 0...) + Putting it back + Ok + Cutting chunk 31/120 @ 39:34(1581)-43:4(1632) ("VALUE 6.\r\n \r...) + Putting it back + Ok + Cutting chunk 101/120 @ 159:44(5151)-161:33(5202) ("YYYDate.\r\nBegin.\r\n ...) + Putting it back + Ok + Cutting chunk 109/120 @ 175:48(5559)-176:49(5610) ("\r\n* The first date passe...) + Putting it back + Ok + Cutting chunk 33/120 @ 45:14(1683)-47:13(1734) ("tValidFirstDate UNTIL Date...) + Putting it back + Ok + Cutting chunk 69/120 @ 97:16(3519)-98:8(3570) ("hGreaterThan12 DISPLAY \"...) + Putting it back + Ok + Cutting chunk 31/120 @ 39:34(1581)-43:4(1632) ("VALUE 6.\r\n \r...) + Putting it back + Ok + Cutting chunk 83/120 @ 124:34(4233)-126:37(4284) (" PIC X(8).\r\n\r\nPROCEDUR...) + Putting it back + Ok + Cutting chunk 111/120 @ 179:3(5661)-181:15(5712) ("IRONMENT DIVISION.\r\nDATA...) + Putting it back + Ok + Cutting chunk 26/120 @ 33:50(1326)-35:6(1377) ("\n 88 DateNotNumeric ...) + Putting it back + Ok + Cutting chunk 119/120 @ 195:2(6069)-197:0(6093) ("D PROGRAM DayDriver.\r\n\r\n") + Putting it back + Ok + Cutting chunk 31/120 @ 39:34(1581)-43:4(1632) ("VALUE 6.\r\n \r...) + Putting it back + Ok + Cutting chunk 60/120 @ 85:7(3060)-86:34(3111) ("DateIsNotValid \r\n ...) + Putting it back + Ok + Cutting chunk 107/120 @ 174:2(5457)-174:53(5508) ("This module finds the diff...) + Putting it back + Ok + Cutting chunk 25/120 @ 32:43(1275)-33:50(1326) ("\n 88 DateIsNotValid ...) + Putting it back + Ok + Cutting chunk 108/120 @ 174:53(5508)-175:48(5559) ("o\r\n* Dates. The dates mu...) + Putting it back + Ok + Cutting chunk 14/120 @ 14:69(714)-15:41(765) ("Y format\r\n* to YYYYMMDD ...) + Putting it back + Ok + Cutting chunk 25/120 @ 32:43(1275)-33:50(1326) ("\n 88 DateIsNotValid ...) + Putting it back + Ok + Cutting chunk 110/120 @ 176:49(5610)-179:3(5661) ("cond\r\n* Date and the dif...) + Putting it back + Ok + Cutting chunk 114/120 @ 184:7(5814)-187:7(5865) ("ference ...) + Putting it back + Ok + Cutting chunk 16/120 @ 18:9(816)-20:21(867) ("NT DIVISION.\r\nDATA DIVIS...) + Putting it back + Ok + Cutting chunk 4/120 @ 6:5(204)-6:56(255) ("calls three contained subp...) + Putting it back + Ok + Cutting chunk 18/120 @ 22:34(918)-23:40(969) ("PIC X(8).\r\n 02 Second...) + Putting it back + Ok + Cutting chunk 75/120 @ 110:19(3825)-113:5(3876) ("N.\r\nDATA DIVISION.\r\nWO...) + Putting it back + Ok + Cutting chunk 111/120 @ 179:3(5661)-181:15(5712) ("IRONMENT DIVISION.\r\nDATA...) + Putting it back + Ok + Cutting chunk 74/120 @ 108:27(3774)-110:19(3825) ("YY format to one in YYYYMM...) + Putting it back + Ok + Cutting chunk 109/120 @ 175:48(5559)-176:49(5610) ("\r\n* The first date passe...) + Putting it back + Ok + Cutting chunk 34/120 @ 47:13(1734)-48:31(1785) ("sNotValid TO TRUE.\r\n ...) + Putting it back + Ok + Cutting chunk 32/120 @ 43:4(1632)-45:14(1683) ("n.\r\n SET DateIsNotVal...) + Putting it back + Ok + Cutting chunk 23/120 @ 29:34(1173)-31:34(1224) ("PIC ----,--9.\r\n\r\n01 V...) + Putting it back + Ok + Cutting chunk 59/120 @ 84:16(3009)-85:7(3060) (" BY REFERENCE V...) + Putting it back + Ok + Cutting chunk 26/120 @ 33:50(1326)-35:6(1377) ("\n 88 DateNotNumeric ...) + Putting it back + Ok + Cutting chunk 114/120 @ 184:7(5814)-187:7(5865) ("ference ...) + Putting it back + Ok + Cutting chunk 28/120 @ 36:13(1428)-37:20(1479) ("ontainsZeros VALUE...) + Putting it back + Ok + Cutting chunk 36/120 @ 50:25(1836)-51:17(1887) ("ate\" USING FirstDate, Fir...) + Putting it back + Ok + Cutting chunk 119/120 @ 195:2(6069)-197:0(6093) ("D PROGRAM DayDriver.\r\n\r\n") + Putting it back + Ok + Cutting chunk 30/120 @ 38:27(1530)-39:34(1581) (" VALUE 5.\r\n 88 ...) + Putting it back + Ok + Cutting chunk 11/120 @ 12:41(561)-13:21(612) ("ser and the date required ...) + Putting it back + Ok + Cutting chunk 109/120 @ 175:48(5559)-176:49(5610) ("\r\n* The first date passe...) + Putting it back + Ok + Cutting chunk 45/120 @ 60:34(2295)-62:25(2346) ("rn.\r\n DISPLAY SPACES....) + Putting it back + Ok + Cutting chunk 86/120 @ 130:5(4386)-131:20(4437) ("OVE DDMMYear TO YYYYYe...) + Putting it back + Ok + Cutting chunk 118/120 @ 190:75(6018)-195:2(6069) ("\r\n EXIT PROGRAM.\r\n\r...) + Putting it back + Ok + Cutting chunk 112/120 @ 181:15(5712)-183:2(5763) (".\r\n01 Date1 ...) + Putting it back + Ok + Cutting chunk 102/120 @ 161:33(5202)-163:12(5253) ("\r\n MOVE YYYYMonth ...) + Putting it back + Ok + Cutting chunk 20/120 @ 24:46(1020)-25:46(1071) ("XX.\r\n 02 SecondDatePr...) + Putting it back + Ok + Cutting chunk 30/120 @ 38:27(1530)-39:34(1581) (" VALUE 5.\r\n 88 ...) + Putting it back + Ok + Cutting chunk 1/120 @ 1:29(51)-3:21(102) ("E\"\r\nIDENTIFICATION DIVI...) + Putting it back + Ok + Cutting chunk 25/120 @ 32:43(1275)-33:50(1326) ("\n 88 DateIsNotValid ...) + Putting it back + Ok + Cutting chunk 8/120 @ 9:59(408)-11:12(459) ("een\r\n* two dates entered...) + Putting it back + Ok + Cutting chunk 34/120 @ 47:13(1734)-48:31(1785) ("sNotValid TO TRUE.\r\n ...) + Putting it back + Ok + Cutting chunk 104/120 @ 164:27(5304)-167:17(5355) ("MMYYYYDate.\r\n EXIT PR...) + Putting it back + Ok + Cutting chunk 72/120 @ 105:14(3672)-107:6(3723) (" DIVISION.\r\nPROGRAM-ID. ...) + Putting it back + Ok + Cutting chunk 9/120 @ 11:12(459)-11:63(510) ("entered by the user are va...) + Putting it back + Ok + Cutting chunk 61/120 @ 86:34(3111)-91:9(3162) ("e\r\n END-IF.\r\n\r\n\r...) + Putting it back + Ok + Cutting chunk 59/120 @ 84:16(3009)-85:7(3060) (" BY REFERENCE V...) + Putting it back + Ok + Cutting chunk 7/120 @ 9:8(357)-9:59(408) ("gram and is used to get th...) + Putting it back + Ok + Cutting chunk 100/120 @ 157:41(5100)-159:44(5151) ("8).\r\n\r\nPROCEDURE DIVIS...) + Putting it back + Ok + Cutting chunk 93/120 @ 146:12(4743)-148:0(4794) ("Temp.\r\n 02 DDMMDay ...) + Putting it back + Ok + Cutting chunk 31/120 @ 39:34(1581)-43:4(1632) ("VALUE 6.\r\n \r...) + Putting it back + Ok + Cutting chunk 22/120 @ 28:29(1122)-29:34(1173) (" PIC S9(7).\r\n 02 ...) + Putting it back + Ok + Cutting chunk 93/120 @ 146:12(4743)-148:0(4794) ("Temp.\r\n 02 DDMMDay ...) + Putting it back + Ok + Cutting chunk 90/120 @ 140:14(4590)-141:34(4641) ("chael Coughlan.\r\n* Conve...) + Putting it back + Ok + Cutting chunk 99/120 @ 155:36(5049)-157:41(5100) ("IC XX.\r\n\r\n01 DDMMYYYY...) + Putting it back + Ok + Cutting chunk 33/120 @ 45:14(1683)-47:13(1734) ("tValidFirstDate UNTIL Date...) + Putting it back + Ok + Cutting chunk 116/120 @ 188:6(5916)-190:24(5967) ("\r\n COMPUTE Difference ...) + Putting it back + Ok + Cutting chunk 45/120 @ 60:34(2295)-62:25(2346) ("rn.\r\n DISPLAY SPACES....) + Putting it back + Ok + Cutting chunk 46/120 @ 62:25(2346)-63:16(2397) ("ce between \" FirstDatePrn...) + Putting it back + Ok + Cutting chunk 99/120 @ 155:36(5049)-157:41(5100) ("IC XX.\r\n\r\n01 DDMMYYYY...) + Putting it back + Ok + Cutting chunk 55/120 @ 79:7(2805)-81:17(2856) ("dSecondDate.\r\n DISPLA...) + Putting it back + Ok + Cutting chunk 33/120 @ 45:14(1683)-47:13(1734) ("tValidFirstDate UNTIL Date...) + Putting it back + Ok + Cutting chunk 43/120 @ 58:14(2193)-59:20(2244) ("fference TO DayDifferenceP...) + Putting it back + Ok + Cutting chunk 54/120 @ 75:10(2754)-79:7(2805) ("RFORM DisplayErrorMessage\...) + Putting it back + Ok + Cutting chunk 99/120 @ 155:36(5049)-157:41(5100) ("IC XX.\r\n\r\n01 DDMMYYYY...) + Putting it back + Ok + Cutting chunk 44/120 @ 59:20(2244)-60:34(2295) ("O FirstDatePrn.\r\n MOV...) + Putting it back + Ok + Cutting chunk 81/120 @ 121:24(4131)-122:31(4182) (" PIC XX.\r\n ...) + Putting it back + Ok + Cutting chunk 39/120 @ 53:52(1989)-54:40(2040) ("econdDate\r\n ...) + Putting it back + Ok + Cutting chunk 50/120 @ 70:42(2550)-71:17(2601) ("YYYY format \" WITH NO ADV...) + Putting it back + Ok + Cutting chunk 77/120 @ 114:37(3927)-115:42(3978) ("C XXXX.\r\n 02 YYYYMont...) + Putting it back + Ok + Cutting chunk 97/120 @ 153:24(4947)-154:29(4998) (" PIC XXXX.\r\n ...) + Putting it back + Ok + Cutting chunk 115/120 @ 187:7(5865)-188:6(5916) ("RE DIVISION USING Date1, D...) + Putting it back + Ok + Cutting chunk 111/120 @ 179:3(5661)-181:15(5712) ("IRONMENT DIVISION.\r\nDATA...) + Putting it back + Ok + Cutting chunk 92/120 @ 144:3(4692)-146:12(4743) ("A DIVISION.\r\nWORKING-STO...) + Putting it back + Ok + Cutting chunk 6/120 @ 8:12(306)-9:8(357) ("yDiff\" program is include...) + Putting it back + Ok + Cutting chunk 36/120 @ 50:25(1836)-51:17(1887) ("ate\" USING FirstDate, Fir...) + Putting it back + Ok + Cutting chunk 79/120 @ 118:3(4029)-120:17(4080) ("KAGE SECTION.\r\n01 DDMMY...) + Putting it back + Ok + Cutting chunk 119/120 @ 195:2(6069)-197:0(6093) ("D PROGRAM DayDriver.\r\n\r\n") + Putting it back + Ok + Cutting chunk 45/120 @ 60:34(2295)-62:25(2346) ("rn.\r\n DISPLAY SPACES....) + Putting it back + Ok + Cutting chunk 23/120 @ 29:34(1173)-31:34(1224) ("PIC ----,--9.\r\n\r\n01 V...) + Putting it back + Ok + Cutting chunk 40/120 @ 54:40(2040)-56:32(2091) (" DayDifference.\r\n\r\n ...) + Putting it back + Ok + Cutting chunk 67/120 @ 95:50(3417)-96:32(3468) ("tains all zeros.\"\r\n ...) + Putting it back + Ok + Cutting chunk 15/120 @ 15:41(765)-18:9(816) ("uroDate\" is used to conve...) + Putting it back + Ok + Cutting chunk 1/120 @ 1:29(51)-3:21(102) ("E\"\r\nIDENTIFICATION DIVI...) + Putting it back + Ok + Cutting chunk 15/120 @ 15:41(765)-18:9(816) ("uroDate\" is used to conve...) + Putting it back + Ok + Cutting chunk 80/120 @ 120:17(4080)-121:24(4131) (" PIC XX.\...) + Putting it back + Ok + Cutting chunk 84/120 @ 126:37(4284)-128:26(4335) (", YYYYDDMMDate.\r\nBegin.\...) + Putting it back + Ok + Cutting chunk 78/120 @ 115:42(3978)-118:3(4029) ("\r\n 02 YYYYDay ...) + Putting it back + Ok + Cutting chunk 72/120 @ 105:14(3672)-107:6(3723) (" DIVISION.\r\nPROGRAM-ID. ...) + Putting it back + Ok + Cutting chunk 74/120 @ 108:27(3774)-110:19(3825) ("YY format to one in YYYYMM...) + Putting it back + Ok + Cutting chunk 75/120 @ 110:19(3825)-113:5(3876) ("N.\r\nDATA DIVISION.\r\nWO...) + Putting it back + Ok + Cutting chunk 76/120 @ 113:5(3876)-114:37(3927) ("YYYDDMMTemp.\r\n 02 YYY...) + Putting it back + Ok + Cutting chunk 6/120 @ 8:12(306)-9:8(357) ("yDiff\" program is include...) + Putting it back + Ok + Cutting chunk 79/120 @ 118:3(4029)-120:17(4080) ("KAGE SECTION.\r\n01 DDMMY...) + Putting it back + Ok + Cutting chunk 92/120 @ 144:3(4692)-146:12(4743) ("A DIVISION.\r\nWORKING-STO...) + Putting it back + Ok + Cutting chunk 27/120 @ 35:6(1377)-36:13(1428) (" YearContainsZeros ...) + Putting it back + Ok + Cutting chunk 76/120 @ 113:5(3876)-114:37(3927) ("YYYDDMMTemp.\r\n 02 YYY...) + Putting it back + Ok + Cutting chunk 108/120 @ 174:53(5508)-175:48(5559) ("o\r\n* Dates. The dates mu...) + Putting it back + Ok + Cutting chunk 118/120 @ 190:75(6018)-195:2(6069) ("\r\n EXIT PROGRAM.\r\n\r...) + Putting it back + Ok + Cutting chunk 106/120 @ 172:3(5406)-174:2(5457) ("GRAM-ID. GetDayDiff.\r\nAU...) + Putting it back + Ok + Cutting chunk 13/120 @ 14:18(663)-14:69(714) ("ortDate\" subprogram is us...) + Putting it back + Ok + Cutting chunk 108/120 @ 174:53(5508)-175:48(5559) ("o\r\n* Dates. The dates mu...) + Putting it back + Ok + Cutting chunk 116/120 @ 188:6(5916)-190:24(5967) ("\r\n COMPUTE Difference ...) + Putting it back + Ok + Cutting chunk 80/120 @ 120:17(4080)-121:24(4131) (" PIC XX.\...) + Putting it back + Ok + Cutting chunk 6/120 @ 8:12(306)-9:8(357) ("yDiff\" program is include...) + Putting it back + Ok + Cutting chunk 65/120 @ 94:16(3315)-94:67(3366) ("ContainsZeros DISPLAY \"...) + Putting it back + Ok + Cutting chunk 56/120 @ 81:17(2856)-81:68(2907) ("r the second date in DDMMY...) + Putting it back + Ok + Cutting chunk 43/120 @ 58:14(2193)-59:20(2244) ("fference TO DayDifferenceP...) + Putting it back + Ok + Cutting chunk 92/120 @ 144:3(4692)-146:12(4743) ("A DIVISION.\r\nWORKING-STO...) + Putting it back + Ok + Cutting chunk 98/120 @ 154:29(4998)-155:36(5049) (" PIC XX.\r\n 02 YY...) + Putting it back + Ok + Cutting chunk 55/120 @ 79:7(2805)-81:17(2856) ("dSecondDate.\r\n DISPLA...) + Putting it back + Ok + Cutting chunk 110/120 @ 176:49(5610)-179:3(5661) ("cond\r\n* Date and the dif...) + Putting it back + Ok + Cutting chunk 62/120 @ 91:9(3162)-91:60(3213) ("AY \"Invalid date . Return...) + Putting it back + Ok + Cutting chunk 71/120 @ 98:59(3621)-105:14(3672) ("onth.\"\r\n END-EVALUAT...) + Putting it back + Ok +|}];; diff --git a/test/output-tests/dune b/test/output-tests/dune index afce6339a..c1af48308 100644 --- a/test/output-tests/dune +++ b/test/output-tests/dune @@ -3,7 +3,7 @@ (executable (name preproc) (modules Preproc) - (libraries cobol_preproc) + (libraries cobol_preproc testsuite_utils) ) (executable @@ -15,7 +15,13 @@ (executable (name reparse) (modules Reparse) - (libraries cobol_parser) + (libraries cobol_parser testsuite_utils) + ) + +(library + (name testsuite_utils) + (modules Testsuite_utils) + (libraries ez_file cobol_common cobol_config) ) (alias diff --git a/test/output-tests/preproc.ml b/test/output-tests/preproc.ml index 76201dee2..35ecced05 100644 --- a/test/output-tests/preproc.ml +++ b/test/output-tests/preproc.ml @@ -14,39 +14,14 @@ open Format open Ez_file open FileString.OP -open Cobol_preproc - -let find_dir anchor = - let curdir = Sys.getcwd () in - let rec iter path = - if Sys.file_exists (path // anchor) then - path - else - let path' = Filename.dirname path in - if path = path' then - Printf.kprintf failwith "Anchor %S not found from %s" anchor curdir; - iter path' - in - iter curdir - -let deep_iter = FileString.(make_select iter_dir) ~deep:true -let srcdir = try Unix.getenv "DUNE_SOURCEROOT" with Not_found -> - find_dir "test" -let testsuites = "test/testsuite" -let ibm_testsuite = testsuites // "ibm/ibmmainframes.com" -let ibm_root = srcdir // ibm_testsuite -let mf_testsuite = testsuites // "microfocus/www.csis.ul.ie" -let mf_root = srcdir // mf_testsuite -;; - -module Diags = Cobol_common.Diagnostics.InitStateful () +open Testsuite_utils let preprocess_file ~source_format ~config = - preprocess_file ~ppf:std_formatter ~epf:std_formatter + Cobol_preproc.preprocess_file ~options:Cobol_preproc.Options.{ source_format; config; verbose = false; libpath = [] } - -let from_dialect = Cobol_config.from_dialect (module Diags) + ~ppf:std_formatter + ~epf:std_formatter let () = (* Print one token per line so we can diff outputs more easily. *) diff --git a/test/output-tests/reparse.ml b/test/output-tests/reparse.ml index 0e070fa84..d4043a09d 100644 --- a/test/output-tests/reparse.ml +++ b/test/output-tests/reparse.ml @@ -14,32 +14,7 @@ open Format open Ez_file open FileString.OP -open Cobol_preproc - -let find_dir anchor = - let curdir = Sys.getcwd () in - let rec iter path = - if Sys.file_exists (path // anchor) then - path - else - let path' = Filename.dirname path in - if path = path' then - Printf.kprintf failwith "Anchor %S not found from %s" anchor curdir; - iter path' - in - iter curdir - -let deep_iter = FileString.(make_select iter_dir) ~deep:true -let srcdir = try Unix.getenv "DUNE_SOURCEROOT" with Not_found -> - find_dir "test" -let testsuites = "test/testsuite" -let ibm_testsuite = testsuites // "ibm/ibmmainframes.com" -let ibm_root = srcdir // ibm_testsuite -let mf_testsuite = testsuites // "microfocus/www.csis.ul.ie" -let mf_root = srcdir // mf_testsuite -;; - -module Diags = Cobol_common.Diagnostics.InitStateful () +open Testsuite_utils let reparse_file ~source_format ~config filename = let parse ~source_format input = @@ -74,8 +49,6 @@ let reparse_file ~source_format ~config filename = ) | _ | exception _ -> Format.printf "Parse: Failure." -let from_dialect = Cobol_config.from_dialect (module Diags) - let () = (* Print one token per line so we can diff outputs more easily. *) Pretty.pp_set_margin std_formatter 3; diff --git a/test/output-tests/testsuite_utils.ml b/test/output-tests/testsuite_utils.ml new file mode 100644 index 000000000..386f989ba --- /dev/null +++ b/test/output-tests/testsuite_utils.ml @@ -0,0 +1,49 @@ +(**************************************************************************) +(* *) +(* SuperBOL OSS Studio *) +(* *) +(* Copyright (c) 2022-2023 OCamlPro SAS *) +(* *) +(* All rights reserved. *) +(* This source code is licensed under the GNU Affero General Public *) +(* License version 3 found in the LICENSE.md file in the root directory *) +(* of this source tree. *) +(* *) +(**************************************************************************) + +open Ez_file +open FileString.OP + +let find_dir anchor = + let curdir = Sys.getcwd () in + let rec iter path = + if Sys.file_exists (path // anchor) then + path + else + let path' = Filename.dirname path in + if path = path' then + Printf.kprintf failwith "Anchor %S not found from %s" anchor curdir; + iter path' + in + iter curdir + +let deep_iter = FileString.(make_select iter_dir) ~deep:true +let srcdir = + try Unix.getenv "DUNE_SOURCEROOT" with Not_found -> find_dir "test" +let () = (* TODO: avoid relying on this var only in `Cobol_config` *) + Unix.putenv "COB_CONFIG_DIR" (srcdir // "import" // "gnucobol" // "config") + +let srcdir_marker = "__srcdir__" +let srcdir_regexp = Str.(regexp @@ quote srcdir) +let end_with_postproc s = + print_endline @@ Str.global_replace srcdir_regexp srcdir_marker s + +let testsuites = "test" // "testsuite" +let ibm_testsuite = testsuites // "ibm" // "ibmmainframes.com" +let ibm_root = srcdir // ibm_testsuite +let mf_testsuite = testsuites // "microfocus" // "www.csis.ul.ie" +let mf_root = srcdir // mf_testsuite + +module Diags = Cobol_common.Diagnostics.InitStateful () + +let from_dialect = Cobol_config.from_dialect (module Diags) From 8529fffa941b4be6e571e0bfc142f2247df10618 Mon Sep 17 00:00:00 2001 From: Nicolas Berthier Date: Thu, 5 Oct 2023 16:27:53 +0200 Subject: [PATCH 12/12] Minor tweaks and comments --- src/lsp/cobol_ast/misc_descr.ml | 9 ++++----- src/lsp/cobol_lsp/lsp_document.ml | 15 --------------- src/lsp/cobol_parser/parser_outputs.ml | 15 ++++++++++++--- 3 files changed, 16 insertions(+), 23 deletions(-) diff --git a/src/lsp/cobol_ast/misc_descr.ml b/src/lsp/cobol_ast/misc_descr.ml index 099a8c4da..3ebf4482a 100644 --- a/src/lsp/cobol_ast/misc_descr.ml +++ b/src/lsp/cobol_ast/misc_descr.ml @@ -656,8 +656,8 @@ let pp_select_clause ppf = function | SelectRecordKey { key; source } -> Fmt.pf ppf "RECORD %a%a" pp_qualname key - Pretty.(list ~fopen:"SOURCE " ~fsep:"@ " ~fclose:"" ~fempty:"" - pp_name') source + (Pretty.list ~fopen:"SOURCE " ~fsep:"@ " ~fclose:"" ~fempty:"" + pp_name') source | SelectRelativeKey n -> Fmt.pf ppf "RELATIVE %a" pp_name' n | SelectReserve n -> Fmt.pf ppf "RESERVE %a" pp_integer n @@ -759,11 +759,10 @@ let pp_comment_entry: comment_entry Pretty.printer = Fmt.(list ~sep:sp string) let pp_informational_paragraph: informational_paragraph Pretty.printer = - Fmt.(any "@[<4>" ++ (* <- indent by 4 to avoid Area A *) + Fmt.(box ~indent:4 @@ (* <- indent by 4 to avoid Area A *) pair ~sep:(any ".@ ") pp_informational_paragraph_header - (pp_with_loc pp_comment_entry) ++ - any "@]") + (pp_with_loc pp_comment_entry)) let pp_informational_paragraphs: informational_paragraphs Pretty.printer = Fmt.(list ~sep:(any "@\n") (* force newlines *) diff --git a/src/lsp/cobol_lsp/lsp_document.ml b/src/lsp/cobol_lsp/lsp_document.ml index 3688a9c04..b387759ec 100644 --- a/src/lsp/cobol_lsp/lsp_document.ml +++ b/src/lsp/cobol_lsp/lsp_document.ml @@ -73,20 +73,6 @@ include TYPES type t = document let uri { textdoc; _ } = Lsp.Text_document.documentUri textdoc -(* let simple_parse ({ project; textdoc; _ } as doc) = *) -(* Cobol_parser.parse_with_artifacts *) -(* ~options:Cobol_parser.Options.{ *) -(* default with *) -(* recovery = EnableRecovery { silence_benign_recoveries = true }; *) -(* } *) -(* ~config:project.cobol_config @@ *) -(* Cobol_preproc.preprocessor *) -(* { init_libpath = Lsp_project.libpath_for ~uri:(uri doc) project; *) -(* init_config = project.cobol_config; *) -(* init_source_format = project.source_format } @@ *) -(* String { contents = Lsp.Text_document.text textdoc; *) -(* filename = Lsp.Uri.to_path (uri doc) } *) - let rewindable_parse ({ project; textdoc; _ } as doc) = Cobol_parser.rewindable_parse_with_artifacts ~options:Cobol_parser.Options.{ @@ -158,7 +144,6 @@ let parse_and_analyze ({ copybook; _ } as doc) = if copybook then (* skip *) { doc with artifacts = no_artifacts; rewinder = None; parsed = None } else - (* extract_parsed_infos doc @@ simple_parse doc *) extract_parsed_infos doc @@ rewindable_parse doc let reparse_and_analyze ?position ({ copybook; rewinder; textdoc; _ } as doc) = diff --git a/src/lsp/cobol_parser/parser_outputs.ml b/src/lsp/cobol_parser/parser_outputs.ml index ecc869dd0..50edbfc3d 100644 --- a/src/lsp/cobol_parser/parser_outputs.ml +++ b/src/lsp/cobol_parser/parser_outputs.ml @@ -25,8 +25,17 @@ type artifacts = comments: Cobol_preproc.comments; } -type ('a, 'm) output = - | Only: 'a -> ('a, Cobol_common.Behaviors.amnesic) output - | WithArtifacts: 'a * artifacts -> ('a, Cobol_common.Behaviors.eidetic) output +(** The output of parsing functions depends on its memorization abilities: + + - an amnesic parse (when ['memo = Cobol_common.Behaviors.amnesic]) only + returns a parsing result (of type ['result]); + + - an eidetic parse (when ['memo = Cobol_common.Behaviors.eidetic]) + additionally returns some parsing artefacts. *) +type ('result, 'memo) output = + | Only: + 'result -> ('result, Cobol_common.Behaviors.amnesic) output + | WithArtifacts: + 'result * artifacts -> ('result, Cobol_common.Behaviors.eidetic) output type 'm parsed_compilation_group = (PTree.compilation_group option, 'm) output