emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] new-website b2327c0: Merge branch 'master' into new-website


From: Nicolas Petton
Subject: [elpa] new-website b2327c0: Merge branch 'master' into new-website
Date: Wed, 30 Nov 2016 10:12:07 +0000 (UTC)

branch: new-website
commit b2327c0090fab0c33d274cb20f7a079ac31c1555
Merge: cf17f8b 276be67
Author: Nicolas Petton <address@hidden>
Commit: Nicolas Petton <address@hidden>

    Merge branch 'master' into new-website
---
 copyright_exceptions                               |    1 -
 externals-list                                     |    2 +
 packages/ada-mode/NEWS                             |   27 +
 packages/ada-mode/README                           |    2 +-
 packages/ada-mode/ada-build.el                     |    3 +-
 packages/ada-mode/ada-gnat-compile.el              |    8 +-
 packages/ada-mode/ada-gnat-xref.el                 |   15 +-
 packages/ada-mode/ada-grammar-wy.el                | 2422 ++++++++++----------
 packages/ada-mode/ada-mode.el                      |   43 +-
 packages/ada-mode/ada-mode.info                    |   46 +-
 packages/ada-mode/ada-mode.texi                    |   20 +-
 packages/ada-mode/ada-wisi-opentoken.el            |   19 +-
 packages/ada-mode/ada-wisi.el                      | 1965 +++++++---------
 packages/ada-mode/gnat-core.el                     |   10 +-
 packages/ada-mode/gpr-query.el                     |   13 +-
 packages/ada-mode/gpr-wisi.el                      |   25 +-
 packages/aggressive-indent/aggressive-indent.el    |   23 +-
 packages/async/async.el                            |   36 +
 packages/async/dired-async.el                      |    2 +-
 packages/beacon/beacon.el                          |   15 +-
 packages/company/NEWS.md                           |   13 +
 packages/company/company-dabbrev-code.el           |    2 +-
 packages/company/company-files.el                  |   42 +-
 packages/company/company-gtags.el                  |    3 +-
 packages/company/company-keywords.el               |   10 +
 packages/company/company-tests.el                  |    5 +-
 packages/company/company.el                        |  122 +-
 packages/company/test/files-tests.el               |   48 +
 packages/company/test/frontends-tests.el           |   12 +-
 packages/debbugs/Debbugs.wsdl                      |    4 +-
 packages/debbugs/README                            |   10 +-
 packages/debbugs/debbugs-browse.el                 |    2 +-
 packages/debbugs/debbugs-gnu.el                    |   47 +-
 packages/debbugs/debbugs-org.el                    |   19 +-
 packages/debbugs/debbugs-ug.info                   |   14 +-
 packages/debbugs/debbugs-ug.texi                   |    6 +-
 packages/debbugs/debbugs.el                        |   12 +-
 packages/debbugs/debbugs.info                      |   20 +-
 packages/debbugs/debbugs.texi                      |   10 +-
 packages/el-search/el-search-x.el                  |  293 ++-
 packages/el-search/el-search.el                    | 1990 ++++++++++------
 packages/excorporate/NEWS                          |    6 +
 packages/excorporate/excorporate.el                |    7 +-
 packages/excorporate/excorporate.texi              |    6 +-
 packages/ggtags/README.rst                         |   36 +-
 packages/ggtags/ggtags.el                          |  145 +-
 packages/highlight-escape-sequences/README.md      |   15 +
 .../highlight-escape-sequences.el                  |  250 ++
 .../highlight-escape-sequences.png                 |  Bin 0 -> 20292 bytes
 packages/metar/metar.el                            |   32 +-
 packages/nameless/nameless.el                      |    6 +-
 packages/parsec/.gitignore                         |    3 +
 packages/parsec/README.org                         |  378 +++
 packages/parsec/examples/full-csv-parser-tests.el  |   51 +
 packages/parsec/examples/full-csv-parser.el        |   61 +
 packages/parsec/examples/pjson-tests.el            |  102 +
 packages/parsec/examples/pjson.el                  |  124 +
 packages/parsec/examples/scheme-tests.el           |   88 +
 packages/parsec/examples/scheme.el                 |  108 +
 .../parsec/examples/simple-csv-parser-tests.el     |   39 +
 packages/parsec/examples/simple-csv-parser.el      |   55 +
 packages/parsec/examples/url-str-parser-tests.el   |   48 +
 packages/parsec/examples/url-str-parser.el         |   56 +
 packages/parsec/parsec-tests.el                    |  481 ++++
 packages/parsec/parsec.el                          | 1042 +++++++++
 packages/seq/seq-24.el                             |    7 +
 packages/seq/seq-25.el                             |    9 +-
 packages/seq/seq.el                                |    2 +-
 packages/seq/tests/seq-tests.el                    |   15 +
 packages/sml-mode/sml-mode.el                      |    1 -
 packages/sml-mode/testcases.sml                    |    7 +-
 packages/sotlisp/sotlisp.el                        |   21 +-
 packages/spinner/spinner.el                        |    4 +-
 packages/stream/stream.el                          |   40 +-
 packages/url-http-ntlm/url-http-ntlm.el            |   78 +-
 packages/validate/validate.el                      |    8 +-
 packages/wisi/NEWS                                 |    6 +
 packages/wisi/README                               |    2 +-
 packages/wisi/wisi.el                              |   28 +-
 packages/yasnippet/.travis.yml                     |    7 +
 packages/yasnippet/CONTRIBUTING.md                 |    2 +-
 packages/yasnippet/NEWS                            |   50 +-
 packages/yasnippet/README.mdown                    |   14 +-
 packages/yasnippet/Rakefile                        |    6 +-
 packages/yasnippet/doc/index.org                   |    2 +-
 packages/yasnippet/doc/nav-menu.html.inc           |    2 +-
 packages/yasnippet/doc/snippet-development.org     |   23 +-
 packages/yasnippet/doc/snippet-expansion.org       |    6 +-
 packages/yasnippet/yasnippet-tests.el              |  238 +-
 packages/yasnippet/yasnippet.el                    |  676 +++---
 packages/ztree/ztree-diff-model.el                 |   25 +-
 packages/ztree/ztree-diff.el                       |    2 +
 packages/ztree/ztree-dir.el                        |    9 +-
 packages/ztree/ztree-util.el                       |   14 +
 packages/ztree/ztree.el                            |    2 +-
 95 files changed, 8009 insertions(+), 3817 deletions(-)

diff --git a/copyright_exceptions b/copyright_exceptions
index 563cab3..da73782 100644
--- a/copyright_exceptions
+++ b/copyright_exceptions
@@ -18,7 +18,6 @@
 ./ada-mode/gpr-skel.el:  "Insert a file header comment, with automatic 
copyright year and prompt for copyright owner/license.
 ./ada-mode/gpr-skel.el:  "{copyright_license}\n"
 ./auctex/latex.el:   "pounds" "copyright"
-./auctex/multi-prompt.el
 ./auctex/plain-tex.el:   "copyright"
 ./auctex/style/amsart.el
 ./auctex/style/amsbook.el
diff --git a/externals-list b/externals-list
index 00dffd4..f520721 100644
--- a/externals-list
+++ b/externals-list
@@ -58,6 +58,7 @@
  ("ggtags"             :subtree "https://github.com/leoliu/ggtags";)
  ("gnome-c-style"      :subtree "https://github.com/ueno/gnome-c-style.git";)
  ("gnorb"               :subtree "https://github.com/girzel/gnorb";)
+ ("highlight-escape-sequences" :subtree 
"https://github.com/dgutov/highlight-escape-sequences/";)
  ("hyperbole"           :external 
"http://git.savannah.gnu.org/r/hyperbole.git";)
  ("ioccur"             :subtree 
"https://github.com/thierryvolpiatto/ioccur.git";)
  ("js2-mode"           :subtree "https://github.com/mooz/js2-mode.git";)
@@ -69,6 +70,7 @@
  ("ntlm"               :core "lisp/net/ntlm.el")
  ("on-screen"           :subtree 
"https://github.com/michael-heerdegen/on-screen.el.git";)
  ("pabbrev"             :external "https://github.com/phillord/pabbrev.git";)
+ ("parsec"              :subtree 
"https://github.com/cute-jumper/parsec.el.git";)
  ("pinentry"           :subtree "https://github.com/ueno/pinentry-el.git";)
  ("python"             :core "lisp/progmodes/python.el")
  ;;FIXME:("org"                :external ??) ;; Need to introduce snapshots!!
diff --git a/packages/ada-mode/NEWS b/packages/ada-mode/NEWS
index 90a0ad4..328c436 100644
--- a/packages/ada-mode/NEWS
+++ b/packages/ada-mode/NEWS
@@ -7,7 +7,34 @@ Please send Emacs Ada mode bug reports to address@hidden, with
 'ada-mode' in the subject. If possible, use M-x report-emacs-bug.
 
 
+* Ada mode 5.2.1
+31 Oct 2016
+
+** A line starting with '(' is now always indented with
+   ada-indent-broken. Previously, in some cases it was indented by
+   ada-indent - 1. Since the defaults set ada-indent = 3,
+   ada-indent-broken = 2, this is transparent unless you use other
+   values.
+
+** GPR_PROJECT_PATH is set in the compilation process environment when
+   the Ada project is selected, and cleared when the project is
+   deselected. This allows selecting other Emacs projects, then
+   returning to an Ada project.
+
+** New function ada-show-local-references (bound to C-c C-l) searches
+   for references within the current file only.
+
+** New option ada-xref-full-path (default nil) if t, shows full paths
+   in cross references.
+
+** The indentation functions are significantly rewritten to make them
+   better organized and easier to understand and maintain. This
+   resulted in some minor indentation changes, mostly for consistency;
+   in particular, case expressions are indented by ada-indent-broken,
+   to match if espressions.
+
 * Ada mode 5.2.0
+26 Jul 2016
 
 ** GNAT 2016 drops support for 'gnat find'; users must use gpr_query.
 
diff --git a/packages/ada-mode/README b/packages/ada-mode/README
index 03ccda9..384e3ef 100755
--- a/packages/ada-mode/README
+++ b/packages/ada-mode/README
@@ -1,4 +1,4 @@
-Emacs Ada mode version 5.2.0
+Emacs Ada mode version 5.2.1
 
 Ada mode requires Emacs 24.2 or greater
 
diff --git a/packages/ada-mode/ada-build.el b/packages/ada-mode/ada-build.el
index 6b28042..c166edd 100644
--- a/packages/ada-mode/ada-build.el
+++ b/packages/ada-mode/ada-build.el
@@ -37,6 +37,7 @@
 (require 'ada-mode-compat-24.2)
 
 (require 'ada-mode)
+(require 'cl-lib)
 
 ;;;; User customization
 
@@ -249,7 +250,7 @@ If CONFIRM or `ada-build-confirm-command' are non-nil, ask 
for
 user confirmation of the command, using PROMPT."
   (ada-build-require-project-file)
   (let ((cmd (ada-prj-get prj-field))
-       (process-environment (ada-prj-get 'proc_env)))
+       (process-environment (cl-copy-list (ada-prj-get 'proc_env))))
 
     (unless cmd
       (setq cmd '("")
diff --git a/packages/ada-mode/ada-gnat-compile.el 
b/packages/ada-mode/ada-gnat-compile.el
index c0d2156..9582f84 100755
--- a/packages/ada-mode/ada-gnat-compile.el
+++ b/packages/ada-mode/ada-gnat-compile.el
@@ -6,7 +6,7 @@
 ;;
 ;; GNAT is provided by AdaCore; see http://libre.adacore.com/
 ;;
-;;; Copyright (C) 2012 - 2015  Free Software Foundation, Inc.
+;;; Copyright (C) 2012 - 2016  Free Software Foundation, Inc.
 ;;
 ;; Author: Stephen Leake <address@hidden>
 ;; Maintainer: Stephen Leake <address@hidden>
@@ -34,6 +34,7 @@
 ;; By default, ada-mode is configured to load this file, so nothing
 ;; special needs to done to use it.
 
+(require 'cl-lib)
 (require 'compile)
 (require 'gnat-core)
 
@@ -589,6 +590,10 @@ Prompt user if more than one."
   ;;
   ;; find error locations in .gpr files
   (setq compilation-search-path (append compilation-search-path (ada-prj-get 
'prj_dir)))
+  (setq compilation-environment
+       (list
+        (let ((process-environment (cl-copy-list (ada-prj-get 'proc_env))))
+          (concat "GPR_PROJECT_PATH=" (getenv "GPR_PROJECT_PATH")))))
 
   ;; must be after indentation engine setup, because that resets the
   ;; indent function list.
@@ -608,6 +613,7 @@ Prompt user if more than one."
   (setq ada-syntax-propertize-hook (delq 'ada-gnat-syntax-propertize 
ada-syntax-propertize-hook))
 
   ;; don't need to delete from compilation-search-path; completely rewritten 
in ada-select-prj-file
+  (setq compilation-environment nil)
 
   (setq ada-mode-hook (delq 'gnatprep-setup ada-mode-hook))
 
diff --git a/packages/ada-mode/ada-gnat-xref.el 
b/packages/ada-mode/ada-gnat-xref.el
index 58719a5..85ffcef 100755
--- a/packages/ada-mode/ada-gnat-xref.el
+++ b/packages/ada-mode/ada-gnat-xref.el
@@ -139,28 +139,31 @@
                     )
     ))
 
-(defun ada-gnat-xref-all (identifier file line col)
+(defun ada-gnat-xref-all (identifier file line col local-only)
   "For `ada-xref-all-function'."
   ;; we use `compilation-start' to run gnat, not `gnat-run', so it
   ;; is asynchronous, and automatically runs the compilation error
   ;; filter.
 
-  (let* ((cmd (format "%sgnat find -a -r %s:%s:%d:%d"
+  (let* ((cmd (format "%sgnat find -a -r %s %s:%s:%d:%d %s"
                       (or (ada-prj-get 'target) "")
-                      identifier file line col)))
+                     (if ada-xref-full-path "-f" "")
+                      identifier file line col (if local-only file ""))))
 
     (with-current-buffer (gnat-run-buffer); for default-directory
-      (let ((compilation-environment (ada-prj-get 'proc_env))
-           (compilation-error "reference")
+      (let ((compilation-error "reference")
            ;; gnat find uses standard gnu format for output, so don't
            ;; need to set compilation-error-regexp-alist
            )
+       ;; compilation-environment is buffer-local; don't set in 'let'
+       (setq compilation-environment (ada-prj-get 'proc_env))
+
        (when (ada-prj-get 'gpr_file)
          (setq cmd (concat cmd " -P" (file-name-nondirectory (ada-prj-get 
'gpr_file)))))
 
        (compilation-start cmd
                           'compilation-mode
-                          (lambda (name) (concat name "-gnatfind")))
+                          (lambda (name) (concat "*" name "-gnatfind*")))
     ))))
 
 ;;;;; setup
diff --git a/packages/ada-mode/ada-grammar-wy.el 
b/packages/ada-mode/ada-grammar-wy.el
index be0c5f7..f98d8b9 100755
--- a/packages/ada-mode/ada-grammar-wy.el
+++ b/packages/ada-mode/ada-grammar-wy.el
@@ -215,7 +215,7 @@
         (progn
         (wisi-statement-action [1 open-paren 3 close-paren])
         (wisi-containing-action 1 2)))
-       ((LEFT_PAREN expression WITH association_list RIGHT_PAREN )
+       ((LEFT_PAREN expression_opt WITH association_list RIGHT_PAREN )
         (progn
         (wisi-statement-action [1 open-paren 3 statement-other 5 close-paren])
         (wisi-containing-action 1 2)
@@ -225,7 +225,7 @@
         (progn
         (wisi-statement-action [1 open-paren 3 close-paren])
         (wisi-containing-action 1 2)))
-       ((LEFT_PAREN expression WITH NULL RECORD RIGHT_PAREN )
+       ((LEFT_PAREN expression_opt WITH NULL RECORD RIGHT_PAREN )
         (progn
         (wisi-statement-action [1 open-paren 3 statement-other 6 close-paren])
         (wisi-containing-action 1 2)
@@ -250,7 +250,7 @@
         (wisi-containing-action 2 3)
         (wisi-containing-action 5 6))))
       (aspect_clause
-       ((FOR attribute_reference USE expression SEMICOLON )
+       ((FOR attribute_reference USE expression_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 3 statement-other 5 
statement-end])
         (wisi-containing-action 3 4)))
@@ -264,18 +264,15 @@
         (wisi-statement-action [1 statement-other])
         (wisi-containing-action 1 2))))
       (assignment_statement
-       ((name COLON_EQUAL expression SEMICOLON )
+       ((name COLON_EQUAL expression_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 2 statement-other 4 
statement-end])
         (wisi-containing-action 2 3))))
       (association_opt
        (())
-       ((CHARACTER_LITERAL EQUAL_GREATER expression )
-        (progn
-        (wisi-statement-action [2 statement-other])
-        (wisi-containing-action 2 3)))
+       ((CHARACTER_LITERAL EQUAL_GREATER expression_opt ))
        ((CHARACTER_LITERAL EQUAL_GREATER BOX ))
-       ((discrete_choice_list EQUAL_GREATER expression )
+       ((discrete_choice_list EQUAL_GREATER expression_opt )
         (progn
         (wisi-statement-action [2 statement-other])
         (wisi-containing-action 2 3)))
@@ -294,7 +291,7 @@
         (wisi-containing-action 1 2)
         (wisi-containing-action 3 5))))
       (at_clause
-       ((FOR direct_name USE AT expression SEMICOLON )
+       ((FOR direct_name USE AT expression_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 4 statement-other 6 
statement-end])
         (wisi-containing-action 4 5))))
@@ -331,13 +328,13 @@
        ((task_body_stub ))
        ((protected_body_stub )))
       (case_expression
-       ((CASE expression IS case_expression_alternative_list )
+       ((CASE expression_opt IS case_expression_alternative_list )
         (progn
         (wisi-statement-action [1 statement-start 3 block-middle])
         (wisi-containing-action 1 2)
         (wisi-containing-action 3 4))))
       (case_expression_alternative
-       ((WHEN discrete_choice_list EQUAL_GREATER expression )
+       ((WHEN discrete_choice_list EQUAL_GREATER expression_opt )
         (progn
         (wisi-statement-action [1 block-middle 3 statement-other])
         (wisi-containing-action 1 3)
@@ -346,8 +343,7 @@
        ((case_expression_alternative ))
        ((case_expression_alternative_list COMMA case_expression_alternative )
         (progn
-        (wisi-statement-action [2 list-break])
-        (wisi-containing-action 2 3))))
+        (wisi-statement-action [2 list-break]))))
       (case_statement
        ((CASE expression_opt IS case_statement_alternative_list END CASE 
SEMICOLON )
         (progn
@@ -408,7 +404,7 @@
        ((component_clause ))
        ((component_clause_list component_clause )))
       (component_declaration
-       ((identifier_list COLON component_definition COLON_EQUAL expression 
aspect_specification_opt SEMICOLON )
+       ((identifier_list COLON component_definition COLON_EQUAL expression_opt 
aspect_specification_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 2 statement-other 4 
statement-other 7 statement-end])
         (wisi-containing-action 2 3)
@@ -478,7 +474,7 @@
        ((generic_declaration ))
        ((generic_instantiation ))
        ((null_procedure_declaration ))
-       ((identifier_list COLON CONSTANT COLON_EQUAL expression SEMICOLON )
+       ((identifier_list COLON CONSTANT COLON_EQUAL expression_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 6 statement-end])
         (wisi-containing-action 1 5)))
@@ -499,11 +495,11 @@
       (delay_alternative
        ((delay_statement sequence_of_statements_opt )))
       (delay_statement
-       ((DELAY UNTIL expression SEMICOLON )
+       ((DELAY UNTIL expression_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 4 statement-end])
         (wisi-containing-action 1 3)))
-       ((DELAY expression SEMICOLON )
+       ((DELAY expression_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 3 statement-end])
         (wisi-containing-action 1 2))))
@@ -547,9 +543,9 @@
         (wisi-containing-action 1 2))))
       (discriminant_specification_opt
        (())
-       ((identifier_list COLON null_exclusion_opt_name_type COLON_EQUAL 
expression ))
+       ((identifier_list COLON null_exclusion_opt_name_type COLON_EQUAL 
expression_opt ))
        ((identifier_list COLON null_exclusion_opt_name_type ))
-       ((identifier_list COLON access_definition COLON_EQUAL expression ))
+       ((identifier_list COLON access_definition COLON_EQUAL expression_opt ))
        ((identifier_list COLON access_definition )))
       (discriminant_specification_list
        ((discriminant_specification_opt ))
@@ -558,7 +554,7 @@
         (wisi-statement-action [2 list-break])
         (wisi-containing-action 2 3))))
       (elsif_expression_item
-       ((ELSIF expression THEN expression )
+       ((ELSIF expression_opt THEN expression_opt )
         (progn
         (wisi-statement-action [1 statement-other 3 block-middle])
         (wisi-containing-action 1 2)
@@ -622,8 +618,8 @@
       (enumeration_representation_clause
        ((FOR name USE aggregate SEMICOLON )
         (progn
-        (wisi-statement-action [1 statement-start 3 statement-other 5 
statement-end])
-        (wisi-containing-action 3 4)
+        (wisi-statement-action [1 statement-start 5 statement-end])
+        (wisi-containing-action 1 4)
         (wisi-face-action [2 font-lock-type-face]))))
       (enumeration_type_definition
        ((LEFT_PAREN enumeration_literal_list RIGHT_PAREN )
@@ -661,8 +657,8 @@
       (exit_statement
        ((EXIT identifier_opt WHEN expression_opt SEMICOLON )
         (progn
-        (wisi-statement-action [1 statement-start 3 statement-other 5 
statement-end])
-        (wisi-containing-action 3 4)))
+        (wisi-statement-action [1 statement-start 5 statement-end])
+        (wisi-containing-action 1 4)))
        ((EXIT identifier_opt SEMICOLON )
         (wisi-statement-action [1 statement-start 3 statement-end])))
       (expression
@@ -674,7 +670,9 @@
        ((relation_xor_list )))
       (expression_opt
        (())
-       ((expression )))
+       ((expression )
+        (wisi-statement-action [1 expression-start])
+        (wisi-containing-action 1 1)))
       (expression_function_declaration
        ((overriding_indicator_opt function_specification IS paren_expression 
aspect_specification_opt SEMICOLON )
         (progn
@@ -682,7 +680,7 @@
         (wisi-containing-action 3 4)
         (wisi-containing-action 2 5))))
       (extended_return_object_declaration
-       ((IDENTIFIER COLON aliased_opt constant_opt return_subtype_indication 
COLON_EQUAL expression )
+       ((IDENTIFIER COLON aliased_opt constant_opt return_subtype_indication 
COLON_EQUAL expression_opt )
         (progn
         (wisi-statement-action [1 statement-start 6 statement-other])
         (wisi-containing-action 6 7)))
@@ -705,7 +703,7 @@
        ((ABS primary ))
        ((NOT primary )))
       (formal_object_declaration
-       ((identifier_list COLON mode_opt null_exclusion_opt name COLON_EQUAL 
expression aspect_specification_opt SEMICOLON )
+       ((identifier_list COLON mode_opt null_exclusion_opt name COLON_EQUAL 
expression_opt aspect_specification_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 6 statement-other 9 
statement-end])
         (wisi-containing-action 6 7)
@@ -716,7 +714,7 @@
         (wisi-statement-action [1 statement-start 7 statement-end])
         (wisi-containing-action 5 6)
         (wisi-face-action [5 font-lock-type-face])))
-       ((identifier_list COLON mode_opt access_definition COLON_EQUAL 
expression aspect_specification_opt SEMICOLON )
+       ((identifier_list COLON mode_opt access_definition COLON_EQUAL 
expression_opt aspect_specification_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 5 statement-other 8 
statement-end])
         (wisi-containing-action 5 6)
@@ -845,21 +843,21 @@
       (generic_instantiation
        ((PACKAGE name IS NEW name aspect_specification_opt SEMICOLON )
         (progn
-        (wisi-statement-action [1 statement-start 2 name 4 statement-other 7 
statement-end])
-        (wisi-containing-action 4 5)
-        (wisi-containing-action 5 6)
+        (wisi-statement-action [1 statement-start 2 name 3 statement-other 7 
statement-end])
+        (wisi-containing-action 3 5)
+        (wisi-containing-action 3 6)
         (wisi-face-action [2 font-lock-function-name-face 5 
font-lock-function-name-face])))
        ((overriding_indicator_opt PROCEDURE name IS NEW name 
aspect_specification_opt SEMICOLON )
         (progn
-        (wisi-statement-action [1 statement-start 2 block-middle 3 name 5 
statement-other 8 statement-end])
-        (wisi-containing-action 5 6)
-        (wisi-containing-action 6 7)
+        (wisi-statement-action [1 statement-start 2 block-middle 3 name 4 
statement-other 8 statement-end])
+        (wisi-containing-action 4 6)
+        (wisi-containing-action 4 7)
         (wisi-face-action [3 font-lock-function-name-face 6 
font-lock-function-name-face])))
        ((overriding_indicator_opt FUNCTION name IS NEW name 
aspect_specification_opt SEMICOLON )
         (progn
-        (wisi-statement-action [1 statement-start 2 block-middle 3 name 5 
statement-other 8 statement-end])
-        (wisi-containing-action 5 6)
-        (wisi-containing-action 6 7)
+        (wisi-statement-action [1 statement-start 2 block-middle 3 name 4 
statement-other 8 statement-end])
+        (wisi-containing-action 4 6)
+        (wisi-containing-action 4 7)
         (wisi-face-action [3 font-lock-function-name-face 6 
font-lock-function-name-face]))))
       (generic_package_declaration
        ((generic_formal_part package_specification SEMICOLON )
@@ -907,7 +905,7 @@
        (())
        ((IDENTIFIER )))
       (if_expression
-       ((IF expression THEN expression elsif_expression_list ELSE expression )
+       ((IF expression_opt THEN expression_opt elsif_expression_list ELSE 
expression_opt )
         (progn
         (wisi-statement-action [1 statement-start 3 block-middle 6 
block-middle])
         (wisi-containing-action 1 2)
@@ -915,21 +913,21 @@
         (wisi-containing-action 3 5)
         (wisi-containing-action 6 7)
         (wisi-motion-action [1 3 [5 statement-other ELSIF block-middle THEN] 
6])))
-       ((IF expression THEN expression elsif_expression_list )
+       ((IF expression_opt THEN expression_opt elsif_expression_list )
         (progn
         (wisi-statement-action [1 statement-start 3 block-middle])
         (wisi-containing-action 1 2)
         (wisi-containing-action 3 4)
         (wisi-containing-action 3 5)
         (wisi-motion-action [1 3 [5 statement-other ELSIF block-middle 
THEN]])))
-       ((IF expression THEN expression ELSE expression )
+       ((IF expression_opt THEN expression_opt ELSE expression_opt )
         (progn
         (wisi-statement-action [1 statement-start 3 block-middle 5 
block-middle])
         (wisi-containing-action 1 2)
         (wisi-containing-action 3 4)
         (wisi-containing-action 5 6)
         (wisi-motion-action [1 3 5])))
-       ((IF expression THEN expression )
+       ((IF expression_opt THEN expression_opt )
         (progn
         (wisi-statement-action [1 statement-start 3 block-middle])
         (wisi-containing-action 1 2)
@@ -1023,8 +1021,10 @@
        ((iterator_specification )))
       (label_opt
        (())
-       ((goto_label ))
-       ((IDENTIFIER COLON )))
+       ((goto_label )
+        (wisi-statement-action [1 label]))
+       ((IDENTIFIER COLON )
+        (wisi-statement-action [1 label])))
       (library_item
        ((PRIVATE library_unit_declaration ))
        ((library_unit_declaration ))
@@ -1059,7 +1059,7 @@
        ((range )))
       (mod_clause_opt
        (())
-       ((AT MOD expression SEMICOLON )))
+       ((AT MOD expression_opt SEMICOLON )))
       (mode_opt
        (())
        ((IN ))
@@ -1114,7 +1114,7 @@
         (wisi-statement-action [1 statement-start 2 statement-other 3 
statement-other 6 statement-end])
         (wisi-containing-action 2 5))))
       (object_declaration
-       ((identifier_list COLON aliased_opt constant_opt subtype_indication 
COLON_EQUAL expression aspect_specification_opt SEMICOLON )
+       ((identifier_list COLON aliased_opt constant_opt subtype_indication 
COLON_EQUAL expression_opt aspect_specification_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 2 statement-other 6 
statement-other 9 statement-end])
         (wisi-containing-action 2 5)
@@ -1125,7 +1125,7 @@
         (wisi-statement-action [1 statement-start 2 statement-other 7 
statement-end])
         (wisi-containing-action 2 5)
         (wisi-containing-action 1 6)))
-       ((identifier_list COLON aliased_opt constant_opt access_definition 
COLON_EQUAL expression aspect_specification_opt SEMICOLON )
+       ((identifier_list COLON aliased_opt constant_opt access_definition 
COLON_EQUAL expression_opt aspect_specification_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 2 statement-other 6 
statement-other 9 statement-end])
         (wisi-containing-action 2 5)
@@ -1136,7 +1136,7 @@
         (wisi-statement-action [1 statement-start 2 statement-other 7 
statement-end])
         (wisi-containing-action 2 5)
         (wisi-containing-action 1 6)))
-       ((identifier_list COLON aliased_opt constant_opt array_type_definition 
COLON_EQUAL expression aspect_specification_opt SEMICOLON )
+       ((identifier_list COLON aliased_opt constant_opt array_type_definition 
COLON_EQUAL expression_opt aspect_specification_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 2 statement-other 6 
statement-other 9 statement-end])
         (wisi-containing-action 2 5)
@@ -1251,11 +1251,12 @@
        (())
        ((formal_part )))
       (parameter_specification
-       ((identifier_list COLON aliased_opt mode_opt null_exclusion_opt name 
COLON_EQUAL expression )
+       (())
+       ((identifier_list COLON aliased_opt mode_opt null_exclusion_opt name 
COLON_EQUAL expression_opt )
         (wisi-face-action [6 font-lock-type-face]))
        ((identifier_list COLON aliased_opt mode_opt null_exclusion_opt name )
         (wisi-face-action [6 font-lock-type-face]))
-       ((identifier_list COLON aliased_opt access_definition COLON_EQUAL 
expression ))
+       ((identifier_list COLON aliased_opt access_definition COLON_EQUAL 
expression_opt ))
        ((identifier_list COLON aliased_opt access_definition )))
       (parameter_specification_list
        ((parameter_specification ))
@@ -1264,7 +1265,7 @@
         (wisi-statement-action [2 list-break])
         (wisi-containing-action 2 3))))
       (paren_expression
-       ((LEFT_PAREN expression RIGHT_PAREN )
+       ((LEFT_PAREN expression_opt RIGHT_PAREN )
         (progn
         (wisi-statement-action [1 open-paren 3 close-paren])
         (wisi-containing-action 1 2)))
@@ -1273,7 +1274,12 @@
         (wisi-statement-action [1 open-paren 3 close-paren])
         (wisi-containing-action 1 2))))
       (pragma
-       ((PRAGMA IDENTIFIER LEFT_PAREN pragma_argument_association_list 
RIGHT_PAREN SEMICOLON )
+       ((PRAGMA IDENTIFIER LEFT_PAREN association_list RIGHT_PAREN SEMICOLON )
+        (progn
+        (wisi-statement-action [1 statement-start 3 open-paren 5 close-paren 6 
statement-end])
+        (wisi-containing-action 3 4)
+        (wisi-face-action [2 font-lock-function-name-face])))
+       ((PRAGMA IDENTIFIER LEFT_PAREN conditional_quantified_expression 
RIGHT_PAREN SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 3 open-paren 5 close-paren 6 
statement-end])
         (wisi-containing-action 3 4)
@@ -1282,14 +1288,6 @@
         (progn
         (wisi-statement-action [1 statement-start 3 statement-end])
         (wisi-face-action [2 font-lock-function-name-face]))))
-      (pragma_argument_association
-       ((IDENTIFIER EQUAL_GREATER expression ))
-       ((expression ))
-       ((conditional_quantified_expression ))
-       ((IDENTIFIER TICK IDENTIFIER EQUAL_GREATER expression )))
-      (pragma_argument_association_list
-       ((pragma_argument_association ))
-       ((pragma_argument_association_list COMMA pragma_argument_association )))
       (primary
        ((NUMERIC_LITERAL )
         (wisi-face-action [1 font-lock-constant-face]))
@@ -1301,10 +1299,10 @@
       (private_extension_declaration
        ((TYPE IDENTIFIER discriminant_part_opt IS 
abstract_limited_synchronized_opt NEW subtype_indication and_interface_list_opt 
WITH PRIVATE aspect_specification_opt SEMICOLON )
         (progn
-        (wisi-statement-action [1 statement-start 2 name 4 statement-other 6 
statement-other 12 statement-end])
+        (wisi-statement-action [1 statement-start 2 name 4 statement-other 12 
statement-end])
         (wisi-containing-action 1 3)
-        (wisi-containing-action 6 7)
-        (wisi-containing-action 6 8)
+        (wisi-containing-action 4 7)
+        (wisi-containing-action 4 8)
         (wisi-containing-action 4 11)
         (wisi-face-action [2 font-lock-type-face]))))
       (private_type_declaration
@@ -1393,27 +1391,27 @@
         (wisi-containing-action 1 3)
         (wisi-face-action [1 font-lock-type-face]))))
       (quantified_expression
-       ((FOR quantifier iterator_specification EQUAL_GREATER expression )
+       ((FOR quantifier iterator_specification EQUAL_GREATER expression_opt )
         (progn
-        (wisi-statement-action [4 statement-other])
-        (wisi-containing-action 4 5))))
+        (wisi-statement-action [1 expression-start])
+        (wisi-containing-action 1 5))))
       (quantifier
        ((ALL ))
        ((SOME )))
       (raise_expression
        ((RAISE name ))
-       ((RAISE name WITH expression )))
+       ((RAISE name WITH expression_opt )))
       (raise_statement
        ((RAISE SEMICOLON )
         (wisi-statement-action [1 statement-start 2 statement-end]))
-       ((RAISE name WITH expression SEMICOLON )
+       ((RAISE name WITH expression_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 5 statement-end])
         (wisi-containing-action 1 4)))
        ((RAISE name SEMICOLON )
         (wisi-statement-action [1 statement-start 3 statement-end])))
       (range
-       ((name TICK RANGE LEFT_PAREN expression RIGHT_PAREN )
+       ((name TICK RANGE LEFT_PAREN expression_opt RIGHT_PAREN )
         (progn
         (wisi-statement-action [4 open-paren 6 close-paren])
         (wisi-containing-action 4 5)))
@@ -1511,26 +1509,25 @@
         (wisi-containing-action 1 2)
         (wisi-motion-action [1 [2 block-middle OR] 3]))))
       (select_alternative
-       ((WHEN expression EQUAL_GREATER accept_statement 
sequence_of_statements_opt )
+       ((WHEN expression_opt EQUAL_GREATER accept_statement 
sequence_of_statements_opt )
         (progn
         (wisi-statement-action [1 block-start 3 statement-other])
         (wisi-containing-action 1 2)
         (wisi-containing-action 1 3)
-        (wisi-containing-action 3 4)
-        (wisi-containing-action 3 5)))
+        (wisi-containing-action 1 4)
+        (wisi-containing-action 1 5)))
        ((accept_statement sequence_of_statements_opt ))
-       ((WHEN expression EQUAL_GREATER delay_alternative )
+       ((WHEN expression_opt EQUAL_GREATER delay_alternative )
         (progn
-        (wisi-statement-action [1 block-start 3 statement-other])
+        (wisi-statement-action [1 block-start])
         (wisi-containing-action 1 2)
-        (wisi-containing-action 1 3)
-        (wisi-containing-action 3 4)))
+        (wisi-containing-action 1 4)))
        ((delay_alternative ))
-       ((WHEN expression EQUAL_GREATER TERMINATE SEMICOLON )
+       ((WHEN expression_opt EQUAL_GREATER TERMINATE SEMICOLON )
         (progn
-        (wisi-statement-action [1 block-start 3 statement-other 4 
statement-start 5 statement-end])
+        (wisi-statement-action [1 block-start 4 statement-start 5 
statement-end])
         (wisi-containing-action 1 2)
-        (wisi-containing-action 1 3)))
+        (wisi-containing-action 1 4)))
        ((TERMINATE SEMICOLON )
         (wisi-statement-action [1 statement-start 2 statement-end])))
       (select_alternative_list
@@ -1558,7 +1555,7 @@
       (simple_return_statement
        ((RETURN SEMICOLON )
         (wisi-statement-action [1 statement-start 2 statement-end]))
-       ((RETURN expression SEMICOLON )
+       ((RETURN expression_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 3 statement-end])
         (wisi-containing-action 1 2))))
@@ -1583,6 +1580,7 @@
        ((PROTECTED IDENTIFIER aspect_specification_opt IS NEW interface_list 
WITH protected_definition SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 2 name 4 block-middle 7 
block-middle 9 statement-end])
+        (wisi-motion-action [1 4 [8 block-middle PRIVATE block-end END]])
         (wisi-containing-action 1 2)
         (wisi-containing-action 2 3)
         (wisi-containing-action 4 6)
@@ -1591,6 +1589,7 @@
        ((PROTECTED IDENTIFIER aspect_specification_opt IS protected_definition 
SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 2 name 4 block-middle 6 
statement-end])
+        (wisi-motion-action [1 4 [5 block-middle PRIVATE block-end END]])
         (wisi-containing-action 1 2)
         (wisi-containing-action 2 3)
         (wisi-containing-action 4 5)
@@ -1599,6 +1598,7 @@
        ((TASK IDENTIFIER aspect_specification_opt IS NEW interface_list WITH 
task_definition SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 2 name 4 block-middle 7 
block-middle 9 statement-end])
+        (wisi-motion-action [1 4 [8 block-middle PRIVATE block-end END]])
         (wisi-containing-action 1 2)
         (wisi-containing-action 2 3)
         (wisi-containing-action 4 6)
@@ -1607,6 +1607,7 @@
        ((TASK IDENTIFIER aspect_specification_opt IS task_definition SEMICOLON 
)
         (progn
         (wisi-statement-action [1 statement-start 2 name 4 block-middle 6 
statement-end])
+        (wisi-motion-action [1 4 [5 block-middle PRIVATE block-end END]])
         (wisi-containing-action 1 2)
         (wisi-containing-action 2 3)
         (wisi-containing-action 4 5)
@@ -1615,13 +1616,13 @@
         (progn
         (wisi-statement-action [1 statement-start 2 name 4 statement-end])
         (wisi-containing-action 1 2)
-        (wisi-containing-action 2 3)
+        (wisi-containing-action 1 3)
         (wisi-face-action [2 font-lock-type-face]))))
       (statement
        ((label_opt simple_statement )
-        (wisi-statement-action [1 statement-start 2 statement-other]))
+        (wisi-statement-action [2 statement-start]))
        ((label_opt compound_statement )
-        (wisi-statement-action [1 statement-start 2 statement-other])))
+        (wisi-statement-action [2 statement-start])))
       (subprogram_body
        ((overriding_indicator_opt subprogram_specification 
aspect_specification_opt IS declarative_part_opt BEGIN 
handled_sequence_of_statements END name_opt SEMICOLON )
         (progn
@@ -1753,10 +1754,10 @@
       (type_definition
        ((enumeration_type_definition ))
        ((RANGE simple_expression DOT_DOT simple_expression ))
-       ((MOD expression ))
-       ((DIGITS expression real_range_specification_opt ))
-       ((DELTA expression real_range_specification_opt ))
-       ((DELTA expression DIGITS expression real_range_specification_opt ))
+       ((MOD expression_opt ))
+       ((DIGITS expression_opt real_range_specification_opt ))
+       ((DELTA expression_opt real_range_specification_opt ))
+       ((DELTA expression_opt DIGITS expression_opt 
real_range_specification_opt ))
        ((array_type_definition ))
        ((record_type_definition ))
        ((access_definition ))
@@ -1773,10 +1774,9 @@
       (variant
        ((WHEN discrete_choice_list EQUAL_GREATER component_list_opt )
         (progn
-        (wisi-statement-action [1 block-middle 3 statement-other])
+        (wisi-statement-action [1 block-middle])
         (wisi-containing-action 1 2)
-        (wisi-containing-action 1 3)
-        (wisi-containing-action 3 4))))
+        (wisi-containing-action 1 4))))
       (unary_adding_operator
        ((PLUS ))
        ((MINUS )))
@@ -1905,32 +1905,32 @@
       ((default . error) (PACKAGE . (generic_formal_parameter_declaration . 
4)) (PROCEDURE . (generic_formal_parameter_declaration . 4)) (FUNCTION . 
(generic_formal_parameter_declaration . 4)) (IDENTIFIER . 
(generic_formal_parameter_declaration . 4)) (WITH . 
(generic_formal_parameter_declaration . 4)) (USE . 
(generic_formal_parameter_declaration . 4)) (TYPE . 
(generic_formal_parameter_declaration . 4)) (PRAGMA . 
(generic_formal_parameter_declaration . 4)))
       ((default . error) (PACKAGE . (generic_formal_parameter_declaration . 
5)) (PROCEDURE . (generic_formal_parameter_declaration . 5)) (FUNCTION . 
(generic_formal_parameter_declaration . 5)) (IDENTIFIER . 
(generic_formal_parameter_declaration . 5)) (WITH . 
(generic_formal_parameter_declaration . 5)) (USE . 
(generic_formal_parameter_declaration . 5)) (TYPE . 
(generic_formal_parameter_declaration . 5)) (PRAGMA . 
(generic_formal_parameter_declaration . 5)))
       ((default . error) (DOT .  90) (TICK .  91) (RETURN .  89) (LEFT_PAREN . 
 88))
-      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (CHARACTER_LITERAL .  183) (STRING_LITERAL .  49) 
(IDENTIFIER .  235) (PLUS .  154) (MINUS .  153) (OTHERS .  182) (ABS .  144) 
(NOT .  181) (RAISE .  152) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
-      ((default . error) (IDENTIFIER . (null_exclusion_opt . 0)) 
(STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (DO . (null_exclusion_opt . 0)) (COLON_EQUAL . 
(null_exclusion_opt . 0)) (RIGHT_PAREN . (null_exclusion_opt . 0)) (RENAMES . 
(null_exclusion_opt . 0)) (IS . (null_exclusion_opt . 0)) (SEMICOLON . 
(null_exclusion_opt . 0)) (WITH . (null_exclusion_opt . 0)) (ACCESS . 
(null_exclusion_opt . 0)) (NOT .  232))
-      ((default . error) (IDENTIFIER .  229) (CHARACTER_LITERAL .  231) 
(STRING_LITERAL .  230) (ALL .  228))
-      ((default . error) (LEFT_PAREN .  148) (ACCESS .  221) (DELTA .  222) 
(DIGITS .  223) (MOD .  224) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (DO . (name . 5)) (OF . (name . 5)) 
(CHARACTER_LITERAL . (name . 5)) (STRING_LITERAL . (name . 5)) (IDENTIFIER . 
(name . 5)) (LESS_LESS . (name . 5)) (WHILE . (name . 5)) (SELECT . (name . 5)) 
(REQUEUE . (name . 5)) (RAISE . (name . 5)) (PRAGMA . (name . 5)) (NULL . (name 
. 5)) (LOOP . (name . 5)) (IF . (name . 5)) (GOTO . (name . 5)) (FOR . (name . 
5)) (EXIT . (name . 5)) (DELAY . (name . 5)) (DECLARE . (name . 5)) (CASE . 
(name . 5)) (BEGIN . (name . 5)) (ABORT [...]
-      ((default . error) (RETURN .  220))
+      ((default . error) (SEMICOLON . (parameter_specification . 0)) (FOR .  
146) (CASE .  145) (IF .  147) (RIGHT_PAREN . ((expression_opt . 0) 
(parameter_specification . 0))) (COMMA . ((expression_opt . 0) (association_opt 
. 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (CHARACTER_LITERAL .  157) (STRING_LITERAL .  49) 
(IDENTIFIER .  229) (PLUS .  155) (MINUS .  154) (OTHERS .  152) (ABS .  144) 
(NOT .  150) (RAISE .  153) (NUMERIC_LITERAL .  156) [...]
+      ((default . error) (IDENTIFIER . (null_exclusion_opt . 0)) 
(STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (DO . (null_exclusion_opt . 0)) (COLON_EQUAL . 
(null_exclusion_opt . 0)) (RIGHT_PAREN . (null_exclusion_opt . 0)) (RENAMES . 
(null_exclusion_opt . 0)) (IS . (null_exclusion_opt . 0)) (SEMICOLON . 
(null_exclusion_opt . 0)) (WITH . (null_exclusion_opt . 0)) (ACCESS . 
(null_exclusion_opt . 0)) (NOT .  226))
+      ((default . error) (IDENTIFIER .  223) (CHARACTER_LITERAL .  225) 
(STRING_LITERAL .  224) (ALL .  222))
+      ((default . error) (LEFT_PAREN .  148) (ACCESS .  215) (DELTA .  216) 
(DIGITS .  217) (MOD .  218) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
+      ((default . error) (DO . (name . 5)) (OF . (name . 5)) 
(CHARACTER_LITERAL . (name . 5)) (STRING_LITERAL . (name . 5)) (IDENTIFIER . 
(name . 5)) (LESS_LESS . (name . 5)) (WHILE . (name . 5)) (SELECT . (name . 5)) 
(REQUEUE . (name . 5)) (RAISE . (name . 5)) (PRAGMA . (name . 5)) (NULL . (name 
. 5)) (LOOP . (name . 5)) (IF . (name . 5)) (GOTO . (name . 5)) (FOR . (name . 
5)) (EXIT . (name . 5)) (DELAY . (name . 5)) (DECLARE . (name . 5)) (CASE . 
(name . 5)) (BEGIN . (name . 5)) (ABORT [...]
+      ((default . error) (RETURN .  214))
       ((default . error) (RENAMES . (function_specification . 0)) (IS . 
(function_specification . 0)) (SEMICOLON . (function_specification . 0)) (WITH 
. (function_specification . 0)))
-      ((default . error) (ACCESS . (mode_opt . 0)) (NOT . (mode_opt . 0)) 
(IDENTIFIER . (mode_opt . 0)) (STRING_LITERAL . (mode_opt . 0)) 
(CHARACTER_LITERAL . (mode_opt . 0)) (IN .  217) (OUT .  218))
-      ((default . error) (IDENTIFIER .  216))
+      ((default . error) (ACCESS . (mode_opt . 0)) (NOT . (mode_opt . 0)) 
(IDENTIFIER . (mode_opt . 0)) (STRING_LITERAL . (mode_opt . 0)) 
(CHARACTER_LITERAL . (mode_opt . 0)) (IN .  211) (OUT .  212))
+      ((default . error) (IDENTIFIER .  210))
       ((default . error) (IDENTIFIER . (generic_formal_parameter_declarations 
. 1)) (WITH . (generic_formal_parameter_declarations . 1)) (USE . 
(generic_formal_parameter_declarations . 1)) (TYPE . 
(generic_formal_parameter_declarations . 1)) (PRAGMA . 
(generic_formal_parameter_declarations . 1)) (FUNCTION . 
(generic_formal_parameter_declarations . 1)) (PROCEDURE . 
(generic_formal_parameter_declarations . 1)) (PACKAGE . 
(generic_formal_parameter_declarations . 1)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (IS .  213) (SEMICOLON . (aspect_specification_opt . 
0)) (WITH .  109))
-      ((default . error) (WITH . (discriminant_part_opt . 0)) (SEMICOLON . 
(discriminant_part_opt . 0)) (IS . (discriminant_part_opt . 0)) (LEFT_PAREN .  
211))
-      ((default . error) (DOT .  90) (TICK .  91) (RENAMES .  210) (LEFT_PAREN 
.  107))
-      ((default . error) (DOT .  90) (TICK .  91) (RENAMES .  209) (LEFT_PAREN 
.  107))
-      ((default . error) (DOT .  90) (TICK .  91) (RENAMES .  208) (LEFT_PAREN 
.  107))
-      ((default . error) (COMMA .  120) (SEMICOLON .  207))
+      ((default . error) (IS .  207) (SEMICOLON . (aspect_specification_opt . 
0)) (WITH .  109))
+      ((default . error) (WITH . (discriminant_part_opt . 0)) (SEMICOLON . 
(discriminant_part_opt . 0)) (IS . (discriminant_part_opt . 0)) (LEFT_PAREN .  
205))
+      ((default . error) (DOT .  90) (TICK .  91) (RENAMES .  204) (LEFT_PAREN 
.  107))
+      ((default . error) (DOT .  90) (TICK .  91) (RENAMES .  203) (LEFT_PAREN 
.  107))
+      ((default . error) (DOT .  90) (TICK .  91) (RENAMES .  202) (LEFT_PAREN 
.  107))
+      ((default . error) (COMMA .  120) (SEMICOLON .  201))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (NEW .  205))
-      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (IDENTIFIER .  48) (CHARACTER_LITERAL .  183) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (OTHERS .  182) (ABS .  
144) (NOT .  181) (RAISE .  152) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  
149) (LEFT_PAREN .  148))
+      ((default . error) (NEW .  199))
+      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (IDENTIFIER .  48) (CHARACTER_LITERAL .  157) 
(STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (OTHERS .  152) (ABS .  
144) (NOT .  150) (RAISE .  153) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  
149) (LEFT_PAREN .  148))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (SEMICOLON . ((expression_opt . 0) (association_opt . 
0))) (IS . ((expression_opt . 0) (association_opt . 0))) (COMMA . 
((expression_opt . 0) (association_opt . 0))) (EQUAL_GREATER . 
(discrete_choice_list . 0)) (BAR . (discrete_choice_list . 0)) (OTHERS .  182) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  183) (STRING_LITERAL .  49) (RAISE .  
152) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  181) (NUMERIC_LITERAL .  
155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
-      ((default . error) (IS .  180))
+      ((default . error) (SEMICOLON . ((expression_opt . 0) (association_opt . 
0))) (IS . ((expression_opt . 0) (association_opt . 0))) (COMMA . 
((expression_opt . 0) (association_opt . 0))) (EQUAL_GREATER . 
(discrete_choice_list . 0)) (BAR . (discrete_choice_list . 0)) (OTHERS .  152) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  157) (STRING_LITERAL .  49) (RAISE .  
153) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  
156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (IS .  192))
       ((default . error) (DOT .  90) (TICK .  91) (IS . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
-      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RAISE .  152) 
(PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  156) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (OR . (pragma . 1)) (THEN . (pragma . 1)) (WHEN . 
(pragma . 1)) (EXCEPTION . (pragma . 1)) (LESS_LESS . (pragma . 1)) (ACCEPT . 
(pragma . 1)) (ABORT . (pragma . 1)) (CASE . (pragma . 1)) (DECLARE . (pragma . 
1)) (DELAY . (pragma . 1)) (EXIT . (pragma . 1)) (GOTO . (pragma . 1)) (IF . 
(pragma . 1)) (LOOP . (pragma . 1)) (NULL . (pragma . 1)) (RAISE . (pragma . 
1)) (REQUEUE . (pragma . 1)) (RETURN . (pragma . 1)) (SELECT . (pragma . 1)) 
(WHILE . (pragma . 1)) (STRI [...]
+      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  152) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  157) (STRING_LITERAL .  49) (RAISE .  153) (PLUS .  155) 
(MINUS .  154) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  156) (NULL .  151) 
(NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (OR . (pragma . 2)) (THEN . (pragma . 2)) (WHEN . 
(pragma . 2)) (EXCEPTION . (pragma . 2)) (LESS_LESS . (pragma . 2)) (ACCEPT . 
(pragma . 2)) (ABORT . (pragma . 2)) (CASE . (pragma . 2)) (DECLARE . (pragma . 
2)) (DELAY . (pragma . 2)) (EXIT . (pragma . 2)) (GOTO . (pragma . 2)) (IF . 
(pragma . 2)) (LOOP . (pragma . 2)) (NULL . (pragma . 2)) (RAISE . (pragma . 
2)) (REQUEUE . (pragma . 2)) (RETURN . (pragma . 2)) (SELECT . (pragma . 2)) 
(WHILE . (pragma . 2)) (STRI [...]
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (COMMA .  120) (SEMICOLON .  142))
       ((default . error) (DOT .  90) (TICK .  91) (IS . ( 106 
(aspect_specification_opt . 0))) (WITH .  109) (LEFT_PAREN .  107))
@@ -1949,95 +1949,89 @@
       ((default . error) (SEMICOLON .  135) (IS .  134))
       ((default . error) (DOT .  90) (TICK .  91) (IS . ( 133 
(parameter_profile_opt . 0))) (SEMICOLON . (parameter_profile_opt . 0)) (WITH . 
(parameter_profile_opt . 0)) (RENAMES . (parameter_profile_opt . 0)) 
(LEFT_PAREN .  88))
       ((default . error) (DOT .  90) (TICK .  91) (IS .  132) (RETURN .  89) 
(LEFT_PAREN .  88))
-      ((default . error) (NEW .  399))
-      ((default . error) (NEW .  398))
-      ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  302) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE 
.  304) (GENERIC .  2) (PROTECTED .  301) (TASK .  303) (PACKAGE .  300))
+      ((default . error) (NEW .  393))
+      ((default . error) (NEW .  392))
+      ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  272) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE 
.  274) (GENERIC .  2) (PROTECTED .  271) (TASK .  273) (PACKAGE .  270))
       ((default . error) (IDENTIFIER . (subprogram_declaration . 0)) (TYPE . 
(subprogram_declaration . 0)) (TASK . (subprogram_declaration . 0)) (SUBTYPE . 
(subprogram_declaration . 0)) (PROTECTED . (subprogram_declaration . 0)) (FOR . 
(subprogram_declaration . 0)) (ENTRY . (subprogram_declaration . 0)) (BEGIN . 
(subprogram_declaration . 0)) (END . (subprogram_declaration . 0)) (WITH . 
(subprogram_declaration . 0)) (USE . (subprogram_declaration . 0)) (SEPARATE . 
(subprogram_declaration  [...]
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
       ((default . error) (BEGIN . (generic_subprogram_declaration . 0)) (ENTRY 
. (generic_subprogram_declaration . 0)) (FOR . (generic_subprogram_declaration 
. 0)) (FUNCTION . (generic_subprogram_declaration . 0)) (GENERIC . 
(generic_subprogram_declaration . 0)) (NOT . (generic_subprogram_declaration . 
0)) (OVERRIDING . (generic_subprogram_declaration . 0)) (PACKAGE . 
(generic_subprogram_declaration . 0)) (PRAGMA . (generic_subprogram_declaration 
. 0)) (PROCEDURE . (generic_subprogram_de [...]
-      ((default . error) (COMMA .  120) (SEMICOLON .  395))
+      ((default . error) (COMMA .  120) (SEMICOLON .  389))
       ((default . error) (IDENTIFIER . (use_clause . 2)) (USE . (use_clause . 
2)) (TYPE . (use_clause . 2)) (TASK . (use_clause . 2)) (SUBTYPE . (use_clause 
. 2)) (PROTECTED . (use_clause . 2)) (PROCEDURE . (use_clause . 2)) (PRAGMA . 
(use_clause . 2)) (PACKAGE . (use_clause . 2)) (OVERRIDING . (use_clause . 2)) 
(NOT . (use_clause . 2)) (GENERIC . (use_clause . 2)) (FUNCTION . (use_clause . 
2)) (FOR . (use_clause . 2)) (ENTRY . (use_clause . 2)) (BEGIN . (use_clause . 
2)) (END . (use_cla [...]
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . (name_list . 
1)) (COMMA . (name_list . 1)) (LEFT_PAREN .  107))
-      ((default . error) (PROTECTED .  391) (TASK .  392) (PACKAGE .  390) 
(NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)))
+      ((default . error) (PROTECTED .  385) (TASK .  386) (PACKAGE .  384) 
(NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)))
       ((default . error) ($EOI . (with_clause . 2)) (FUNCTION . (with_clause . 
2)) (GENERIC . (with_clause . 2)) (LIMITED . (with_clause . 2)) (NOT . 
(with_clause . 2)) (OVERRIDING . (with_clause . 2)) (PACKAGE . (with_clause . 
2)) (PRAGMA . (with_clause . 2)) (PRIVATE . (with_clause . 2)) (PROCEDURE . 
(with_clause . 2)) (SEPARATE . (with_clause . 2)) (USE . (with_clause . 2)) 
(WITH . (with_clause . 2)))
       ((default . error) (SEMICOLON .  135))
-      ((default . error) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (ALL .  385) (SOME .  386))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (RAISE .  152) (PLUS .  154) (MINUS .  153) (OTHERS 
.  182) (ABS .  144) (NOT .  181) (IDENTIFIER .  48) (CHARACTER_LITERAL .  183) 
(STRING_LITERAL .  49) (NUMERIC_LITERAL .  155) (NULL .  380) (NEW .  149) 
(LEFT_PAREN .  148))
+      ((default . error) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (IS . (expression_opt . 0)) (RAISE .  153) (PLUS .  
155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (ALL .  379) (SOME .  380))
+      ((default . error) (THEN . (expression_opt . 0)) (RAISE .  153) (PLUS .  
155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (WITH . (expression_opt . 0)) (FOR .  146) (CASE .  
145) (IF .  147) (COMMA . ((association_opt . 0) (expression_opt . 0))) 
(RIGHT_PAREN . ((association_opt . 0) (expression_opt . 0))) (EQUAL_GREATER . 
(discrete_choice_list . 0)) (BAR . (discrete_choice_list . 0)) (RAISE .  153) 
(OTHERS .  152) (PLUS .  155) (MINUS .  154) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  157) (STRING_LITERAL .  49) (ABS .  144) (NOT .  150) 
(NUMERIC_LITERAL .  156) (NULL .  373) (NEW .   [...]
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (NUMERIC_LITERAL .  156) (NULL .  370) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
       ((default . error) (OF . (primary . 1)) (COLON_EQUAL . (primary . 1)) 
(DO . (primary . 1)) (LOOP . (primary . 1)) (ELSIF . (primary . 1)) (ELSE . 
(primary . 1)) (DIGITS . (primary . 1)) (RIGHT_PAREN . (primary . 1)) (COMMA . 
(primary . 1)) (RANGE . (primary . 1)) (THEN . (primary . 1)) (WITH . (primary 
. 1)) (BAR . (primary . 1)) (EQUAL_GREATER . (primary . 1)) (IS . (primary . 
1)) (IN . (primary . 1)) (NOT . (primary . 1)) (EQUAL . (primary . 1)) (GREATER 
. (primary . 1)) (GREATER [...]
+      ((default . error) (BAR . (discrete_choice . 3)) (EQUAL_GREATER . 
(discrete_choice . 3)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (ABS . (unary_adding_operator . 1)) (LEFT_PAREN . 
(unary_adding_operator . 1)) (NEW . (unary_adding_operator . 1)) (NOT . 
(unary_adding_operator . 1)) (NULL . (unary_adding_operator . 1)) 
(NUMERIC_LITERAL . (unary_adding_operator . 1)) (IDENTIFIER . 
(unary_adding_operator . 1)) (STRING_LITERAL . (unary_adding_operator . 1)) 
(CHARACTER_LITERAL . (unary_adding_operator . 1)))
       ((default . error) (ABS . (unary_adding_operator . 0)) (LEFT_PAREN . 
(unary_adding_operator . 0)) (NEW . (unary_adding_operator . 0)) (NOT . 
(unary_adding_operator . 0)) (NULL . (unary_adding_operator . 0)) 
(NUMERIC_LITERAL . (unary_adding_operator . 0)) (IDENTIFIER . 
(unary_adding_operator . 0)) (STRING_LITERAL . (unary_adding_operator . 0)) 
(CHARACTER_LITERAL . (unary_adding_operator . 0)))
       ((default . error) (OF . (primary . 0)) (COLON_EQUAL . (primary . 0)) 
(DO . (primary . 0)) (LOOP . (primary . 0)) (ELSIF . (primary . 0)) (ELSE . 
(primary . 0)) (DIGITS . (primary . 0)) (RIGHT_PAREN . (primary . 0)) (COMMA . 
(primary . 0)) (RANGE . (primary . 0)) (THEN . (primary . 0)) (WITH . (primary 
. 0)) (BAR . (primary . 0)) (EQUAL_GREATER . (primary . 0)) (IS . (primary . 
0)) (IN . (primary . 0)) (NOT . (primary . 0)) (EQUAL . (primary . 0)) (GREATER 
. (primary . 0)) (GREATER [...]
-      ((default . error) (EQUAL_GREATER .  376) (RIGHT_PAREN . (name . 0)) 
(COMMA . (name . 0)) (STAR_STAR . (name . 0)) (STAR . (name . 0)) (SLASH . 
(name . 0)) (REM . (name . 0)) (MOD . (name . 0)) (SLASH_EQUAL . (name . 0)) 
(LESS_EQUAL . (name . 0)) (LESS . (name . 0)) (GREATER_EQUAL . (name . 0)) 
(GREATER . (name . 0)) (EQUAL . (name . 0)) (NOT . (name . 0)) (IN . (name . 
0)) (AMPERSAND . (name . 0)) (MINUS . (name . 0)) (PLUS . (name . 0)) 
(LEFT_PAREN . (name . 0)) (AND . (name . 0) [...]
+      ((default . error) (SEMICOLON . (name . 1)) (IS . (name . 1)) (WITH . 
(name . 1)) (RANGE . (name . 1)) (TICK . (name . 1)) (LEFT_PAREN . (name . 1)) 
(DOT . (name . 1)) (PLUS . (name . 1)) (MINUS . (name . 1)) (AMPERSAND . (name 
. 1)) (DOT_DOT . (name . 1)) (IN . (name . 1)) (NOT . (name . 1)) (EQUAL . 
(name . 1)) (GREATER . (name . 1)) (GREATER_EQUAL . (name . 1)) (LESS . (name . 
1)) (LESS_EQUAL . (name . 1)) (SLASH_EQUAL . (name . 1)) (RIGHT_PAREN . (name . 
1)) (COMMA . (name . 1) [...]
       ((default . error) (OF . (primary . 2)) (COLON_EQUAL . (primary . 2)) 
(DO . (primary . 2)) (LOOP . (primary . 2)) (ELSIF . (primary . 2)) (ELSE . 
(primary . 2)) (DIGITS . (primary . 2)) (RIGHT_PAREN . (primary . 2)) (COMMA . 
(primary . 2)) (RANGE . (primary . 2)) (THEN . (primary . 2)) (WITH . (primary 
. 2)) (BAR . (primary . 2)) (EQUAL_GREATER . (primary . 2)) (IS . (primary . 
2)) (IN . (primary . 2)) (NOT . (primary . 2)) (EQUAL . (primary . 2)) (GREATER 
. (primary . 2)) (GREATER [...]
-      ((default . error) (COMMA . (conditional_quantified_expression . 1)) 
(RIGHT_PAREN . (conditional_quantified_expression . 1)))
-      ((default . error) (COMMA . (pragma_argument_association . 2)) 
(RIGHT_PAREN . (pragma_argument_association . 2)))
-      ((default . error) (COMMA . (pragma_argument_association . 1)) 
(RIGHT_PAREN . (pragma_argument_association . 1)))
-      ((default . error) (OF . (term . 0)) (COLON_EQUAL . (term . 0)) (DO . 
(term . 0)) (LOOP . (term . 0)) (ELSIF . (term . 0)) (ELSE . (term . 0)) 
(DIGITS . (term . 0)) (RIGHT_PAREN . (term . 0)) (COMMA . (term . 0)) (RANGE . 
(term . 0)) (THEN . (term . 0)) (WITH . (term . 0)) (BAR . (term . 0)) 
(EQUAL_GREATER . (term . 0)) (IS . (term . 0)) (IN . (term . 0)) (NOT . (term . 
0)) (EQUAL . (term . 0)) (GREATER . (term . 0)) (GREATER_EQUAL . (term . 0)) 
(LESS . (term . 0)) (LESS_EQUAL . (t [...]
-      ((default . error) (COMMA . (conditional_quantified_expression . 0)) 
(RIGHT_PAREN . (conditional_quantified_expression . 0)))
-      ((default . error) (DOT .  90) (OF . (primary . 3)) (COLON_EQUAL . 
(primary . 3)) (DO . (primary . 3)) (LOOP . (primary . 3)) (BAR . (primary . 
3)) (COMMA . (primary . 3)) (ELSIF . (primary . 3)) (ELSE . (primary . 3)) 
(EQUAL_GREATER . (primary . 3)) (RIGHT_PAREN . (primary . 3)) (DIGITS . 
(primary . 3)) (RANGE . (primary . 3)) (THEN . (primary . 3)) (DOT_DOT . 
(primary . 3)) (WITH . (primary . 3)) (IS . (primary . 3)) (IN . (primary . 3)) 
(NOT . (primary . 3)) (EQUAL . (primary .  [...]
-      ((default . error) (RIGHT_PAREN . (pragma_argument_association_list . 
0)) (COMMA . (pragma_argument_association_list . 0)))
-      ((default . error) (COMMA .  375) (RIGHT_PAREN .  374))
-      ((default . error) (OF . (factor . 1)) (COLON_EQUAL . (factor . 1)) (DO 
. (factor . 1)) (LOOP . (factor . 1)) (ELSIF . (factor . 1)) (ELSE . (factor . 
1)) (DIGITS . (factor . 1)) (COMMA . (factor . 1)) (RIGHT_PAREN . (factor . 1)) 
(RANGE . (factor . 1)) (THEN . (factor . 1)) (WITH . (factor . 1)) (BAR . 
(factor . 1)) (EQUAL_GREATER . (factor . 1)) (IS . (factor . 1)) (SLASH_EQUAL . 
(factor . 1)) (LESS_EQUAL . (factor . 1)) (LESS . (factor . 1)) (GREATER_EQUAL 
. (factor . 1)) (GREAT [...]
-      ((default . error) (COMMA . (conditional_quantified_expression . 2)) 
(RIGHT_PAREN . (conditional_quantified_expression . 2)))
-      ((default . error) (DO . (relation . 4)) (LOOP . (relation . 4)) (ELSIF 
. (relation . 4)) (ELSE . (relation . 4)) (EQUAL_GREATER . (relation . 4)) 
(DIGITS . (relation . 4)) (RIGHT_PAREN . (relation . 4)) (COMMA . (relation . 
4)) (RANGE . (relation . 4)) (THEN . (relation . 4)) (SEMICOLON . (relation . 
4)) (WITH . (relation . 4)) (IS . (relation . 4)) (AND . (relation . 4)) (OR . 
(relation . 4)) (XOR . (relation . 4)))
-      ((default . error) (DO . (expression . 1)) (LOOP . (expression . 1)) 
(XOR . (expression . 1)) (OR . (expression . 1)) (AND . ( 372 (expression . 
1))) (ELSIF . (expression . 1)) (ELSE . (expression . 1)) (EQUAL_GREATER . 
(expression . 1)) (DIGITS . (expression . 1)) (COMMA . (expression . 1)) 
(RIGHT_PAREN . (expression . 1)) (RANGE . (expression . 1)) (THEN . (expression 
. 1)) (WITH . (expression . 1)) (SEMICOLON . (expression . 1)) (IS . 
(expression . 1)))
-      ((default . error) (DO . (expression . 2)) (LOOP . (expression . 2)) 
(XOR . (expression . 2)) (OR . (expression . 2)) (AND . ( 371 (expression . 
2))) (ELSIF . (expression . 2)) (ELSE . (expression . 2)) (EQUAL_GREATER . 
(expression . 2)) (DIGITS . (expression . 2)) (COMMA . (expression . 2)) 
(RIGHT_PAREN . (expression . 2)) (RANGE . (expression . 2)) (THEN . (expression 
. 2)) (WITH . (expression . 2)) (SEMICOLON . (expression . 2)) (IS . 
(expression . 2)))
-      ((default . error) (DO . (expression . 3)) (LOOP . (expression . 3)) 
(XOR . (expression . 3)) (OR . ( 370 (expression . 3))) (AND . (expression . 
3)) (ELSIF . (expression . 3)) (ELSE . (expression . 3)) (EQUAL_GREATER . 
(expression . 3)) (DIGITS . (expression . 3)) (COMMA . (expression . 3)) 
(RIGHT_PAREN . (expression . 3)) (RANGE . (expression . 3)) (THEN . (expression 
. 3)) (WITH . (expression . 3)) (SEMICOLON . (expression . 3)) (IS . 
(expression . 3)))
-      ((default . error) (DO . (expression . 4)) (LOOP . (expression . 4)) 
(XOR . (expression . 4)) (OR . ( 369 (expression . 4))) (AND . (expression . 
4)) (ELSIF . (expression . 4)) (ELSE . (expression . 4)) (EQUAL_GREATER . 
(expression . 4)) (DIGITS . (expression . 4)) (COMMA . (expression . 4)) 
(RIGHT_PAREN . (expression . 4)) (RANGE . (expression . 4)) (THEN . (expression 
. 4)) (WITH . (expression . 4)) (SEMICOLON . (expression . 4)) (IS . 
(expression . 4)))
-      ((default . error) (DO . (expression . 5)) (LOOP . (expression . 5)) 
(XOR . ( 368 (expression . 5))) (OR . (expression . 5)) (AND . (expression . 
5)) (ELSIF . (expression . 5)) (ELSE . (expression . 5)) (EQUAL_GREATER . 
(expression . 5)) (DIGITS . (expression . 5)) (COMMA . (expression . 5)) 
(RIGHT_PAREN . (expression . 5)) (RANGE . (expression . 5)) (THEN . (expression 
. 5)) (WITH . (expression . 5)) (SEMICOLON . (expression . 5)) (IS . 
(expression . 5)))
-      ((default . error) (DO . (expression . 0)) (LOOP . (expression . 0)) 
(XOR . ( 367 (expression . 0))) (OR . ( 366 (expression . 0))) (AND . ( 365 
(expression . 0))) (ELSIF . (expression . 0)) (ELSE . (expression . 0)) 
(EQUAL_GREATER . (expression . 0)) (DIGITS . (expression . 0)) (COMMA . 
(expression . 0)) (RIGHT_PAREN . (expression . 0)) (RANGE . (expression . 0)) 
(THEN . (expression . 0)) (WITH . (expression . 0)) (SEMICOLON . (expression . 
0)) (IS . (expression . 0)))
-      ((default . error) (IN .  275) (NOT .  276) (DO . (relation . 0)) (LOOP 
. (relation . 0)) (COMMA . (relation . 0)) (ELSIF . (relation . 0)) (ELSE . 
(relation . 0)) (EQUAL_GREATER . (relation . 0)) (RIGHT_PAREN . (relation . 0)) 
(DIGITS . (relation . 0)) (RANGE . (relation . 0)) (THEN . (relation . 0)) 
(SEMICOLON . (relation . 0)) (WITH . (relation . 0)) (IS . (relation . 0)) (AND 
. (relation . 0)) (OR . (relation . 0)) (XOR . (relation . 0)) (EQUAL .  278) 
(SLASH_EQUAL .  283) (LES [...]
-      ((default . error) (OF . (term_list . 0)) (COLON_EQUAL . (term_list . 
0)) (DO . (term_list . 0)) (LOOP . (term_list . 0)) (ELSIF . (term_list . 0)) 
(ELSE . (term_list . 0)) (DIGITS . (term_list . 0)) (COMMA . (term_list . 0)) 
(RIGHT_PAREN . (term_list . 0)) (RANGE . (term_list . 0)) (THEN . (term_list . 
0)) (WITH . (term_list . 0)) (BAR . (term_list . 0)) (EQUAL_GREATER . 
(term_list . 0)) (IS . (term_list . 0)) (SLASH_EQUAL . (term_list . 0)) 
(LESS_EQUAL . (term_list . 0)) (LESS .  [...]
-      ((default . error) (OF . (simple_expression . 1)) (COLON_EQUAL . 
(simple_expression . 1)) (DO . (simple_expression . 1)) (LOOP . 
(simple_expression . 1)) (ELSIF . (simple_expression . 1)) (ELSE . 
(simple_expression . 1)) (DIGITS . (simple_expression . 1)) (RIGHT_PAREN . 
(simple_expression . 1)) (COMMA . (simple_expression . 1)) (RANGE . 
(simple_expression . 1)) (THEN . (simple_expression . 1)) (WITH . 
(simple_expression . 1)) (BAR . (simple_expression . 1)) (EQUAL_GREATER . 
(simple [...]
-      ((default . error) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (IS .  353))
-      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED .  301) (TASK 
.  303) (PACKAGE .  300))
-      ((default . error) (NUMERIC_LITERAL .  155) (NULL .  297) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (BAR . (discrete_choice . 3)) (EQUAL_GREATER . 
(discrete_choice . 3)))
-      ((default . error) (SEMICOLON . (name . 1)) (IS . (name . 1)) (WITH . 
(name . 1)) (RANGE . (name . 1)) (TICK . (name . 1)) (LEFT_PAREN . (name . 1)) 
(DOT . (name . 1)) (PLUS . (name . 1)) (MINUS . (name . 1)) (AMPERSAND . (name 
. 1)) (DOT_DOT . (name . 1)) (IN . (name . 1)) (NOT . (name . 1)) (EQUAL . 
(name . 1)) (GREATER . (name . 1)) (GREATER_EQUAL . (name . 1)) (LESS . (name . 
1)) (LESS_EQUAL . (name . 1)) (SLASH_EQUAL . (name . 1)) (RIGHT_PAREN . (name . 
1)) (COMMA . (name . 1) [...]
       ((default . error) (SEMICOLON . (association_list . 0)) (IS . 
(association_list . 0)) (RIGHT_PAREN . (association_list . 0)) (COMMA . 
(association_list . 0)))
-      ((default . error) (COMMA .  273) (SEMICOLON . (aspect_specification_opt 
. 1)) (IS . (aspect_specification_opt . 1)))
+      ((default . error) (COMMA .  267) (RIGHT_PAREN .  367))
+      ((default . error) (RIGHT_PAREN . (conditional_quantified_expression . 
1)))
       ((default . error) (BAR . (discrete_choice . 0)) (EQUAL_GREATER . 
(discrete_choice . 0)))
-      ((default . error) (AND .  295) (EQUAL_GREATER . (choice_expression . 
1)) (BAR . (choice_expression . 1)))
-      ((default . error) (OR .  294) (EQUAL_GREATER . (choice_expression . 2)) 
(BAR . (choice_expression . 2)))
-      ((default . error) (XOR .  293) (EQUAL_GREATER . (choice_expression . 
3)) (BAR . (choice_expression . 3)))
-      ((default . error) (AND .  292) (EQUAL_GREATER . (choice_expression . 
4)) (BAR . (choice_expression . 4)))
-      ((default . error) (OR .  291) (EQUAL_GREATER . (choice_expression . 5)) 
(BAR . (choice_expression . 5)))
-      ((default . error) (XOR .  290) (OR .  289) (AND .  288) (EQUAL_GREATER 
. (choice_expression . 0)) (BAR . (choice_expression . 0)))
+      ((default . error) (AND .  366) (EQUAL_GREATER . (choice_expression . 
1)) (BAR . (choice_expression . 1)))
+      ((default . error) (OR .  365) (EQUAL_GREATER . (choice_expression . 2)) 
(BAR . (choice_expression . 2)))
+      ((default . error) (XOR .  364) (EQUAL_GREATER . (choice_expression . 
3)) (BAR . (choice_expression . 3)))
+      ((default . error) (AND .  363) (EQUAL_GREATER . (choice_expression . 
4)) (BAR . (choice_expression . 4)))
+      ((default . error) (OR .  362) (EQUAL_GREATER . (choice_expression . 5)) 
(BAR . (choice_expression . 5)))
+      ((default . error) (XOR .  361) (OR .  360) (AND .  359) (EQUAL_GREATER 
. (choice_expression . 0)) (BAR . (choice_expression . 0)))
+      ((default . error) (RIGHT_PAREN .  358))
       ((default . error) (EQUAL_GREATER . (discrete_choice_list . 1)) (BAR . 
(discrete_choice_list . 1)))
-      ((default . error) (BAR .  286) (EQUAL_GREATER .  287))
-      ((default . error) (LOOP . (expression_opt . 1)) (RIGHT_PAREN . 
(expression_opt . 1)) (COMMA . (expression_opt . 1)) (SEMICOLON . 
(expression_opt . 1)) (THEN . (expression_opt . 1)) (IS . (expression_opt . 1)))
+      ((default . error) (BAR .  356) (EQUAL_GREATER .  357))
+      ((default . error) (DO . (expression_opt . 1)) (LOOP . (expression_opt . 
1)) (XOR . (expression_opt . 1)) (OR . (expression_opt . 1)) (AND . 
(expression_opt . 1)) (ELSIF . (expression_opt . 1)) (ELSE . (expression_opt . 
1)) (EQUAL_GREATER . (expression_opt . 1)) (DIGITS . (expression_opt . 1)) 
(RIGHT_PAREN . (expression_opt . 1)) (COMMA . (expression_opt . 1)) (RANGE . 
(expression_opt . 1)) (THEN . (expression_opt . 1)) (WITH . (expression_opt . 
1)) (SEMICOLON . (expression_opt . 1 [...]
       ((default . error) (SEMICOLON . (association_opt . 5)) (IS . 
(association_opt . 5)) (COMMA . (association_opt . 5)) (RIGHT_PAREN . 
(association_opt . 5)))
-      ((default . error) (DOT .  90) (DO . (primary . 3)) (LOOP . (primary . 
3)) (ELSIF . (primary . 3)) (ELSE . (primary . 3)) (DIGITS . (primary . 3)) 
(RANGE . (primary . 3)) (THEN . (primary . 3)) (SEMICOLON . (primary . 3)) (IS 
. (primary . 3)) (WITH . (primary . 3)) (IN . (primary . 3)) (NOT . (primary . 
3)) (RIGHT_PAREN . (primary . 3)) (COMMA . (primary . 3)) (PLUS . (primary . 
3)) (MINUS . (primary . 3)) (AMPERSAND . (primary . 3)) (DOT_DOT . (primary . 
3)) (MOD . (primary . 3))  [...]
+      ((default . error) (OF . (term . 0)) (COLON_EQUAL . (term . 0)) (DO . 
(term . 0)) (LOOP . (term . 0)) (ELSIF . (term . 0)) (ELSE . (term . 0)) 
(DIGITS . (term . 0)) (RIGHT_PAREN . (term . 0)) (COMMA . (term . 0)) (RANGE . 
(term . 0)) (THEN . (term . 0)) (WITH . (term . 0)) (BAR . (term . 0)) 
(EQUAL_GREATER . (term . 0)) (IS . (term . 0)) (IN . (term . 0)) (NOT . (term . 
0)) (EQUAL . (term . 0)) (GREATER . (term . 0)) (GREATER_EQUAL . (term . 0)) 
(LESS . (term . 0)) (LESS_EQUAL . (t [...]
+      ((default . error) (RIGHT_PAREN . (conditional_quantified_expression . 
0)))
+      ((default . error) (DOT .  90) (DO . (primary . 3)) (LOOP . (primary . 
3)) (ELSIF . (primary . 3)) (ELSE . (primary . 3)) (DIGITS . (primary . 3)) 
(RANGE . (primary . 3)) (THEN . (primary . 3)) (SEMICOLON . (primary . 3)) (IS 
. (primary . 3)) (WITH . (primary . 3)) (IN . (primary . 3)) (NOT . (primary . 
3)) (RIGHT_PAREN . (primary . 3)) (COMMA . (primary . 3)) (PLUS . (primary . 
3)) (MINUS . (primary . 3)) (AMPERSAND . (primary . 3)) (DOT_DOT . (primary . 
3)) (MOD . (primary . 3))  [...]
+      ((default . error) (OF . (factor . 1)) (COLON_EQUAL . (factor . 1)) (DO 
. (factor . 1)) (LOOP . (factor . 1)) (ELSIF . (factor . 1)) (ELSE . (factor . 
1)) (DIGITS . (factor . 1)) (COMMA . (factor . 1)) (RIGHT_PAREN . (factor . 1)) 
(RANGE . (factor . 1)) (THEN . (factor . 1)) (WITH . (factor . 1)) (BAR . 
(factor . 1)) (EQUAL_GREATER . (factor . 1)) (IS . (factor . 1)) (SLASH_EQUAL . 
(factor . 1)) (LESS_EQUAL . (factor . 1)) (LESS . (factor . 1)) (GREATER_EQUAL 
. (factor . 1)) (GREAT [...]
+      ((default . error) (RIGHT_PAREN . (conditional_quantified_expression . 
2)))
+      ((default . error) (DO . (relation . 4)) (LOOP . (relation . 4)) (ELSIF 
. (relation . 4)) (ELSE . (relation . 4)) (EQUAL_GREATER . (relation . 4)) 
(DIGITS . (relation . 4)) (RIGHT_PAREN . (relation . 4)) (COMMA . (relation . 
4)) (RANGE . (relation . 4)) (THEN . (relation . 4)) (WITH . (relation . 4)) 
(SEMICOLON . (relation . 4)) (IS . (relation . 4)) (AND . (relation . 4)) (OR . 
(relation . 4)) (XOR . (relation . 4)))
       ((default . error) (BAR . (discrete_choice . 2)) (EQUAL_GREATER . 
(discrete_choice . 2)))
-      ((default . error) (IN .  275) (NOT .  276) (SEMICOLON . (relation . 0)) 
(IS . (relation . 0)) (WITH . (relation . 0)) (RIGHT_PAREN . (relation . 0)) 
(COMMA . (relation . 0)) (DOT_DOT .  277) (BAR . (choice_relation . 1)) 
(EQUAL_GREATER . (choice_relation . 1)) (AND . ((choice_relation . 1) (relation 
. 0))) (OR . ((choice_relation . 1) (relation . 0))) (XOR . ((choice_relation . 
1) (relation . 0))) (EQUAL .  278) (SLASH_EQUAL .  283) (LESS .  281) 
(LESS_EQUAL .  282) (GREATER .  27 [...]
+      ((default . error) (DO . (expression . 1)) (LOOP . (expression . 1)) 
(XOR . (expression . 1)) (OR . (expression . 1)) (AND . ( 353 (expression . 
1))) (ELSIF . (expression . 1)) (ELSE . (expression . 1)) (EQUAL_GREATER . 
(expression . 1)) (DIGITS . (expression . 1)) (COMMA . (expression . 1)) 
(RIGHT_PAREN . (expression . 1)) (RANGE . (expression . 1)) (THEN . (expression 
. 1)) (SEMICOLON . (expression . 1)) (WITH . (expression . 1)) (IS . 
(expression . 1)))
+      ((default . error) (DO . (expression . 2)) (LOOP . (expression . 2)) 
(XOR . (expression . 2)) (OR . (expression . 2)) (AND . ( 352 (expression . 
2))) (ELSIF . (expression . 2)) (ELSE . (expression . 2)) (EQUAL_GREATER . 
(expression . 2)) (DIGITS . (expression . 2)) (COMMA . (expression . 2)) 
(RIGHT_PAREN . (expression . 2)) (RANGE . (expression . 2)) (THEN . (expression 
. 2)) (SEMICOLON . (expression . 2)) (WITH . (expression . 2)) (IS . 
(expression . 2)))
+      ((default . error) (DO . (expression . 3)) (LOOP . (expression . 3)) 
(XOR . (expression . 3)) (OR . ( 351 (expression . 3))) (AND . (expression . 
3)) (ELSIF . (expression . 3)) (ELSE . (expression . 3)) (EQUAL_GREATER . 
(expression . 3)) (DIGITS . (expression . 3)) (COMMA . (expression . 3)) 
(RIGHT_PAREN . (expression . 3)) (RANGE . (expression . 3)) (THEN . (expression 
. 3)) (SEMICOLON . (expression . 3)) (WITH . (expression . 3)) (IS . 
(expression . 3)))
+      ((default . error) (DO . (expression . 4)) (LOOP . (expression . 4)) 
(XOR . (expression . 4)) (OR . ( 350 (expression . 4))) (AND . (expression . 
4)) (ELSIF . (expression . 4)) (ELSE . (expression . 4)) (EQUAL_GREATER . 
(expression . 4)) (DIGITS . (expression . 4)) (COMMA . (expression . 4)) 
(RIGHT_PAREN . (expression . 4)) (RANGE . (expression . 4)) (THEN . (expression 
. 4)) (SEMICOLON . (expression . 4)) (WITH . (expression . 4)) (IS . 
(expression . 4)))
+      ((default . error) (DO . (expression . 5)) (LOOP . (expression . 5)) 
(XOR . ( 349 (expression . 5))) (OR . (expression . 5)) (AND . (expression . 
5)) (ELSIF . (expression . 5)) (ELSE . (expression . 5)) (EQUAL_GREATER . 
(expression . 5)) (DIGITS . (expression . 5)) (COMMA . (expression . 5)) 
(RIGHT_PAREN . (expression . 5)) (RANGE . (expression . 5)) (THEN . (expression 
. 5)) (SEMICOLON . (expression . 5)) (WITH . (expression . 5)) (IS . 
(expression . 5)))
+      ((default . error) (DO . (expression . 0)) (LOOP . (expression . 0)) 
(XOR . ( 348 (expression . 0))) (OR . ( 347 (expression . 0))) (AND . ( 346 
(expression . 0))) (ELSIF . (expression . 0)) (ELSE . (expression . 0)) 
(EQUAL_GREATER . (expression . 0)) (DIGITS . (expression . 0)) (COMMA . 
(expression . 0)) (RIGHT_PAREN . (expression . 0)) (RANGE . (expression . 0)) 
(THEN . (expression . 0)) (SEMICOLON . (expression . 0)) (WITH . (expression . 
0)) (IS . (expression . 0)))
+      ((default . error) (IN .  336) (NOT .  337) (SEMICOLON . (relation . 0)) 
(IS . (relation . 0)) (WITH . (relation . 0)) (RIGHT_PAREN . (relation . 0)) 
(COMMA . (relation . 0)) (DOT_DOT .  338) (BAR . (choice_relation . 1)) 
(EQUAL_GREATER . (choice_relation . 1)) (AND . ((choice_relation . 1) (relation 
. 0))) (OR . ((choice_relation . 1) (relation . 0))) (XOR . ((choice_relation . 
1) (relation . 0))) (EQUAL .  339) (SLASH_EQUAL .  344) (LESS .  342) 
(LESS_EQUAL .  343) (GREATER .  34 [...]
+      ((default . error) (OF . (term_list . 0)) (COLON_EQUAL . (term_list . 
0)) (DO . (term_list . 0)) (LOOP . (term_list . 0)) (ELSIF . (term_list . 0)) 
(ELSE . (term_list . 0)) (DIGITS . (term_list . 0)) (COMMA . (term_list . 0)) 
(RIGHT_PAREN . (term_list . 0)) (RANGE . (term_list . 0)) (THEN . (term_list . 
0)) (WITH . (term_list . 0)) (BAR . (term_list . 0)) (EQUAL_GREATER . 
(term_list . 0)) (IS . (term_list . 0)) (SLASH_EQUAL . (term_list . 0)) 
(LESS_EQUAL . (term_list . 0)) (LESS .  [...]
+      ((default . error) (OF . (simple_expression . 1)) (COLON_EQUAL . 
(simple_expression . 1)) (DO . (simple_expression . 1)) (LOOP . 
(simple_expression . 1)) (ELSIF . (simple_expression . 1)) (ELSE . 
(simple_expression . 1)) (DIGITS . (simple_expression . 1)) (RIGHT_PAREN . 
(simple_expression . 1)) (COMMA . (simple_expression . 1)) (RANGE . 
(simple_expression . 1)) (THEN . (simple_expression . 1)) (WITH . 
(simple_expression . 1)) (BAR . (simple_expression . 1)) (EQUAL_GREATER . 
(simple [...]
+      ((default . error) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (IS .  323))
+      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED .  271) (TASK 
.  273) (PACKAGE .  270))
+      ((default . error) (COMMA .  267) (SEMICOLON . (aspect_specification_opt 
. 1)) (IS . (aspect_specification_opt . 1)))
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
-      ((default . error) (COMMA .  273) (RIGHT_PAREN .  272))
-      ((default . error) (RIGHT_PAREN .  271))
+      ((default . error) (COMMA .  267) (RIGHT_PAREN .  266))
+      ((default . error) (RIGHT_PAREN .  265))
       ((default . error) (BAR . (discrete_choice . 2)) (EQUAL_GREATER . 
(discrete_choice . 2)) (RIGHT_PAREN . (range_list . 0)) (COMMA . (range_list . 
0)))
-      ((default . error) (COMMA .  270) (RIGHT_PAREN .  269))
+      ((default . error) (COMMA .  264) (RIGHT_PAREN .  263))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (COMMA .  120) (SEMICOLON .  267))
+      ((default . error) (COMMA .  120) (SEMICOLON .  261))
       ((default . error) ($EOI . (with_clause . 1)) (FUNCTION . (with_clause . 
1)) (GENERIC . (with_clause . 1)) (LIMITED . (with_clause . 1)) (NOT . 
(with_clause . 1)) (OVERRIDING . (with_clause . 1)) (PACKAGE . (with_clause . 
1)) (PRAGMA . (with_clause . 1)) (PRIVATE . (with_clause . 1)) (PROCEDURE . 
(with_clause . 1)) (SEPARATE . (with_clause . 1)) (USE . (with_clause . 1)) 
(WITH . (with_clause . 1)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (BOX .  260) (SEMICOLON . 
(discriminant_specification_opt . 0)) (RIGHT_PAREN . 
(discriminant_specification_opt . 0)) (IDENTIFIER .  77))
-      ((default . error) (IS .  258) (SEMICOLON . (aspect_specification_opt . 
0)) (WITH .  109))
-      ((default . error) (ABSTRACT .  253) (BOX .  255) (NULL .  254) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
-      ((default . error) (SEMICOLON .  252))
-      ((default . error) (DOT .  90) (TICK .  91) (IS .  251) (LEFT_PAREN .  
107))
+      ((default . error) (BOX .  254) (SEMICOLON . 
(discriminant_specification_opt . 0)) (RIGHT_PAREN . 
(discriminant_specification_opt . 0)) (IDENTIFIER .  77))
+      ((default . error) (IS .  252) (SEMICOLON . (aspect_specification_opt . 
0)) (WITH .  109))
+      ((default . error) (ABSTRACT .  247) (BOX .  249) (NULL .  248) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (SEMICOLON .  246))
+      ((default . error) (DOT .  90) (TICK .  91) (IS .  245) (LEFT_PAREN .  
107))
       ((default . error) (COLON . (identifier_list . 1)) (COMMA . 
(identifier_list . 1)))
-      ((default . error) (OUT .  250) (ACCESS . (mode_opt . 1)) (NOT . 
(mode_opt . 1)) (IDENTIFIER . (mode_opt . 1)) (STRING_LITERAL . (mode_opt . 1)) 
(CHARACTER_LITERAL . (mode_opt . 1)))
+      ((default . error) (OUT .  244) (ACCESS . (mode_opt . 1)) (NOT . 
(mode_opt . 1)) (IDENTIFIER . (mode_opt . 1)) (STRING_LITERAL . (mode_opt . 1)) 
(CHARACTER_LITERAL . (mode_opt . 1)))
       ((default . error) (ACCESS . (mode_opt . 3)) (NOT . (mode_opt . 3)) 
(IDENTIFIER . (mode_opt . 3)) (STRING_LITERAL . (mode_opt . 3)) 
(CHARACTER_LITERAL . (mode_opt . 3)))
-      ((default . error) (IDENTIFIER . (null_exclusion_opt . 0)) 
(STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (ACCESS . (null_exclusion_opt . 0)) (NOT .  232))
-      ((default . error) (IDENTIFIER . (null_exclusion_opt . 0)) 
(STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (DO . (null_exclusion_opt . 0)) (RIGHT_PAREN . 
(null_exclusion_opt . 0)) (COLON_EQUAL . (null_exclusion_opt . 0)) (RENAMES . 
(null_exclusion_opt . 0)) (WITH . (null_exclusion_opt . 0)) (SEMICOLON . 
(null_exclusion_opt . 0)) (IS . (null_exclusion_opt . 0)) (ACCESS . 
(null_exclusion_opt . 0)) (NOT .  232))
+      ((default . error) (IDENTIFIER . (null_exclusion_opt . 0)) 
(STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (ACCESS . (null_exclusion_opt . 0)) (NOT .  226))
+      ((default . error) (IDENTIFIER . (null_exclusion_opt . 0)) 
(STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (DO . (null_exclusion_opt . 0)) (RIGHT_PAREN . 
(null_exclusion_opt . 0)) (COLON_EQUAL . (null_exclusion_opt . 0)) (RENAMES . 
(null_exclusion_opt . 0)) (WITH . (null_exclusion_opt . 0)) (SEMICOLON . 
(null_exclusion_opt . 0)) (IS . (null_exclusion_opt . 0)) (ACCESS . 
(null_exclusion_opt . 0)) (NOT .  226))
       ((default . error) (DO . (attribute_designator . 1)) (ELSIF . 
(attribute_designator . 1)) (ELSE . (attribute_designator . 1)) (DIGITS . 
(attribute_designator . 1)) (RANGE . (attribute_designator . 1)) (THEN . 
(attribute_designator . 1)) (USE . (attribute_designator . 1)) (COLON_EQUAL . 
(attribute_designator . 1)) (CHARACTER_LITERAL . (attribute_designator . 1)) 
(STRING_LITERAL . (attribute_designator . 1)) (IDENTIFIER . 
(attribute_designator . 1)) (LESS_LESS . (attribute_designator [...]
       ((default . error) (DO . (attribute_designator . 2)) (ELSIF . 
(attribute_designator . 2)) (ELSE . (attribute_designator . 2)) (DIGITS . 
(attribute_designator . 2)) (RANGE . (attribute_designator . 2)) (THEN . 
(attribute_designator . 2)) (USE . (attribute_designator . 2)) (COLON_EQUAL . 
(attribute_designator . 2)) (CHARACTER_LITERAL . (attribute_designator . 2)) 
(STRING_LITERAL . (attribute_designator . 2)) (IDENTIFIER . 
(attribute_designator . 2)) (LESS_LESS . (attribute_designator [...]
       ((default . error) (DO . (attribute_designator . 3)) (ELSIF . 
(attribute_designator . 3)) (ELSE . (attribute_designator . 3)) (DIGITS . 
(attribute_designator . 3)) (RANGE . (attribute_designator . 3)) (THEN . 
(attribute_designator . 3)) (USE . (attribute_designator . 3)) (COLON_EQUAL . 
(attribute_designator . 3)) (CHARACTER_LITERAL . (attribute_designator . 3)) 
(STRING_LITERAL . (attribute_designator . 3)) (IDENTIFIER . 
(attribute_designator . 3)) (LESS_LESS . (attribute_designator [...]
@@ -2045,92 +2039,68 @@
       ((default . error) (DO . (qualified_expression . 0)) (ELSIF . 
(qualified_expression . 0)) (ELSE . (qualified_expression . 0)) (DIGITS . 
(qualified_expression . 0)) (RANGE . (qualified_expression . 0)) (THEN . 
(qualified_expression . 0)) (USE . (qualified_expression . 0)) (COLON_EQUAL . 
(qualified_expression . 0)) (CHARACTER_LITERAL . (qualified_expression . 0)) 
(STRING_LITERAL . (qualified_expression . 0)) (IDENTIFIER . 
(qualified_expression . 0)) (LESS_LESS . (qualified_expression [...]
       ((default . error) (DO . (attribute_reference . 0)) (ELSIF . 
(attribute_reference . 0)) (ELSE . (attribute_reference . 0)) (DIGITS . 
(attribute_reference . 0)) (RANGE . (attribute_reference . 0)) (THEN . 
(attribute_reference . 0)) (USE . (attribute_reference . 0)) (COLON_EQUAL . 
(attribute_reference . 0)) (CHARACTER_LITERAL . (attribute_reference . 0)) 
(STRING_LITERAL . (attribute_reference . 0)) (IDENTIFIER . (attribute_reference 
. 0)) (LESS_LESS . (attribute_reference . 0)) (WHIL [...]
       ((default . error) (DO . (attribute_designator . 0)) (ELSIF . 
(attribute_designator . 0)) (ELSE . (attribute_designator . 0)) (DIGITS . 
(attribute_designator . 0)) (RANGE . (attribute_designator . 0)) (THEN . 
(attribute_designator . 0)) (USE . (attribute_designator . 0)) (COLON_EQUAL . 
(attribute_designator . 0)) (CHARACTER_LITERAL . (attribute_designator . 0)) 
(STRING_LITERAL . (attribute_designator . 0)) (IDENTIFIER . 
(attribute_designator . 0)) (LESS_LESS . (attribute_designator [...]
-      ((default . error) (DO . (selected_component . 3)) (RIGHT_PAREN . 
(selected_component . 3)) (BAR . (selected_component . 3)) (ELSIF . 
(selected_component . 3)) (ELSE . (selected_component . 3)) (EQUAL_GREATER . 
(selected_component . 3)) (DIGITS . (selected_component . 3)) (RANGE . 
(selected_component . 3)) (THEN . (selected_component . 3)) (DOT_DOT . 
(selected_component . 3)) (IN . (selected_component . 3)) (NOT . 
(selected_component . 3)) (EQUAL . (selected_component . 3)) (GREATE [...]
-      ((default . error) (DO . (selected_component . 0)) (RIGHT_PAREN . 
(selected_component . 0)) (BAR . (selected_component . 0)) (ELSIF . 
(selected_component . 0)) (ELSE . (selected_component . 0)) (EQUAL_GREATER . 
(selected_component . 0)) (DIGITS . (selected_component . 0)) (RANGE . 
(selected_component . 0)) (THEN . (selected_component . 0)) (DOT_DOT . 
(selected_component . 0)) (IN . (selected_component . 0)) (NOT . 
(selected_component . 0)) (EQUAL . (selected_component . 0)) (GREATE [...]
-      ((default . error) (DO . (selected_component . 2)) (RIGHT_PAREN . 
(selected_component . 2)) (BAR . (selected_component . 2)) (ELSIF . 
(selected_component . 2)) (ELSE . (selected_component . 2)) (EQUAL_GREATER . 
(selected_component . 2)) (DIGITS . (selected_component . 2)) (RANGE . 
(selected_component . 2)) (THEN . (selected_component . 2)) (DOT_DOT . 
(selected_component . 2)) (IN . (selected_component . 2)) (NOT . 
(selected_component . 2)) (EQUAL . (selected_component . 2)) (GREATE [...]
-      ((default . error) (DO . (selected_component . 1)) (RIGHT_PAREN . 
(selected_component . 1)) (BAR . (selected_component . 1)) (ELSIF . 
(selected_component . 1)) (ELSE . (selected_component . 1)) (EQUAL_GREATER . 
(selected_component . 1)) (DIGITS . (selected_component . 1)) (RANGE . 
(selected_component . 1)) (THEN . (selected_component . 1)) (DOT_DOT . 
(selected_component . 1)) (IN . (selected_component . 1)) (NOT . 
(selected_component . 1)) (EQUAL . (selected_component . 1)) (GREATE [...]
-      ((default . error) (NULL .  245))
+      ((default . error) (DO . (selected_component . 3)) (RIGHT_PAREN . 
(selected_component . 3)) (IN . (selected_component . 3)) (NOT . 
(selected_component . 3)) (PLUS . (selected_component . 3)) (MINUS . 
(selected_component . 3)) (AMPERSAND . (selected_component . 3)) (DOT_DOT . 
(selected_component . 3)) (MOD . (selected_component . 3)) (REM . 
(selected_component . 3)) (SLASH . (selected_component . 3)) (STAR . 
(selected_component . 3)) (STAR_STAR . (selected_component . 3)) (BAR . (se 
[...]
+      ((default . error) (DO . (selected_component . 0)) (RIGHT_PAREN . 
(selected_component . 0)) (IN . (selected_component . 0)) (NOT . 
(selected_component . 0)) (PLUS . (selected_component . 0)) (MINUS . 
(selected_component . 0)) (AMPERSAND . (selected_component . 0)) (DOT_DOT . 
(selected_component . 0)) (MOD . (selected_component . 0)) (REM . 
(selected_component . 0)) (SLASH . (selected_component . 0)) (STAR . 
(selected_component . 0)) (STAR_STAR . (selected_component . 0)) (BAR . (se 
[...]
+      ((default . error) (DO . (selected_component . 2)) (RIGHT_PAREN . 
(selected_component . 2)) (IN . (selected_component . 2)) (NOT . 
(selected_component . 2)) (PLUS . (selected_component . 2)) (MINUS . 
(selected_component . 2)) (AMPERSAND . (selected_component . 2)) (DOT_DOT . 
(selected_component . 2)) (MOD . (selected_component . 2)) (REM . 
(selected_component . 2)) (SLASH . (selected_component . 2)) (STAR . 
(selected_component . 2)) (STAR_STAR . (selected_component . 2)) (BAR . (se 
[...]
+      ((default . error) (DO . (selected_component . 1)) (RIGHT_PAREN . 
(selected_component . 1)) (IN . (selected_component . 1)) (NOT . 
(selected_component . 1)) (PLUS . (selected_component . 1)) (MINUS . 
(selected_component . 1)) (AMPERSAND . (selected_component . 1)) (DOT_DOT . 
(selected_component . 1)) (MOD . (selected_component . 1)) (REM . 
(selected_component . 1)) (SLASH . (selected_component . 1)) (STAR . 
(selected_component . 1)) (STAR_STAR . (selected_component . 1)) (BAR . (se 
[...]
+      ((default . error) (NULL .  239))
       ((default . error) (DO . (parameter_and_result_profile . 3)) 
(RIGHT_PAREN . (parameter_and_result_profile . 3)) (COLON_EQUAL . 
(parameter_and_result_profile . 3)) (RENAMES . (parameter_and_result_profile . 
3)) (WITH . (parameter_and_result_profile . 3)) (SEMICOLON . 
(parameter_and_result_profile . 3)) (IS . (parameter_and_result_profile . 3)))
-      ((default . error) (ACCESS .  242) (IS . (name_opt . 0)) (SEMICOLON . 
(name_opt . 0)) (WITH . (name_opt . 0)) (RENAMES . (name_opt . 0)) (COLON_EQUAL 
. (name_opt . 0)) (RIGHT_PAREN . (name_opt . 0)) (DO . (name_opt . 0)) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (ACCESS .  236) (IS . (name_opt . 0)) (SEMICOLON . 
(name_opt . 0)) (WITH . (name_opt . 0)) (RENAMES . (name_opt . 0)) (COLON_EQUAL 
. (name_opt . 0)) (RIGHT_PAREN . (name_opt . 0)) (DO . (name_opt . 0)) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (IN . (name . 0)) (NOT . (name . 0)) (EQUAL . (name . 
0)) (GREATER . (name . 0)) (GREATER_EQUAL . (name . 0)) (LESS . (name . 0)) 
(LESS_EQUAL . (name . 0)) (SLASH_EQUAL . (name . 0)) (BAR . (name . 0)) 
(EQUAL_GREATER . (name . 0)) (AND . (name . 0)) (OR . (name . 0)) (XOR . (name 
. 0)) (RIGHT_PAREN . (name . 0)) (LEFT_PAREN . (name . 0)) (RANGE . (name . 0)) 
(TICK . (name . 0)) (DOT . (name . 0)) (PLUS . (name . 0)) (MINUS . (name . 0)) 
(AMPERSAND . (name . 0)) ( [...]
-      ((default . error) (COLON .  241) (COMMA .  96))
+      ((default . error) (COLON .  235) (COMMA .  96))
       ((default . error) (RIGHT_PAREN . (parameter_specification_list . 0)) 
(SEMICOLON . (parameter_specification_list . 0)))
-      ((default . error) (SEMICOLON .  240) (RIGHT_PAREN .  239))
+      ((default . error) (SEMICOLON .  234) (RIGHT_PAREN .  233))
       ((default . error) (COLON_EQUAL . (formal_part . 0)) (RIGHT_PAREN . 
(formal_part . 0)) (DO . (formal_part . 0)) (WHEN . (formal_part . 0)) (RENAMES 
. (formal_part . 0)) (IS . (formal_part . 0)) (SEMICOLON . (formal_part . 0)) 
(WITH . (formal_part . 0)) (RETURN . (formal_part . 0)))
-      ((default . error) (IDENTIFIER .  77))
-      ((default . error) (ACCESS . (aliased_opt . 0)) (NOT . (aliased_opt . 
0)) (IN . (aliased_opt . 0)) (OUT . (aliased_opt . 0)) (IDENTIFIER . 
(aliased_opt . 0)) (STRING_LITERAL . (aliased_opt . 0)) (CHARACTER_LITERAL . 
(aliased_opt . 0)) (ALIASED .  531))
-      ((default . error) (FUNCTION . (protected_opt . 0)) (PROCEDURE . 
(protected_opt . 0)) (PROTECTED .  528) (IDENTIFIER . 
(general_access_modifier_opt . 0)) (STRING_LITERAL . 
(general_access_modifier_opt . 0)) (CHARACTER_LITERAL . 
(general_access_modifier_opt . 0)) (ALL .  526) (CONSTANT .  527))
+      ((default . error) (RIGHT_PAREN . (parameter_specification . 0)) 
(SEMICOLON . (parameter_specification . 0)) (IDENTIFIER .  77))
+      ((default . error) (ACCESS . (aliased_opt . 0)) (NOT . (aliased_opt . 
0)) (IN . (aliased_opt . 0)) (OUT . (aliased_opt . 0)) (IDENTIFIER . 
(aliased_opt . 0)) (STRING_LITERAL . (aliased_opt . 0)) (CHARACTER_LITERAL . 
(aliased_opt . 0)) (ALIASED .  523))
+      ((default . error) (FUNCTION . (protected_opt . 0)) (PROCEDURE . 
(protected_opt . 0)) (PROTECTED .  520) (IDENTIFIER . 
(general_access_modifier_opt . 0)) (STRING_LITERAL . 
(general_access_modifier_opt . 0)) (CHARACTER_LITERAL . 
(general_access_modifier_opt . 0)) (ALL .  518) (CONSTANT .  519))
       ((default . error) (DOT .  90) (DO . (name_opt . 1)) (COLON_EQUAL . 
(name_opt . 1)) (RIGHT_PAREN . (name_opt . 1)) (RENAMES . (name_opt . 1)) (IS . 
(name_opt . 1)) (WITH . (name_opt . 1)) (SEMICOLON . (name_opt . 1)) (TICK .  
91) (LEFT_PAREN .  107))
       ((default . error) (DO . (parameter_and_result_profile . 1)) 
(COLON_EQUAL . (parameter_and_result_profile . 1)) (RIGHT_PAREN . 
(parameter_and_result_profile . 1)) (RENAMES . (parameter_and_result_profile . 
1)) (IS . (parameter_and_result_profile . 1)) (SEMICOLON . 
(parameter_and_result_profile . 1)) (WITH . (parameter_and_result_profile . 1)))
       ((default . error) (DO . (null_exclusion_opt . 1)) (COLON_EQUAL . 
(null_exclusion_opt . 1)) (RIGHT_PAREN . (null_exclusion_opt . 1)) (RENAMES . 
(null_exclusion_opt . 1)) (ACCESS . (null_exclusion_opt . 1)) 
(CHARACTER_LITERAL . (null_exclusion_opt . 1)) (STRING_LITERAL . 
(null_exclusion_opt . 1)) (IDENTIFIER . (null_exclusion_opt . 1)) (IS . 
(null_exclusion_opt . 1)) (SEMICOLON . (null_exclusion_opt . 1)) (WITH . 
(null_exclusion_opt . 1)))
       ((default . error) (DO . (parameter_and_result_profile . 2)) 
(COLON_EQUAL . (parameter_and_result_profile . 2)) (RIGHT_PAREN . 
(parameter_and_result_profile . 2)) (RENAMES . (parameter_and_result_profile . 
2)) (IS . (parameter_and_result_profile . 2)) (SEMICOLON . 
(parameter_and_result_profile . 2)) (WITH . (parameter_and_result_profile . 2)))
-      ((default . error) (ACCESS .  242) (WITH . (name_opt . 0)) (SEMICOLON . 
(name_opt . 0)) (IS . (name_opt . 0)) (RENAMES . (name_opt . 0)) (RIGHT_PAREN . 
(name_opt . 0)) (COLON_EQUAL . (name_opt . 0)) (DO . (name_opt . 0)) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
-      ((default . error) (COLON_EQUAL .  523) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (ACCESS .  242) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49))
+      ((default . error) (ACCESS .  236) (WITH . (name_opt . 0)) (SEMICOLON . 
(name_opt . 0)) (IS . (name_opt . 0)) (RENAMES . (name_opt . 0)) (RIGHT_PAREN . 
(name_opt . 0)) (COLON_EQUAL . (name_opt . 0)) (DO . (name_opt . 0)) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (COLON_EQUAL .  515) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (ACCESS .  236) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49))
       ((default . error) (CHARACTER_LITERAL . (mode_opt . 2)) (STRING_LITERAL 
. (mode_opt . 2)) (IDENTIFIER . (mode_opt . 2)) (NOT . (mode_opt . 2)) (ACCESS 
. (mode_opt . 2)))
-      ((default . error) (NEW .  521))
+      ((default . error) (NEW .  513))
       ((default . error) (IDENTIFIER . (formal_subprogram_declaration . 1)) 
(WITH . (formal_subprogram_declaration . 1)) (USE . 
(formal_subprogram_declaration . 1)) (TYPE . (formal_subprogram_declaration . 
1)) (PRAGMA . (formal_subprogram_declaration . 1)) (FUNCTION . 
(formal_subprogram_declaration . 1)) (PROCEDURE . 
(formal_subprogram_declaration . 1)) (PACKAGE . (formal_subprogram_declaration 
. 1)))
-      ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109) (BOX .  255) (NULL .  254) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
+      ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109) (BOX .  249) (NULL .  248) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (WITH . (subprogram_default . 2)) (SEMICOLON . 
(subprogram_default . 2)))
       ((default . error) (WITH . (subprogram_default . 1)) (SEMICOLON . 
(subprogram_default . 1)))
       ((default . error) (WITH . (subprogram_default . 0)) (SEMICOLON . 
(subprogram_default . 0)) (DOT .  90) (TICK .  91) (LEFT_PAREN .  107))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
-      ((default . error) (LEFT_PAREN .  502) (RANGE .  506) (MOD .  504) 
(DIGITS .  500) (DELTA .  499) (TASK .  509) (PROTECTED .  505) (INTERFACE .  
501) (ARRAY .  498) (PRIVATE . (abstract_tagged_limited_opt . 0)) (TAGGED .  
508) (NEW . (abstract_limited_synchronized_opt . 0)) (ABSTRACT .  497) (LIMITED 
.  503) (SYNCHRONIZED .  507) (ACCESS . (null_exclusion_opt . 0)) (NOT .  232))
-      ((default . error) (SEMICOLON .  496))
-      ((default . error) (RIGHT_PAREN .  495))
+      ((default . error) (LEFT_PAREN .  494) (RANGE .  498) (MOD .  496) 
(DIGITS .  492) (DELTA .  491) (TASK .  501) (PROTECTED .  497) (INTERFACE .  
493) (ARRAY .  490) (PRIVATE . (abstract_tagged_limited_opt . 0)) (TAGGED .  
500) (NEW . (abstract_limited_synchronized_opt . 0)) (ABSTRACT .  489) (LIMITED 
.  495) (SYNCHRONIZED .  499) (ACCESS . (null_exclusion_opt . 0)) (NOT .  226))
+      ((default . error) (SEMICOLON .  488))
+      ((default . error) (RIGHT_PAREN .  487))
       ((default . error) (RIGHT_PAREN . (discriminant_specification_list . 0)) 
(SEMICOLON . (discriminant_specification_list . 0)))
-      ((default . error) (SEMICOLON .  494) (RIGHT_PAREN .  493))
-      ((default . error) (COMMA .  96) (COLON .  492))
+      ((default . error) (SEMICOLON .  486) (RIGHT_PAREN .  485))
+      ((default . error) (COMMA .  96) (COLON .  484))
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
       ((default . error) (WITH . (with_clause . 0)) (USE . (with_clause . 0)) 
(SEPARATE . (with_clause . 0)) (PROCEDURE . (with_clause . 0)) (PRIVATE . 
(with_clause . 0)) (PRAGMA . (with_clause . 0)) (PACKAGE . (with_clause . 0)) 
(OVERRIDING . (with_clause . 0)) (NOT . (with_clause . 0)) (LIMITED . 
(with_clause . 0)) (GENERIC . (with_clause . 0)) (FUNCTION . (with_clause . 0)) 
($EOI . (with_clause . 0)))
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
       ((default . error) (DO . (name . 2)) (STAR_STAR . (name . 2)) (STAR . 
(name . 2)) (SLASH . (name . 2)) (REM . (name . 2)) (MOD . (name . 2)) (DOT_DOT 
. (name . 2)) (AMPERSAND . (name . 2)) (MINUS . (name . 2)) (PLUS . (name . 2)) 
(RIGHT_PAREN . (name . 2)) (XOR . (name . 2)) (OR . (name . 2)) (EQUAL_GREATER 
. (name . 2)) (BAR . (name . 2)) (SLASH_EQUAL . (name . 2)) (LESS_EQUAL . (name 
. 2)) (LESS . (name . 2)) (GREATER_EQUAL . (name . 2)) (GREATER . (name . 2)) 
(EQUAL . (name . 2) [...]
-      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  150) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (STAR_STAR . (actual_parameter_part . 1)) (STAR . 
(actual_parameter_part . 1)) (SLASH . (actual_parameter_part . 1)) (REM . 
(actual_parameter_part . 1)) (MOD . (actual_parameter_part . 1)) (DOT_DOT . 
(actual_parameter_part . 1)) (AMPERSAND . (actual_parameter_part . 1)) (MINUS . 
(actual_parameter_part . 1)) (PLUS . (actual_parameter_part . 1)) (RIGHT_PAREN 
. (actual_parameter_part . 1)) (XOR . (actual_parameter_part . 1)) (OR . 
(actual_parameter_part . 1)) (EQUAL [...]
       ((default . error) (STAR_STAR . (actual_parameter_part . 0)) (STAR . 
(actual_parameter_part . 0)) (SLASH . (actual_parameter_part . 0)) (REM . 
(actual_parameter_part . 0)) (MOD . (actual_parameter_part . 0)) (DOT_DOT . 
(actual_parameter_part . 0)) (AMPERSAND . (actual_parameter_part . 0)) (MINUS . 
(actual_parameter_part . 0)) (PLUS . (actual_parameter_part . 0)) (RIGHT_PAREN 
. (actual_parameter_part . 0)) (XOR . (actual_parameter_part . 0)) (OR . 
(actual_parameter_part . 0)) (EQUAL [...]
-      ((default . error) (RIGHT_PAREN . ((expression_opt . 0) (association_opt 
. 0))) (COMMA . ((expression_opt . 0) (association_opt . 0))) (IS . 
((expression_opt . 0) (association_opt . 0))) (SEMICOLON . ((expression_opt . 
0) (association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  182) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  183) (STRING_LITERAL .  49) (RAISE .  152) (PLUS .  154) 
(MINUS .  153) (ABS .  144) (NOT .  181) (NUME [...]
-      ((default . error) (SEMICOLON .  484))
-      ((default . error) (PLUS .  154) (MINUS .  153) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ABS .  144) (NOT .  150) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
-      ((default . error) (IN .  479))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (ABS . (relational_operator . 0)) (LEFT_PAREN . 
(relational_operator . 0)) (NEW . (relational_operator . 0)) (NOT . 
(relational_operator . 0)) (NULL . (relational_operator . 0)) (MINUS . 
(relational_operator . 0)) (PLUS . (relational_operator . 0)) (NUMERIC_LITERAL 
. (relational_operator . 0)) (IDENTIFIER . (relational_operator . 0)) 
(STRING_LITERAL . (relational_operator . 0)) (CHARACTER_LITERAL . 
(relational_operator . 0)))
-      ((default . error) (ABS . (relational_operator . 4)) (LEFT_PAREN . 
(relational_operator . 4)) (NEW . (relational_operator . 4)) (NOT . 
(relational_operator . 4)) (NULL . (relational_operator . 4)) (MINUS . 
(relational_operator . 4)) (PLUS . (relational_operator . 4)) (NUMERIC_LITERAL 
. (relational_operator . 4)) (IDENTIFIER . (relational_operator . 4)) 
(STRING_LITERAL . (relational_operator . 4)) (CHARACTER_LITERAL . 
(relational_operator . 4)))
-      ((default . error) (ABS . (relational_operator . 5)) (LEFT_PAREN . 
(relational_operator . 5)) (NEW . (relational_operator . 5)) (NOT . 
(relational_operator . 5)) (NULL . (relational_operator . 5)) (MINUS . 
(relational_operator . 5)) (PLUS . (relational_operator . 5)) (NUMERIC_LITERAL 
. (relational_operator . 5)) (IDENTIFIER . (relational_operator . 5)) 
(STRING_LITERAL . (relational_operator . 5)) (CHARACTER_LITERAL . 
(relational_operator . 5)))
-      ((default . error) (ABS . (relational_operator . 2)) (LEFT_PAREN . 
(relational_operator . 2)) (NEW . (relational_operator . 2)) (NOT . 
(relational_operator . 2)) (NULL . (relational_operator . 2)) (MINUS . 
(relational_operator . 2)) (PLUS . (relational_operator . 2)) (NUMERIC_LITERAL 
. (relational_operator . 2)) (IDENTIFIER . (relational_operator . 2)) 
(STRING_LITERAL . (relational_operator . 2)) (CHARACTER_LITERAL . 
(relational_operator . 2)))
-      ((default . error) (ABS . (relational_operator . 3)) (LEFT_PAREN . 
(relational_operator . 3)) (NEW . (relational_operator . 3)) (NOT . 
(relational_operator . 3)) (NULL . (relational_operator . 3)) (MINUS . 
(relational_operator . 3)) (PLUS . (relational_operator . 3)) (NUMERIC_LITERAL 
. (relational_operator . 3)) (IDENTIFIER . (relational_operator . 3)) 
(STRING_LITERAL . (relational_operator . 3)) (CHARACTER_LITERAL . 
(relational_operator . 3)))
-      ((default . error) (ABS . (relational_operator . 1)) (LEFT_PAREN . 
(relational_operator . 1)) (NEW . (relational_operator . 1)) (NOT . 
(relational_operator . 1)) (NULL . (relational_operator . 1)) (MINUS . 
(relational_operator . 1)) (PLUS . (relational_operator . 1)) (NUMERIC_LITERAL 
. (relational_operator . 1)) (IDENTIFIER . (relational_operator . 1)) 
(STRING_LITERAL . (relational_operator . 1)) (CHARACTER_LITERAL . 
(relational_operator . 1)))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (RANGE .  476) (LEFT_PAREN .  148) (ACCESS .  221) 
(DELTA .  222) (DIGITS .  223) (MOD .  224) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
-      ((default . error) (OTHERS .  182) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
181) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
-      ((default . error) (BOX .  472) (RAISE .  152) (PLUS .  154) (MINUS .  
153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  
149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) 
(LEFT_PAREN .  148))
-      ((default . error) (THEN .  470) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (ELSE .  468) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (ELSE .  466))
-      ((default . error) (THEN .  465))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (BOX .  459) (RAISE .  152) (PLUS .  154) (MINUS .  
153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  
149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) 
(LEFT_PAREN .  148))
-      ((default . error) (XOR . (primary . 1)) (OR . (primary . 1)) (AND . 
(primary . 1)) (SLASH_EQUAL . (primary . 1)) (LESS_EQUAL . (primary . 1)) (LESS 
. (primary . 1)) (GREATER_EQUAL . (primary . 1)) (GREATER . (primary . 1)) 
(EQUAL . (primary . 1)) (EQUAL_GREATER . (primary . 1)) (BAR . (primary . 1)) 
(PLUS . (primary . 1)) (MINUS . (primary . 1)) (AMPERSAND . (primary . 1)) 
(DOT_DOT . (primary . 1)) (MOD . (primary . 1)) (REM . (primary . 1)) (SLASH . 
(primary . 1)) (STAR . (primar [...]
-      ((default . error) (COLON_EQUAL . (factor . 3)) (OF . (factor . 3)) 
(LOOP . (factor . 3)) (DO . (factor . 3)) (PLUS . (factor . 3)) (MINUS . 
(factor . 3)) (AMPERSAND . (factor . 3)) (SEMICOLON . (factor . 3)) (MOD . 
(factor . 3)) (REM . (factor . 3)) (SLASH . (factor . 3)) (STAR . (factor . 3)) 
(XOR . (factor . 3)) (OR . (factor . 3)) (AND . (factor . 3)) (IN . (factor . 
3)) (NOT . (factor . 3)) (EQUAL . (factor . 3)) (GREATER . (factor . 3)) 
(GREATER_EQUAL . (factor . 3)) (LESS .  [...]
-      ((default . error) (IDENTIFIER .  453) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  454))
-      ((default . error) (BODY .  452) (IDENTIFIER .  48) (CHARACTER_LITERAL . 
 50) (STRING_LITERAL .  49))
-      ((default . error) (IDENTIFIER .  451) (TYPE .  450) (BODY .  449))
-      ((default . error) (IDENTIFIER .  448))
-      ((default . error) (TYPE .  446) (BODY .  445) (IDENTIFIER .  447))
-      ((default . error) (IDENTIFIER .  444))
-      ((default . error) (COLON . ( 443 (identifier_list . 0))) (COMMA . 
(identifier_list . 0)))
+      ((default . error) (IS . ((expression_opt . 0) (association_opt . 0))) 
(SEMICOLON . ((expression_opt . 0) (association_opt . 0))) (COMMA . 
((expression_opt . 0) (association_opt . 0))) (RIGHT_PAREN . ((expression_opt . 
0) (association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  152) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  157) (STRING_LITERAL .  49) (RAISE .  153) (PLUS .  155) 
(MINUS .  154) (ABS .  144) (NOT .  150) (NUME [...]
+      ((default . error) (SEMICOLON .  476))
+      ((default . error) (IDENTIFIER .  471) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  472))
+      ((default . error) (BODY .  470) (IDENTIFIER .  48) (CHARACTER_LITERAL . 
 50) (STRING_LITERAL .  49))
+      ((default . error) (IDENTIFIER .  469) (TYPE .  468) (BODY .  467))
+      ((default . error) (IDENTIFIER .  466))
+      ((default . error) (TYPE .  464) (BODY .  463) (IDENTIFIER .  465))
+      ((default . error) (IDENTIFIER .  462))
+      ((default . error) (COLON . ( 461 (identifier_list . 0))) (COMMA . 
(identifier_list . 0)))
       ((default . error) (END . (declaration . 0)) (PRIVATE . (declaration . 
0)) (IDENTIFIER . (declaration . 0)) (USE . (declaration . 0)) (TYPE . 
(declaration . 0)) (TASK . (declaration . 0)) (SUBTYPE . (declaration . 0)) 
(PROTECTED . (declaration . 0)) (PROCEDURE . (declaration . 0)) (PRAGMA . 
(declaration . 0)) (PACKAGE . (declaration . 0)) (OVERRIDING . (declaration . 
0)) (NOT . (declaration . 0)) (GENERIC . (declaration . 0)) (FUNCTION . 
(declaration . 0)) (FOR . (declaration . 0)) [...]
       ((default . error) (END . (declaration . 1)) (PRIVATE . (declaration . 
1)) (IDENTIFIER . (declaration . 1)) (USE . (declaration . 1)) (TYPE . 
(declaration . 1)) (TASK . (declaration . 1)) (SUBTYPE . (declaration . 1)) 
(PROTECTED . (declaration . 1)) (PROCEDURE . (declaration . 1)) (PRAGMA . 
(declaration . 1)) (PACKAGE . (declaration . 1)) (OVERRIDING . (declaration . 
1)) (NOT . (declaration . 1)) (GENERIC . (declaration . 1)) (FUNCTION . 
(declaration . 1)) (FOR . (declaration . 1)) [...]
       ((default . error) (WHEN . (aspect_clause . 3)) (PRIVATE . 
(aspect_clause . 3)) (END . (aspect_clause . 3)) (CASE . (aspect_clause . 3)) 
(BEGIN . (aspect_clause . 3)) (ENTRY . (aspect_clause . 3)) (FOR . 
(aspect_clause . 3)) (FUNCTION . (aspect_clause . 3)) (GENERIC . (aspect_clause 
. 3)) (NOT . (aspect_clause . 3)) (OVERRIDING . (aspect_clause . 3)) (PACKAGE . 
(aspect_clause . 3)) (PRAGMA . (aspect_clause . 3)) (PROCEDURE . (aspect_clause 
. 3)) (PROTECTED . (aspect_clause . 3)) (S [...]
       ((default . error) (END . (declaration . 2)) (PRIVATE . (declaration . 
2)) (IDENTIFIER . (declaration . 2)) (USE . (declaration . 2)) (TYPE . 
(declaration . 2)) (TASK . (declaration . 2)) (SUBTYPE . (declaration . 2)) 
(PROTECTED . (declaration . 2)) (PROCEDURE . (declaration . 2)) (PRAGMA . 
(declaration . 2)) (PACKAGE . (declaration . 2)) (OVERRIDING . (declaration . 
2)) (NOT . (declaration . 2)) (GENERIC . (declaration . 2)) (FUNCTION . 
(declaration . 2)) (FOR . (declaration . 2)) [...]
       ((default . error) (PRIVATE . (body . 1)) (END . (body . 1)) (BEGIN . 
(body . 1)) (ENTRY . (body . 1)) (FOR . (body . 1)) (FUNCTION . (body . 1)) 
(GENERIC . (body . 1)) (NOT . (body . 1)) (OVERRIDING . (body . 1)) (PACKAGE . 
(body . 1)) (PRAGMA . (body . 1)) (PROCEDURE . (body . 1)) (PROTECTED . (body . 
1)) (SUBTYPE . (body . 1)) (TASK . (body . 1)) (TYPE . (body . 1)) (USE . (body 
. 1)) (IDENTIFIER . (body . 1)))
       ((default . error) (PRIVATE . (declarations . 0)) (END . (declarations . 
0)) (BEGIN . (declarations . 0)) (ENTRY . (declarations . 0)) (FOR . 
(declarations . 0)) (FUNCTION . (declarations . 0)) (GENERIC . (declarations . 
0)) (NOT . (declarations . 0)) (OVERRIDING . (declarations . 0)) (PACKAGE . 
(declarations . 0)) (PRAGMA . (declarations . 0)) (PROCEDURE . (declarations . 
0)) (PROTECTED . (declarations . 0)) (SUBTYPE . (declarations . 0)) (TASK . 
(declarations . 0)) (TYPE . (decla [...]
-      ((default . error) (END . (declarative_part_opt . 1)) (PRIVATE . 
(declarative_part_opt . 1)) (BEGIN . (declarative_part_opt . 1)) (USE .  11) 
(SUBTYPE .  302) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE 
.  304) (GENERIC .  2) (PROTECTED .  301) (TASK .  303) (PACKAGE .  300))
-      ((default . error) (END .  440) (PRIVATE .  441))
+      ((default . error) (END . (declarative_part_opt . 1)) (PRIVATE . 
(declarative_part_opt . 1)) (BEGIN . (declarative_part_opt . 1)) (USE .  11) 
(SUBTYPE .  272) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE 
.  274) (GENERIC .  2) (PROTECTED .  271) (TASK .  273) (PACKAGE .  270))
+      ((default . error) (END .  458) (PRIVATE .  459))
       ((default . error) (END . (declaration . 3)) (PRIVATE . (declaration . 
3)) (IDENTIFIER . (declaration . 3)) (USE . (declaration . 3)) (TYPE . 
(declaration . 3)) (TASK . (declaration . 3)) (SUBTYPE . (declaration . 3)) 
(PROTECTED . (declaration . 3)) (PROCEDURE . (declaration . 3)) (PRAGMA . 
(declaration . 3)) (PACKAGE . (declaration . 3)) (OVERRIDING . (declaration . 
3)) (NOT . (declaration . 3)) (GENERIC . (declaration . 3)) (FUNCTION . 
(declaration . 3)) (FOR . (declaration . 3)) [...]
       ((default . error) (WHEN . (aspect_clause . 1)) (PRIVATE . 
(aspect_clause . 1)) (END . (aspect_clause . 1)) (CASE . (aspect_clause . 1)) 
(BEGIN . (aspect_clause . 1)) (ENTRY . (aspect_clause . 1)) (FOR . 
(aspect_clause . 1)) (FUNCTION . (aspect_clause . 1)) (GENERIC . (aspect_clause 
. 1)) (NOT . (aspect_clause . 1)) (OVERRIDING . (aspect_clause . 1)) (PACKAGE . 
(aspect_clause . 1)) (PRAGMA . (aspect_clause . 1)) (PROCEDURE . (aspect_clause 
. 1)) (PROTECTED . (aspect_clause . 1)) (S [...]
       ((default . error) (END . (declaration . 4)) (PRIVATE . (declaration . 
4)) (IDENTIFIER . (declaration . 4)) (USE . (declaration . 4)) (TYPE . 
(declaration . 4)) (TASK . (declaration . 4)) (SUBTYPE . (declaration . 4)) 
(PROTECTED . (declaration . 4)) (PROCEDURE . (declaration . 4)) (PRAGMA . 
(declaration . 4)) (PACKAGE . (declaration . 4)) (OVERRIDING . (declaration . 
4)) (NOT . (declaration . 4)) (GENERIC . (declaration . 4)) (FUNCTION . 
(declaration . 4)) (FOR . (declaration . 4)) [...]
@@ -2139,12 +2109,12 @@
       ((default . error) (END . (declaration . 6)) (PRIVATE . (declaration . 
6)) (IDENTIFIER . (declaration . 6)) (USE . (declaration . 6)) (TYPE . 
(declaration . 6)) (TASK . (declaration . 6)) (SUBTYPE . (declaration . 6)) 
(PROTECTED . (declaration . 6)) (PROCEDURE . (declaration . 6)) (PRAGMA . 
(declaration . 6)) (PACKAGE . (declaration . 6)) (OVERRIDING . (declaration . 
6)) (NOT . (declaration . 6)) (GENERIC . (declaration . 6)) (FUNCTION . 
(declaration . 6)) (FOR . (declaration . 6)) [...]
       ((default . error) (END . (declaration . 7)) (PRIVATE . (declaration . 
7)) (IDENTIFIER . (declaration . 7)) (USE . (declaration . 7)) (TYPE . 
(declaration . 7)) (TASK . (declaration . 7)) (SUBTYPE . (declaration . 7)) 
(PROTECTED . (declaration . 7)) (PROCEDURE . (declaration . 7)) (PRAGMA . 
(declaration . 7)) (PACKAGE . (declaration . 7)) (OVERRIDING . (declaration . 
7)) (NOT . (declaration . 7)) (GENERIC . (declaration . 7)) (FUNCTION . 
(declaration . 7)) (FOR . (declaration . 7)) [...]
       ((default . error) (PRIVATE . (renaming_declaration . 3)) (END . 
(renaming_declaration . 3)) (BEGIN . (renaming_declaration . 3)) (ENTRY . 
(renaming_declaration . 3)) (FOR . (renaming_declaration . 3)) (FUNCTION . 
(renaming_declaration . 3)) (GENERIC . (renaming_declaration . 3)) (NOT . 
(renaming_declaration . 3)) (OVERRIDING . (renaming_declaration . 3)) (PACKAGE 
. (renaming_declaration . 3)) (PRAGMA . (renaming_declaration . 3)) (PROCEDURE 
. (renaming_declaration . 3)) (PROTECTED [...]
-      ((default . error) (COMMA .  96) (COLON .  439))
+      ((default . error) (COMMA .  96) (COLON .  457))
       ((default . error) (PRIVATE . (type_declaration . 1)) (END . 
(type_declaration . 1)) (BEGIN . (type_declaration . 1)) (ENTRY . 
(type_declaration . 1)) (FOR . (type_declaration . 1)) (FUNCTION . 
(type_declaration . 1)) (GENERIC . (type_declaration . 1)) (NOT . 
(type_declaration . 1)) (OVERRIDING . (type_declaration . 1)) (PACKAGE . 
(type_declaration . 1)) (PRAGMA . (type_declaration . 1)) (PROCEDURE . 
(type_declaration . 1)) (PROTECTED . (type_declaration . 1)) (SUBTYPE . 
(type_decl [...]
       ((default . error) (END . (declaration . 8)) (PRIVATE . (declaration . 
8)) (IDENTIFIER . (declaration . 8)) (USE . (declaration . 8)) (TYPE . 
(declaration . 8)) (TASK . (declaration . 8)) (SUBTYPE . (declaration . 8)) 
(PROTECTED . (declaration . 8)) (PROCEDURE . (declaration . 8)) (PRAGMA . 
(declaration . 8)) (PACKAGE . (declaration . 8)) (OVERRIDING . (declaration . 
8)) (NOT . (declaration . 8)) (GENERIC . (declaration . 8)) (FUNCTION . 
(declaration . 8)) (FOR . (declaration . 8)) [...]
       ((default . error) (END . (declaration . 10)) (PRIVATE . (declaration . 
10)) (IDENTIFIER . (declaration . 10)) (USE . (declaration . 10)) (TYPE . 
(declaration . 10)) (TASK . (declaration . 10)) (SUBTYPE . (declaration . 10)) 
(PROTECTED . (declaration . 10)) (PROCEDURE . (declaration . 10)) (PRAGMA . 
(declaration . 10)) (PACKAGE . (declaration . 10)) (OVERRIDING . (declaration . 
10)) (NOT . (declaration . 10)) (GENERIC . (declaration . 10)) (FUNCTION . 
(declaration . 10)) (FOR . (de [...]
       ((default . error) (PRIVATE . (renaming_declaration . 0)) (END . 
(renaming_declaration . 0)) (BEGIN . (renaming_declaration . 0)) (ENTRY . 
(renaming_declaration . 0)) (FOR . (renaming_declaration . 0)) (FUNCTION . 
(renaming_declaration . 0)) (GENERIC . (renaming_declaration . 0)) (NOT . 
(renaming_declaration . 0)) (OVERRIDING . (renaming_declaration . 0)) (PACKAGE 
. (renaming_declaration . 0)) (PRAGMA . (renaming_declaration . 0)) (PROCEDURE 
. (renaming_declaration . 0)) (PROTECTED [...]
-      ((default . error) (ENTRY .  435) (FUNCTION .  40) (PROCEDURE .  41))
+      ((default . error) (ENTRY .  453) (FUNCTION .  40) (PROCEDURE .  41))
       ((default . error) ($EOI . (proper_body . 1)) (LIMITED . (proper_body . 
1)) (SEPARATE . (proper_body . 1)) (WITH . (proper_body . 1)) (END . 
(proper_body . 1)) (PRIVATE . (proper_body . 1)) (IDENTIFIER . (proper_body . 
1)) (USE . (proper_body . 1)) (TYPE . (proper_body . 1)) (TASK . (proper_body . 
1)) (SUBTYPE . (proper_body . 1)) (PROTECTED . (proper_body . 1)) (PROCEDURE . 
(proper_body . 1)) (PRAGMA . (proper_body . 1)) (PACKAGE . (proper_body . 1)) 
(OVERRIDING . (proper_body . 1 [...]
       ((default . error) (END . (body_stub . 1)) (PRIVATE . (body_stub . 1)) 
(IDENTIFIER . (body_stub . 1)) (USE . (body_stub . 1)) (TYPE . (body_stub . 1)) 
(TASK . (body_stub . 1)) (SUBTYPE . (body_stub . 1)) (PROTECTED . (body_stub . 
1)) (PROCEDURE . (body_stub . 1)) (PRAGMA . (body_stub . 1)) (PACKAGE . 
(body_stub . 1)) (OVERRIDING . (body_stub . 1)) (NOT . (body_stub . 1)) 
(GENERIC . (body_stub . 1)) (FUNCTION . (body_stub . 1)) (FOR . (body_stub . 
1)) (ENTRY . (body_stub . 1)) (BEGI [...]
       ((default . error) (END . (declaration . 11)) (PRIVATE . (declaration . 
11)) (IDENTIFIER . (declaration . 11)) (USE . (declaration . 11)) (TYPE . 
(declaration . 11)) (TASK . (declaration . 11)) (SUBTYPE . (declaration . 11)) 
(PROTECTED . (declaration . 11)) (PROCEDURE . (declaration . 11)) (PRAGMA . 
(declaration . 11)) (PACKAGE . (declaration . 11)) (OVERRIDING . (declaration . 
11)) (NOT . (declaration . 11)) (GENERIC . (declaration . 11)) (FUNCTION . 
(declaration . 11)) (FOR . (de [...]
@@ -2170,302 +2140,324 @@
       ((default . error) (END . (full_type_declaration . 1)) (PRIVATE . 
(full_type_declaration . 1)) (IDENTIFIER . (full_type_declaration . 1)) (USE . 
(full_type_declaration . 1)) (TYPE . (full_type_declaration . 1)) (TASK . 
(full_type_declaration . 1)) (SUBTYPE . (full_type_declaration . 1)) (PROTECTED 
. (full_type_declaration . 1)) (PROCEDURE . (full_type_declaration . 1)) 
(PRAGMA . (full_type_declaration . 1)) (PACKAGE . (full_type_declaration . 1)) 
(OVERRIDING . (full_type_declaratio [...]
       ((default . error) (END . (declaration . 16)) (PRIVATE . (declaration . 
16)) (IDENTIFIER . (declaration . 16)) (USE . (declaration . 16)) (TYPE . 
(declaration . 16)) (TASK . (declaration . 16)) (SUBTYPE . (declaration . 16)) 
(PROTECTED . (declaration . 16)) (PROCEDURE . (declaration . 16)) (PRAGMA . 
(declaration . 16)) (PACKAGE . (declaration . 16)) (OVERRIDING . (declaration . 
16)) (NOT . (declaration . 16)) (GENERIC . (declaration . 16)) (FUNCTION . 
(declaration . 16)) (FOR . (de [...]
       ((default . error) (END . (declaration . 17)) (PRIVATE . (declaration . 
17)) (IDENTIFIER . (declaration . 17)) (USE . (declaration . 17)) (TYPE . 
(declaration . 17)) (TASK . (declaration . 17)) (SUBTYPE . (declaration . 17)) 
(PROTECTED . (declaration . 17)) (PROCEDURE . (declaration . 17)) (PRAGMA . 
(declaration . 17)) (PACKAGE . (declaration . 17)) (OVERRIDING . (declaration . 
17)) (NOT . (declaration . 17)) (GENERIC . (declaration . 17)) (FUNCTION . 
(declaration . 17)) (FOR . (de [...]
-      ((default . error) (BEGIN . (declarative_part_opt . 0)) (END . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED .  301) (TASK 
.  303) (PACKAGE .  300))
-      ((default . error) (COLON_EQUAL . (simple_expression . 0)) (OF . 
(simple_expression . 0)) (LOOP . (simple_expression . 0)) (DO . 
(simple_expression . 0)) (DOT_DOT . (simple_expression . 0)) (SEMICOLON . 
(simple_expression . 0)) (XOR . (simple_expression . 0)) (OR . 
(simple_expression . 0)) (AND . (simple_expression . 0)) (SLASH_EQUAL . 
(simple_expression . 0)) (LESS_EQUAL . (simple_expression . 0)) (LESS . 
(simple_expression . 0)) (GREATER_EQUAL . (simple_expression . 0)) (GREATER  
[...]
+      ((default . error) (BEGIN . (declarative_part_opt . 0)) (END . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED .  271) (TASK 
.  273) (PACKAGE .  270))
+      ((default . error) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (DOT .  90) (OF . (primary . 3)) (COLON_EQUAL . 
(primary . 3)) (DO . (primary . 3)) (LOOP . (primary . 3)) (BAR . (primary . 
3)) (COMMA . (primary . 3)) (ELSIF . (primary . 3)) (ELSE . (primary . 3)) 
(EQUAL_GREATER . (primary . 3)) (RIGHT_PAREN . (primary . 3)) (DIGITS . 
(primary . 3)) (RANGE . (primary . 3)) (THEN . (primary . 3)) (DOT_DOT . 
(primary . 3)) (WITH . (primary . 3)) (IS . (primary . 3)) (IN . (primary . 3)) 
(NOT . (primary . 3)) (EQUAL . (primary .  [...]
+      ((default . error) (COLON_EQUAL . (simple_expression . 0)) (OF . 
(simple_expression . 0)) (LOOP . (simple_expression . 0)) (DO . 
(simple_expression . 0)) (DOT_DOT . (simple_expression . 0)) (SEMICOLON . 
(simple_expression . 0)) (XOR . (simple_expression . 0)) (OR . 
(simple_expression . 0)) (AND . (simple_expression . 0)) (SLASH_EQUAL . 
(simple_expression . 0)) (LESS_EQUAL . (simple_expression . 0)) (LESS . 
(simple_expression . 0)) (GREATER_EQUAL . (simple_expression . 0)) (GREATER  
[...]
       ((default . error) (ABS . (binary_adding_operator . 2)) (LEFT_PAREN . 
(binary_adding_operator . 2)) (NEW . (binary_adding_operator . 2)) (NOT . 
(binary_adding_operator . 2)) (NULL . (binary_adding_operator . 2)) 
(NUMERIC_LITERAL . (binary_adding_operator . 2)) (IDENTIFIER . 
(binary_adding_operator . 2)) (STRING_LITERAL . (binary_adding_operator . 2)) 
(CHARACTER_LITERAL . (binary_adding_operator . 2)))
       ((default . error) (ABS . (binary_adding_operator . 1)) (LEFT_PAREN . 
(binary_adding_operator . 1)) (NEW . (binary_adding_operator . 1)) (NOT . 
(binary_adding_operator . 1)) (NULL . (binary_adding_operator . 1)) 
(NUMERIC_LITERAL . (binary_adding_operator . 1)) (IDENTIFIER . 
(binary_adding_operator . 1)) (STRING_LITERAL . (binary_adding_operator . 1)) 
(CHARACTER_LITERAL . (binary_adding_operator . 1)))
       ((default . error) (ABS . (binary_adding_operator . 0)) (LEFT_PAREN . 
(binary_adding_operator . 0)) (NEW . (binary_adding_operator . 0)) (NOT . 
(binary_adding_operator . 0)) (NULL . (binary_adding_operator . 0)) 
(NUMERIC_LITERAL . (binary_adding_operator . 0)) (IDENTIFIER . 
(binary_adding_operator . 0)) (STRING_LITERAL . (binary_adding_operator . 0)) 
(CHARACTER_LITERAL . (binary_adding_operator . 0)))
-      ((default . error) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (ABS . (multiplying_operator . 2)) (LEFT_PAREN . 
(multiplying_operator . 2)) (NEW . (multiplying_operator . 2)) (NOT . 
(multiplying_operator . 2)) (NULL . (multiplying_operator . 2)) 
(NUMERIC_LITERAL . (multiplying_operator . 2)) (IDENTIFIER . 
(multiplying_operator . 2)) (STRING_LITERAL . (multiplying_operator . 2)) 
(CHARACTER_LITERAL . (multiplying_operator . 2)))
       ((default . error) (ABS . (multiplying_operator . 3)) (LEFT_PAREN . 
(multiplying_operator . 3)) (NEW . (multiplying_operator . 3)) (NOT . 
(multiplying_operator . 3)) (NULL . (multiplying_operator . 3)) 
(NUMERIC_LITERAL . (multiplying_operator . 3)) (IDENTIFIER . 
(multiplying_operator . 3)) (STRING_LITERAL . (multiplying_operator . 3)) 
(CHARACTER_LITERAL . (multiplying_operator . 3)))
       ((default . error) (ABS . (multiplying_operator . 1)) (LEFT_PAREN . 
(multiplying_operator . 1)) (NEW . (multiplying_operator . 1)) (NOT . 
(multiplying_operator . 1)) (NULL . (multiplying_operator . 1)) 
(NUMERIC_LITERAL . (multiplying_operator . 1)) (IDENTIFIER . 
(multiplying_operator . 1)) (STRING_LITERAL . (multiplying_operator . 1)) 
(CHARACTER_LITERAL . (multiplying_operator . 1)))
       ((default . error) (ABS . (multiplying_operator . 0)) (LEFT_PAREN . 
(multiplying_operator . 0)) (NEW . (multiplying_operator . 0)) (NOT . 
(multiplying_operator . 0)) (NULL . (multiplying_operator . 0)) 
(NUMERIC_LITERAL . (multiplying_operator . 0)) (IDENTIFIER . 
(multiplying_operator . 0)) (STRING_LITERAL . (multiplying_operator . 0)) 
(CHARACTER_LITERAL . (multiplying_operator . 0)))
-      ((default . error) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (THEN .  429) (RAISE .  152) (PLUS .  154) (MINUS .  
153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  
149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) 
(LEFT_PAREN .  148))
-      ((default . error) (ELSE .  427) (RAISE .  152) (PLUS .  154) (MINUS .  
153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  
149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) 
(LEFT_PAREN .  148))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (ELSE .  424))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (THEN .  422))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  419))
-      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RAISE .  152) 
(PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  156) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (IDENTIFIER .  416))
-      ((default . error) (LOOP . (raise_expression . 0)) (DO . 
(raise_expression . 0)) (XOR . (raise_expression . 0)) (OR . (raise_expression 
. 0)) (AND . (raise_expression . 0)) (IS . (raise_expression . 0)) (SEMICOLON . 
(raise_expression . 0)) (THEN . (raise_expression . 0)) (RANGE . 
(raise_expression . 0)) (RIGHT_PAREN . (raise_expression . 0)) (COMMA . 
(raise_expression . 0)) (DIGITS . (raise_expression . 0)) (EQUAL_GREATER . 
(raise_expression . 0)) (ELSE . (raise_expression . 0)) (E [...]
+      ((default . error) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ABS .  144) (NOT .  324) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (IN .  445))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (ABS . (relational_operator . 0)) (LEFT_PAREN . 
(relational_operator . 0)) (NEW . (relational_operator . 0)) (NOT . 
(relational_operator . 0)) (NULL . (relational_operator . 0)) (MINUS . 
(relational_operator . 0)) (PLUS . (relational_operator . 0)) (NUMERIC_LITERAL 
. (relational_operator . 0)) (IDENTIFIER . (relational_operator . 0)) 
(STRING_LITERAL . (relational_operator . 0)) (CHARACTER_LITERAL . 
(relational_operator . 0)))
+      ((default . error) (ABS . (relational_operator . 4)) (LEFT_PAREN . 
(relational_operator . 4)) (NEW . (relational_operator . 4)) (NOT . 
(relational_operator . 4)) (NULL . (relational_operator . 4)) (MINUS . 
(relational_operator . 4)) (PLUS . (relational_operator . 4)) (NUMERIC_LITERAL 
. (relational_operator . 4)) (IDENTIFIER . (relational_operator . 4)) 
(STRING_LITERAL . (relational_operator . 4)) (CHARACTER_LITERAL . 
(relational_operator . 4)))
+      ((default . error) (ABS . (relational_operator . 5)) (LEFT_PAREN . 
(relational_operator . 5)) (NEW . (relational_operator . 5)) (NOT . 
(relational_operator . 5)) (NULL . (relational_operator . 5)) (MINUS . 
(relational_operator . 5)) (PLUS . (relational_operator . 5)) (NUMERIC_LITERAL 
. (relational_operator . 5)) (IDENTIFIER . (relational_operator . 5)) 
(STRING_LITERAL . (relational_operator . 5)) (CHARACTER_LITERAL . 
(relational_operator . 5)))
+      ((default . error) (ABS . (relational_operator . 2)) (LEFT_PAREN . 
(relational_operator . 2)) (NEW . (relational_operator . 2)) (NOT . 
(relational_operator . 2)) (NULL . (relational_operator . 2)) (MINUS . 
(relational_operator . 2)) (PLUS . (relational_operator . 2)) (NUMERIC_LITERAL 
. (relational_operator . 2)) (IDENTIFIER . (relational_operator . 2)) 
(STRING_LITERAL . (relational_operator . 2)) (CHARACTER_LITERAL . 
(relational_operator . 2)))
+      ((default . error) (ABS . (relational_operator . 3)) (LEFT_PAREN . 
(relational_operator . 3)) (NEW . (relational_operator . 3)) (NOT . 
(relational_operator . 3)) (NULL . (relational_operator . 3)) (MINUS . 
(relational_operator . 3)) (PLUS . (relational_operator . 3)) (NUMERIC_LITERAL 
. (relational_operator . 3)) (IDENTIFIER . (relational_operator . 3)) 
(STRING_LITERAL . (relational_operator . 3)) (CHARACTER_LITERAL . 
(relational_operator . 3)))
+      ((default . error) (ABS . (relational_operator . 1)) (LEFT_PAREN . 
(relational_operator . 1)) (NEW . (relational_operator . 1)) (NOT . 
(relational_operator . 1)) (NULL . (relational_operator . 1)) (MINUS . 
(relational_operator . 1)) (PLUS . (relational_operator . 1)) (NUMERIC_LITERAL 
. (relational_operator . 1)) (IDENTIFIER . (relational_operator . 1)) 
(STRING_LITERAL . (relational_operator . 1)) (CHARACTER_LITERAL . 
(relational_operator . 1)))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (THEN .  441) (RAISE .  153) (PLUS .  155) (MINUS .  
154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  
149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) 
(LEFT_PAREN .  148))
+      ((default . error) (ELSE .  439) (RAISE .  153) (PLUS .  155) (MINUS .  
154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  
149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) 
(LEFT_PAREN .  148))
+      ((default . error) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (ELSE .  436))
+      ((default . error) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (THEN .  434))
+      ((default . error) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (RANGE .  431) (LEFT_PAREN .  148) (ACCESS .  215) 
(DELTA .  216) (DIGITS .  217) (MOD .  218) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (OTHERS .  152) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (BOX .  427) (SEMICOLON . (expression_opt . 0)) (IS . 
(expression_opt . 0)) (COMMA . (expression_opt . 0)) (RIGHT_PAREN . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  426))
+      ((default . error) (THEN .  424) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (ELSE .  422) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (ELSE .  420))
+      ((default . error) (THEN .  419))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  414))
+      ((default . error) (BOX .  412) (SEMICOLON . (expression_opt . 0)) (IS . 
(expression_opt . 0)) (COMMA . (expression_opt . 0)) (RIGHT_PAREN . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (LOOP . (raise_expression . 0)) (DO . 
(raise_expression . 0)) (XOR . (raise_expression . 0)) (OR . (raise_expression 
. 0)) (AND . (raise_expression . 0)) (IS . (raise_expression . 0)) (SEMICOLON . 
(raise_expression . 0)) (THEN . (raise_expression . 0)) (RANGE . 
(raise_expression . 0)) (RIGHT_PAREN . (raise_expression . 0)) (COMMA . 
(raise_expression . 0)) (DIGITS . (raise_expression . 0)) (EQUAL_GREATER . 
(raise_expression . 0)) (ELSE . (raise_expression . 0)) (E [...]
+      ((default . error) (XOR . (primary . 1)) (OR . (primary . 1)) (AND . 
(primary . 1)) (SLASH_EQUAL . (primary . 1)) (LESS_EQUAL . (primary . 1)) (LESS 
. (primary . 1)) (GREATER_EQUAL . (primary . 1)) (GREATER . (primary . 1)) 
(EQUAL . (primary . 1)) (EQUAL_GREATER . (primary . 1)) (BAR . (primary . 1)) 
(PLUS . (primary . 1)) (MINUS . (primary . 1)) (AMPERSAND . (primary . 1)) 
(DOT_DOT . (primary . 1)) (MOD . (primary . 1)) (REM . (primary . 1)) (SLASH . 
(primary . 1)) (STAR . (primar [...]
+      ((default . error) (COLON_EQUAL . (factor . 3)) (OF . (factor . 3)) 
(LOOP . (factor . 3)) (DO . (factor . 3)) (THEN . (factor . 3)) (RANGE . 
(factor . 3)) (DIGITS . (factor . 3)) (ELSE . (factor . 3)) (ELSIF . (factor . 
3)) (XOR . (factor . 3)) (OR . (factor . 3)) (AND . (factor . 3)) (SLASH_EQUAL 
. (factor . 3)) (LESS_EQUAL . (factor . 3)) (LESS . (factor . 3)) 
(GREATER_EQUAL . (factor . 3)) (GREATER . (factor . 3)) (EQUAL . (factor . 3)) 
(EQUAL_GREATER . (factor . 3)) (BAR . (fac [...]
       ((default . error) (DOT .  90) (TICK .  91) (COLON_EQUAL . (primary . 
4)) (OF . (primary . 4)) (LOOP . (primary . 4)) (DO . (primary . 4)) (STAR_STAR 
. (primary . 4)) (STAR . (primary . 4)) (SLASH . (primary . 4)) (REM . (primary 
. 4)) (MOD . (primary . 4)) (DOT_DOT . (primary . 4)) (AMPERSAND . (primary . 
4)) (MINUS . (primary . 4)) (PLUS . (primary . 4)) (SEMICOLON . (primary . 4)) 
(XOR . (primary . 4)) (OR . (primary . 4)) (AND . (primary . 4)) (SLASH_EQUAL . 
(primary . 4)) (LES [...]
-      ((default . error) (DOT_DOT . (primary . 1)) (RIGHT_PAREN . (primary . 
1)) (COMMA . (primary . 1)) (BAR . (primary . 1)) (EQUAL_GREATER . (primary . 
1)) (PLUS . (primary . 1)) (MINUS . (primary . 1)) (AMPERSAND . (primary . 1)) 
(IN . (primary . 1)) (NOT . (primary . 1)) (EQUAL . (primary . 1)) (GREATER . 
(primary . 1)) (GREATER_EQUAL . (primary . 1)) (LESS . (primary . 1)) 
(LESS_EQUAL . (primary . 1)) (SLASH_EQUAL . (primary . 1)) (WITH . (primary . 
1)) (MOD . (primary . 1)) (REM . [...]
-      ((default . error) (COMMA .  273) (RIGHT_PAREN .  413))
-      ((default . error) (RIGHT_PAREN .  412))
-      ((default . error) (RIGHT_PAREN . (expression_opt . 1)) (COMMA . 
(expression_opt . 1)) (WITH .  411))
-      ((default . error) (THEN .  410))
+      ((default . error) (DOT_DOT . (primary . 1)) (RIGHT_PAREN . (primary . 
1)) (COMMA . (primary . 1)) (BAR . (primary . 1)) (EQUAL_GREATER . (primary . 
1)) (PLUS . (primary . 1)) (MINUS . (primary . 1)) (AMPERSAND . (primary . 1)) 
(IN . (primary . 1)) (NOT . (primary . 1)) (EQUAL . (primary . 1)) (GREATER . 
(primary . 1)) (GREATER_EQUAL . (primary . 1)) (LESS . (primary . 1)) 
(LESS_EQUAL . (primary . 1)) (SLASH_EQUAL . (primary . 1)) (WITH . (primary . 
1)) (MOD . (primary . 1)) (REM . [...]
+      ((default . error) (COMMA .  267) (RIGHT_PAREN .  408))
+      ((default . error) (RIGHT_PAREN .  407))
+      ((default . error) (COMMA . (association_opt . 5)) (RIGHT_PAREN . 
(association_opt . 5)) (WITH .  406))
+      ((default . error) (THEN .  405))
+      ((default . error) (IN .  336) (NOT .  337) (DO . (relation . 0)) (LOOP 
. (relation . 0)) (COMMA . (relation . 0)) (ELSIF . (relation . 0)) (ELSE . 
(relation . 0)) (EQUAL_GREATER . (relation . 0)) (RIGHT_PAREN . (relation . 0)) 
(DIGITS . (relation . 0)) (RANGE . (relation . 0)) (THEN . (relation . 0)) 
(WITH . (relation . 0)) (SEMICOLON . (relation . 0)) (IS . (relation . 0)) (AND 
. (relation . 0)) (OR . (relation . 0)) (XOR . (relation . 0)) (EQUAL .  339) 
(SLASH_EQUAL .  344) (LES [...]
       ((default . error) (IDENTIFIER . (quantifier . 0)))
       ((default . error) (IDENTIFIER . (quantifier . 1)))
-      ((default . error) (IDENTIFIER .  408))
-      ((default . error) (IS .  407))
+      ((default . error) (IDENTIFIER .  402))
+      ((default . error) (IS .  401))
       ((default . error) (COLON_EQUAL . (factor . 2)) (OF . (factor . 2)) 
(LOOP . (factor . 2)) (DO . (factor . 2)) (PLUS . (factor . 2)) (MINUS . 
(factor . 2)) (AMPERSAND . (factor . 2)) (DOT_DOT . (factor . 2)) (MOD . 
(factor . 2)) (REM . (factor . 2)) (SLASH . (factor . 2)) (STAR . (factor . 2)) 
(SEMICOLON . (factor . 2)) (XOR . (factor . 2)) (OR . (factor . 2)) (AND . 
(factor . 2)) (IN . (factor . 2)) (NOT . (factor . 2)) (EQUAL . (factor . 2)) 
(GREATER . (factor . 2)) (GREATER_EQUAL [...]
       ((default . error) (BODY .  67))
-      ((default . error) (BODY .  406))
-      ((default . error) (BODY .  405))
+      ((default . error) (BODY .  400))
+      ((default . error) (BODY .  399))
       ((default . error) (FUNCTION .  1) (PROCEDURE .  9))
       ((default . error) ($EOI . (subunit . 0)) (FUNCTION . (subunit . 0)) 
(GENERIC . (subunit . 0)) (LIMITED . (subunit . 0)) (NOT . (subunit . 0)) 
(OVERRIDING . (subunit . 0)) (PACKAGE . (subunit . 0)) (PRAGMA . (subunit . 0)) 
(PRIVATE . (subunit . 0)) (PROCEDURE . (subunit . 0)) (SEPARATE . (subunit . 
0)) (USE . (subunit . 0)) (WITH . (subunit . 0)))
       ((default . error) (SEPARATE . (use_clause . 1)) (LIMITED . (use_clause 
. 1)) ($EOI . (use_clause . 1)) (WITH . (use_clause . 1)) (PRIVATE . 
(use_clause . 1)) (END . (use_clause . 1)) (BEGIN . (use_clause . 1)) (ENTRY . 
(use_clause . 1)) (FOR . (use_clause . 1)) (FUNCTION . (use_clause . 1)) 
(GENERIC . (use_clause . 1)) (NOT . (use_clause . 1)) (OVERRIDING . (use_clause 
. 1)) (PACKAGE . (use_clause . 1)) (PRAGMA . (use_clause . 1)) (PROCEDURE . 
(use_clause . 1)) (PROTECTED . (use_c [...]
-      ((default . error) (SEMICOLON .  403))
-      ((default . error) (BEGIN .  402))
+      ((default . error) (SEMICOLON .  397))
+      ((default . error) (BEGIN .  396))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
       ((default . error) (BEGIN . (subprogram_renaming_declaration . 0)) 
(ENTRY . (subprogram_renaming_declaration . 0)) (FOR . 
(subprogram_renaming_declaration . 0)) (PROTECTED . 
(subprogram_renaming_declaration . 0)) (SUBTYPE . 
(subprogram_renaming_declaration . 0)) (TASK . (subprogram_renaming_declaration 
. 0)) (TYPE . (subprogram_renaming_declaration . 0)) (IDENTIFIER . 
(subprogram_renaming_declaration . 0)) (END . (subprogram_renaming_declaration 
. 0)) (WITH . (subprogram_renaming_d [...]
       ((default . error) (IS . (aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (IDENTIFIER .  628))
-      ((default . error) (IDENTIFIER .  627))
-      ((default . error) (WHEN .  624))
-      ((default . error) (OF .  622) (COLON .  623) (IN .  621))
-      ((default . error) (EQUAL_GREATER .  620))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RIGHT_PAREN . ((expression_opt . 0) (association_opt 
. 0))) (COMMA . ((expression_opt . 0) (association_opt . 0))) (EQUAL_GREATER . 
(discrete_choice_list . 0)) (BAR . (discrete_choice_list . 0)) (OTHERS .  182) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  183) (STRING_LITERAL .  49) (RAISE .  
152) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  181) (NUMERIC_LITERAL .  
155) (NULL .  617) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (IDENTIFIER .  620))
+      ((default . error) (IDENTIFIER .  619))
+      ((default . error) (WHEN .  616))
+      ((default . error) (OF .  614) (COLON .  615) (IN .  613))
+      ((default . error) (EQUAL_GREATER .  612))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (ELSIF . (expression_opt . 0)) (ELSE . 
(expression_opt . 0)) (RIGHT_PAREN . (expression_opt . 0)) (RAISE .  153) (PLUS 
.  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL 
.  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN . ((expression_opt . 0) (association_opt 
. 0))) (COMMA . ((expression_opt . 0) (association_opt . 0))) (EQUAL_GREATER . 
(discrete_choice_list . 0)) (BAR . (discrete_choice_list . 0)) (OTHERS .  152) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  157) (STRING_LITERAL .  49) (RAISE .  
153) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  
156) (NULL .  608) (NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (USE . (aggregate . 2)) (COLON_EQUAL . (aggregate . 
2)) (CHARACTER_LITERAL . (aggregate . 2)) (STRING_LITERAL . (aggregate . 2)) 
(IDENTIFIER . (aggregate . 2)) (LESS_LESS . (aggregate . 2)) (WHILE . 
(aggregate . 2)) (SELECT . (aggregate . 2)) (REQUEUE . (aggregate . 2)) (RAISE 
. (aggregate . 2)) (PRAGMA . (aggregate . 2)) (NULL . (aggregate . 2)) (IF . 
(aggregate . 2)) (GOTO . (aggregate . 2)) (FOR . (aggregate . 2)) (EXIT . 
(aggregate . 2)) (DELAY . (aggregate . [...]
       ((default . error) (USE . (aggregate . 0)) (COLON_EQUAL . (aggregate . 
0)) (CHARACTER_LITERAL . (aggregate . 0)) (STRING_LITERAL . (aggregate . 0)) 
(IDENTIFIER . (aggregate . 0)) (LESS_LESS . (aggregate . 0)) (WHILE . 
(aggregate . 0)) (SELECT . (aggregate . 0)) (REQUEUE . (aggregate . 0)) (RAISE 
. (aggregate . 0)) (PRAGMA . (aggregate . 0)) (NULL . (aggregate . 0)) (IF . 
(aggregate . 0)) (GOTO . (aggregate . 0)) (FOR . (aggregate . 0)) (EXIT . 
(aggregate . 0)) (DELAY . (aggregate . [...]
-      ((default . error) (RIGHT_PAREN .  616))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (EQUAL_GREATER .  614))
-      ((default . error) (COMMA . (pragma_argument_association . 0)) 
(RIGHT_PAREN . (pragma_argument_association . 0)))
-      ((default . error) (RIGHT_PAREN . (pragma_argument_association_list . 
1)) (COMMA . (pragma_argument_association_list . 1)))
-      ((default . error) (WHEN . (pragma . 0)) (THEN . (pragma . 0)) (OR . 
(pragma . 0)) (ELSIF . (pragma . 0)) (ELSE . (pragma . 0)) (CHARACTER_LITERAL . 
(pragma . 0)) (STRING_LITERAL . (pragma . 0)) (WHILE . (pragma . 0)) (SELECT . 
(pragma . 0)) (RETURN . (pragma . 0)) (REQUEUE . (pragma . 0)) (RAISE . (pragma 
. 0)) (NULL . (pragma . 0)) (LOOP . (pragma . 0)) (IF . (pragma . 0)) (GOTO . 
(pragma . 0)) (EXIT . (pragma . 0)) (DELAY . (pragma . 0)) (DECLARE . (pragma . 
0)) (CASE . (pragma  [...]
-      ((default . error) (OF . (factor . 0)) (COLON_EQUAL . (factor . 0)) (DO 
. (factor . 0)) (LOOP . (factor . 0)) (ELSIF . (factor . 0)) (ELSE . (factor . 
0)) (DIGITS . (factor . 0)) (COMMA . (factor . 0)) (RIGHT_PAREN . (factor . 0)) 
(RANGE . (factor . 0)) (THEN . (factor . 0)) (WITH . (factor . 0)) (BAR . 
(factor . 0)) (EQUAL_GREATER . (factor . 0)) (IS . (factor . 0)) (SLASH_EQUAL . 
(factor . 0)) (LESS_EQUAL . (factor . 0)) (LESS . (factor . 0)) (GREATER_EQUAL 
. (factor . 0)) (GREAT [...]
-      ((default . error) (DO . (relation_and_list . 1)) (LOOP . 
(relation_and_list . 1)) (XOR . (relation_and_list . 1)) (OR . 
(relation_and_list . 1)) (ELSIF . (relation_and_list . 1)) (ELSE . 
(relation_and_list . 1)) (EQUAL_GREATER . (relation_and_list . 1)) (DIGITS . 
(relation_and_list . 1)) (RIGHT_PAREN . (relation_and_list . 1)) (COMMA . 
(relation_and_list . 1)) (RANGE . (relation_and_list . 1)) (THEN . 
(relation_and_list . 1)) (SEMICOLON . (relation_and_list . 1)) (WITH . 
(relation [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (DO . (relation_or_list . 1)) (LOOP . 
(relation_or_list . 1)) (XOR . (relation_or_list . 1)) (AND . (relation_or_list 
. 1)) (ELSIF . (relation_or_list . 1)) (ELSE . (relation_or_list . 1)) 
(EQUAL_GREATER . (relation_or_list . 1)) (DIGITS . (relation_or_list . 1)) 
(RIGHT_PAREN . (relation_or_list . 1)) (COMMA . (relation_or_list . 1)) (RANGE 
. (relation_or_list . 1)) (THEN . (relation_or_list . 1)) (SEMICOLON . 
(relation_or_list . 1)) (WITH . (relation_or_list . 1 [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (DO . (relation_xor_list . 1)) (LOOP . 
(relation_xor_list . 1)) (OR . (relation_xor_list . 1)) (AND . 
(relation_xor_list . 1)) (ELSIF . (relation_xor_list . 1)) (ELSE . 
(relation_xor_list . 1)) (EQUAL_GREATER . (relation_xor_list . 1)) (DIGITS . 
(relation_xor_list . 1)) (RIGHT_PAREN . (relation_xor_list . 1)) (COMMA . 
(relation_xor_list . 1)) (RANGE . (relation_xor_list . 1)) (THEN . 
(relation_xor_list . 1)) (SEMICOLON . (relation_xor_list . 1)) (WITH . 
(relation [...]
-      ((default . error) (DO . (relation_xor_list . 0)) (LOOP . 
(relation_xor_list . 0)) (OR . (relation_xor_list . 0)) (AND . 
(relation_xor_list . 0)) (ELSIF . (relation_xor_list . 0)) (ELSE . 
(relation_xor_list . 0)) (EQUAL_GREATER . (relation_xor_list . 0)) (DIGITS . 
(relation_xor_list . 0)) (RIGHT_PAREN . (relation_xor_list . 0)) (COMMA . 
(relation_xor_list . 0)) (RANGE . (relation_xor_list . 0)) (THEN . 
(relation_xor_list . 0)) (SEMICOLON . (relation_xor_list . 0)) (WITH . 
(relation [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (DO . (relation_or_list . 0)) (LOOP . 
(relation_or_list . 0)) (XOR . (relation_or_list . 0)) (AND . (relation_or_list 
. 0)) (ELSIF . (relation_or_list . 0)) (ELSE . (relation_or_list . 0)) 
(EQUAL_GREATER . (relation_or_list . 0)) (DIGITS . (relation_or_list . 0)) 
(RIGHT_PAREN . (relation_or_list . 0)) (COMMA . (relation_or_list . 0)) (RANGE 
. (relation_or_list . 0)) (THEN . (relation_or_list . 0)) (SEMICOLON . 
(relation_or_list . 0)) (WITH . (relation_or_list . 0 [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (DO . (relation_and_list . 0)) (LOOP . 
(relation_and_list . 0)) (XOR . (relation_and_list . 0)) (OR . 
(relation_and_list . 0)) (ELSIF . (relation_and_list . 0)) (ELSE . 
(relation_and_list . 0)) (EQUAL_GREATER . (relation_and_list . 0)) (DIGITS . 
(relation_and_list . 0)) (RIGHT_PAREN . (relation_and_list . 0)) (COMMA . 
(relation_and_list . 0)) (RANGE . (relation_and_list . 0)) (THEN . 
(relation_and_list . 0)) (SEMICOLON . (relation_and_list . 0)) (WITH . 
(relation [...]
-      ((default . error) (DO . (relation . 1)) (LOOP . (relation . 1)) (COMMA 
. (relation . 1)) (ELSIF . (relation . 1)) (ELSE . (relation . 1)) 
(EQUAL_GREATER . (relation . 1)) (RIGHT_PAREN . (relation . 1)) (DIGITS . 
(relation . 1)) (RANGE . (relation . 1)) (THEN . (relation . 1)) (SEMICOLON . 
(relation . 1)) (WITH . (relation . 1)) (IS . (relation . 1)) (AND . (relation 
. 1)) (OR . (relation . 1)) (XOR . (relation . 1)))
-      ((default . error) (OF . (term . 1)) (COLON_EQUAL . (term . 1)) (DO . 
(term . 1)) (LOOP . (term . 1)) (ELSIF . (term . 1)) (ELSE . (term . 1)) 
(DIGITS . (term . 1)) (RIGHT_PAREN . (term . 1)) (COMMA . (term . 1)) (RANGE . 
(term . 1)) (THEN . (term . 1)) (WITH . (term . 1)) (BAR . (term . 1)) 
(EQUAL_GREATER . (term . 1)) (IS . (term . 1)) (IN . (term . 1)) (NOT . (term . 
1)) (EQUAL . (term . 1)) (GREATER . (term . 1)) (GREATER_EQUAL . (term . 1)) 
(LESS . (term . 1)) (LESS_EQUAL . (t [...]
-      ((default . error) (OF . (term_list . 1)) (COLON_EQUAL . (term_list . 
1)) (DO . (term_list . 1)) (LOOP . (term_list . 1)) (ELSIF . (term_list . 1)) 
(ELSE . (term_list . 1)) (DIGITS . (term_list . 1)) (COMMA . (term_list . 1)) 
(RIGHT_PAREN . (term_list . 1)) (RANGE . (term_list . 1)) (THEN . (term_list . 
1)) (WITH . (term_list . 1)) (BAR . (term_list . 1)) (EQUAL_GREATER . 
(term_list . 1)) (IS . (term_list . 1)) (SLASH_EQUAL . (term_list . 1)) 
(LESS_EQUAL . (term_list . 1)) (LESS .  [...]
-      ((default . error) (BEGIN .  608) (END .  609))
-      ((default . error) (IDENTIFIER .  607))
-      ((default . error) (RENAMES . (subprogram_specification . 1)) (IS . ( 
606 (subprogram_specification . 1))) (WITH . (subprogram_specification . 1)) 
(SEMICOLON . (subprogram_specification . 1)))
-      ((default . error) (RENAMES . (subprogram_specification . 0)) (IS . ( 
605 (subprogram_specification . 0))) (WITH . (subprogram_specification . 0)) 
(SEMICOLON . (subprogram_specification . 0)))
-      ((default . error) (RENAMES .  128) (SEMICOLON . 
(aspect_specification_opt . 0)) (IS . ( 604 (aspect_specification_opt . 0))) 
(WITH .  109))
-      ((default . error) (EXCEPTION .  602) (CONSTANT . ( 601 (aliased_opt . 
0))) (ARRAY . (aliased_opt . 0)) (ACCESS . (aliased_opt . 0)) (NOT . 
(aliased_opt . 0)) (IDENTIFIER . (aliased_opt . 0)) (STRING_LITERAL . 
(aliased_opt . 0)) (CHARACTER_LITERAL . (aliased_opt . 0)) (ALIASED .  531))
-      ((default . error) (SEMICOLON . (name_opt . 0)) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
-      ((default . error) (END . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  302) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE 
.  304) (GENERIC .  2) (PROTECTED .  301) (TASK .  303) (PACKAGE .  300))
-      ((default . error) (IDENTIFIER . (declarations . 1)) (USE . 
(declarations . 1)) (TYPE . (declarations . 1)) (TASK . (declarations . 1)) 
(SUBTYPE . (declarations . 1)) (PROTECTED . (declarations . 1)) (PROCEDURE . 
(declarations . 1)) (PRAGMA . (declarations . 1)) (PACKAGE . (declarations . 
1)) (OVERRIDING . (declarations . 1)) (NOT . (declarations . 1)) (GENERIC . 
(declarations . 1)) (FUNCTION . (declarations . 1)) (FOR . (declarations . 1)) 
(ENTRY . (declarations . 1)) (BEGIN . (de [...]
-      ((default . error) (EXCEPTION .  596) (IDENTIFIER . (null_exclusion_opt 
. 0)) (STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (ACCESS . (null_exclusion_opt . 0)) (NOT .  232))
-      ((default . error) (IS . (discriminant_part_opt . 0)) (SEMICOLON . 
(discriminant_part_opt . 0)) (LEFT_PAREN .  211))
-      ((default . error) (IDENTIFIER .  594))
-      ((default . error) (IDENTIFIER .  593))
-      ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (IS . 
(aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (IS .  591))
-      ((default . error) (IDENTIFIER .  590))
-      ((default . error) (IDENTIFIER .  589))
-      ((default . error) (IS . (aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (USE . ((name . 0) (direct_name . 0))) (LEFT_PAREN . 
(name . 0)) (DOT . (name . 0)) (TICK . (name . 0)))
-      ((default . error) (USE . ((name . 7) (direct_name . 1))) (LEFT_PAREN . 
(name . 7)) (DOT . (name . 7)) (TICK . (name . 7)))
-      ((default . error) (USE . ( 586 (name . 4))) (LEFT_PAREN . (name . 4)) 
(DOT . (name . 4)) (TICK . (name . 4)))
-      ((default . error) (USE .  585))
-      ((default . error) (DOT .  90) (TICK .  91) (USE .  584) (LEFT_PAREN .  
107))
+      ((default . error) (RIGHT_PAREN .  607))
       ((default . error) (DOT .  90) (TICK .  91) (BAR . (discrete_choice . 
1)) (EQUAL_GREATER . (discrete_choice . 1)) (LEFT_PAREN .  107))
+      ((default . error) (XOR . (expression_opt . 0)) (OR . (expression_opt . 
0)) (AND . (expression_opt . 0)) (IS . (expression_opt . 0)) (WITH . 
(expression_opt . 0)) (SEMICOLON . (expression_opt . 0)) (THEN . 
(expression_opt . 0)) (RANGE . (expression_opt . 0)) (RIGHT_PAREN . 
(expression_opt . 0)) (COMMA . (expression_opt . 0)) (DIGITS . (expression_opt 
. 0)) (EQUAL_GREATER . (expression_opt . 0)) (ELSE . (expression_opt . 0)) 
(ELSIF . (expression_opt . 0)) (LOOP . (expression_opt . 0 [...]
       ((default . error) (SEMICOLON . (association_opt . 2)) (IS . 
(association_opt . 2)) (COMMA . (association_opt . 2)) (RIGHT_PAREN . 
(association_opt . 2)))
       ((default . error) (SEMICOLON . (association_opt . 1)) (IS . 
(association_opt . 1)) (COMMA . (association_opt . 1)) (RIGHT_PAREN . 
(association_opt . 1)))
+      ((default . error) (WHEN . (pragma . 0)) (THEN . (pragma . 0)) (OR . 
(pragma . 0)) (ELSIF . (pragma . 0)) (ELSE . (pragma . 0)) (CHARACTER_LITERAL . 
(pragma . 0)) (STRING_LITERAL . (pragma . 0)) (WHILE . (pragma . 0)) (SELECT . 
(pragma . 0)) (RETURN . (pragma . 0)) (REQUEUE . (pragma . 0)) (RAISE . (pragma 
. 0)) (NULL . (pragma . 0)) (LOOP . (pragma . 0)) (IF . (pragma . 0)) (GOTO . 
(pragma . 0)) (EXIT . (pragma . 0)) (DELAY . (pragma . 0)) (DECLARE . (pragma . 
0)) (CASE . (pragma  [...]
       ((default . error) (BAR . (choice_relation_and_list . 1)) (EQUAL_GREATER 
. (choice_relation_and_list . 1)) (AND . (choice_relation_and_list . 1)))
-      ((default . error) (XOR . (choice_relation . 1)) (OR . (choice_relation 
. 1)) (BAR . (choice_relation . 1)) (EQUAL_GREATER . (choice_relation . 1)) 
(AND . (choice_relation . 1)) (EQUAL .  278) (SLASH_EQUAL .  283) (LESS .  281) 
(LESS_EQUAL .  282) (GREATER .  279) (GREATER_EQUAL .  280))
+      ((default . error) (XOR . (choice_relation . 1)) (OR . (choice_relation 
. 1)) (BAR . (choice_relation . 1)) (EQUAL_GREATER . (choice_relation . 1)) 
(AND . (choice_relation . 1)) (EQUAL .  339) (SLASH_EQUAL .  344) (LESS .  342) 
(LESS_EQUAL .  343) (GREATER .  340) (GREATER_EQUAL .  341))
       ((default . error) (BAR . (choice_relation_or_list . 1)) (EQUAL_GREATER 
. (choice_relation_or_list . 1)) (OR . (choice_relation_or_list . 1)))
       ((default . error) (BAR . (choice_relation_xor_list . 1)) (EQUAL_GREATER 
. (choice_relation_xor_list . 1)) (XOR . (choice_relation_xor_list . 1)))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (BAR . (choice_relation_xor_list . 0)) (EQUAL_GREATER 
. (choice_relation_xor_list . 0)) (XOR . (choice_relation_xor_list . 0)))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (BAR . (choice_relation_or_list . 0)) (EQUAL_GREATER 
. (choice_relation_or_list . 0)) (OR . (choice_relation_or_list . 0)))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (BAR . (choice_relation_and_list . 0)) (EQUAL_GREATER 
. (choice_relation_and_list . 0)) (AND . (choice_relation_and_list . 0)))
+      ((default . error) (WHEN . (pragma . 1)) (THEN . (pragma . 1)) (OR . 
(pragma . 1)) (ELSIF . (pragma . 1)) (ELSE . (pragma . 1)) (CHARACTER_LITERAL . 
(pragma . 1)) (STRING_LITERAL . (pragma . 1)) (WHILE . (pragma . 1)) (SELECT . 
(pragma . 1)) (RETURN . (pragma . 1)) (REQUEUE . (pragma . 1)) (RAISE . (pragma 
. 1)) (NULL . (pragma . 1)) (LOOP . (pragma . 1)) (IF . (pragma . 1)) (GOTO . 
(pragma . 1)) (EXIT . (pragma . 1)) (DELAY . (pragma . 1)) (DECLARE . (pragma . 
1)) (CASE . (pragma  [...]
       ((default . error) (SEMICOLON . (association_opt . 4)) (IS . 
(association_opt . 4)) (COMMA . (association_opt . 4)) (RIGHT_PAREN . 
(association_opt . 4)))
       ((default . error) (SEMICOLON . (association_opt . 3)) (IS . 
(association_opt . 3)) (COMMA . (association_opt . 3)) (RIGHT_PAREN . 
(association_opt . 3)))
       ((default . error) (EQUAL_GREATER . (discrete_choice_list . 2)) (BAR . 
(discrete_choice_list . 2)))
-      ((default . error) (DOT_DOT .  277) (BAR . (choice_relation . 1)) 
(EQUAL_GREATER . (choice_relation . 1)) (AND . (choice_relation . 1)) (OR . 
(choice_relation . 1)) (XOR . (choice_relation . 1)) (EQUAL .  278) 
(SLASH_EQUAL .  283) (LESS .  281) (LESS_EQUAL .  282) (GREATER .  279) 
(GREATER_EQUAL .  280))
-      ((default . error) (LOOP . (range . 1)) (DO . (range . 1)) (OF . (range 
. 1)) (COLON_EQUAL . (range . 1)) (ELSIF . (range . 1)) (ELSE . (range . 1)) 
(DIGITS . (range . 1)) (RANGE . (range . 1)) (THEN . (range . 1)) (SEMICOLON . 
(range . 1)) (WITH . (range . 1)) (IS . (range . 1)) (AND . (range . 1)) (OR . 
(range . 1)) (XOR . (range . 1)) (COMMA . (range . 1)) (RIGHT_PAREN . (range . 
1)) (EQUAL_GREATER . (range . 1)) (BAR . (range . 1)) (LEFT_PAREN .  578))
+      ((default . error) (DOT_DOT .  338) (BAR . (choice_relation . 1)) 
(EQUAL_GREATER . (choice_relation . 1)) (AND . (choice_relation . 1)) (OR . 
(choice_relation . 1)) (XOR . (choice_relation . 1)) (EQUAL .  339) 
(SLASH_EQUAL .  344) (LESS .  342) (LESS_EQUAL .  343) (GREATER .  340) 
(GREATER_EQUAL .  341))
+      ((default . error) (LOOP . (range . 1)) (DO . (range . 1)) (ELSIF . 
(range . 1)) (ELSE . (range . 1)) (DIGITS . (range . 1)) (RANGE . (range . 1)) 
(THEN . (range . 1)) (OF . (range . 1)) (COLON_EQUAL . (range . 1)) (SEMICOLON 
. (range . 1)) (IS . (range . 1)) (WITH . (range . 1)) (AND . (range . 1)) (OR 
. (range . 1)) (XOR . (range . 1)) (COMMA . (range . 1)) (RIGHT_PAREN . (range 
. 1)) (EQUAL_GREATER . (range . 1)) (BAR . (range . 1)) (LEFT_PAREN .  600))
+      ((default . error) (OF . (factor . 0)) (COLON_EQUAL . (factor . 0)) (DO 
. (factor . 0)) (LOOP . (factor . 0)) (ELSIF . (factor . 0)) (ELSE . (factor . 
0)) (DIGITS . (factor . 0)) (COMMA . (factor . 0)) (RIGHT_PAREN . (factor . 0)) 
(RANGE . (factor . 0)) (THEN . (factor . 0)) (WITH . (factor . 0)) (BAR . 
(factor . 0)) (EQUAL_GREATER . (factor . 0)) (IS . (factor . 0)) (SLASH_EQUAL . 
(factor . 0)) (LESS_EQUAL . (factor . 0)) (LESS . (factor . 0)) (GREATER_EQUAL 
. (factor . 0)) (GREAT [...]
+      ((default . error) (DO . (relation_and_list . 1)) (LOOP . 
(relation_and_list . 1)) (XOR . (relation_and_list . 1)) (OR . 
(relation_and_list . 1)) (ELSIF . (relation_and_list . 1)) (ELSE . 
(relation_and_list . 1)) (EQUAL_GREATER . (relation_and_list . 1)) (DIGITS . 
(relation_and_list . 1)) (RIGHT_PAREN . (relation_and_list . 1)) (COMMA . 
(relation_and_list . 1)) (RANGE . (relation_and_list . 1)) (THEN . 
(relation_and_list . 1)) (WITH . (relation_and_list . 1)) (SEMICOLON . 
(relation [...]
+      ((default . error) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (DO . (relation_or_list . 1)) (LOOP . 
(relation_or_list . 1)) (XOR . (relation_or_list . 1)) (AND . (relation_or_list 
. 1)) (ELSIF . (relation_or_list . 1)) (ELSE . (relation_or_list . 1)) 
(EQUAL_GREATER . (relation_or_list . 1)) (DIGITS . (relation_or_list . 1)) 
(RIGHT_PAREN . (relation_or_list . 1)) (COMMA . (relation_or_list . 1)) (RANGE 
. (relation_or_list . 1)) (THEN . (relation_or_list . 1)) (WITH . 
(relation_or_list . 1)) (SEMICOLON . (relation_or_list . 1 [...]
+      ((default . error) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (DO . (relation_xor_list . 1)) (LOOP . 
(relation_xor_list . 1)) (OR . (relation_xor_list . 1)) (AND . 
(relation_xor_list . 1)) (ELSIF . (relation_xor_list . 1)) (ELSE . 
(relation_xor_list . 1)) (EQUAL_GREATER . (relation_xor_list . 1)) (DIGITS . 
(relation_xor_list . 1)) (RIGHT_PAREN . (relation_xor_list . 1)) (COMMA . 
(relation_xor_list . 1)) (RANGE . (relation_xor_list . 1)) (THEN . 
(relation_xor_list . 1)) (WITH . (relation_xor_list . 1)) (SEMICOLON . 
(relation [...]
+      ((default . error) (DO . (relation_xor_list . 0)) (LOOP . 
(relation_xor_list . 0)) (OR . (relation_xor_list . 0)) (AND . 
(relation_xor_list . 0)) (ELSIF . (relation_xor_list . 0)) (ELSE . 
(relation_xor_list . 0)) (EQUAL_GREATER . (relation_xor_list . 0)) (DIGITS . 
(relation_xor_list . 0)) (RIGHT_PAREN . (relation_xor_list . 0)) (COMMA . 
(relation_xor_list . 0)) (RANGE . (relation_xor_list . 0)) (THEN . 
(relation_xor_list . 0)) (WITH . (relation_xor_list . 0)) (SEMICOLON . 
(relation [...]
+      ((default . error) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (DO . (relation_or_list . 0)) (LOOP . 
(relation_or_list . 0)) (XOR . (relation_or_list . 0)) (AND . (relation_or_list 
. 0)) (ELSIF . (relation_or_list . 0)) (ELSE . (relation_or_list . 0)) 
(EQUAL_GREATER . (relation_or_list . 0)) (DIGITS . (relation_or_list . 0)) 
(RIGHT_PAREN . (relation_or_list . 0)) (COMMA . (relation_or_list . 0)) (RANGE 
. (relation_or_list . 0)) (THEN . (relation_or_list . 0)) (WITH . 
(relation_or_list . 0)) (SEMICOLON . (relation_or_list . 0 [...]
+      ((default . error) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (DO . (relation_and_list . 0)) (LOOP . 
(relation_and_list . 0)) (XOR . (relation_and_list . 0)) (OR . 
(relation_and_list . 0)) (ELSIF . (relation_and_list . 0)) (ELSE . 
(relation_and_list . 0)) (EQUAL_GREATER . (relation_and_list . 0)) (DIGITS . 
(relation_and_list . 0)) (RIGHT_PAREN . (relation_and_list . 0)) (COMMA . 
(relation_and_list . 0)) (RANGE . (relation_and_list . 0)) (THEN . 
(relation_and_list . 0)) (WITH . (relation_and_list . 0)) (SEMICOLON . 
(relation [...]
       ((default . error) (SEMICOLON . (relation . 1)) (IS . (relation . 1)) 
(WITH . (relation . 1)) (RIGHT_PAREN . (relation . 1)) (COMMA . (relation . 1)) 
(BAR . (choice_relation . 0)) (EQUAL_GREATER . (choice_relation . 0)) (AND . 
((choice_relation . 0) (relation . 1))) (OR . ((choice_relation . 0) (relation 
. 1))) (XOR . ((choice_relation . 0) (relation . 1))))
-      ((default . error) (DO . (range . 2)) (LOOP . (range . 2)) (OF . (range 
. 2)) (COLON_EQUAL . (range . 2)) (ELSIF . (range . 2)) (ELSE . (range . 2)) 
(DIGITS . (range . 2)) (RANGE . (range . 2)) (THEN . (range . 2)) (SEMICOLON . 
(range . 2)) (WITH . (range . 2)) (IS . (range . 2)) (AND . (range . 2)) (OR . 
(range . 2)) (XOR . (range . 2)) (COMMA . (range . 2)) (RIGHT_PAREN . (range . 
2)) (EQUAL_GREATER . (range . 2)) (BAR . (range . 2)))
-      ((default . error) (PLUS .  154) (MINUS .  153) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ABS .  144) (NOT .  150) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
-      ((default . error) (BAR .  576) (DO . (relation . 3)) (LOOP . (relation 
. 3)) (COMMA . (relation . 3)) (ELSIF . (relation . 3)) (ELSE . (relation . 3)) 
(EQUAL_GREATER . (relation . 3)) (RIGHT_PAREN . (relation . 3)) (DIGITS . 
(relation . 3)) (RANGE . (relation . 3)) (THEN . (relation . 3)) (SEMICOLON . 
(relation . 3)) (WITH . (relation . 3)) (IS . (relation . 3)) (AND . (relation 
. 3)) (OR . (relation . 3)) (XOR . (relation . 3)))
-      ((default . error) (DO . (membership_choice_list . 0)) (LOOP . 
(membership_choice_list . 0)) (COMMA . (membership_choice_list . 0)) (ELSIF . 
(membership_choice_list . 0)) (ELSE . (membership_choice_list . 0)) 
(EQUAL_GREATER . (membership_choice_list . 0)) (RIGHT_PAREN . 
(membership_choice_list . 0)) (DIGITS . (membership_choice_list . 0)) (RANGE . 
(membership_choice_list . 0)) (THEN . (membership_choice_list . 0)) (SEMICOLON 
. (membership_choice_list . 0)) (WITH . (membership_choic [...]
-      ((default . error) (DO . (membership_choice . 1)) (LOOP . 
(membership_choice . 1)) (COMMA . (membership_choice . 1)) (ELSIF . 
(membership_choice . 1)) (ELSE . (membership_choice . 1)) (EQUAL_GREATER . 
(membership_choice . 1)) (RIGHT_PAREN . (membership_choice . 1)) (DIGITS . 
(membership_choice . 1)) (RANGE . (membership_choice . 1)) (THEN . 
(membership_choice . 1)) (SEMICOLON . (membership_choice . 1)) (WITH . 
(membership_choice . 1)) (IS . (membership_choice . 1)) (AND . (membersh [...]
-      ((default . error) (DOT_DOT .  277) (DO . (membership_choice . 0)) (LOOP 
. (membership_choice . 0)) (COMMA . (membership_choice . 0)) (ELSIF . 
(membership_choice . 0)) (ELSE . (membership_choice . 0)) (EQUAL_GREATER . 
(membership_choice . 0)) (RIGHT_PAREN . (membership_choice . 0)) (DIGITS . 
(membership_choice . 0)) (RANGE . (membership_choice . 0)) (THEN . 
(membership_choice . 0)) (SEMICOLON . (membership_choice . 0)) (WITH . 
(membership_choice . 0)) (IS . (membership_choice . 0)) [...]
+      ((default . error) (DO . (range . 2)) (LOOP . (range . 2)) (ELSIF . 
(range . 2)) (ELSE . (range . 2)) (DIGITS . (range . 2)) (RANGE . (range . 2)) 
(THEN . (range . 2)) (OF . (range . 2)) (COLON_EQUAL . (range . 2)) (SEMICOLON 
. (range . 2)) (IS . (range . 2)) (WITH . (range . 2)) (AND . (range . 2)) (OR 
. (range . 2)) (XOR . (range . 2)) (COMMA . (range . 2)) (RIGHT_PAREN . (range 
. 2)) (EQUAL_GREATER . (range . 2)) (BAR . (range . 2)))
+      ((default . error) (PLUS .  155) (MINUS .  154) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ABS .  144) (NOT .  324) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (BAR .  594) (DO . (relation . 3)) (LOOP . (relation 
. 3)) (ELSIF . (relation . 3)) (ELSE . (relation . 3)) (EQUAL_GREATER . 
(relation . 3)) (DIGITS . (relation . 3)) (RANGE . (relation . 3)) (THEN . 
(relation . 3)) (SEMICOLON . (relation . 3)) (IS . (relation . 3)) (WITH . 
(relation . 3)) (RIGHT_PAREN . (relation . 3)) (COMMA . (relation . 3)) (AND . 
(relation . 3)) (OR . (relation . 3)) (XOR . (relation . 3)))
+      ((default . error) (DO . (membership_choice_list . 0)) (LOOP . 
(membership_choice_list . 0)) (ELSIF . (membership_choice_list . 0)) (ELSE . 
(membership_choice_list . 0)) (EQUAL_GREATER . (membership_choice_list . 0)) 
(DIGITS . (membership_choice_list . 0)) (RANGE . (membership_choice_list . 0)) 
(THEN . (membership_choice_list . 0)) (SEMICOLON . (membership_choice_list . 
0)) (IS . (membership_choice_list . 0)) (WITH . (membership_choice_list . 0)) 
(RIGHT_PAREN . (membership_choice_l [...]
+      ((default . error) (DO . (membership_choice . 1)) (LOOP . 
(membership_choice . 1)) (ELSIF . (membership_choice . 1)) (ELSE . 
(membership_choice . 1)) (EQUAL_GREATER . (membership_choice . 1)) (DIGITS . 
(membership_choice . 1)) (RANGE . (membership_choice . 1)) (THEN . 
(membership_choice . 1)) (SEMICOLON . (membership_choice . 1)) (IS . 
(membership_choice . 1)) (WITH . (membership_choice . 1)) (RIGHT_PAREN . 
(membership_choice . 1)) (COMMA . (membership_choice . 1)) (AND . (membersh 
[...]
+      ((default . error) (DOT_DOT .  338) (DO . (membership_choice . 0)) (LOOP 
. (membership_choice . 0)) (ELSIF . (membership_choice . 0)) (ELSE . 
(membership_choice . 0)) (EQUAL_GREATER . (membership_choice . 0)) (DIGITS . 
(membership_choice . 0)) (RANGE . (membership_choice . 0)) (THEN . 
(membership_choice . 0)) (SEMICOLON . (membership_choice . 0)) (IS . 
(membership_choice . 0)) (WITH . (membership_choice . 0)) (RIGHT_PAREN . 
(membership_choice . 0)) (COMMA . (membership_choice . 0)) [...]
+      ((default . error) (OF . (term . 1)) (COLON_EQUAL . (term . 1)) (DO . 
(term . 1)) (LOOP . (term . 1)) (ELSIF . (term . 1)) (ELSE . (term . 1)) 
(DIGITS . (term . 1)) (RIGHT_PAREN . (term . 1)) (COMMA . (term . 1)) (RANGE . 
(term . 1)) (THEN . (term . 1)) (WITH . (term . 1)) (BAR . (term . 1)) 
(EQUAL_GREATER . (term . 1)) (IS . (term . 1)) (IN . (term . 1)) (NOT . (term . 
1)) (EQUAL . (term . 1)) (GREATER . (term . 1)) (GREATER_EQUAL . (term . 1)) 
(LESS . (term . 1)) (LESS_EQUAL . (t [...]
+      ((default . error) (OF . (term_list . 1)) (COLON_EQUAL . (term_list . 
1)) (DO . (term_list . 1)) (LOOP . (term_list . 1)) (ELSIF . (term_list . 1)) 
(ELSE . (term_list . 1)) (DIGITS . (term_list . 1)) (COMMA . (term_list . 1)) 
(RIGHT_PAREN . (term_list . 1)) (RANGE . (term_list . 1)) (THEN . (term_list . 
1)) (WITH . (term_list . 1)) (BAR . (term_list . 1)) (EQUAL_GREATER . 
(term_list . 1)) (IS . (term_list . 1)) (SLASH_EQUAL . (term_list . 1)) 
(LESS_EQUAL . (term_list . 1)) (LESS .  [...]
+      ((default . error) (BEGIN .  592) (END .  593))
+      ((default . error) (IDENTIFIER .  591))
+      ((default . error) (RENAMES . (subprogram_specification . 1)) (IS . ( 
590 (subprogram_specification . 1))) (WITH . (subprogram_specification . 1)) 
(SEMICOLON . (subprogram_specification . 1)))
+      ((default . error) (RENAMES . (subprogram_specification . 0)) (IS . ( 
589 (subprogram_specification . 0))) (WITH . (subprogram_specification . 0)) 
(SEMICOLON . (subprogram_specification . 0)))
+      ((default . error) (RENAMES .  128) (SEMICOLON . 
(aspect_specification_opt . 0)) (IS . ( 588 (aspect_specification_opt . 0))) 
(WITH .  109))
+      ((default . error) (EXCEPTION .  586) (CONSTANT . ( 585 (aliased_opt . 
0))) (ARRAY . (aliased_opt . 0)) (ACCESS . (aliased_opt . 0)) (NOT . 
(aliased_opt . 0)) (IDENTIFIER . (aliased_opt . 0)) (STRING_LITERAL . 
(aliased_opt . 0)) (CHARACTER_LITERAL . (aliased_opt . 0)) (ALIASED .  523))
+      ((default . error) (SEMICOLON . (name_opt . 0)) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (END . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  272) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE 
.  274) (GENERIC .  2) (PROTECTED .  271) (TASK .  273) (PACKAGE .  270))
+      ((default . error) (IDENTIFIER . (declarations . 1)) (USE . 
(declarations . 1)) (TYPE . (declarations . 1)) (TASK . (declarations . 1)) 
(SUBTYPE . (declarations . 1)) (PROTECTED . (declarations . 1)) (PROCEDURE . 
(declarations . 1)) (PRAGMA . (declarations . 1)) (PACKAGE . (declarations . 
1)) (OVERRIDING . (declarations . 1)) (NOT . (declarations . 1)) (GENERIC . 
(declarations . 1)) (FUNCTION . (declarations . 1)) (FOR . (declarations . 1)) 
(ENTRY . (declarations . 1)) (BEGIN . (de [...]
+      ((default . error) (EXCEPTION .  580) (IDENTIFIER . (null_exclusion_opt 
. 0)) (STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (ACCESS . (null_exclusion_opt . 0)) (NOT .  226))
+      ((default . error) (IS . (discriminant_part_opt . 0)) (SEMICOLON . 
(discriminant_part_opt . 0)) (LEFT_PAREN .  205))
+      ((default . error) (IDENTIFIER .  578))
+      ((default . error) (IDENTIFIER .  577))
+      ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (IS . 
(aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (IS .  575))
+      ((default . error) (IDENTIFIER .  574))
+      ((default . error) (IDENTIFIER .  573))
+      ((default . error) (IS . (aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
+      ((default . error) (USE . ((name . 0) (direct_name . 0))) (LEFT_PAREN . 
(name . 0)) (DOT . (name . 0)) (TICK . (name . 0)))
+      ((default . error) (USE . ((name . 7) (direct_name . 1))) (LEFT_PAREN . 
(name . 7)) (DOT . (name . 7)) (TICK . (name . 7)))
+      ((default . error) (USE . ( 570 (name . 4))) (LEFT_PAREN . (name . 4)) 
(DOT . (name . 4)) (TICK . (name . 4)))
+      ((default . error) (USE .  569))
+      ((default . error) (DOT .  90) (TICK .  91) (USE .  568) (LEFT_PAREN .  
107))
       ((default . error) (BEGIN . (package_renaming_declaration . 0)) (ENTRY . 
(package_renaming_declaration . 0)) (FOR . (package_renaming_declaration . 0)) 
(PROTECTED . (package_renaming_declaration . 0)) (SUBTYPE . 
(package_renaming_declaration . 0)) (TASK . (package_renaming_declaration . 0)) 
(TYPE . (package_renaming_declaration . 0)) (IDENTIFIER . 
(package_renaming_declaration . 0)) (END . (package_renaming_declaration . 0)) 
(WITH . (package_renaming_declaration . 0)) (USE . (packa [...]
-      ((default . error) (SEMICOLON . (association_list . 1)) (IS . 
(association_list . 1)) (COMMA . (association_list . 1)) (RIGHT_PAREN . 
(association_list . 1)))
+      ((default . error) (RIGHT_PAREN . (association_list . 1)) (COMMA . 
(association_list . 1)) (SEMICOLON . (association_list . 1)) (IS . 
(association_list . 1)))
       ((default . error) (RIGHT_PAREN . (range_list . 1)) (COMMA . (range_list 
. 1)))
-      ((default . error) (DOT_DOT .  277))
-      ((default . error) (SEMICOLON .  575))
-      ((default . error) (SEMICOLON .  574))
-      ((default . error) (SEMICOLON .  573))
-      ((default . error) (SEMICOLON .  572))
-      ((default . error) (ACCESS . (null_exclusion_opt . 0)) (NOT .  566) 
(IDENTIFIER .  567) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (DOT_DOT .  338))
+      ((default . error) (SEMICOLON .  567))
+      ((default . error) (SEMICOLON .  566))
+      ((default . error) (SEMICOLON .  565))
+      ((default . error) (SEMICOLON .  564))
+      ((default . error) (ACCESS . (null_exclusion_opt . 0)) (NOT .  558) 
(IDENTIFIER .  559) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (IS . (discriminant_part_opt . 2)) (WITH . 
(discriminant_part_opt . 2)) (SEMICOLON . (discriminant_part_opt . 2)))
       ((default . error) (RIGHT_PAREN . (discriminant_specification_opt . 0)) 
(SEMICOLON . (discriminant_specification_opt . 0)) (IDENTIFIER .  77))
       ((default . error) (IS . (discriminant_part_opt . 1)) (WITH . 
(discriminant_part_opt . 1)) (SEMICOLON . (discriminant_part_opt . 1)))
       ((default . error) (PACKAGE . (formal_type_declaration . 2)) (PROCEDURE 
. (formal_type_declaration . 2)) (FUNCTION . (formal_type_declaration . 2)) 
(PRAGMA . (formal_type_declaration . 2)) (TYPE . (formal_type_declaration . 2)) 
(USE . (formal_type_declaration . 2)) (WITH . (formal_type_declaration . 2)) 
(IDENTIFIER . (formal_type_declaration . 2)))
-      ((default . error) (TAGGED .  564) (NEW . 
(abstract_limited_synchronized_opt . 3)) (SYNCHRONIZED .  563) (LIMITED .  562))
-      ((default . error) (LEFT_PAREN .  561))
-      ((default . error) (BOX .  560))
-      ((default . error) (BOX .  559))
+      ((default . error) (TAGGED .  556) (NEW . 
(abstract_limited_synchronized_opt . 3)) (SYNCHRONIZED .  555) (LIMITED .  554))
+      ((default . error) (LEFT_PAREN .  553))
+      ((default . error) (BOX .  552))
+      ((default . error) (BOX .  551))
       ((default . error) (SEMICOLON . (interface_type_definition . 8)) (WITH . 
(interface_type_definition . 8)))
-      ((default . error) (BOX .  558))
-      ((default . error) (INTERFACE .  557) (PRIVATE . 
(abstract_tagged_limited_opt . 5)) (NEW . (abstract_limited_synchronized_opt . 
4)))
-      ((default . error) (BOX .  556))
-      ((default . error) (INTERFACE .  555))
-      ((default . error) (BOX .  554))
-      ((default . error) (INTERFACE .  553) (NEW . 
(abstract_limited_synchronized_opt . 5)))
-      ((default . error) (PRIVATE . (abstract_tagged_limited_opt . 4)) 
(LIMITED .  551) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (INTERFACE .  550))
-      ((default . error) (NEW .  549))
-      ((default . error) (PRIVATE .  548))
+      ((default . error) (BOX .  550))
+      ((default . error) (INTERFACE .  549) (PRIVATE . 
(abstract_tagged_limited_opt . 5)) (NEW . (abstract_limited_synchronized_opt . 
4)))
+      ((default . error) (BOX .  548))
+      ((default . error) (INTERFACE .  547))
+      ((default . error) (BOX .  546))
+      ((default . error) (INTERFACE .  545) (NEW . 
(abstract_limited_synchronized_opt . 5)))
+      ((default . error) (PRIVATE . (abstract_tagged_limited_opt . 4)) 
(LIMITED .  543) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (INTERFACE .  542))
+      ((default . error) (NEW .  541))
+      ((default . error) (PRIVATE .  540))
       ((default . error) (WITH . (formal_type_definition . 9)) (SEMICOLON . 
(formal_type_definition . 9)))
       ((default . error) (WITH . (formal_type_definition . 8)) (SEMICOLON . 
(formal_type_definition . 8)))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (WITH . (formal_type_definition . 1)) (SEMICOLON . 
(formal_type_definition . 1)))
       ((default . error) (WITH . (formal_type_definition . 10)) (SEMICOLON . 
(formal_type_definition . 10)))
-      ((default . error) (ACCESS .  242))
-      ((default . error) (SEMICOLON .  546))
-      ((default . error) (SEMICOLON .  545))
+      ((default . error) (ACCESS .  236))
+      ((default . error) (SEMICOLON .  538))
+      ((default . error) (SEMICOLON .  537))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (DOT .  90) (TICK .  91) (COLON_EQUAL .  541) 
(LEFT_PAREN .  107) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  539))
+      ((default . error) (DOT .  90) (TICK .  91) (COLON_EQUAL .  533) 
(LEFT_PAREN .  107) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (WITH . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  531))
       ((default . error) (DO . (parameter_and_result_profile . 0)) 
(RIGHT_PAREN . (parameter_and_result_profile . 0)) (COLON_EQUAL . 
(parameter_and_result_profile . 0)) (RENAMES . (parameter_and_result_profile . 
0)) (WITH . (parameter_and_result_profile . 0)) (SEMICOLON . 
(parameter_and_result_profile . 0)) (IS . (parameter_and_result_profile . 0)))
       ((default . error) (IDENTIFIER . (general_access_modifier_opt . 1)) 
(STRING_LITERAL . (general_access_modifier_opt . 1)) (CHARACTER_LITERAL . 
(general_access_modifier_opt . 1)))
       ((default . error) (IDENTIFIER . (general_access_modifier_opt . 2)) 
(STRING_LITERAL . (general_access_modifier_opt . 2)) (CHARACTER_LITERAL . 
(general_access_modifier_opt . 2)))
       ((default . error) (FUNCTION . (protected_opt . 1)) (PROCEDURE . 
(protected_opt . 1)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (FUNCTION .  536) (PROCEDURE .  537))
+      ((default . error) (FUNCTION .  528) (PROCEDURE .  529))
       ((default . error) (IN . (aliased_opt . 1)) (OUT . (aliased_opt . 1)) 
(ARRAY . (aliased_opt . 1)) (CONSTANT . (aliased_opt . 1)) (ACCESS . 
(aliased_opt . 1)) (NOT . (aliased_opt . 1)) (IDENTIFIER . (aliased_opt . 1)) 
(STRING_LITERAL . (aliased_opt . 1)) (CHARACTER_LITERAL . (aliased_opt . 1)))
-      ((default . error) (IDENTIFIER . (mode_opt . 0)) (STRING_LITERAL . 
(mode_opt . 0)) (CHARACTER_LITERAL . (mode_opt . 0)) (IN .  217) (OUT .  218) 
(ACCESS . (null_exclusion_opt . 0)) (NOT . ( 232 (mode_opt . 0))))
+      ((default . error) (IDENTIFIER . (mode_opt . 0)) (STRING_LITERAL . 
(mode_opt . 0)) (CHARACTER_LITERAL . (mode_opt . 0)) (IN .  211) (OUT .  212) 
(ACCESS . (null_exclusion_opt . 0)) (NOT . ( 226 (mode_opt . 0))))
       ((default . error) (RIGHT_PAREN . (parameter_specification_list . 1)) 
(SEMICOLON . (parameter_specification_list . 1)))
-      ((default . error) (COLON_EQUAL .  814) (RIGHT_PAREN . 
(parameter_specification . 3)) (SEMICOLON . (parameter_specification . 3)))
-      ((default . error) (IDENTIFIER . (null_exclusion_opt . 0)) 
(STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (NOT .  232))
-      ((default . error) (RETURN .  89) (LEFT_PAREN .  810))
-      ((default . error) (WITH . (parameter_profile_opt . 0)) (SEMICOLON . 
(parameter_profile_opt . 0)) (IS . (parameter_profile_opt . 0)) (COLON_EQUAL . 
(parameter_profile_opt . 0)) (RIGHT_PAREN . (parameter_profile_opt . 0)) 
(RENAMES . (parameter_profile_opt . 0)) (DO . (parameter_profile_opt . 0)) 
(LEFT_PAREN .  810))
+      ((default . error) (COLON_EQUAL .  805) (RIGHT_PAREN . 
(parameter_specification . 4)) (SEMICOLON . (parameter_specification . 4)))
+      ((default . error) (IDENTIFIER . (null_exclusion_opt . 0)) 
(STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (NOT .  226))
+      ((default . error) (RETURN .  89) (LEFT_PAREN .  801))
+      ((default . error) (WITH . (parameter_profile_opt . 0)) (SEMICOLON . 
(parameter_profile_opt . 0)) (IS . (parameter_profile_opt . 0)) (COLON_EQUAL . 
(parameter_profile_opt . 0)) (RIGHT_PAREN . (parameter_profile_opt . 0)) 
(RENAMES . (parameter_profile_opt . 0)) (DO . (parameter_profile_opt . 0)) 
(LEFT_PAREN .  801))
       ((default . error) (DOT .  90) (TICK .  91) (DO . (access_definition . 
0)) (RENAMES . (access_definition . 0)) (RIGHT_PAREN . (access_definition . 0)) 
(COLON_EQUAL . (access_definition . 0)) (IS . (access_definition . 0)) 
(SEMICOLON . (access_definition . 0)) (WITH . (access_definition . 0)) 
(LEFT_PAREN .  107))
       ((default . error) (IDENTIFIER . (formal_object_declaration . 3)) (WITH 
. (formal_object_declaration . 3)) (USE . (formal_object_declaration . 3)) 
(TYPE . (formal_object_declaration . 3)) (PRAGMA . (formal_object_declaration . 
3)) (FUNCTION . (formal_object_declaration . 3)) (PROCEDURE . 
(formal_object_declaration . 3)) (PACKAGE . (formal_object_declaration . 3)))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  807))
-      ((default . error) (DOT .  90) (TICK .  91) (WITH . 
(formal_package_actual_part . 1)) (SEMICOLON . (formal_package_actual_part . 
1)) (LEFT_PAREN .  805))
-      ((default . error) (SEMICOLON .  804))
+      ((default . error) (WITH . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  798))
+      ((default . error) (DOT .  90) (TICK .  91) (WITH . 
(formal_package_actual_part . 1)) (SEMICOLON . (formal_package_actual_part . 
1)) (LEFT_PAREN .  796))
+      ((default . error) (SEMICOLON .  795))
       ((default . error) (IDENTIFIER . (formal_subprogram_declaration . 3)) 
(WITH . (formal_subprogram_declaration . 3)) (USE . 
(formal_subprogram_declaration . 3)) (TYPE . (formal_subprogram_declaration . 
3)) (PRAGMA . (formal_subprogram_declaration . 3)) (FUNCTION . 
(formal_subprogram_declaration . 3)) (PROCEDURE . 
(formal_subprogram_declaration . 3)) (PACKAGE . (formal_subprogram_declaration 
. 3)))
       ((default . error) (IDENTIFIER . (formal_subprogram_declaration . 0)) 
(WITH . (formal_subprogram_declaration . 0)) (USE . 
(formal_subprogram_declaration . 0)) (TYPE . (formal_subprogram_declaration . 
0)) (PRAGMA . (formal_subprogram_declaration . 0)) (FUNCTION . 
(formal_subprogram_declaration . 0)) (PROCEDURE . 
(formal_subprogram_declaration . 0)) (PACKAGE . (formal_subprogram_declaration 
. 0)))
-      ((default . error) (SEMICOLON .  803))
+      ((default . error) (SEMICOLON .  794))
       ((default . error) (SEMICOLON . (formal_type_definition . 0)) (WITH . 
(formal_type_definition . 0)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (AND .  801) (WITH . (interface_type_definition . 5)) 
(SEMICOLON . (interface_type_definition . 5)))
+      ((default . error) (AND .  792) (WITH . (interface_type_definition . 5)) 
(SEMICOLON . (interface_type_definition . 5)))
       ((default . error) (RECORD . (abstract_tagged_limited_opt . 3)) (NULL . 
(abstract_tagged_limited_opt . 3)) (PRIVATE . (abstract_tagged_limited_opt . 
3)))
-      ((default . error) (SEMICOLON .  800))
-      ((default . error) (AND .  799) (WITH . (interface_type_definition . 7)) 
(SEMICOLON . (interface_type_definition . 7)))
+      ((default . error) (SEMICOLON .  791))
+      ((default . error) (AND .  790) (WITH . (interface_type_definition . 7)) 
(SEMICOLON . (interface_type_definition . 7)))
       ((default . error) (SEMICOLON . (formal_type_definition . 3)) (WITH . 
(formal_type_definition . 3)))
-      ((default . error) (AND .  798) (WITH . (interface_type_definition . 6)) 
(SEMICOLON . (interface_type_definition . 6)))
+      ((default . error) (AND .  789) (WITH . (interface_type_definition . 6)) 
(SEMICOLON . (interface_type_definition . 6)))
       ((default . error) (SEMICOLON . (formal_type_definition . 4)) (WITH . 
(formal_type_definition . 4)))
-      ((default . error) (AND .  797) (WITH . (interface_type_definition . 4)) 
(SEMICOLON . (interface_type_definition . 4)))
-      ((default . error) (RIGHT_PAREN .  796))
+      ((default . error) (AND .  788) (WITH . (interface_type_definition . 4)) 
(SEMICOLON . (interface_type_definition . 4)))
+      ((default . error) (RIGHT_PAREN .  787))
       ((default . error) (SEMICOLON . (formal_type_definition . 5)) (WITH . 
(formal_type_definition . 5)))
-      ((default . error) (SEMICOLON . (formal_type_definition . 6)) (WITH . 
(formal_type_definition . 6)) (DIGITS .  795))
-      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  736) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON . (formal_type_definition . 6)) (WITH . 
(formal_type_definition . 6)) (DIGITS .  786))
+      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  728) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (NEW . (abstract_limited_synchronized_opt . 1)))
       ((default . error) (NEW . (abstract_limited_synchronized_opt . 2)))
-      ((default . error) (LIMITED .  789) (RECORD . 
(abstract_tagged_limited_opt . 2)) (NULL . (abstract_tagged_limited_opt . 2)) 
(PRIVATE . (abstract_tagged_limited_opt . 2)))
+      ((default . error) (LIMITED .  780) (RECORD . 
(abstract_tagged_limited_opt . 2)) (NULL . (abstract_tagged_limited_opt . 2)) 
(PRIVATE . (abstract_tagged_limited_opt . 2)))
       ((default . error) (RIGHT_PAREN . (discriminant_specification_list . 1)) 
(SEMICOLON . (discriminant_specification_list . 1)))
-      ((default . error) (NULL .  788))
+      ((default . error) (NULL .  779))
       ((default . error) (SEMICOLON . (null_exclusion_opt_name_type . 0)) 
(RIGHT_PAREN . (null_exclusion_opt_name_type . 0)) (COLON_EQUAL . 
(null_exclusion_opt_name_type . 0)) (DOT . (name . 0)) (LEFT_PAREN . (name . 
0)) (TICK . (name . 0)))
-      ((default . error) (SEMICOLON . (discriminant_specification_opt . 4)) 
(RIGHT_PAREN . (discriminant_specification_opt . 4)) (COLON_EQUAL .  787))
+      ((default . error) (SEMICOLON . (discriminant_specification_opt . 4)) 
(RIGHT_PAREN . (discriminant_specification_opt . 4)) (COLON_EQUAL .  778))
       ((default . error) (DOT .  90) (TICK .  91) (LEFT_PAREN .  107))
-      ((default . error) (SEMICOLON . (discriminant_specification_opt . 2)) 
(RIGHT_PAREN . (discriminant_specification_opt . 2)) (COLON_EQUAL .  786))
+      ((default . error) (SEMICOLON . (discriminant_specification_opt . 2)) 
(RIGHT_PAREN . (discriminant_specification_opt . 2)) (COLON_EQUAL .  777))
       ((default . error) (SEMICOLON . (null_exclusion_opt_name_type . 1)) 
(RIGHT_PAREN . (null_exclusion_opt_name_type . 1)) (COLON_EQUAL . 
(null_exclusion_opt_name_type . 1)) (DOT . (name . 3)) (LEFT_PAREN . (name . 
3)) (TICK . (name . 3)))
       ((default . error) ($EOI . (generic_renaming_declaration . 1)) (LIMITED 
. (generic_renaming_declaration . 1)) (SEPARATE . (generic_renaming_declaration 
. 1)) (WITH . (generic_renaming_declaration . 1)) (END . 
(generic_renaming_declaration . 1)) (PRIVATE . (generic_renaming_declaration . 
1)) (IDENTIFIER . (generic_renaming_declaration . 1)) (USE . 
(generic_renaming_declaration . 1)) (TYPE . (generic_renaming_declaration . 1)) 
(TASK . (generic_renaming_declaration . 1)) (SUBTYPE . (g [...]
       ((default . error) ($EOI . (generic_renaming_declaration . 0)) (LIMITED 
. (generic_renaming_declaration . 0)) (SEPARATE . (generic_renaming_declaration 
. 0)) (WITH . (generic_renaming_declaration . 0)) (END . 
(generic_renaming_declaration . 0)) (PRIVATE . (generic_renaming_declaration . 
0)) (IDENTIFIER . (generic_renaming_declaration . 0)) (USE . 
(generic_renaming_declaration . 0)) (TYPE . (generic_renaming_declaration . 0)) 
(TASK . (generic_renaming_declaration . 0)) (SUBTYPE . (g [...]
       ((default . error) ($EOI . (generic_renaming_declaration . 2)) (LIMITED 
. (generic_renaming_declaration . 2)) (SEPARATE . (generic_renaming_declaration 
. 2)) (WITH . (generic_renaming_declaration . 2)) (END . 
(generic_renaming_declaration . 2)) (PRIVATE . (generic_renaming_declaration . 
2)) (IDENTIFIER . (generic_renaming_declaration . 2)) (USE . 
(generic_renaming_declaration . 2)) (TYPE . (generic_renaming_declaration . 2)) 
(TASK . (generic_renaming_declaration . 2)) (SUBTYPE . (g [...]
       ((default . error) (END . (generic_instantiation . 0)) (BEGIN . 
(generic_instantiation . 0)) (ENTRY . (generic_instantiation . 0)) (FOR . 
(generic_instantiation . 0)) (PROTECTED . (generic_instantiation . 0)) (SUBTYPE 
. (generic_instantiation . 0)) (TASK . (generic_instantiation . 0)) (TYPE . 
(generic_instantiation . 0)) (IDENTIFIER . (generic_instantiation . 0)) ($EOI . 
(generic_instantiation . 0)) (FUNCTION . (generic_instantiation . 0)) (GENERIC 
. (generic_instantiation . 0)) (L [...]
-      ((default . error) (PLUS .  154) (MINUS .  153) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ABS .  144) (NOT .  150) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
-      ((default . error) (BAR .  576) (LOOP . (relation . 2)) (DO . (relation 
. 2)) (XOR . (relation . 2)) (OR . (relation . 2)) (AND . (relation . 2)) (IS . 
(relation . 2)) (WITH . (relation . 2)) (SEMICOLON . (relation . 2)) (THEN . 
(relation . 2)) (RANGE . (relation . 2)) (DIGITS . (relation . 2)) (RIGHT_PAREN 
. (relation . 2)) (EQUAL_GREATER . (relation . 2)) (ELSE . (relation . 2)) 
(ELSIF . (relation . 2)) (COMMA . (relation . 2)))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (LEFT_PAREN .  148) (RECORD .  774))
+      ((default . error) (AT .  773))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (DOT .  90) (TICK .  91) (IS . ( 771 
(aspect_specification_opt . 0))) (WITH .  109) (LEFT_PAREN .  107))
+      ((default . error) (IS .  770))
+      ((default . error) (WITH . (discriminant_part_opt . 0)) (IS . 
(discriminant_part_opt . 0)) (LEFT_PAREN .  205))
+      ((default . error) (IS . ( 768 (aspect_specification_opt . 0))) (WITH .  
109))
+      ((default . error) (NOT .  723) (IDENTIFIER .  48) (CHARACTER_LITERAL .  
50) (STRING_LITERAL .  49))
+      ((default . error) (SEMICOLON .  766) (IS .  765))
+      ((default . error) (WITH . (discriminant_part_opt . 0)) (IS . 
(discriminant_part_opt . 0)) (SEMICOLON . (discriminant_part_opt . 0)) 
(LEFT_PAREN .  205))
+      ((default . error) (IS . ( 763 (aspect_specification_opt . 0))) (WITH .  
109))
+      ((default . error) (SEMICOLON .  762) (IS .  761))
+      ((default . error) (RENAMES .  760))
+      ((default . error) (RENAMES .  759))
+      ((default . error) (ACCESS .  236) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49))
+      ((default . error) (END .  757))
+      ((default . error) (SEMICOLON . (package_specification . 1)))
+      ((default . error) (COLON_EQUAL .  756))
+      ((default . error) (SEMICOLON .  755))
+      ((default . error) (NOT . (constant_opt . 0)) (IDENTIFIER . 
(constant_opt . 0)) (STRING_LITERAL . (constant_opt . 0)) (CHARACTER_LITERAL . 
(constant_opt . 0)) (ACCESS . (constant_opt . 0)) (ARRAY . (constant_opt . 0)) 
(CONSTANT .  753))
+      ((default . error) (SEPARATE .  752) (ABSTRACT .  751))
+      ((default . error) (NULL .  750))
+      ((default . error) (LEFT_PAREN .  748))
+      ((default . error) (WITH . (parameter_profile_opt . 0)) (SEMICOLON . 
(parameter_profile_opt . 0)) (LEFT_PAREN .  746))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
+      ((default . error) (SEMICOLON . (name_opt . 0)) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (PLUS .  155) (MINUS .  154) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ABS .  144) (NOT .  324) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (BAR .  594) (LOOP . (relation . 2)) (DO . (relation 
. 2)) (THEN . (relation . 2)) (RANGE . (relation . 2)) (DIGITS . (relation . 
2)) (EQUAL_GREATER . (relation . 2)) (ELSE . (relation . 2)) (ELSIF . (relation 
. 2)) (XOR . (relation . 2)) (OR . (relation . 2)) (AND . (relation . 2)) 
(COMMA . (relation . 2)) (RIGHT_PAREN . (relation . 2)) (WITH . (relation . 2)) 
(IS . (relation . 2)) (SEMICOLON . (relation . 2)))
+      ((default . error) (OR . (relation_and_then_list . 0)) (XOR . 
(relation_and_then_list . 0)) (LOOP . (relation_and_then_list . 0)) (DO . 
(relation_and_then_list . 0)) (AND . (relation_and_then_list . 0)) (IS . 
(relation_and_then_list . 0)) (SEMICOLON . (relation_and_then_list . 0)) (WITH 
. (relation_and_then_list . 0)) (THEN . (relation_and_then_list . 0)) (RANGE . 
(relation_and_then_list . 0)) (COMMA . (relation_and_then_list . 0)) 
(RIGHT_PAREN . (relation_and_then_list . 0)) (DIGI [...]
+      ((default . error) (AND . (relation_or_else_list . 0)) (XOR . 
(relation_or_else_list . 0)) (LOOP . (relation_or_else_list . 0)) (DO . 
(relation_or_else_list . 0)) (OR . (relation_or_else_list . 0)) (IS . 
(relation_or_else_list . 0)) (SEMICOLON . (relation_or_else_list . 0)) (WITH . 
(relation_or_else_list . 0)) (THEN . (relation_or_else_list . 0)) (RANGE . 
(relation_or_else_list . 0)) (COMMA . (relation_or_else_list . 0)) (RIGHT_PAREN 
. (relation_or_else_list . 0)) (DIGITS . (relati [...]
+      ((default . error) (AND . (relation_or_else_list . 1)) (XOR . 
(relation_or_else_list . 1)) (LOOP . (relation_or_else_list . 1)) (DO . 
(relation_or_else_list . 1)) (OR . (relation_or_else_list . 1)) (IS . 
(relation_or_else_list . 1)) (SEMICOLON . (relation_or_else_list . 1)) (WITH . 
(relation_or_else_list . 1)) (THEN . (relation_or_else_list . 1)) (RANGE . 
(relation_or_else_list . 1)) (COMMA . (relation_or_else_list . 1)) (RIGHT_PAREN 
. (relation_or_else_list . 1)) (DIGITS . (relati [...]
+      ((default . error) (OR . (relation_and_then_list . 1)) (XOR . 
(relation_and_then_list . 1)) (LOOP . (relation_and_then_list . 1)) (DO . 
(relation_and_then_list . 1)) (AND . (relation_and_then_list . 1)) (IS . 
(relation_and_then_list . 1)) (SEMICOLON . (relation_and_then_list . 1)) (WITH 
. (relation_and_then_list . 1)) (THEN . (relation_and_then_list . 1)) (RANGE . 
(relation_and_then_list . 1)) (COMMA . (relation_and_then_list . 1)) 
(RIGHT_PAREN . (relation_and_then_list . 1)) (DIGI [...]
+      ((default . error) (RIGHT_PAREN . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (AND . (choice_relation_and_then_list . 0)) 
(EQUAL_GREATER . (choice_relation_and_then_list . 0)) (BAR . 
(choice_relation_and_then_list . 0)))
       ((default . error) (OR . (choice_relation_or_else_list . 0)) 
(EQUAL_GREATER . (choice_relation_or_else_list . 0)) (BAR . 
(choice_relation_or_else_list . 0)))
       ((default . error) (OR . (choice_relation_or_else_list . 1)) 
(EQUAL_GREATER . (choice_relation_or_else_list . 1)) (BAR . 
(choice_relation_or_else_list . 1)))
       ((default . error) (AND . (choice_relation_and_then_list . 1)) 
(EQUAL_GREATER . (choice_relation_and_then_list . 1)) (BAR . 
(choice_relation_and_then_list . 1)))
-      ((default . error) (LEFT_PAREN .  148) (RECORD .  780))
-      ((default . error) (AT .  779))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (DOT .  90) (TICK .  91) (IS . ( 777 
(aspect_specification_opt . 0))) (WITH .  109) (LEFT_PAREN .  107))
-      ((default . error) (IS .  776))
-      ((default . error) (WITH . (discriminant_part_opt . 0)) (IS . 
(discriminant_part_opt . 0)) (LEFT_PAREN .  211))
-      ((default . error) (IS . ( 774 (aspect_specification_opt . 0))) (WITH .  
109))
-      ((default . error) (NOT .  731) (IDENTIFIER .  48) (CHARACTER_LITERAL .  
50) (STRING_LITERAL .  49))
-      ((default . error) (SEMICOLON .  772) (IS .  771))
-      ((default . error) (WITH . (discriminant_part_opt . 0)) (IS . 
(discriminant_part_opt . 0)) (SEMICOLON . (discriminant_part_opt . 0)) 
(LEFT_PAREN .  211))
-      ((default . error) (IS . ( 769 (aspect_specification_opt . 0))) (WITH .  
109))
-      ((default . error) (SEMICOLON .  768) (IS .  767))
-      ((default . error) (RENAMES .  766))
-      ((default . error) (RENAMES .  765))
-      ((default . error) (ACCESS .  242) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49))
-      ((default . error) (END .  763))
-      ((default . error) (SEMICOLON . (package_specification . 1)))
-      ((default . error) (COLON_EQUAL .  762))
-      ((default . error) (SEMICOLON .  761))
-      ((default . error) (NOT . (constant_opt . 0)) (IDENTIFIER . 
(constant_opt . 0)) (STRING_LITERAL . (constant_opt . 0)) (CHARACTER_LITERAL . 
(constant_opt . 0)) (ACCESS . (constant_opt . 0)) (ARRAY . (constant_opt . 0)) 
(CONSTANT .  759))
-      ((default . error) (SEPARATE .  758) (ABSTRACT .  757))
-      ((default . error) (NULL .  756))
-      ((default . error) (LEFT_PAREN .  754))
-      ((default . error) (WITH . (parameter_profile_opt . 0)) (SEMICOLON . 
(parameter_profile_opt . 0)) (LEFT_PAREN .  752))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
-      ((default . error) (SEMICOLON . (name_opt . 0)) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
-      ((default . error) (OR . (relation_and_then_list . 0)) (XOR . 
(relation_and_then_list . 0)) (LOOP . (relation_and_then_list . 0)) (DO . 
(relation_and_then_list . 0)) (AND . (relation_and_then_list . 0)) (IS . 
(relation_and_then_list . 0)) (WITH . (relation_and_then_list . 0)) (SEMICOLON 
. (relation_and_then_list . 0)) (THEN . (relation_and_then_list . 0)) (RANGE . 
(relation_and_then_list . 0)) (COMMA . (relation_and_then_list . 0)) 
(RIGHT_PAREN . (relation_and_then_list . 0)) (DIGI [...]
-      ((default . error) (AND . (relation_or_else_list . 0)) (XOR . 
(relation_or_else_list . 0)) (LOOP . (relation_or_else_list . 0)) (DO . 
(relation_or_else_list . 0)) (OR . (relation_or_else_list . 0)) (IS . 
(relation_or_else_list . 0)) (WITH . (relation_or_else_list . 0)) (SEMICOLON . 
(relation_or_else_list . 0)) (THEN . (relation_or_else_list . 0)) (RANGE . 
(relation_or_else_list . 0)) (COMMA . (relation_or_else_list . 0)) (RIGHT_PAREN 
. (relation_or_else_list . 0)) (DIGITS . (relati [...]
-      ((default . error) (AND . (relation_or_else_list . 1)) (XOR . 
(relation_or_else_list . 1)) (LOOP . (relation_or_else_list . 1)) (DO . 
(relation_or_else_list . 1)) (OR . (relation_or_else_list . 1)) (IS . 
(relation_or_else_list . 1)) (WITH . (relation_or_else_list . 1)) (SEMICOLON . 
(relation_or_else_list . 1)) (THEN . (relation_or_else_list . 1)) (RANGE . 
(relation_or_else_list . 1)) (COMMA . (relation_or_else_list . 1)) (RIGHT_PAREN 
. (relation_or_else_list . 1)) (DIGITS . (relati [...]
-      ((default . error) (OR . (relation_and_then_list . 1)) (XOR . 
(relation_and_then_list . 1)) (LOOP . (relation_and_then_list . 1)) (DO . 
(relation_and_then_list . 1)) (AND . (relation_and_then_list . 1)) (IS . 
(relation_and_then_list . 1)) (WITH . (relation_and_then_list . 1)) (SEMICOLON 
. (relation_and_then_list . 1)) (THEN . (relation_and_then_list . 1)) (RANGE . 
(relation_and_then_list . 1)) (COMMA . (relation_and_then_list . 1)) 
(RIGHT_PAREN . (relation_and_then_list . 1)) (DIGI [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (LOOP . (raise_expression . 1)) (DO . 
(raise_expression . 1)) (XOR . (raise_expression . 1)) (OR . (raise_expression 
. 1)) (AND . (raise_expression . 1)) (IS . (raise_expression . 1)) (SEMICOLON . 
(raise_expression . 1)) (WITH . (raise_expression . 1)) (THEN . 
(raise_expression . 1)) (RANGE . (raise_expression . 1)) (RIGHT_PAREN . 
(raise_expression . 1)) (COMMA . (raise_expression . 1)) (DIGITS . 
(raise_expression . 1)) (EQUAL_GREATER . (raise_expression . 1)) (E [...]
+      ((default . error) (LOOP . (raise_expression . 1)) (DO . 
(raise_expression . 1)) (XOR . (raise_expression . 1)) (OR . (raise_expression 
. 1)) (AND . (raise_expression . 1)) (IS . (raise_expression . 1)) (WITH . 
(raise_expression . 1)) (SEMICOLON . (raise_expression . 1)) (THEN . 
(raise_expression . 1)) (RANGE . (raise_expression . 1)) (RIGHT_PAREN . 
(raise_expression . 1)) (COMMA . (raise_expression . 1)) (DIGITS . 
(raise_expression . 1)) (EQUAL_GREATER . (raise_expression . 1)) (E [...]
       ((default . error) (LOOP . (aggregate . 4)) (DO . (aggregate . 4)) (OF . 
(aggregate . 4)) (ACCEPT . (aggregate . 4)) (ABORT . (aggregate . 4)) (BEGIN . 
(aggregate . 4)) (CASE . (aggregate . 4)) (DECLARE . (aggregate . 4)) (DELAY . 
(aggregate . 4)) (EXIT . (aggregate . 4)) (FOR . (aggregate . 4)) (GOTO . 
(aggregate . 4)) (IF . (aggregate . 4)) (NULL . (aggregate . 4)) (PRAGMA . 
(aggregate . 4)) (RAISE . (aggregate . 4)) (REQUEUE . (aggregate . 4)) (SELECT 
. (aggregate . 4)) (WHILE . [...]
-      ((default . error) (PLUS . (primary . 1)) (MINUS . (primary . 1)) 
(AMPERSAND . (primary . 1)) (DOT_DOT . (primary . 1)) (IN . (primary . 1)) (NOT 
. (primary . 1)) (EQUAL . (primary . 1)) (GREATER . (primary . 1)) 
(GREATER_EQUAL . (primary . 1)) (LESS . (primary . 1)) (LESS_EQUAL . (primary . 
1)) (SLASH_EQUAL . (primary . 1)) (RIGHT_PAREN . (primary . 1)) (COMMA . 
(primary . 1)) (MOD . (primary . 1)) (REM . (primary . 1)) (SLASH . (primary . 
1)) (STAR . (primary . 1)) (STAR_STAR . ( [...]
-      ((default . error) (COMMA .  273) (RIGHT_PAREN .  747))
-      ((default . error) (ELSE .  743) (RIGHT_PAREN . (if_expression . 3)) 
(COMMA . (if_expression . 3)) (ELSIF .  744))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (REVERSE .  737) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) 
(ABS .  144) (NOT .  736) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
-      ((default . error) (REVERSE .  734) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
-      ((default . error) (NOT .  731) (IDENTIFIER .  48) (CHARACTER_LITERAL .  
50) (STRING_LITERAL .  49))
-      ((default . error) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  182) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) 
(ABS .  144) (NOT .  181) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
+      ((default . error) (PLUS . (primary . 1)) (MINUS . (primary . 1)) 
(AMPERSAND . (primary . 1)) (DOT_DOT . (primary . 1)) (IN . (primary . 1)) (NOT 
. (primary . 1)) (EQUAL . (primary . 1)) (GREATER . (primary . 1)) 
(GREATER_EQUAL . (primary . 1)) (LESS . (primary . 1)) (LESS_EQUAL . (primary . 
1)) (SLASH_EQUAL . (primary . 1)) (RIGHT_PAREN . (primary . 1)) (COMMA . 
(primary . 1)) (MOD . (primary . 1)) (REM . (primary . 1)) (SLASH . (primary . 
1)) (STAR . (primary . 1)) (STAR_STAR . ( [...]
+      ((default . error) (COMMA .  267) (RIGHT_PAREN .  739))
+      ((default . error) (ELSE .  735) (RIGHT_PAREN . (if_expression . 3)) 
(ELSIF .  736))
+      ((default . error) (DO . (relation . 1)) (LOOP . (relation . 1)) (COMMA 
. (relation . 1)) (ELSIF . (relation . 1)) (ELSE . (relation . 1)) 
(EQUAL_GREATER . (relation . 1)) (RIGHT_PAREN . (relation . 1)) (DIGITS . 
(relation . 1)) (RANGE . (relation . 1)) (THEN . (relation . 1)) (WITH . 
(relation . 1)) (SEMICOLON . (relation . 1)) (IS . (relation . 1)) (AND . 
(relation . 1)) (OR . (relation . 1)) (XOR . (relation . 1)))
+      ((default . error) (RIGHT_PAREN . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (REVERSE .  729) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) 
(ABS .  144) (NOT .  728) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
+      ((default . error) (REVERSE .  726) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (NOT .  723) (IDENTIFIER .  48) (CHARACTER_LITERAL .  
50) (STRING_LITERAL .  49))
+      ((default . error) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  152) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) 
(ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
       ((default . error) (RIGHT_PAREN . (case_expression_alternative_list . 
0)) (COMMA . (case_expression_alternative_list . 0)))
-      ((default . error) (RIGHT_PAREN . (case_expression . 0)) (COMMA . ( 729 
(case_expression . 0))))
+      ((default . error) (COMMA .  721) (RIGHT_PAREN . (case_expression . 0)))
       ((default . error) (IS . (aspect_specification_opt . 0)) (WITH .  109))
       ((default . error) (IS . (aspect_specification_opt . 0)) (WITH .  109))
       ((default . error) (IS .  134))
-      ((default . error) (IDENTIFIER .  726))
+      ((default . error) (IDENTIFIER .  718))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
-      ((default . error) (IS . (expression_opt . 0)) (RAISE .  152) (PLUS .  
154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
-      ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  302) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE 
.  304) (GENERIC .  2) (PROTECTED .  301) (TASK .  303) (PACKAGE .  300))
-      ((default . error) (UNTIL .  720) (RAISE .  152) (PLUS .  154) (MINUS .  
153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  
149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) 
(LEFT_PAREN .  148))
-      ((default . error) (WHEN . (identifier_opt . 0)) (SEMICOLON . 
(identifier_opt . 0)) (IDENTIFIER .  718))
-      ((default . error) (LOOP . (iterator_specification_opt . 0)) (IDENTIFIER 
.  408))
-      ((default . error) (IDENTIFIER .  715))
-      ((default . error) (THEN . (expression_opt . 0)) (RAISE .  152) (PLUS .  
154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
-      ((default . error) (SEMICOLON .  712))
-      ((default . error) (SEMICOLON .  710) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
+      ((default . error) (IS . (expression_opt . 0)) (RAISE .  153) (PLUS .  
155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  272) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE 
.  274) (GENERIC .  2) (PROTECTED .  271) (TASK .  273) (PACKAGE .  270))
+      ((default . error) (UNTIL .  712) (SEMICOLON . (expression_opt . 0)) 
(RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (WHEN . (identifier_opt . 0)) (SEMICOLON . 
(identifier_opt . 0)) (IDENTIFIER .  710))
+      ((default . error) (LOOP . (iterator_specification_opt . 0)) (IDENTIFIER 
.  402))
+      ((default . error) (IDENTIFIER .  707))
+      ((default . error) (THEN . (expression_opt . 0)) (RAISE .  153) (PLUS .  
155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
+      ((default . error) (SEMICOLON .  704))
+      ((default . error) (SEMICOLON .  702) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (SEMICOLON .  704) (DO . 
(extended_return_object_declaration_opt . 0)) (RAISE .  152) (PLUS .  154) 
(MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) 
(NEW .  149) (IDENTIFIER .  705) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  
49) (LEFT_PAREN .  148))
-      ((default . error) (ELSE . (select_alternative_list_opt . 0)) (END . 
(select_alternative_list_opt . 0)) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (DELAY .  635) (WHEN .  693) (TERMINATE .  692) (ACCEPT 
.  630))
-      ((default . error) (LOOP . (expression_opt . 0)) (RAISE .  152) (PLUS .  
154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
-      ((default . error) (IDENTIFIER .  690))
-      ((default . error) (COLON .  689))
+      ((default . error) (DO . (extended_return_object_declaration_opt . 0)) 
(SEMICOLON . ( 696 (expression_opt . 0))) (RAISE .  153) (PLUS .  155) (MINUS . 
 154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  
149) (IDENTIFIER .  697) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) 
(LEFT_PAREN .  148))
+      ((default . error) (ELSE . (select_alternative_list_opt . 0)) (END . 
(select_alternative_list_opt . 0)) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (DELAY .  627) (WHEN .  685) (TERMINATE .  684) (ACCEPT 
.  622))
+      ((default . error) (LOOP . (expression_opt . 0)) (RAISE .  153) (PLUS .  
155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (IDENTIFIER .  682))
+      ((default . error) (COLON .  681))
       ((default . error) (OR . (compound_statement . 5)) (THEN . 
(compound_statement . 5)) (WHEN . (compound_statement . 5)) (EXCEPTION . 
(compound_statement . 5)) (END . (compound_statement . 5)) (LESS_LESS . 
(compound_statement . 5)) (ACCEPT . (compound_statement . 5)) (ABORT . 
(compound_statement . 5)) (BEGIN . (compound_statement . 5)) (CASE . 
(compound_statement . 5)) (DECLARE . (compound_statement . 5)) (DELAY . 
(compound_statement . 5)) (EXIT . (compound_statement . 5)) (FOR . (co [...]
       ((default . error) (OR . (simple_statement . 1)) (THEN . 
(simple_statement . 1)) (WHEN . (simple_statement . 1)) (EXCEPTION . 
(simple_statement . 1)) (END . (simple_statement . 1)) (LESS_LESS . 
(simple_statement . 1)) (ACCEPT . (simple_statement . 1)) (ABORT . 
(simple_statement . 1)) (BEGIN . (simple_statement . 1)) (CASE . 
(simple_statement . 1)) (DECLARE . (simple_statement . 1)) (DELAY . 
(simple_statement . 1)) (EXIT . (simple_statement . 1)) (FOR . 
(simple_statement . 1)) (GOTO [...]
       ((default . error) (OR . (select_statement . 3)) (THEN . 
(select_statement . 3)) (WHEN . (select_statement . 3)) (EXCEPTION . 
(select_statement . 3)) (END . (select_statement . 3)) (LESS_LESS . 
(select_statement . 3)) (ACCEPT . (select_statement . 3)) (ABORT . 
(select_statement . 3)) (BEGIN . (select_statement . 3)) (CASE . 
(select_statement . 3)) (DECLARE . (select_statement . 3)) (DELAY . 
(select_statement . 3)) (EXIT . (select_statement . 3)) (FOR . 
(select_statement . 3)) (GOTO [...]
@@ -2476,220 +2468,218 @@
       ((default . error) (OR . (simple_statement . 2)) (THEN . 
(simple_statement . 2)) (WHEN . (simple_statement . 2)) (EXCEPTION . 
(simple_statement . 2)) (END . (simple_statement . 2)) (LESS_LESS . 
(simple_statement . 2)) (ACCEPT . (simple_statement . 2)) (ABORT . 
(simple_statement . 2)) (BEGIN . (simple_statement . 2)) (CASE . 
(simple_statement . 2)) (DECLARE . (simple_statement . 2)) (DELAY . 
(simple_statement . 2)) (EXIT . (simple_statement . 2)) (FOR . 
(simple_statement . 2)) (GOTO [...]
       ((default . error) (OR . (compound_statement . 4)) (THEN . 
(compound_statement . 4)) (WHEN . (compound_statement . 4)) (EXCEPTION . 
(compound_statement . 4)) (END . (compound_statement . 4)) (LESS_LESS . 
(compound_statement . 4)) (ACCEPT . (compound_statement . 4)) (ABORT . 
(compound_statement . 4)) (BEGIN . (compound_statement . 4)) (CASE . 
(compound_statement . 4)) (DECLARE . (compound_statement . 4)) (DELAY . 
(compound_statement . 4)) (EXIT . (compound_statement . 4)) (FOR . (co [...]
       ((default . error) (ACCEPT . (label_opt . 1)) (BEGIN . (label_opt . 1)) 
(CASE . (label_opt . 1)) (DECLARE . (label_opt . 1)) (FOR . (label_opt . 1)) 
(IF . (label_opt . 1)) (LOOP . (label_opt . 1)) (RETURN . (label_opt . 1)) 
(SELECT . (label_opt . 1)) (WHILE . (label_opt . 1)) (ABORT . (label_opt . 1)) 
(DELAY . (label_opt . 1)) (EXIT . (label_opt . 1)) (GOTO . (label_opt . 1)) 
(NULL . (label_opt . 1)) (PRAGMA . (label_opt . 1)) (RAISE . (label_opt . 1)) 
(REQUEUE . (label_opt . 1)) ( [...]
-      ((default . error) (END .  688))
+      ((default . error) (END .  680))
       ((default . error) (OR . (compound_statement . 0)) (THEN . 
(compound_statement . 0)) (WHEN . (compound_statement . 0)) (EXCEPTION . 
(compound_statement . 0)) (END . (compound_statement . 0)) (LESS_LESS . 
(compound_statement . 0)) (ACCEPT . (compound_statement . 0)) (ABORT . 
(compound_statement . 0)) (BEGIN . (compound_statement . 0)) (CASE . 
(compound_statement . 0)) (DECLARE . (compound_statement . 0)) (DELAY . 
(compound_statement . 0)) (EXIT . (compound_statement . 0)) (FOR . (co [...]
-      ((default . error) (LOOP .  687))
-      ((default . error) (NULL .  641) (GOTO .  638) (ABORT .  631) (ACCEPT .  
630) (DECLARE .  634) (BEGIN .  632) (LOOP .  640) (CASE .  633) (IF .  639) 
(PRAGMA .  7) (RAISE .  642) (DELAY .  635) (REQUEUE .  643) (RETURN .  644) 
(EXIT .  636) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  
49) (WHILE .  646) (FOR .  637) (SELECT .  645))
+      ((default . error) (LOOP .  679))
+      ((default . error) (NULL .  633) (GOTO .  630) (ABORT .  623) (ACCEPT .  
622) (DECLARE .  626) (BEGIN .  624) (LOOP .  632) (CASE .  625) (IF .  631) 
(PRAGMA .  7) (RAISE .  634) (DELAY .  627) (REQUEUE .  635) (RETURN .  636) 
(EXIT .  628) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  
49) (WHILE .  638) (FOR .  629) (SELECT .  637))
       ((default . error) (OR . (compound_statement . 2)) (THEN . 
(compound_statement . 2)) (WHEN . (compound_statement . 2)) (EXCEPTION . 
(compound_statement . 2)) (END . (compound_statement . 2)) (LESS_LESS . 
(compound_statement . 2)) (ACCEPT . (compound_statement . 2)) (ABORT . 
(compound_statement . 2)) (BEGIN . (compound_statement . 2)) (CASE . 
(compound_statement . 2)) (DECLARE . (compound_statement . 2)) (DELAY . 
(compound_statement . 2)) (EXIT . (compound_statement . 2)) (FOR . (co [...]
-      ((default . error) (DOT .  90) (SEMICOLON .  684) (TICK .  91) 
(COLON_EQUAL .  683) (LEFT_PAREN .  107))
+      ((default . error) (DOT .  90) (SEMICOLON .  676) (TICK .  91) 
(COLON_EQUAL .  675) (LEFT_PAREN .  107))
       ((default . error) (OR . (simple_statement . 10)) (THEN . 
(simple_statement . 10)) (WHEN . (simple_statement . 10)) (EXCEPTION . 
(simple_statement . 10)) (END . (simple_statement . 10)) (LESS_LESS . 
(simple_statement . 10)) (ACCEPT . (simple_statement . 10)) (ABORT . 
(simple_statement . 10)) (BEGIN . (simple_statement . 10)) (CASE . 
(simple_statement . 10)) (DECLARE . (simple_statement . 10)) (DELAY . 
(simple_statement . 10)) (EXIT . (simple_statement . 10)) (FOR . 
(simple_statemen [...]
       ((default . error) (OR . (simple_statement . 4)) (THEN . 
(simple_statement . 4)) (WHEN . (simple_statement . 4)) (EXCEPTION . 
(simple_statement . 4)) (END . (simple_statement . 4)) (LESS_LESS . 
(simple_statement . 4)) (ACCEPT . (simple_statement . 4)) (ABORT . 
(simple_statement . 4)) (BEGIN . (simple_statement . 4)) (CASE . 
(simple_statement . 4)) (DECLARE . (simple_statement . 4)) (DELAY . 
(simple_statement . 4)) (EXIT . (simple_statement . 4)) (FOR . 
(simple_statement . 4)) (GOTO [...]
       ((default . error) (OR . (simple_statement . 9)) (THEN . 
(simple_statement . 9)) (WHEN . (simple_statement . 9)) (EXCEPTION . 
(simple_statement . 9)) (END . (simple_statement . 9)) (LESS_LESS . 
(simple_statement . 9)) (ACCEPT . (simple_statement . 9)) (ABORT . 
(simple_statement . 9)) (BEGIN . (simple_statement . 9)) (CASE . 
(simple_statement . 9)) (DECLARE . (simple_statement . 9)) (DELAY . 
(simple_statement . 9)) (EXIT . (simple_statement . 9)) (FOR . 
(simple_statement . 9)) (GOTO [...]
       ((default . error) (OR . (simple_statement . 6)) (THEN . 
(simple_statement . 6)) (WHEN . (simple_statement . 6)) (EXCEPTION . 
(simple_statement . 6)) (END . (simple_statement . 6)) (LESS_LESS . 
(simple_statement . 6)) (ACCEPT . (simple_statement . 6)) (ABORT . 
(simple_statement . 6)) (BEGIN . (simple_statement . 6)) (CASE . 
(simple_statement . 6)) (DECLARE . (simple_statement . 6)) (DELAY . 
(simple_statement . 6)) (EXIT . (simple_statement . 6)) (FOR . 
(simple_statement . 6)) (GOTO [...]
       ((default . error) (OR . (select_statement . 0)) (THEN . 
(select_statement . 0)) (WHEN . (select_statement . 0)) (EXCEPTION . 
(select_statement . 0)) (END . (select_statement . 0)) (LESS_LESS . 
(select_statement . 0)) (ACCEPT . (select_statement . 0)) (ABORT . 
(select_statement . 0)) (BEGIN . (select_statement . 0)) (CASE . 
(select_statement . 0)) (DECLARE . (select_statement . 0)) (DELAY . 
(select_statement . 0)) (EXIT . (select_statement . 0)) (FOR . 
(select_statement . 0)) (GOTO [...]
       ((default . error) (OR . (compound_statement . 6)) (THEN . 
(compound_statement . 6)) (WHEN . (compound_statement . 6)) (EXCEPTION . 
(compound_statement . 6)) (END . (compound_statement . 6)) (LESS_LESS . 
(compound_statement . 6)) (ACCEPT . (compound_statement . 6)) (ABORT . 
(compound_statement . 6)) (BEGIN . (compound_statement . 6)) (CASE . 
(compound_statement . 6)) (DECLARE . (compound_statement . 6)) (DELAY . 
(compound_statement . 6)) (EXIT . (compound_statement . 6)) (FOR . (co [...]
-      ((default . error) (WHEN . (sequence_of_statements_opt . 1)) (THEN . 
(sequence_of_statements_opt . 1)) (OR . (sequence_of_statements_opt . 1)) 
(ELSIF . (sequence_of_statements_opt . 1)) (ELSE . (sequence_of_statements_opt 
. 1)) (END . (sequence_of_statements_opt . 1)) (EXCEPTION . 
(sequence_of_statements_opt . 1)) (LESS_LESS .  647) (ACCEPT . (label_opt . 0)) 
(BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) 
(FOR . (label_opt . 0)) (IF . (label_opt . 0) [...]
-      ((default . error) (END . (handled_sequence_of_statements . 1)) 
(EXCEPTION .  680))
+      ((default . error) (WHEN . (sequence_of_statements_opt . 1)) (THEN . 
(sequence_of_statements_opt . 1)) (OR . (sequence_of_statements_opt . 1)) 
(ELSIF . (sequence_of_statements_opt . 1)) (ELSE . (sequence_of_statements_opt 
. 1)) (END . (sequence_of_statements_opt . 1)) (EXCEPTION . 
(sequence_of_statements_opt . 1)) (LESS_LESS .  639) (ACCEPT . (label_opt . 0)) 
(BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) 
(FOR . (label_opt . 0)) (IF . (label_opt . 0) [...]
+      ((default . error) (END . (handled_sequence_of_statements . 1)) 
(EXCEPTION .  672))
       ((default . error) (OR . (simple_statement . 5)) (THEN . 
(simple_statement . 5)) (WHEN . (simple_statement . 5)) (EXCEPTION . 
(simple_statement . 5)) (END . (simple_statement . 5)) (LESS_LESS . 
(simple_statement . 5)) (ACCEPT . (simple_statement . 5)) (ABORT . 
(simple_statement . 5)) (BEGIN . (simple_statement . 5)) (CASE . 
(simple_statement . 5)) (DECLARE . (simple_statement . 5)) (DELAY . 
(simple_statement . 5)) (EXIT . (simple_statement . 5)) (FOR . 
(simple_statement . 5)) (GOTO [...]
       ((default . error) (WHEN . (sequence_of_statements . 0)) (THEN . 
(sequence_of_statements . 0)) (OR . (sequence_of_statements . 0)) (ELSIF . 
(sequence_of_statements . 0)) (ELSE . (sequence_of_statements . 0)) (EXCEPTION 
. (sequence_of_statements . 0)) (END . (sequence_of_statements . 0)) (LESS_LESS 
. (sequence_of_statements . 0)) (ACCEPT . (sequence_of_statements . 0)) (ABORT 
. (sequence_of_statements . 0)) (BEGIN . (sequence_of_statements . 0)) (CASE . 
(sequence_of_statements . 0)) [...]
       ((default . error) (OR . (select_statement . 1)) (THEN . 
(select_statement . 1)) (WHEN . (select_statement . 1)) (EXCEPTION . 
(select_statement . 1)) (END . (select_statement . 1)) (LESS_LESS . 
(select_statement . 1)) (ACCEPT . (select_statement . 1)) (ABORT . 
(select_statement . 1)) (BEGIN . (select_statement . 1)) (CASE . 
(select_statement . 1)) (DECLARE . (select_statement . 1)) (DELAY . 
(select_statement . 1)) (EXIT . (select_statement . 1)) (FOR . 
(select_statement . 1)) (GOTO [...]
-      ((default . error) (SEMICOLON .  679))
-      ((default . error) (SEMICOLON .  678))
+      ((default . error) (SEMICOLON .  671))
+      ((default . error) (SEMICOLON .  670))
       ((default . error) (IDENTIFIER . (generic_instantiation . 2)) (TYPE . 
(generic_instantiation . 2)) (TASK . (generic_instantiation . 2)) (SUBTYPE . 
(generic_instantiation . 2)) (PROTECTED . (generic_instantiation . 2)) (FOR . 
(generic_instantiation . 2)) (ENTRY . (generic_instantiation . 2)) (BEGIN . 
(generic_instantiation . 2)) (END . (generic_instantiation . 2)) (WITH . 
(generic_instantiation . 2)) (USE . (generic_instantiation . 2)) (SEPARATE . 
(generic_instantiation . 2)) (PROCE [...]
       ((default . error) (IDENTIFIER . (generic_instantiation . 1)) (TYPE . 
(generic_instantiation . 1)) (TASK . (generic_instantiation . 1)) (SUBTYPE . 
(generic_instantiation . 1)) (PROTECTED . (generic_instantiation . 1)) (FOR . 
(generic_instantiation . 1)) (ENTRY . (generic_instantiation . 1)) (BEGIN . 
(generic_instantiation . 1)) (END . (generic_instantiation . 1)) (WITH . 
(generic_instantiation . 1)) (USE . (generic_instantiation . 1)) (SEPARATE . 
(generic_instantiation . 1)) (PROCE [...]
-      ((default . error) (END . (exception_handler_list_opt . 0)) (WHEN .  
952))
+      ((default . error) (END . (exception_handler_list_opt . 0)) (WHEN .  
943))
       ((default . error) (OR . (sequence_of_statements . 2)) (THEN . 
(sequence_of_statements . 2)) (WHEN . (sequence_of_statements . 2)) 
(CHARACTER_LITERAL . ((sequence_of_statements . 2) (label_opt . 1))) 
(STRING_LITERAL . ((sequence_of_statements . 2) (label_opt . 1))) (IDENTIFIER . 
((sequence_of_statements . 2) (label_opt . 1))) (WHILE . 
((sequence_of_statements . 2) (label_opt . 1))) (SELECT . 
((sequence_of_statements . 2) (label_opt . 1))) (RETURN . 
((sequence_of_statements . 2) (la [...]
       ((default . error) (OR . (sequence_of_statements . 1)) (THEN . 
(sequence_of_statements . 1)) (WHEN . (sequence_of_statements . 1)) 
(CHARACTER_LITERAL . (sequence_of_statements . 1)) (STRING_LITERAL . 
(sequence_of_statements . 1)) (IDENTIFIER . (sequence_of_statements . 1)) 
(WHILE . (sequence_of_statements . 1)) (SELECT . (sequence_of_statements . 1)) 
(RETURN . (sequence_of_statements . 1)) (REQUEUE . (sequence_of_statements . 
1)) (RAISE . (sequence_of_statements . 1)) (PRAGMA . (se [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (WHEN . (procedure_call_statement . 0)) (OR . 
(procedure_call_statement . 0)) (THEN . (procedure_call_statement . 0)) (ELSIF 
. (procedure_call_statement . 0)) (ELSE . (procedure_call_statement . 0)) 
(CHARACTER_LITERAL . (procedure_call_statement . 0)) (STRING_LITERAL . 
(procedure_call_statement . 0)) (IDENTIFIER . (procedure_call_statement . 0)) 
(WHILE . (procedure_call_statement . 0)) (SELECT . (procedure_call_statement . 
0)) (RETURN . (procedure_call_statement  [...]
       ((default . error) (OR . (statement . 1)) (THEN . (statement . 1)) (WHEN 
. (statement . 1)) (EXCEPTION . (statement . 1)) (END . (statement . 1)) 
(LESS_LESS . (statement . 1)) (ACCEPT . (statement . 1)) (ABORT . (statement . 
1)) (BEGIN . (statement . 1)) (CASE . (statement . 1)) (DECLARE . (statement . 
1)) (DELAY . (statement . 1)) (EXIT . (statement . 1)) (FOR . (statement . 1)) 
(GOTO . (statement . 1)) (IF . (statement . 1)) (LOOP . (statement . 1)) (NULL 
. (statement . 1)) (PRAG [...]
       ((default . error) (OR . (statement . 0)) (THEN . (statement . 0)) (WHEN 
. (statement . 0)) (EXCEPTION . (statement . 0)) (END . (statement . 0)) 
(LESS_LESS . (statement . 0)) (ACCEPT . (statement . 0)) (ABORT . (statement . 
0)) (BEGIN . (statement . 0)) (CASE . (statement . 0)) (DECLARE . (statement . 
0)) (DELAY . (statement . 0)) (EXIT . (statement . 0)) (FOR . (statement . 0)) 
(GOTO . (statement . 0)) (IF . (statement . 0)) (LOOP . (statement . 0)) (NULL 
. (statement . 0)) (PRAG [...]
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
       ((default . error) (SEMICOLON . (name_opt . 0)) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (CHARACTER_LITERAL . (label_opt . 2)) (STRING_LITERAL 
. (label_opt . 2)) (IDENTIFIER . (label_opt . 2)) (REQUEUE . (label_opt . 2)) 
(RAISE . (label_opt . 2)) (PRAGMA . (label_opt . 2)) (NULL . (label_opt . 2)) 
(GOTO . (label_opt . 2)) (EXIT . (label_opt . 2)) (DELAY . (label_opt . 2)) 
(ABORT . (label_opt . 2)) (WHILE . (label_opt . 2)) (SELECT . (label_opt . 2)) 
(RETURN . (label_opt . 2)) (LOOP . (label_opt . 2)) (IF . (label_opt . 2)) (FOR 
. (label_opt . 2)) (DE [...]
-      ((default . error) (GREATER_GREATER .  948))
+      ((default . error) (GREATER_GREATER .  939))
       ((default . error) (LOOP . (iteration_scheme . 0)))
-      ((default . error) (SEMICOLON .  947))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (OR . 
(sequence_of_statements_opt . 0)) (ELSE . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO . ( [...]
+      ((default . error) (SEMICOLON .  938))
+      ((default . error) (EQUAL_GREATER . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (OR . 
(sequence_of_statements_opt . 0)) (ELSE . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO . ( [...]
       ((default . error) (ELSE . (select_alternative . 3)) (OR . 
(select_alternative . 3)) (END . (select_alternative . 3)))
-      ((default . error) (OR . (sequence_of_statements_opt . 0)) (END . 
(sequence_of_statements_opt . 0)) (ELSE . (sequence_of_statements_opt . 0)) 
(THEN . (sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_op [...]
-      ((default . error) (ELSE .  942) (OR .  943))
-      ((default . error) (DOT .  90) (SEMICOLON .  684) (TICK .  91) (OR . 
(sequence_of_statements_opt . 0)) (ELSE . (sequence_of_statements_opt . 0)) 
(THEN . (sequence_of_statements_opt . 0)) (LEFT_PAREN .  107) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . [...]
-      ((default . error) (OR . (sequence_of_statements_opt . 0)) (ELSE . 
(sequence_of_statements_opt . 0)) (THEN . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO .  [...]
+      ((default . error) (OR . (sequence_of_statements_opt . 0)) (END . 
(sequence_of_statements_opt . 0)) (ELSE . (sequence_of_statements_opt . 0)) 
(THEN . (sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_op [...]
+      ((default . error) (ELSE .  933) (OR .  934))
+      ((default . error) (DOT .  90) (SEMICOLON .  676) (TICK .  91) (OR . 
(sequence_of_statements_opt . 0)) (ELSE . (sequence_of_statements_opt . 0)) 
(THEN . (sequence_of_statements_opt . 0)) (LEFT_PAREN .  107) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . [...]
+      ((default . error) (OR . (sequence_of_statements_opt . 0)) (ELSE . 
(sequence_of_statements_opt . 0)) (THEN . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO .  [...]
       ((default . error) (ELSE . (select_alternative_list . 0)) (END . 
(select_alternative_list . 0)) (OR . (select_alternative_list . 0)))
-      ((default . error) (ELSE . (select_alternative_list_opt . 1)) (END . 
(select_alternative_list_opt . 1)) (OR .  939))
-      ((default . error) (ELSE .  937) (END .  938))
-      ((default . error) (THEN .  936))
+      ((default . error) (ELSE . (select_alternative_list_opt . 1)) (END . 
(select_alternative_list_opt . 1)) (OR .  930))
+      ((default . error) (ELSE .  928) (END .  929))
+      ((default . error) (THEN .  927))
       ((default . error) (WHEN . (simple_return_statement . 0)) (THEN . 
(simple_return_statement . 0)) (OR . (simple_return_statement . 0)) (ELSIF . 
(simple_return_statement . 0)) (ELSE . (simple_return_statement . 0)) 
(CHARACTER_LITERAL . (simple_return_statement . 0)) (STRING_LITERAL . 
(simple_return_statement . 0)) (IDENTIFIER . (simple_return_statement . 0)) 
(WHILE . (simple_return_statement . 0)) (SELECT . (simple_return_statement . 
0)) (RETURN . (simple_return_statement . 0)) (REQU [...]
-      ((default . error) (COLON .  935) (STAR_STAR . (name . 0)) (STAR . (name 
. 0)) (SLASH . (name . 0)) (REM . (name . 0)) (MOD . (name . 0)) (SEMICOLON . 
(name . 0)) (SLASH_EQUAL . (name . 0)) (LESS_EQUAL . (name . 0)) (LESS . (name 
. 0)) (GREATER_EQUAL . (name . 0)) (GREATER . (name . 0)) (EQUAL . (name . 0)) 
(NOT . (name . 0)) (IN . (name . 0)) (AMPERSAND . (name . 0)) (MINUS . (name . 
0)) (PLUS . (name . 0)) (LEFT_PAREN . (name . 0)) (AND . (name . 0)) (OR . 
(name . 0)) (XOR . (nam [...]
-      ((default . error) (SEMICOLON .  934))
-      ((default . error) (DO . (extended_return_object_declaration_opt . 1)) 
(SEMICOLON .  933))
-      ((default . error) (DO .  932))
-      ((default . error) (WITH .  930) (DOT .  90) (TICK .  91) (SEMICOLON .  
931) (LEFT_PAREN .  107))
+      ((default . error) (COLON .  926) (STAR_STAR . (name . 0)) (STAR . (name 
. 0)) (SLASH . (name . 0)) (REM . (name . 0)) (MOD . (name . 0)) (SEMICOLON . 
(name . 0)) (SLASH_EQUAL . (name . 0)) (LESS_EQUAL . (name . 0)) (LESS . (name 
. 0)) (GREATER_EQUAL . (name . 0)) (GREATER . (name . 0)) (EQUAL . (name . 0)) 
(NOT . (name . 0)) (IN . (name . 0)) (AMPERSAND . (name . 0)) (MINUS . (name . 
0)) (PLUS . (name . 0)) (LEFT_PAREN . (name . 0)) (AND . (name . 0)) (OR . 
(name . 0)) (XOR . (nam [...]
+      ((default . error) (SEMICOLON .  925))
+      ((default . error) (DO . (extended_return_object_declaration_opt . 1)) 
(SEMICOLON .  924))
+      ((default . error) (DO .  923))
+      ((default . error) (WITH .  921) (DOT .  90) (TICK .  91) (SEMICOLON .  
922) (LEFT_PAREN .  107))
       ((default . error) (WHEN . (raise_statement . 0)) (THEN . 
(raise_statement . 0)) (OR . (raise_statement . 0)) (ELSIF . (raise_statement . 
0)) (ELSE . (raise_statement . 0)) (CHARACTER_LITERAL . (raise_statement . 0)) 
(STRING_LITERAL . (raise_statement . 0)) (IDENTIFIER . (raise_statement . 0)) 
(WHILE . (raise_statement . 0)) (SELECT . (raise_statement . 0)) (RETURN . 
(raise_statement . 0)) (REQUEUE . (raise_statement . 0)) (RAISE . 
(raise_statement . 0)) (PRAGMA . (raise_statement  [...]
-      ((default . error) (WITH .  928) (DOT .  90) (TICK .  91) (SEMICOLON .  
929) (LEFT_PAREN .  107))
+      ((default . error) (WITH .  919) (DOT .  90) (TICK .  91) (SEMICOLON .  
920) (LEFT_PAREN .  107))
       ((default . error) (WHEN . (simple_statement . 0)) (THEN . 
(simple_statement . 0)) (OR . (simple_statement . 0)) (ELSIF . 
(simple_statement . 0)) (ELSE . (simple_statement . 0)) (CHARACTER_LITERAL . 
(simple_statement . 0)) (STRING_LITERAL . (simple_statement . 0)) (IDENTIFIER . 
(simple_statement . 0)) (WHILE . (simple_statement . 0)) (SELECT . 
(simple_statement . 0)) (RETURN . (simple_statement . 0)) (REQUEUE . 
(simple_statement . 0)) (RAISE . (simple_statement . 0)) (PRAGMA . (sim [...]
-      ((default . error) (END .  927))
-      ((default . error) (THEN .  926))
-      ((default . error) (SEMICOLON .  925))
+      ((default . error) (END .  918))
+      ((default . error) (THEN .  917))
+      ((default . error) (SEMICOLON .  916))
       ((default . error) (LOOP . (iterator_specification_opt . 1)))
       ((default . error) (LOOP . (iteration_scheme . 1)))
       ((default . error) (WHEN . (identifier_opt . 1)) (SEMICOLON . 
(identifier_opt . 1)))
-      ((default . error) (WHEN .  923) (SEMICOLON .  924))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  921))
-      ((default . error) (BEGIN .  920))
-      ((default . error) (IS .  919))
-      ((default . error) (END .  918))
-      ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON .  917) 
(LEFT_PAREN .  107))
-      ((default . error) (SEMICOLON . (actual_parameter_part_opt . 0)) (DO . 
(actual_parameter_part_opt . 0)) (LEFT_PAREN . ( 914 (actual_parameter_part_opt 
. 0))))
-      ((default . error) (IS .  913))
-      ((default . error) (IS .  912))
-      ((default . error) (WHEN .  624))
-      ((default . error) (BAR .  286) (EQUAL_GREATER .  910))
-      ((default . error) (NULL .  909))
-      ((default . error) (DO . (subtype_indication . 3)) (OF . 
(subtype_indication . 3)) (AND . (subtype_indication . 3)) (SEMICOLON . 
(subtype_indication . 3)) (WITH . (subtype_indication . 3)) (COLON_EQUAL . 
(subtype_indication . 3)) (DOT .  90) (TICK .  91) (RANGE .  904) (LEFT_PAREN . 
 829))
-      ((default . error) (OF .  908))
+      ((default . error) (WHEN .  914) (SEMICOLON .  915))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  912))
+      ((default . error) (BEGIN .  911))
+      ((default . error) (IS .  910))
+      ((default . error) (END .  909))
+      ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON .  908) 
(LEFT_PAREN .  107))
+      ((default . error) (SEMICOLON . (actual_parameter_part_opt . 0)) (DO . 
(actual_parameter_part_opt . 0)) (LEFT_PAREN . ( 905 (actual_parameter_part_opt 
. 0))))
+      ((default . error) (IS .  904))
+      ((default . error) (IS .  903))
+      ((default . error) (WHEN .  616))
+      ((default . error) (BAR .  356) (EQUAL_GREATER .  901))
+      ((default . error) (NULL .  900))
+      ((default . error) (DO . (subtype_indication . 3)) (OF . 
(subtype_indication . 3)) (AND . (subtype_indication . 3)) (SEMICOLON . 
(subtype_indication . 3)) (WITH . (subtype_indication . 3)) (COLON_EQUAL . 
(subtype_indication . 3)) (DOT .  90) (TICK .  91) (RANGE .  895) (LEFT_PAREN . 
 820))
+      ((default . error) (OF .  899))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (DOT .  90) (TICK .  91) (LOOP . 
(iterator_specification . 5)) (EQUAL_GREATER . (iterator_specification . 5)) 
(LEFT_PAREN .  107))
-      ((default . error) (NUMERIC_LITERAL .  155) (NULL .  906) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  736) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (NUMERIC_LITERAL .  156) (NULL .  897) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  728) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (LOOP . (iterator_specification . 1)) (EQUAL_GREATER 
. (iterator_specification . 1)))
-      ((default . error) (LOOP . (subtype_indication . 3)) (DOT .  90) (IN . 
(primary . 3)) (NOT . (primary . 3)) (EQUAL . (primary . 3)) (GREATER . 
(primary . 3)) (GREATER_EQUAL . (primary . 3)) (LESS . (primary . 3)) 
(LESS_EQUAL . (primary . 3)) (SLASH_EQUAL . (primary . 3)) (RIGHT_PAREN . 
((primary . 3) (subtype_indication . 3))) (COMMA . ((primary . 3) 
(subtype_indication . 3))) (BAR . (primary . 3)) (EQUAL_GREATER . ((primary . 
3) (subtype_indication . 3))) (AND . (primary . 3)) (OR [...]
+      ((default . error) (LOOP . (subtype_indication . 3)) (DOT .  90) (IN . 
(primary . 3)) (NOT . (primary . 3)) (EQUAL . (primary . 3)) (GREATER . 
(primary . 3)) (GREATER_EQUAL . (primary . 3)) (LESS . (primary . 3)) 
(LESS_EQUAL . (primary . 3)) (SLASH_EQUAL . (primary . 3)) (RIGHT_PAREN . 
((primary . 3) (subtype_indication . 3))) (COMMA . ((primary . 3) 
(subtype_indication . 3))) (BAR . (primary . 3)) (EQUAL_GREATER . ((primary . 
3) (subtype_indication . 3))) (AND . (primary . 3)) (OR [...]
       ((default . error) (LOOP . (discrete_subtype_definition . 1)) 
(EQUAL_GREATER . (discrete_subtype_definition . 1)) (COMMA . 
(discrete_subtype_definition . 1)) (RIGHT_PAREN . (discrete_subtype_definition 
. 1)))
       ((default . error) (LOOP . (discrete_subtype_definition . 0)) 
(EQUAL_GREATER . (discrete_subtype_definition . 0)) (COMMA . 
(discrete_subtype_definition . 0)) (RIGHT_PAREN . (discrete_subtype_definition 
. 0)))
-      ((default . error) (COMMA . (quantified_expression . 0)) (RIGHT_PAREN . 
(quantified_expression . 0)))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (COMMA . (elsif_expression_list . 0)) (RIGHT_PAREN . 
(elsif_expression_list . 0)) (ELSE . (elsif_expression_list . 0)) (ELSIF . 
(elsif_expression_list . 0)))
-      ((default . error) (COMMA . (if_expression . 1)) (RIGHT_PAREN . 
(if_expression . 1)) (ELSE .  900) (ELSIF .  744))
+      ((default . error) (RIGHT_PAREN . (quantified_expression . 0)))
+      ((default . error) (RIGHT_PAREN . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (THEN . (expression_opt . 0)) (RAISE .  153) (PLUS .  
155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN . (elsif_expression_list . 0)) (ELSE . 
(elsif_expression_list . 0)) (ELSIF . (elsif_expression_list . 0)))
+      ((default . error) (RIGHT_PAREN . (if_expression . 1)) (ELSE .  891) 
(ELSIF .  736))
       ((default . error) (USE . (aggregate . 1)) (COLON_EQUAL . (aggregate . 
1)) (CHARACTER_LITERAL . (aggregate . 1)) (STRING_LITERAL . (aggregate . 1)) 
(IDENTIFIER . (aggregate . 1)) (LESS_LESS . (aggregate . 1)) (WHILE . 
(aggregate . 1)) (SELECT . (aggregate . 1)) (REQUEUE . (aggregate . 1)) (RAISE 
. (aggregate . 1)) (PRAGMA . (aggregate . 1)) (NULL . (aggregate . 1)) (IF . 
(aggregate . 1)) (GOTO . (aggregate . 1)) (FOR . (aggregate . 1)) (EXIT . 
(aggregate . 1)) (DELAY . (aggregate . [...]
-      ((default . error) (RIGHT_PAREN .  899))
-      ((default . error) (COMMA . (pragma_argument_association . 3)) 
(RIGHT_PAREN . (pragma_argument_association . 3)))
-      ((default . error) (SEMICOLON .  898))
-      ((default . error) (END .  897))
-      ((default . error) (IDENTIFIER .  235) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  736) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN .  890))
+      ((default . error) (XOR . (choice_relation . 0)) (OR . (choice_relation 
. 0)) (BAR . (choice_relation . 0)) (EQUAL_GREATER . (choice_relation . 0)) 
(AND . (choice_relation . 0)))
+      ((default . error) (RIGHT_PAREN .  889))
+      ((default . error) (DO . (membership_choice_list . 1)) (LOOP . 
(membership_choice_list . 1)) (ELSIF . (membership_choice_list . 1)) (ELSE . 
(membership_choice_list . 1)) (EQUAL_GREATER . (membership_choice_list . 1)) 
(DIGITS . (membership_choice_list . 1)) (RANGE . (membership_choice_list . 1)) 
(THEN . (membership_choice_list . 1)) (SEMICOLON . (membership_choice_list . 
1)) (IS . (membership_choice_list . 1)) (WITH . (membership_choice_list . 1)) 
(RIGHT_PAREN . (membership_choice_l [...]
+      ((default . error) (SEMICOLON .  888))
+      ((default . error) (END .  887))
+      ((default . error) (SEMICOLON . (parameter_specification . 0)) 
(RIGHT_PAREN . (parameter_specification . 0)) (IDENTIFIER .  229) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) 
(ABS .  144) (NOT .  728) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
-      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RAISE .  152) 
(PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN . (expression_opt . 0)) (FOR .  146) 
(CASE .  145) (IF .  147) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (ARRAY . (constant_opt . 1)) (ACCESS . (constant_opt 
. 1)) (NOT . (constant_opt . 1)) (IDENTIFIER . (constant_opt . 1)) 
(STRING_LITERAL . (constant_opt . 1)) (CHARACTER_LITERAL . (constant_opt . 1)))
-      ((default . error) (ARRAY .  498) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt . 0)) (NOT .  885))
+      ((default . error) (ARRAY .  490) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt . 0)) (NOT .  875))
       ((default . error) (IDENTIFIER . (exception_declaration . 0)) (USE . 
(exception_declaration . 0)) (TYPE . (exception_declaration . 0)) (TASK . 
(exception_declaration . 0)) (SUBTYPE . (exception_declaration . 0)) (PROTECTED 
. (exception_declaration . 0)) (PROCEDURE . (exception_declaration . 0)) 
(PRAGMA . (exception_declaration . 0)) (PACKAGE . (exception_declaration . 0)) 
(OVERRIDING . (exception_declaration . 0)) (NOT . (exception_declaration . 0)) 
(GENERIC . (exception_declaratio [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (SEMICOLON . (name_opt . 0)) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
-      ((default . error) (DOT .  90) (TICK .  91) (RENAMES .  882) (LEFT_PAREN 
.  107))
+      ((default . error) (DOT .  90) (TICK .  91) (RENAMES .  872) (LEFT_PAREN 
.  107))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (PRIVATE . (abstract_tagged_limited_opt . 0)) (NULL . 
(abstract_tagged_limited_opt . 0)) (RECORD . (abstract_tagged_limited_opt . 0)) 
(TAGGED .  869) (RANGE .  867) (MOD .  865) (DIGITS .  862) (DELTA .  861) 
(TASK .  509) (PROTECTED .  505) (SYNCHRONIZED .  507) (INTERFACE .  501) 
(ARRAY .  498) (LEFT_PAREN .  863) (ACCESS . (null_exclusion_opt . 0)) (NOT .  
232) (NEW . ((abstract_limited_opt . 0) (abstract_limited_synchronized_opt . 
0))) (LIMITED .  864) (ABSTR [...]
+      ((default . error) (PRIVATE . (abstract_tagged_limited_opt . 0)) (NULL . 
(abstract_tagged_limited_opt . 0)) (RECORD . (abstract_tagged_limited_opt . 0)) 
(TAGGED .  859) (RANGE .  857) (MOD .  855) (DIGITS .  852) (DELTA .  851) 
(TASK .  501) (PROTECTED .  497) (SYNCHRONIZED .  499) (INTERFACE .  493) 
(ARRAY .  490) (LEFT_PAREN .  853) (ACCESS . (null_exclusion_opt . 0)) (NOT .  
226) (NEW . ((abstract_limited_opt . 0) (abstract_limited_synchronized_opt . 
0))) (LIMITED .  854) (ABSTR [...]
       ((default . error) (BEGIN . (incomplete_type_declaration . 1)) (ENTRY . 
(incomplete_type_declaration . 1)) (FOR . (incomplete_type_declaration . 1)) 
(FUNCTION . (incomplete_type_declaration . 1)) (GENERIC . 
(incomplete_type_declaration . 1)) (NOT . (incomplete_type_declaration . 1)) 
(OVERRIDING . (incomplete_type_declaration . 1)) (PACKAGE . 
(incomplete_type_declaration . 1)) (PRAGMA . (incomplete_type_declaration . 1)) 
(PROCEDURE . (incomplete_type_declaration . 1)) (PROTECTED . ( [...]
-      ((default . error) (SEPARATE .  859))
+      ((default . error) (SEPARATE .  849))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (IS . 
(aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (NEW .  855) (END . (declarative_part_opt . 0)) 
(PRIVATE . (declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  
7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt 
. 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED 
.  301) (TASK .  303) (PACKAGE .  300))
+      ((default . error) (NEW .  845) (END . (declarative_part_opt . 0)) 
(PRIVATE . (declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  
7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt 
. 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED 
.  271) (TASK .  273) (PACKAGE .  270))
       ((default . error) (BEGIN . (single_task_declaration . 2)) (ENTRY . 
(single_task_declaration . 2)) (FOR . (single_task_declaration . 2)) (FUNCTION 
. (single_task_declaration . 2)) (GENERIC . (single_task_declaration . 2)) (NOT 
. (single_task_declaration . 2)) (OVERRIDING . (single_task_declaration . 2)) 
(PACKAGE . (single_task_declaration . 2)) (PRAGMA . (single_task_declaration . 
2)) (PROCEDURE . (single_task_declaration . 2)) (PROTECTED . 
(single_task_declaration . 2)) (SUBTYPE . [...]
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
-      ((default . error) (SEPARATE .  853))
+      ((default . error) (SEPARATE .  843))
       ((default . error) (IS . (aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (NEW .  849) (END . (declarative_part_opt . 0)) 
(PRIVATE . (declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  
7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt 
. 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED 
.  301) (TASK .  303) (PACKAGE .  300))
-      ((default . error) (SEPARATE .  848))
-      ((default . error) (SEMICOLON .  847))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (IDENTIFIER . (mod_clause_opt . 0)) (AT .  844))
-      ((default . error) (SEMICOLON .  843))
-      ((default . error) (SEMICOLON .  842))
-      ((default . error) (XOR . (choice_relation . 0)) (OR . (choice_relation 
. 0)) (BAR . (choice_relation . 0)) (EQUAL_GREATER . (choice_relation . 0)) 
(AND . (choice_relation . 0)))
-      ((default . error) (RIGHT_PAREN .  841))
-      ((default . error) (DO . (membership_choice_list . 1)) (LOOP . 
(membership_choice_list . 1)) (COMMA . (membership_choice_list . 1)) (ELSIF . 
(membership_choice_list . 1)) (ELSE . (membership_choice_list . 1)) 
(EQUAL_GREATER . (membership_choice_list . 1)) (RIGHT_PAREN . 
(membership_choice_list . 1)) (DIGITS . (membership_choice_list . 1)) (RANGE . 
(membership_choice_list . 1)) (THEN . (membership_choice_list . 1)) (SEMICOLON 
. (membership_choice_list . 1)) (WITH . (membership_choic [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (ACCESS . (null_exclusion_opt . 1)) (IDENTIFIER .  
837) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (NEW .  839) (END . (declarative_part_opt . 0)) 
(PRIVATE . (declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  
7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt 
. 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED 
.  271) (TASK .  273) (PACKAGE .  270))
+      ((default . error) (SEPARATE .  838))
+      ((default . error) (SEMICOLON .  837))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (IDENTIFIER . (mod_clause_opt . 0)) (AT .  834))
+      ((default . error) (SEMICOLON .  833))
+      ((default . error) (SEMICOLON .  832))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RIGHT_PAREN . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RIGHT_PAREN . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (ACCESS . (null_exclusion_opt . 1)) (IDENTIFIER .  
828) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (NULL . (abstract_tagged_limited_opt . 1)) (RECORD . 
(abstract_tagged_limited_opt . 1)) (PRIVATE . (abstract_tagged_limited_opt . 
1)))
       ((default . error) (RIGHT_PAREN . (discrete_subtype_definition_list . 
0)) (COMMA . (discrete_subtype_definition_list . 0)))
-      ((default . error) (COMMA .  836) (RIGHT_PAREN .  835))
+      ((default . error) (COMMA .  827) (RIGHT_PAREN .  826))
       ((default . error) (RIGHT_PAREN . (index_subtype_definition_list . 0)) 
(COMMA . (index_subtype_definition_list . 0)))
-      ((default . error) (COMMA .  834) (RIGHT_PAREN .  833))
-      ((default . error) (RIGHT_PAREN . (subtype_indication . 3)) (COMMA . 
(subtype_indication . 3)) (PLUS . (primary . 3)) (MINUS . (primary . 3)) 
(AMPERSAND . (primary . 3)) (DOT_DOT . (primary . 3)) (MOD . (primary . 3)) 
(REM . (primary . 3)) (SLASH . (primary . 3)) (STAR . (primary . 3)) (STAR_STAR 
. (primary . 3)) (DOT .  90) (TICK .  285) (RANGE .  830) (LEFT_PAREN .  829))
-      ((default . error) (BOX .  828))
+      ((default . error) (COMMA .  825) (RIGHT_PAREN .  824))
+      ((default . error) (RIGHT_PAREN . (subtype_indication . 3)) (COMMA . 
(subtype_indication . 3)) (PLUS . (primary . 3)) (MINUS . (primary . 3)) 
(AMPERSAND . (primary . 3)) (DOT_DOT . (primary . 3)) (MOD . (primary . 3)) 
(REM . (primary . 3)) (SLASH . (primary . 3)) (STAR . (primary . 3)) (STAR_STAR 
. (primary . 3)) (DOT .  90) (TICK .  355) (RANGE .  821) (LEFT_PAREN .  820))
+      ((default . error) (BOX .  819))
       ((default . error) (WITH . (formal_type_definition . 2)) (SEMICOLON . 
(formal_type_definition . 2)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (PACKAGE . (formal_type_declaration . 1)) (PROCEDURE 
. (formal_type_declaration . 1)) (FUNCTION . (formal_type_declaration . 1)) 
(PRAGMA . (formal_type_declaration . 1)) (TYPE . (formal_type_declaration . 1)) 
(USE . (formal_type_declaration . 1)) (WITH . (formal_type_declaration . 1)) 
(IDENTIFIER . (formal_type_declaration . 1)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (DOT .  90) (TICK .  91) (WITH . 
(and_interface_list_opt . 0)) (SEMICOLON . (and_interface_list_opt . 0)) (AND . 
 821) (LEFT_PAREN .  107))
+      ((default . error) (DOT .  90) (TICK .  91) (WITH . 
(and_interface_list_opt . 0)) (SEMICOLON . (and_interface_list_opt . 0)) (AND . 
 812) (LEFT_PAREN .  107))
       ((default . error) (PACKAGE . (formal_type_declaration . 0)) (PROCEDURE 
. (formal_type_declaration . 0)) (FUNCTION . (formal_type_declaration . 0)) 
(PRAGMA . (formal_type_declaration . 0)) (TYPE . (formal_type_declaration . 0)) 
(USE . (formal_type_declaration . 0)) (WITH . (formal_type_declaration . 0)) 
(IDENTIFIER . (formal_type_declaration . 0)))
       ((default . error) (PACKAGE . (formal_subprogram_declaration . 2)) 
(PROCEDURE . (formal_subprogram_declaration . 2)) (FUNCTION . 
(formal_subprogram_declaration . 2)) (PRAGMA . (formal_subprogram_declaration . 
2)) (TYPE . (formal_subprogram_declaration . 2)) (USE . 
(formal_subprogram_declaration . 2)) (WITH . (formal_subprogram_declaration . 
2)) (IDENTIFIER . (formal_subprogram_declaration . 2)))
-      ((default . error) (BOX .  820) (FOR .  146) (CASE .  145) (IF .  147) 
(RIGHT_PAREN . ((expression_opt . 0) (association_opt . 0))) (COMMA . 
((expression_opt . 0) (association_opt . 0))) (EQUAL_GREATER . 
(discrete_choice_list . 0)) (BAR . (discrete_choice_list . 0)) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  183) (STRING_LITERAL .  49) (PLUS .  154) (MINUS .  
153) (OTHERS .  182) (ABS .  144) (NOT .  181) (RAISE .  152) (NUMERIC_LITERAL 
.  155) (NULL .  151) (NEW .  149) (LEFT_PAREN  [...]
+      ((default . error) (BOX .  811) (FOR .  146) (CASE .  145) (IF .  147) 
(RIGHT_PAREN . ((expression_opt . 0) (association_opt . 0))) (COMMA . 
((expression_opt . 0) (association_opt . 0))) (EQUAL_GREATER . 
(discrete_choice_list . 0)) (BAR . (discrete_choice_list . 0)) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  157) (STRING_LITERAL .  49) (PLUS .  155) (MINUS .  
154) (OTHERS .  152) (ABS .  144) (NOT .  150) (RAISE .  153) (NUMERIC_LITERAL 
.  156) (NULL .  151) (NEW .  149) (LEFT_PAREN  [...]
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (PACKAGE . (formal_object_declaration . 1)) 
(PROCEDURE . (formal_object_declaration . 1)) (FUNCTION . 
(formal_object_declaration . 1)) (PRAGMA . (formal_object_declaration . 1)) 
(TYPE . (formal_object_declaration . 1)) (USE . (formal_object_declaration . 
1)) (WITH . (formal_object_declaration . 1)) (IDENTIFIER . 
(formal_object_declaration . 1)))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
-      ((default . error) (SEMICOLON .  817))
-      ((default . error) (IDENTIFIER .  77))
+      ((default . error) (SEMICOLON .  808))
+      ((default . error) (SEMICOLON . (parameter_specification . 0)) 
(RIGHT_PAREN . (parameter_specification . 0)) (IDENTIFIER .  77))
       ((default . error) (DO . (access_definition . 1)) (COLON_EQUAL . 
(access_definition . 1)) (RIGHT_PAREN . (access_definition . 1)) (RENAMES . 
(access_definition . 1)) (WITH . (access_definition . 1)) (SEMICOLON . 
(access_definition . 1)) (IS . (access_definition . 1)))
       ((default . error) (DO . (access_definition . 2)) (COLON_EQUAL . 
(access_definition . 2)) (RIGHT_PAREN . (access_definition . 2)) (RENAMES . 
(access_definition . 2)) (WITH . (access_definition . 2)) (SEMICOLON . 
(access_definition . 2)) (IS . (access_definition . 2)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RIGHT_PAREN . (parameter_specification . 2)) 
(SEMICOLON . (parameter_specification . 2)))
-      ((default . error) (COLON_EQUAL .  1086) (DOT .  90) (TICK .  91) 
(RIGHT_PAREN . (parameter_specification . 1)) (SEMICOLON . 
(parameter_specification . 1)) (LEFT_PAREN .  107))
+      ((default . error) (RIGHT_PAREN . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN . (parameter_specification . 3)) 
(SEMICOLON . (parameter_specification . 3)))
+      ((default . error) (COLON_EQUAL .  1077) (DOT .  90) (TICK .  91) 
(RIGHT_PAREN . (parameter_specification . 2)) (SEMICOLON . 
(parameter_specification . 2)) (LEFT_PAREN .  107))
       ((default . error) (IDENTIFIER . (formal_object_declaration . 2)) (WITH 
. (formal_object_declaration . 2)) (USE . (formal_object_declaration . 2)) 
(TYPE . (formal_object_declaration . 2)) (PRAGMA . (formal_object_declaration . 
2)) (FUNCTION . (formal_object_declaration . 2)) (PROCEDURE . 
(formal_object_declaration . 2)) (PACKAGE . (formal_object_declaration . 2)))
-      ((default . error) (SEMICOLON .  1085))
-      ((default . error) (SEMICOLON .  1084))
-      ((default . error) (RIGHT_PAREN .  1083))
+      ((default . error) (SEMICOLON .  1076))
+      ((default . error) (SEMICOLON .  1075))
+      ((default . error) (RIGHT_PAREN .  1074))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (WITH . ( 1081 (formal_derived_type_definition . 1))) 
(SEMICOLON . (formal_derived_type_definition . 1)))
-      ((default . error) (AND .  1080) (WITH . (interface_type_definition . 
1)) (SEMICOLON . (interface_type_definition . 1)))
+      ((default . error) (WITH . ( 1072 (formal_derived_type_definition . 1))) 
(SEMICOLON . (formal_derived_type_definition . 1)))
+      ((default . error) (AND .  1071) (WITH . (interface_type_definition . 
1)) (SEMICOLON . (interface_type_definition . 1)))
       ((default . error) (DOT .  90) (SEMICOLON . (interface_list . 0)) (WITH 
. (interface_list . 0)) (AND . (interface_list . 0)) (TICK .  91) (LEFT_PAREN . 
 107))
-      ((default . error) (AND .  1080) (WITH . (interface_type_definition . 
3)) (SEMICOLON . (interface_type_definition . 3)))
-      ((default . error) (AND .  1080) (WITH . (interface_type_definition . 
2)) (SEMICOLON . (interface_type_definition . 2)))
-      ((default . error) (AND .  1080) (WITH . (interface_type_definition . 
0)) (SEMICOLON . (interface_type_definition . 0)))
+      ((default . error) (AND .  1071) (WITH . (interface_type_definition . 
3)) (SEMICOLON . (interface_type_definition . 3)))
+      ((default . error) (AND .  1071) (WITH . (interface_type_definition . 
2)) (SEMICOLON . (interface_type_definition . 2)))
+      ((default . error) (AND .  1071) (WITH . (interface_type_definition . 
0)) (SEMICOLON . (interface_type_definition . 0)))
       ((default . error) (SEMICOLON . (formal_type_definition . 7)) (WITH . 
(formal_type_definition . 7)))
-      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (IDENTIFIER .  48) (CHARACTER_LITERAL .  183) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (OTHERS .  182) (ABS .  
144) (NOT .  1077) (RAISE .  152) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW . 
 149) (LEFT_PAREN .  148))
-      ((default . error) (BOX .  1076) (IDENTIFIER .  48) (CHARACTER_LITERAL . 
 50) (STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (IDENTIFIER .  48) (CHARACTER_LITERAL .  157) 
(STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (OTHERS .  152) (ABS .  
144) (NOT .  1068) (RAISE .  153) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW . 
 149) (LEFT_PAREN .  148))
+      ((default . error) (BOX .  1067) (IDENTIFIER .  48) (CHARACTER_LITERAL . 
 50) (STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (LOOP . (subtype_indication . 2)) (DO . 
(subtype_indication . 2)) (RIGHT_PAREN . (subtype_indication . 2)) (COMMA . 
(subtype_indication . 2)) (EQUAL_GREATER . (subtype_indication . 2)) 
(COLON_EQUAL . (subtype_indication . 2)) (WITH . (subtype_indication . 2)) 
(SEMICOLON . (subtype_indication . 2)) (AND . (subtype_indication . 2)) (OF . 
(subtype_indication . 2)))
       ((default . error) (LOOP . (constraint . 1)) (DO . (constraint . 1)) 
(RIGHT_PAREN . (constraint . 1)) (COMMA . (constraint . 1)) (EQUAL_GREATER . 
(constraint . 1)) (COLON_EQUAL . (constraint . 1)) (WITH . (constraint . 1)) 
(SEMICOLON . (constraint . 1)) (AND . (constraint . 1)) (OF . (constraint . 1)))
-      ((default . error) (OF .  1075))
+      ((default . error) (OF .  1066))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (OF .  1072))
-      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  736) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (OF .  1063))
+      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  728) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (DOT . (name . 0)) (LEFT_PAREN . (name . 0)) (TICK . 
(name . 0)) (SEMICOLON . (null_exclusion_opt_name_type . 2)) (RIGHT_PAREN . 
(null_exclusion_opt_name_type . 2)) (COLON_EQUAL . 
(null_exclusion_opt_name_type . 2)))
       ((default . error) (DOT . (name . 3)) (LEFT_PAREN . (name . 3)) (TICK . 
(name . 3)) (SEMICOLON . (null_exclusion_opt_name_type . 3)) (RIGHT_PAREN . 
(null_exclusion_opt_name_type . 3)) (COLON_EQUAL . 
(null_exclusion_opt_name_type . 3)))
       ((default . error) (SEMICOLON . (discriminant_specification_opt . 3)) 
(RIGHT_PAREN . (discriminant_specification_opt . 3)))
       ((default . error) (SEMICOLON . (discriminant_specification_opt . 1)) 
(RIGHT_PAREN . (discriminant_specification_opt . 1)))
-      ((default . error) (DO . (range . 0)) (LOOP . (range . 0)) (XOR . (range 
. 0)) (OR . (range . 0)) (AND . (range . 0)) (IS . (range . 0)) (WITH . (range 
. 0)) (SEMICOLON . (range . 0)) (THEN . (range . 0)) (RANGE . (range . 0)) 
(DIGITS . (range . 0)) (ELSE . (range . 0)) (ELSIF . (range . 0)) (COLON_EQUAL 
. (range . 0)) (OF . (range . 0)) (BAR . (range . 0)) (EQUAL_GREATER . (range . 
0)) (RIGHT_PAREN . (range . 0)) (COMMA . (range . 0)))
       ((default . error) (WHEN . (record_representation_clause . 0)) (END . 
(record_representation_clause . 0)) (PRIVATE . (record_representation_clause . 
0)) (CASE . (record_representation_clause . 0)) (IDENTIFIER . 
(record_representation_clause . 0)) (USE . (record_representation_clause . 0)) 
(TYPE . (record_representation_clause . 0)) (TASK . 
(record_representation_clause . 0)) (SUBTYPE . (record_representation_clause . 
0)) (PROTECTED . (record_representation_clause . 0)) (PROCEDURE . [...]
       ((default . error) (WHEN . (enumeration_representation_clause . 0)) (END 
. (enumeration_representation_clause . 0)) (PRIVATE . 
(enumeration_representation_clause . 0)) (CASE . 
(enumeration_representation_clause . 0)) (IDENTIFIER . 
(enumeration_representation_clause . 0)) (USE . 
(enumeration_representation_clause . 0)) (TYPE . 
(enumeration_representation_clause . 0)) (TASK . 
(enumeration_representation_clause . 0)) (SUBTYPE . 
(enumeration_representation_clause . 0)) (PROTECTED . (en [...]
-      ((default . error) (MOD .  1070))
-      ((default . error) (IDENTIFIER .  1067))
-      ((default . error) (SEMICOLON .  1066))
+      ((default . error) (MOD .  1061))
+      ((default . error) (IDENTIFIER .  1058))
+      ((default . error) (SEMICOLON .  1057))
       ((default . error) (WHEN . (aspect_clause . 0)) (PRIVATE . 
(aspect_clause . 0)) (END . (aspect_clause . 0)) (CASE . (aspect_clause . 0)) 
(BEGIN . (aspect_clause . 0)) (ENTRY . (aspect_clause . 0)) (FOR . 
(aspect_clause . 0)) (FUNCTION . (aspect_clause . 0)) (GENERIC . (aspect_clause 
. 0)) (NOT . (aspect_clause . 0)) (OVERRIDING . (aspect_clause . 0)) (PACKAGE . 
(aspect_clause . 0)) (PRAGMA . (aspect_clause . 0)) (PROCEDURE . (aspect_clause 
. 0)) (PROTECTED . (aspect_clause . 0)) (S [...]
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (END .  1062) (PRIVATE .  1063))
-      ((default . error) (SEMICOLON .  1061))
-      ((default . error) (IS .  1060))
+      ((default . error) (END .  1053) (PRIVATE .  1054))
+      ((default . error) (SEMICOLON .  1052))
+      ((default . error) (IS .  1051))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
-      ((default . error) (SEMICOLON .  1058))
+      ((default . error) (SEMICOLON .  1049))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (END .  1055) (PRIVATE .  1056))
-      ((default . error) (SEMICOLON .  1054))
-      ((default . error) (SEMICOLON .  1053) (IS .  1052))
+      ((default . error) (END .  1046) (PRIVATE .  1047))
+      ((default . error) (SEMICOLON .  1045))
+      ((default . error) (SEMICOLON .  1044) (IS .  1043))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
-      ((default . error) (SYNCHRONIZED .  563) (TAGGED .  564) (NEW . 
((abstract_limited_opt . 3) (abstract_limited_synchronized_opt . 3))) (LIMITED 
.  1050))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (IDENTIFIER .  1044) (CHARACTER_LITERAL .  1045))
-      ((default . error) (INTERFACE .  557) (PRIVATE . 
(abstract_tagged_limited_opt . 5)) (NULL . (abstract_tagged_limited_opt . 5)) 
(RECORD . (abstract_tagged_limited_opt . 5)) (NEW . ((abstract_limited_opt . 2) 
(abstract_limited_synchronized_opt . 4))))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RECORD .  1042))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (END . (component_list_opt . 0)) (NULL .  1033) (CASE 
.  1032) (IDENTIFIER .  77) (FOR .  299))
-      ((default . error) (SEMICOLON .  1031) (PRIVATE . 
(abstract_tagged_limited_opt . 4)) (NULL . (abstract_tagged_limited_opt . 4)) 
(RECORD . (abstract_tagged_limited_opt . 4)) (LIMITED .  551))
-      ((default . error) (NEW .  1030))
-      ((default . error) (NEW .  1029))
-      ((default . error) (PRIVATE .  1027) (RECORD .  868) (NULL .  866))
+      ((default . error) (SYNCHRONIZED .  555) (TAGGED .  556) (NEW . 
((abstract_limited_opt . 3) (abstract_limited_synchronized_opt . 3))) (LIMITED 
.  1041))
+      ((default . error) (RANGE . (expression_opt . 0)) (WITH . 
(expression_opt . 0)) (SEMICOLON . (expression_opt . 0)) (DIGITS . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RANGE . (expression_opt . 0)) (WITH . 
(expression_opt . 0)) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) (PLUS . 
 155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL . 
 151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (IDENTIFIER .  1035) (CHARACTER_LITERAL .  1036))
+      ((default . error) (INTERFACE .  549) (PRIVATE . 
(abstract_tagged_limited_opt . 5)) (NULL . (abstract_tagged_limited_opt . 5)) 
(RECORD . (abstract_tagged_limited_opt . 5)) (NEW . ((abstract_limited_opt . 2) 
(abstract_limited_synchronized_opt . 4))))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (WITH . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RECORD .  1033))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (END . (component_list_opt . 0)) (NULL .  1024) (CASE 
.  1023) (IDENTIFIER .  77) (FOR .  269))
+      ((default . error) (SEMICOLON .  1022) (PRIVATE . 
(abstract_tagged_limited_opt . 4)) (NULL . (abstract_tagged_limited_opt . 4)) 
(RECORD . (abstract_tagged_limited_opt . 4)) (LIMITED .  543))
+      ((default . error) (NEW .  1021))
+      ((default . error) (NEW .  1020))
+      ((default . error) (PRIVATE .  1018) (RECORD .  858) (NULL .  856))
       ((default . error) (WITH . (type_definition . 8)) (SEMICOLON . 
(type_definition . 8)))
       ((default . error) (WITH . (type_definition . 6)) (SEMICOLON . 
(type_definition . 6)))
       ((default . error) (WITH . (type_definition . 9)) (SEMICOLON . 
(type_definition . 9)))
@@ -2701,130 +2691,131 @@
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (SEMICOLON . (package_specification . 0)))
-      ((default . error) (SEMICOLON .  1022))
-      ((default . error) (NULL .  1021))
-      ((default . error) (COLON_EQUAL .  1019) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (COLON_EQUAL .  1017) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (COLON_EQUAL .  1015) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (SEMICOLON .  1014))
       ((default . error) (SEMICOLON .  1013))
-      ((default . error) (SEMICOLON .  1012))
-      ((default . error) (SEMICOLON .  1011))
-      ((default . error) (RIGHT_PAREN .  1010))
-      ((default . error) (RIGHT_PAREN .  1009))
-      ((default . error) (SEMICOLON .  1008))
-      ((default . error) (RIGHT_PAREN .  1007))
+      ((default . error) (NULL .  1012))
+      ((default . error) (COLON_EQUAL .  1010) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (COLON_EQUAL .  1008) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (COLON_EQUAL .  1006) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (SEMICOLON .  1005))
+      ((default . error) (SEMICOLON .  1004))
+      ((default . error) (SEMICOLON .  1003))
+      ((default . error) (SEMICOLON .  1002))
+      ((default . error) (RIGHT_PAREN .  1001))
+      ((default . error) (RIGHT_PAREN .  1000))
+      ((default . error) (SEMICOLON .  999))
+      ((default . error) (RIGHT_PAREN .  998))
       ((default . error) (SEMICOLON . (name_opt . 0)) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (END . (package_body . 1)) (BEGIN . (package_body . 
1)) (ENTRY . (package_body . 1)) (FOR . (package_body . 1)) (PROTECTED . 
(package_body . 1)) (SUBTYPE . (package_body . 1)) (TASK . (package_body . 1)) 
(TYPE . (package_body . 1)) (IDENTIFIER . (package_body . 1)) (WITH . 
(package_body . 1)) (USE . (package_body . 1)) (SEPARATE . (package_body . 1)) 
(PROCEDURE . (package_body . 1)) (PRIVATE . (package_body . 1)) (PRAGMA . 
(package_body . 1)) (PACKAGE . (package_ [...]
+      ((default . error) (THEN . (range . 0)) (RANGE . (range . 0)) (DIGITS . 
(range . 0)) (ELSE . (range . 0)) (ELSIF . (range . 0)) (DO . (range . 0)) 
(LOOP . (range . 0)) (XOR . (range . 0)) (OR . (range . 0)) (AND . (range . 0)) 
(WITH . (range . 0)) (IS . (range . 0)) (SEMICOLON . (range . 0)) (COLON_EQUAL 
. (range . 0)) (OF . (range . 0)) (BAR . (range . 0)) (EQUAL_GREATER . (range . 
0)) (RIGHT_PAREN . (range . 0)) (COMMA . (range . 0)))
       ((default . error) (LOOP . (aggregate . 3)) (DO . (aggregate . 3)) (OF . 
(aggregate . 3)) (ACCEPT . (aggregate . 3)) (ABORT . (aggregate . 3)) (BEGIN . 
(aggregate . 3)) (CASE . (aggregate . 3)) (DECLARE . (aggregate . 3)) (DELAY . 
(aggregate . 3)) (EXIT . (aggregate . 3)) (FOR . (aggregate . 3)) (GOTO . 
(aggregate . 3)) (IF . (aggregate . 3)) (NULL . (aggregate . 3)) (PRAGMA . 
(aggregate . 3)) (RAISE . (aggregate . 3)) (REQUEUE . (aggregate . 3)) (SELECT 
. (aggregate . 3)) (WHILE . [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (ELSIF . (elsif_expression_list . 1)) (ELSE . 
(elsif_expression_list . 1)) (RIGHT_PAREN . (elsif_expression_list . 1)) (COMMA 
. (elsif_expression_list . 1)))
-      ((default . error) (THEN .  1004))
-      ((default . error) (RIGHT_PAREN . (if_expression . 2)) (COMMA . 
(if_expression . 2)))
-      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  150) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (ELSIF . (elsif_expression_list . 1)) (ELSE . 
(elsif_expression_list . 1)) (RIGHT_PAREN . (elsif_expression_list . 1)))
+      ((default . error) (THEN .  995))
+      ((default . error) (RIGHT_PAREN . (if_expression . 2)))
+      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (LOOP . (iterator_specification . 0)) (EQUAL_GREATER 
. (iterator_specification . 0)))
       ((default . error) (PLUS . (primary . 1)) (MINUS . (primary . 1)) 
(AMPERSAND . (primary . 1)) (DOT_DOT . (primary . 1)) (MOD . (primary . 1)) 
(REM . (primary . 1)) (SLASH . (primary . 1)) (STAR . (primary . 1)) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (DOT .  90) (TICK .  91) (LOOP . 
(iterator_specification . 4)) (EQUAL_GREATER . (iterator_specification . 4)) 
(LEFT_PAREN .  107))
-      ((default . error) (REVERSE .  1001) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (REVERSE .  992) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (COMMA . (expression_opt . 0)) (RIGHT_PAREN . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (RIGHT_PAREN . (case_expression_alternative_list . 
1)) (COMMA . (case_expression_alternative_list . 1)))
-      ((default . error) (END . (protected_operation_item_list_opt . 0)) 
(ENTRY .  988) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(FOR .  299))
-      ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  302) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE 
.  304) (GENERIC .  2) (PROTECTED .  301) (TASK .  303) (PACKAGE .  300))
-      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  182) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  183) (STRING_LITERAL .  49) (RAISE .  152) (PLUS .  154) 
(MINUS .  153) (ABS .  144) (NOT .  181) (NUMERIC_LITERAL .  155) (NULL .  151) 
(NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (END . (protected_operation_item_list_opt . 0)) 
(ENTRY .  979) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(FOR .  269))
+      ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  272) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE 
.  274) (GENERIC .  2) (PROTECTED .  271) (TASK .  273) (PACKAGE .  270))
+      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  152) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  157) (STRING_LITERAL .  49) (RAISE .  153) (PLUS .  155) 
(MINUS .  154) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  156) (NULL .  151) 
(NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (SEMICOLON . (actual_parameter_part_opt . 1)) 
(LEFT_PAREN . (actual_parameter_part_opt . 1)) (DO . (actual_parameter_part_opt 
. 1)))
-      ((default . error) (DO . (parameter_profile_opt . 0)) (SEMICOLON . 
(parameter_profile_opt . 0)) (LEFT_PAREN .  810))
+      ((default . error) (DO . (parameter_profile_opt . 0)) (SEMICOLON . 
(parameter_profile_opt . 0)) (LEFT_PAREN .  801))
       ((default . error) (OR . (simple_statement . 8)) (THEN . 
(simple_statement . 8)) (WHEN . (simple_statement . 8)) (EXCEPTION . 
(simple_statement . 8)) (END . (simple_statement . 8)) (LESS_LESS . 
(simple_statement . 8)) (ACCEPT . (simple_statement . 8)) (ABORT . 
(simple_statement . 8)) (BEGIN . (simple_statement . 8)) (CASE . 
(simple_statement . 8)) (DECLARE . (simple_statement . 8)) (DELAY . 
(simple_statement . 8)) (EXIT . (simple_statement . 8)) (FOR . 
(simple_statement . 8)) (GOTO [...]
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (WHEN .  982))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (WHEN .  973))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
       ((default . error) (WHEN . (delay_statement . 1)) (EXCEPTION . 
(delay_statement . 1)) (ELSIF . (delay_statement . 1)) (THEN . (delay_statement 
. 1)) (ELSE . (delay_statement . 1)) (OR . (delay_statement . 1)) (END . 
(delay_statement . 1)) (ACCEPT . (delay_statement . 1)) (ABORT . 
(delay_statement . 1)) (BEGIN . (delay_statement . 1)) (CASE . (delay_statement 
. 1)) (DECLARE . (delay_statement . 1)) (DELAY . (delay_statement . 1)) (EXIT . 
(delay_statement . 1)) (FOR . (delay_statemen [...]
-      ((default . error) (SEMICOLON .  980))
-      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  152) 
(PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  971))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (OR . (exit_statement . 1)) (THEN . (exit_statement . 
1)) (WHEN . (exit_statement . 1)) (EXCEPTION . (exit_statement . 1)) (END . 
(exit_statement . 1)) (LESS_LESS . (exit_statement . 1)) (ACCEPT . 
(exit_statement . 1)) (ABORT . (exit_statement . 1)) (BEGIN . (exit_statement . 
1)) (CASE . (exit_statement . 1)) (DECLARE . (exit_statement . 1)) (DELAY . 
(exit_statement . 1)) (EXIT . (exit_statement . 1)) (FOR . (exit_statement . 
1)) (GOTO . (exit_statement . 1)) (IF [...]
       ((default . error) (OR . (simple_statement . 3)) (THEN . 
(simple_statement . 3)) (WHEN . (simple_statement . 3)) (EXCEPTION . 
(simple_statement . 3)) (END . (simple_statement . 3)) (LESS_LESS . 
(simple_statement . 3)) (ACCEPT . (simple_statement . 3)) (ABORT . 
(simple_statement . 3)) (BEGIN . (simple_statement . 3)) (CASE . 
(simple_statement . 3)) (DECLARE . (simple_statement . 3)) (DELAY . 
(simple_statement . 3)) (EXIT . (simple_statement . 3)) (FOR . 
(simple_statement . 3)) (GOTO [...]
-      ((default . error) (ELSIF . (sequence_of_statements_opt . 0)) (ELSE . 
(sequence_of_statements_opt . 0)) (END . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO  [...]
-      ((default . error) (LOOP .  977))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (ELSIF . (sequence_of_statements_opt . 0)) (ELSE . 
(sequence_of_statements_opt . 0)) (END . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO  [...]
+      ((default . error) (LOOP .  968))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (OR . (raise_statement . 2)) (THEN . (raise_statement 
. 2)) (WHEN . (raise_statement . 2)) (EXCEPTION . (raise_statement . 2)) (END . 
(raise_statement . 2)) (LESS_LESS . (raise_statement . 2)) (ACCEPT . 
(raise_statement . 2)) (ABORT . (raise_statement . 2)) (BEGIN . 
(raise_statement . 2)) (CASE . (raise_statement . 2)) (DECLARE . 
(raise_statement . 2)) (DELAY . (raise_statement . 2)) (EXIT . (raise_statement 
. 2)) (FOR . (raise_statement . 2)) (GOTO . (raise_stat [...]
-      ((default . error) (ABORT .  975))
+      ((default . error) (ABORT .  966))
       ((default . error) (OR . (requeue_statement . 1)) (THEN . 
(requeue_statement . 1)) (WHEN . (requeue_statement . 1)) (EXCEPTION . 
(requeue_statement . 1)) (END . (requeue_statement . 1)) (LESS_LESS . 
(requeue_statement . 1)) (ACCEPT . (requeue_statement . 1)) (ABORT . 
(requeue_statement . 1)) (BEGIN . (requeue_statement . 1)) (CASE . 
(requeue_statement . 1)) (DECLARE . (requeue_statement . 1)) (DELAY . 
(requeue_statement . 1)) (EXIT . (requeue_statement . 1)) (FOR . 
(requeue_stateme [...]
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
       ((default . error) (OR . (extended_return_statement . 1)) (THEN . 
(extended_return_statement . 1)) (WHEN . (extended_return_statement . 1)) 
(EXCEPTION . (extended_return_statement . 1)) (END . (extended_return_statement 
. 1)) (LESS_LESS . (extended_return_statement . 1)) (ACCEPT . 
(extended_return_statement . 1)) (ABORT . (extended_return_statement . 1)) 
(BEGIN . (extended_return_statement . 1)) (CASE . (extended_return_statement . 
1)) (DECLARE . (extended_return_statement . 1)) (D [...]
       ((default . error) (OR . (simple_return_statement . 1)) (THEN . 
(simple_return_statement . 1)) (WHEN . (simple_return_statement . 1)) 
(EXCEPTION . (simple_return_statement . 1)) (END . (simple_return_statement . 
1)) (LESS_LESS . (simple_return_statement . 1)) (ACCEPT . 
(simple_return_statement . 1)) (ABORT . (simple_return_statement . 1)) (BEGIN . 
(simple_return_statement . 1)) (CASE . (simple_return_statement . 1)) (DECLARE 
. (simple_return_statement . 1)) (DELAY . (simple_return_ [...]
-      ((default . error) (CONSTANT . (aliased_opt . 0)) (ACCESS . (aliased_opt 
. 0)) (NOT . (aliased_opt . 0)) (IDENTIFIER . (aliased_opt . 0)) 
(STRING_LITERAL . (aliased_opt . 0)) (CHARACTER_LITERAL . (aliased_opt . 0)) 
(ALIASED .  531))
-      ((default . error) (ABORT .  972))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
-      ((default . error) (SELECT .  970))
-      ((default . error) (WHEN .  693) (TERMINATE .  692) (ACCEPT .  630) 
(DELAY .  635))
+      ((default . error) (CONSTANT . (aliased_opt . 0)) (ACCESS . (aliased_opt 
. 0)) (NOT . (aliased_opt . 0)) (IDENTIFIER . (aliased_opt . 0)) 
(STRING_LITERAL . (aliased_opt . 0)) (CHARACTER_LITERAL . (aliased_opt . 0)) 
(ALIASED .  523))
+      ((default . error) (ABORT .  963))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
+      ((default . error) (SELECT .  961))
+      ((default . error) (WHEN .  685) (TERMINATE .  684) (ACCEPT .  622) 
(DELAY .  627))
       ((default . error) (OR . (entry_call_alternative . 0)) (ELSE . 
(entry_call_alternative . 0)) (THEN . (triggering_alternative . 0)))
       ((default . error) (OR . (entry_call_alternative . 1)) (ELSE . 
(entry_call_alternative . 1)) (THEN . (triggering_alternative . 1)))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
-      ((default . error) (DELAY .  635))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
+      ((default . error) (DELAY .  627))
       ((default . error) (OR . (delay_alternative . 0)) (END . 
(delay_alternative . 0)) (ELSE . (delay_alternative . 0)) (THEN . 
(triggering_alternative . 2)))
       ((default . error) (END . (select_alternative . 1)) (OR . 
(select_alternative . 1)) (ELSE . (select_alternative . 1)))
-      ((default . error) (EQUAL_GREATER .  965))
+      ((default . error) (EQUAL_GREATER .  956))
       ((default . error) (END . (select_alternative . 5)) (OR . 
(select_alternative . 5)) (ELSE . (select_alternative . 5)))
       ((default . error) (OR . (goto_label . 0)) (THEN . (goto_label . 0)) 
(WHEN . (goto_label . 0)) (LESS_LESS . (goto_label . 0)) (END . (goto_label . 
0)) (EXCEPTION . (goto_label . 0)) (ELSE . (goto_label . 0)) (ELSIF . 
(goto_label . 0)) (CHARACTER_LITERAL . (goto_label . 0)) (STRING_LITERAL . 
(goto_label . 0)) (IDENTIFIER . (goto_label . 0)) (REQUEUE . (goto_label . 0)) 
(RAISE . (goto_label . 0)) (PRAGMA . (goto_label . 0)) (NULL . (goto_label . 
0)) (GOTO . (goto_label . 0)) (EXIT .  [...]
-      ((default . error) (SEMICOLON .  964))
-      ((default . error) (END .  963))
-      ((default . error) (SEMICOLON .  962))
-      ((default . error) (OTHERS .  957) (IDENTIFIER .  958) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (SEMICOLON .  955))
+      ((default . error) (END .  954))
+      ((default . error) (SEMICOLON .  953))
+      ((default . error) (OTHERS .  948) (IDENTIFIER .  949) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (END . (exception_handler_list . 0)) (WHEN . 
(exception_handler_list . 0)))
-      ((default . error) (END . (exception_handler_list_opt . 1)) (WHEN .  
952))
+      ((default . error) (END . (exception_handler_list_opt . 1)) (WHEN .  
943))
       ((default . error) (END . (handled_sequence_of_statements . 0)))
       ((default . error) (WHEN . (exception_handler_list . 1)) (END . 
(exception_handler_list . 1)))
       ((default . error) (BAR . (exception_choice . 1)) (EQUAL_GREATER . 
(exception_choice . 1)))
-      ((default . error) (COLON .  1184) (EQUAL_GREATER . (name . 0)) (BAR . 
(name . 0)) (LEFT_PAREN . (name . 0)) (DOT . (name . 0)) (TICK . (name . 0)))
+      ((default . error) (COLON .  1175) (EQUAL_GREATER . (name . 0)) (BAR . 
(name . 0)) (LEFT_PAREN . (name . 0)) (DOT . (name . 0)) (TICK . (name . 0)))
       ((default . error) (EQUAL_GREATER . (exception_choice_list . 0)) (BAR . 
(exception_choice_list . 0)))
-      ((default . error) (BAR .  1182) (EQUAL_GREATER .  1183))
+      ((default . error) (BAR .  1173) (EQUAL_GREATER .  1174))
       ((default . error) (DOT .  90) (BAR . (exception_choice . 0)) 
(EQUAL_GREATER . (exception_choice . 0)) (TICK .  91) (LEFT_PAREN .  107))
       ((default . error) (WHEN . (assignment_statement . 0)) (THEN . 
(assignment_statement . 0)) (OR . (assignment_statement . 0)) (ELSIF . 
(assignment_statement . 0)) (ELSE . (assignment_statement . 0)) 
(CHARACTER_LITERAL . (assignment_statement . 0)) (STRING_LITERAL . 
(assignment_statement . 0)) (IDENTIFIER . (assignment_statement . 0)) (WHILE . 
(assignment_statement . 0)) (SELECT . (assignment_statement . 0)) (RETURN . 
(assignment_statement . 0)) (REQUEUE . (assignment_statement . 0)) [...]
-      ((default . error) (LOOP .  1181))
+      ((default . error) (LOOP .  1172))
       ((default . error) (IDENTIFIER . (subprogram_body . 0)) (TYPE . 
(subprogram_body . 0)) (TASK . (subprogram_body . 0)) (SUBTYPE . 
(subprogram_body . 0)) (PROTECTED . (subprogram_body . 0)) (FOR . 
(subprogram_body . 0)) (ENTRY . (subprogram_body . 0)) (BEGIN . 
(subprogram_body . 0)) (END . (subprogram_body . 0)) ($EOI . (subprogram_body . 
0)) (FUNCTION . (subprogram_body . 0)) (GENERIC . (subprogram_body . 0)) 
(LIMITED . (subprogram_body . 0)) (NOT . (subprogram_body . 0)) (OVERRIDIN [...]
-      ((default . error) (TERMINATE .  1178) (ACCEPT .  630) (DELAY .  635))
-      ((default . error) (END .  1177))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (OR . 
(sequence_of_statements_opt . 0)) (ELSE . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO . ( [...]
-      ((default . error) (END .  1175))
+      ((default . error) (TERMINATE .  1169) (ACCEPT .  622) (DELAY .  627))
+      ((default . error) (END .  1168))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (OR . 
(sequence_of_statements_opt . 0)) (ELSE . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO . ( [...]
+      ((default . error) (END .  1166))
       ((default . error) (ELSE . (select_alternative_list . 1)) (END . 
(select_alternative_list . 1)) (OR . (select_alternative_list . 1)))
-      ((default . error) (SEMICOLON .  1174))
-      ((default . error) (END .  1173))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
-      ((default . error) (ACCESS . (constant_opt . 0)) (NOT . (constant_opt . 
0)) (IDENTIFIER . (constant_opt . 0)) (STRING_LITERAL . (constant_opt . 0)) 
(CHARACTER_LITERAL . (constant_opt . 0)) (CONSTANT .  759))
-      ((default . error) (END .  1170))
-      ((default . error) (SEMICOLON .  1169))
-      ((default . error) (SEMICOLON .  1168))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (ELSE .  1162) (END .  1164) (ELSIF .  1163))
-      ((default . error) (SEMICOLON .  1161))
+      ((default . error) (SEMICOLON .  1165))
+      ((default . error) (END .  1164))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
+      ((default . error) (ACCESS . (constant_opt . 0)) (NOT . (constant_opt . 
0)) (IDENTIFIER . (constant_opt . 0)) (STRING_LITERAL . (constant_opt . 0)) 
(CHARACTER_LITERAL . (constant_opt . 0)) (CONSTANT .  753))
+      ((default . error) (END .  1161))
+      ((default . error) (SEMICOLON .  1160))
+      ((default . error) (SEMICOLON .  1159))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (ELSE .  1153) (END .  1155) (ELSIF .  1154))
+      ((default . error) (SEMICOLON .  1152))
       ((default . error) (WHEN . (delay_statement . 0)) (ELSIF . 
(delay_statement . 0)) (EXCEPTION . (delay_statement . 0)) (CHARACTER_LITERAL . 
(delay_statement . 0)) (STRING_LITERAL . (delay_statement . 0)) (IDENTIFIER . 
(delay_statement . 0)) (LESS_LESS . (delay_statement . 0)) (WHILE . 
(delay_statement . 0)) (SELECT . (delay_statement . 0)) (RETURN . 
(delay_statement . 0)) (REQUEUE . (delay_statement . 0)) (RAISE . 
(delay_statement . 0)) (PRAGMA . (delay_statement . 0)) (NULL . (dela [...]
-      ((default . error) (END .  1160))
-      ((default . error) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  182) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) 
(ABS .  144) (NOT .  181) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
+      ((default . error) (END .  1151))
+      ((default . error) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  152) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) 
(ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
       ((default . error) (END . (case_statement_alternative_list . 0)) (WHEN . 
(case_statement_alternative_list . 0)))
-      ((default . error) (END .  1157) (WHEN .  982))
-      ((default . error) (SEMICOLON .  1156))
-      ((default . error) (DO .  1154) (SEMICOLON .  1155))
-      ((default . error) (BEGIN .  1153))
-      ((default . error) (IDENTIFIER .  1152))
+      ((default . error) (END .  1148) (WHEN .  973))
+      ((default . error) (SEMICOLON .  1147))
+      ((default . error) (DO .  1145) (SEMICOLON .  1146))
+      ((default . error) (BEGIN .  1144))
+      ((default . error) (IDENTIFIER .  1143))
       ((default . error) (PROCEDURE . (protected_operation_item . 5)) 
(OVERRIDING . (protected_operation_item . 5)) (NOT . (protected_operation_item 
. 5)) (FUNCTION . (protected_operation_item . 5)) (FOR . 
(protected_operation_item . 5)) (ENTRY . (protected_operation_item . 5)) (END . 
(protected_operation_item . 5)))
       ((default . error) (PROCEDURE . (protected_operation_item . 2)) 
(OVERRIDING . (protected_operation_item . 2)) (NOT . (protected_operation_item 
. 2)) (FUNCTION . (protected_operation_item . 2)) (FOR . 
(protected_operation_item . 2)) (ENTRY . (protected_operation_item . 2)) (END . 
(protected_operation_item . 2)))
       ((default . error) (PROCEDURE . (protected_operation_item . 3)) 
(OVERRIDING . (protected_operation_item . 3)) (NOT . (protected_operation_item 
. 3)) (FUNCTION . (protected_operation_item . 3)) (FOR . 
(protected_operation_item . 3)) (ENTRY . (protected_operation_item . 3)) (END . 
(protected_operation_item . 3)))
       ((default . error) (PROCEDURE . (protected_operation_item . 4)) 
(OVERRIDING . (protected_operation_item . 4)) (NOT . (protected_operation_item 
. 4)) (FUNCTION . (protected_operation_item . 4)) (FOR . 
(protected_operation_item . 4)) (ENTRY . (protected_operation_item . 4)) (END . 
(protected_operation_item . 4)))
       ((default . error) (FUNCTION .  1) (PROCEDURE .  9))
       ((default . error) (END . (protected_operation_item_list . 0)) (ENTRY . 
(protected_operation_item_list . 0)) (FOR . (protected_operation_item_list . 
0)) (FUNCTION . (protected_operation_item_list . 0)) (NOT . 
(protected_operation_item_list . 0)) (OVERRIDING . 
(protected_operation_item_list . 0)) (PROCEDURE . 
(protected_operation_item_list . 0)))
-      ((default . error) (END . (protected_operation_item_list_opt . 1)) 
(ENTRY .  988) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(FOR .  299))
-      ((default . error) (END .  1149))
+      ((default . error) (END . (protected_operation_item_list_opt . 1)) 
(ENTRY .  979) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(FOR .  269))
+      ((default . error) (END .  1140))
       ((default . error) (PROCEDURE . (protected_operation_item . 1)) 
(OVERRIDING . (protected_operation_item . 1)) (NOT . (protected_operation_item 
. 1)) (FUNCTION . (protected_operation_item . 1)) (FOR . 
(protected_operation_item . 1)) (ENTRY . (protected_operation_item . 1)) (END . 
(protected_operation_item . 1)))
       ((default . error) (PROCEDURE . (protected_operation_item . 0)) 
(OVERRIDING . (protected_operation_item . 0)) (NOT . (protected_operation_item 
. 0)) (FUNCTION . (protected_operation_item . 0)) (FOR . 
(protected_operation_item . 0)) (ENTRY . (protected_operation_item . 0)) (END . 
(protected_operation_item . 0)))
       ((default . error) (COMMA . (case_expression_alternative . 0)) 
(RIGHT_PAREN . (case_expression_alternative . 0)))
-      ((default . error) (DO . (subtype_indication . 1)) (LOOP . 
(subtype_indication . 1)) (COLON_EQUAL . (subtype_indication . 1)) (SEMICOLON . 
(subtype_indication . 1)) (OF . (subtype_indication . 1)) (AND . 
(subtype_indication . 1)) (WITH . (subtype_indication . 1)) (EQUAL_GREATER . 
(subtype_indication . 1)) (COMMA . (subtype_indication . 1)) (RIGHT_PAREN . 
(subtype_indication . 1)) (DOT .  90) (TICK .  91) (RANGE .  904) (LEFT_PAREN . 
 829))
+      ((default . error) (DO . (subtype_indication . 1)) (LOOP . 
(subtype_indication . 1)) (COLON_EQUAL . (subtype_indication . 1)) (SEMICOLON . 
(subtype_indication . 1)) (OF . (subtype_indication . 1)) (AND . 
(subtype_indication . 1)) (WITH . (subtype_indication . 1)) (EQUAL_GREATER . 
(subtype_indication . 1)) (COMMA . (subtype_indication . 1)) (RIGHT_PAREN . 
(subtype_indication . 1)) (DOT .  90) (TICK .  91) (RANGE .  895) (LEFT_PAREN . 
 820))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (DOT .  90) (TICK .  91) (LOOP . 
(iterator_specification . 3)) (EQUAL_GREATER . (iterator_specification . 3)) 
(LEFT_PAREN .  107))
       ((default . error) (DO . (constraint . 0)) (LOOP . (constraint . 0)) (OF 
. (constraint . 0)) (AND . (constraint . 0)) (SEMICOLON . (constraint . 0)) 
(WITH . (constraint . 0)) (COLON_EQUAL . (constraint . 0)) (EQUAL_GREATER . 
(constraint . 0)) (RIGHT_PAREN . (constraint . 0)) (COMMA . (constraint . 0)))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (COMMA . (if_expression . 0)) (RIGHT_PAREN . 
(if_expression . 0)))
-      ((default . error) (SEMICOLON .  1145))
-      ((default . error) (WITH . (parameter_profile_opt . 0)) (SEMICOLON . 
(parameter_profile_opt . 0)) (LEFT_PAREN .  810))
+      ((default . error) (ELSE . (expression_opt . 0)) (ELSIF . 
(expression_opt . 0)) (RIGHT_PAREN . (expression_opt . 0)) (RAISE .  153) (PLUS 
.  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL 
.  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN . (if_expression . 0)))
+      ((default . error) (SEMICOLON .  1136))
+      ((default . error) (WITH . (parameter_profile_opt . 0)) (SEMICOLON . 
(parameter_profile_opt . 0)) (LEFT_PAREN .  801))
       ((default . error) (IDENTIFIER . (entry_declaration . 1)) (USE . 
(entry_declaration . 1)) (TYPE . (entry_declaration . 1)) (TASK . 
(entry_declaration . 1)) (SUBTYPE . (entry_declaration . 1)) (PROTECTED . 
(entry_declaration . 1)) (PROCEDURE . (entry_declaration . 1)) (PRAGMA . 
(entry_declaration . 1)) (PACKAGE . (entry_declaration . 1)) (OVERRIDING . 
(entry_declaration . 1)) (NOT . (entry_declaration . 1)) (GENERIC . 
(entry_declaration . 1)) (FUNCTION . (entry_declaration . 1)) (FO [...]
       ((default . error) (WITH . (paren_expression . 0)) (SEMICOLON . 
(paren_expression . 0)))
       ((default . error) (WITH . (paren_expression . 1)) (SEMICOLON . 
(paren_expression . 1)))
@@ -2832,129 +2823,129 @@
       ((default . error) (IDENTIFIER . (null_procedure_declaration . 0)) (USE 
. (null_procedure_declaration . 0)) (TYPE . (null_procedure_declaration . 0)) 
(TASK . (null_procedure_declaration . 0)) (SUBTYPE . 
(null_procedure_declaration . 0)) (PROTECTED . (null_procedure_declaration . 
0)) (PROCEDURE . (null_procedure_declaration . 0)) (PRAGMA . 
(null_procedure_declaration . 0)) (PACKAGE . (null_procedure_declaration . 0)) 
(OVERRIDING . (null_procedure_declaration . 0)) (NOT . (null_proce [...]
       ((default . error) (IDENTIFIER . (abstract_subprogram_declaration . 0)) 
(USE . (abstract_subprogram_declaration . 0)) (TYPE . 
(abstract_subprogram_declaration . 0)) (TASK . (abstract_subprogram_declaration 
. 0)) (SUBTYPE . (abstract_subprogram_declaration . 0)) (PROTECTED . 
(abstract_subprogram_declaration . 0)) (PROCEDURE . 
(abstract_subprogram_declaration . 0)) (PRAGMA . 
(abstract_subprogram_declaration . 0)) (PACKAGE . 
(abstract_subprogram_declaration . 0)) (OVERRIDING . (abstra [...]
       ((default . error) (IDENTIFIER . (subprogram_body_stub . 0)) (USE . 
(subprogram_body_stub . 0)) (TYPE . (subprogram_body_stub . 0)) (TASK . 
(subprogram_body_stub . 0)) (SUBTYPE . (subprogram_body_stub . 0)) (PROTECTED . 
(subprogram_body_stub . 0)) (PROCEDURE . (subprogram_body_stub . 0)) (PRAGMA . 
(subprogram_body_stub . 0)) (PACKAGE . (subprogram_body_stub . 0)) (OVERRIDING 
. (subprogram_body_stub . 0)) (NOT . (subprogram_body_stub . 0)) (GENERIC . 
(subprogram_body_stub . 0)) (FUN [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  1142))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  1140))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  1138))
+      ((default . error) (WITH . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  1133))
+      ((default . error) (WITH . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  1131))
+      ((default . error) (WITH . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  1129))
       ((default . error) (ACCESS . (null_exclusion_opt . 1)) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (BEGIN . (declaration . 9)) (ENTRY . (declaration . 
9)) (FOR . (declaration . 9)) (FUNCTION . (declaration . 9)) (GENERIC . 
(declaration . 9)) (NOT . (declaration . 9)) (OVERRIDING . (declaration . 9)) 
(PACKAGE . (declaration . 9)) (PRAGMA . (declaration . 9)) (PROCEDURE . 
(declaration . 9)) (PROTECTED . (declaration . 9)) (SUBTYPE . (declaration . 
9)) (TASK . (declaration . 9)) (TYPE . (declaration . 9)) (USE . (declaration . 
9)) (IDENTIFIER . (declaration . 9)) [...]
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
-      ((default . error) (SEMICOLON .  1136))
-      ((default . error) (SEMICOLON .  1135))
-      ((default . error) (SEMICOLON .  1134))
+      ((default . error) (SEMICOLON .  1127))
+      ((default . error) (SEMICOLON .  1126))
+      ((default . error) (SEMICOLON .  1125))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (WITH . (record_type_definition . 0)) (SEMICOLON . 
(record_type_definition . 0)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (NOT .  731) (IDENTIFIER .  48) (CHARACTER_LITERAL .  
50) (STRING_LITERAL .  49))
+      ((default . error) (NOT .  723) (IDENTIFIER .  48) (CHARACTER_LITERAL .  
50) (STRING_LITERAL .  49))
       ((default . error) (BEGIN . (incomplete_type_declaration . 0)) (ENTRY . 
(incomplete_type_declaration . 0)) (FOR . (incomplete_type_declaration . 0)) 
(FUNCTION . (incomplete_type_declaration . 0)) (GENERIC . 
(incomplete_type_declaration . 0)) (NOT . (incomplete_type_declaration . 0)) 
(OVERRIDING . (incomplete_type_declaration . 0)) (PACKAGE . 
(incomplete_type_declaration . 0)) (PRAGMA . (incomplete_type_declaration . 0)) 
(PROCEDURE . (incomplete_type_declaration . 0)) (PROTECTED . ( [...]
-      ((default . error) (IS . (direct_name_opt . 0)) (IDENTIFIER .  1127) 
(STRING_LITERAL .  1128))
-      ((default . error) (SEMICOLON .  1126))
+      ((default . error) (IS . (direct_name_opt . 0)) (IDENTIFIER .  1118) 
(STRING_LITERAL .  1119))
+      ((default . error) (SEMICOLON .  1117))
       ((default . error) (WHEN . (component_item . 1)) (END . (component_item 
. 1)) (IDENTIFIER . (component_item . 1)) (FOR . (component_item . 1)) (CASE . 
(component_item . 1)))
       ((default . error) (WHEN . (component_item . 0)) (END . (component_item 
. 0)) (IDENTIFIER . (component_item . 0)) (FOR . (component_item . 0)) (CASE . 
(component_item . 0)))
       ((default . error) (WHEN . (component_list . 0)) (END . (component_list 
. 0)) (CASE . (component_list . 0)) (FOR . (component_list . 0)) (IDENTIFIER . 
(component_list . 0)))
-      ((default . error) (WHEN . (component_list_opt . 1)) (END . 
(component_list_opt . 1)) (CASE .  1032) (IDENTIFIER .  77) (FOR .  299))
-      ((default . error) (END .  1123))
-      ((default . error) (COMMA .  96) (COLON .  1122))
+      ((default . error) (WHEN . (component_list_opt . 1)) (END . 
(component_list_opt . 1)) (CASE .  1023) (IDENTIFIER .  77) (FOR .  269))
+      ((default . error) (END .  1114))
+      ((default . error) (COMMA .  96) (COLON .  1113))
       ((default . error) (WHEN . (component_list . 3)) (END . (component_list 
. 3)) (CASE . (component_list . 3)) (FOR . (component_list . 3)) (IDENTIFIER . 
(component_list . 3)))
-      ((default . error) (DOT_DOT .  1121))
+      ((default . error) (DOT_DOT .  1112))
       ((default . error) (SEMICOLON . (record_definition . 1)) (WITH . 
(record_definition . 1)))
       ((default . error) (SEMICOLON . (type_definition . 2)) (WITH . 
(type_definition . 2)))
       ((default . error) (COMMA . (enumeration_literal . 0)) (RIGHT_PAREN . 
(enumeration_literal . 0)))
       ((default . error) (COMMA . (enumeration_literal . 1)) (RIGHT_PAREN . 
(enumeration_literal . 1)))
       ((default . error) (RIGHT_PAREN . (enumeration_literal_list . 0)) (COMMA 
. (enumeration_literal_list . 0)))
-      ((default . error) (COMMA .  1120) (RIGHT_PAREN .  1119))
-      ((default . error) (WITH . (real_range_specification_opt . 0)) 
(SEMICOLON . (real_range_specification_opt . 0)) (RANGE .  1116))
-      ((default . error) (DIGITS .  1115) (WITH . 
(real_range_specification_opt . 0)) (SEMICOLON . (real_range_specification_opt 
. 0)) (RANGE .  1116))
+      ((default . error) (COMMA .  1111) (RIGHT_PAREN .  1110))
+      ((default . error) (WITH . (real_range_specification_opt . 0)) 
(SEMICOLON . (real_range_specification_opt . 0)) (RANGE .  1107))
+      ((default . error) (DIGITS .  1106) (WITH . 
(real_range_specification_opt . 0)) (SEMICOLON . (real_range_specification_opt 
. 0)) (RANGE .  1107))
       ((default . error) (NEW . ((abstract_limited_synchronized_opt . 1) 
(abstract_limited_opt . 1))))
-      ((default . error) (SEMICOLON .  1114))
-      ((default . error) (NEW .  1112) (END . (declarative_part_opt . 0)) 
(PRIVATE . (declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  
7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt 
. 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED 
.  301) (TASK .  303) (PACKAGE .  300))
+      ((default . error) (SEMICOLON .  1105))
+      ((default . error) (NEW .  1103) (END . (declarative_part_opt . 0)) 
(PRIVATE . (declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  
7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt 
. 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED 
.  271) (TASK .  273) (PACKAGE .  270))
       ((default . error) (IDENTIFIER . (task_type_declaration . 2)) (USE . 
(task_type_declaration . 2)) (TYPE . (task_type_declaration . 2)) (TASK . 
(task_type_declaration . 2)) (SUBTYPE . (task_type_declaration . 2)) (PROTECTED 
. (task_type_declaration . 2)) (PROCEDURE . (task_type_declaration . 2)) 
(PRAGMA . (task_type_declaration . 2)) (PACKAGE . (task_type_declaration . 2)) 
(OVERRIDING . (task_type_declaration . 2)) (NOT . (task_type_declaration . 2)) 
(GENERIC . (task_type_declaratio [...]
       ((default . error) (BEGIN . (single_task_declaration . 1)) (ENTRY . 
(single_task_declaration . 1)) (FOR . (single_task_declaration . 1)) (FUNCTION 
. (single_task_declaration . 1)) (GENERIC . (single_task_declaration . 1)) (NOT 
. (single_task_declaration . 1)) (OVERRIDING . (single_task_declaration . 1)) 
(PACKAGE . (single_task_declaration . 1)) (PRAGMA . (single_task_declaration . 
1)) (PROCEDURE . (single_task_declaration . 1)) (PROTECTED . 
(single_task_declaration . 1)) (SUBTYPE . [...]
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (END . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  302) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE 
.  304) (GENERIC .  2) (PROTECTED .  301) (TASK .  303) (PACKAGE .  300))
-      ((default . error) (AND .  1080) (WITH .  1109))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (END . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  272) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE 
.  274) (GENERIC .  2) (PROTECTED .  271) (TASK .  273) (PACKAGE .  270))
+      ((default . error) (AND .  1071) (WITH .  1100))
       ((default . error) (IDENTIFIER . (subtype_declaration . 0)) (USE . 
(subtype_declaration . 0)) (TYPE . (subtype_declaration . 0)) (TASK . 
(subtype_declaration . 0)) (SUBTYPE . (subtype_declaration . 0)) (PROTECTED . 
(subtype_declaration . 0)) (PROCEDURE . (subtype_declaration . 0)) (PRAGMA . 
(subtype_declaration . 0)) (PACKAGE . (subtype_declaration . 0)) (OVERRIDING . 
(subtype_declaration . 0)) (NOT . (subtype_declaration . 0)) (GENERIC . 
(subtype_declaration . 0)) (FUNCTION . (sub [...]
-      ((default . error) (SEMICOLON .  1108))
-      ((default . error) (NEW .  1106) (END . (declarative_part_opt . 0)) 
(PRIVATE . (declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  
7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt 
. 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED 
.  301) (TASK .  303) (PACKAGE .  300))
+      ((default . error) (SEMICOLON .  1099))
+      ((default . error) (NEW .  1097) (END . (declarative_part_opt . 0)) 
(PRIVATE . (declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  
7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt 
. 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED 
.  271) (TASK .  273) (PACKAGE .  270))
       ((default . error) (BEGIN . (single_protected_declaration . 1)) (ENTRY . 
(single_protected_declaration . 1)) (FOR . (single_protected_declaration . 1)) 
(FUNCTION . (single_protected_declaration . 1)) (GENERIC . 
(single_protected_declaration . 1)) (NOT . (single_protected_declaration . 1)) 
(OVERRIDING . (single_protected_declaration . 1)) (PACKAGE . 
(single_protected_declaration . 1)) (PRAGMA . (single_protected_declaration . 
1)) (PROCEDURE . (single_protected_declaration . 1)) (PRO [...]
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (END . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  302) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE 
.  304) (GENERIC .  2) (PROTECTED .  301) (TASK .  303) (PACKAGE .  300))
-      ((default . error) (AND .  1080) (WITH .  1103))
-      ((default . error) (SEMICOLON .  1102))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (END . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  272) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE 
.  274) (GENERIC .  2) (PROTECTED .  271) (TASK .  273) (PACKAGE .  270))
+      ((default . error) (AND .  1071) (WITH .  1094))
+      ((default . error) (SEMICOLON .  1093))
       ((default . error) (WHEN . (at_clause . 0)) (BEGIN . (at_clause . 0)) 
(ENTRY . (at_clause . 0)) (FOR . (at_clause . 0)) (FUNCTION . (at_clause . 0)) 
(GENERIC . (at_clause . 0)) (NOT . (at_clause . 0)) (OVERRIDING . (at_clause . 
0)) (PACKAGE . (at_clause . 0)) (PRAGMA . (at_clause . 0)) (PROCEDURE . 
(at_clause . 0)) (PROTECTED . (at_clause . 0)) (SUBTYPE . (at_clause . 0)) 
(TASK . (at_clause . 0)) (TYPE . (at_clause . 0)) (USE . (at_clause . 0)) 
(IDENTIFIER . (at_clause . 0)) (CASE  [...]
-      ((default . error) (AT .  1101))
+      ((default . error) (AT .  1092))
       ((default . error) (END . (component_clause_list . 0)) (IDENTIFIER . 
(component_clause_list . 0)))
-      ((default . error) (END .  1099) (IDENTIFIER .  1067))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (END .  1090) (IDENTIFIER .  1058))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (RIGHT_PAREN . (discrete_subtype_definition_list . 
1)) (COMMA . (discrete_subtype_definition_list . 1)))
-      ((default . error) (ALIASED .  1092) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt 
. 0)) (NOT .  885))
+      ((default . error) (ALIASED .  1083) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt 
. 0)) (NOT .  875))
       ((default . error) (RIGHT_PAREN . (index_subtype_definition_list . 1)) 
(COMMA . (index_subtype_definition_list . 1)))
-      ((default . error) (DOT .  90) (RANGE .  1096) (TICK .  91) (LEFT_PAREN 
.  107))
-      ((default . error) (ALIASED .  1092) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt 
. 0)) (NOT .  885))
+      ((default . error) (DOT .  90) (RANGE .  1087) (TICK .  91) (LEFT_PAREN 
.  107))
+      ((default . error) (ALIASED .  1083) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt 
. 0)) (NOT .  875))
       ((default . error) (COMMA . (index_subtype_definition . 0)) (RIGHT_PAREN 
. (index_subtype_definition . 0)))
-      ((default . error) (NUMERIC_LITERAL .  155) (NULL .  1091) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (COMMA .  836) (RIGHT_PAREN .  1090))
+      ((default . error) (NUMERIC_LITERAL .  156) (NULL .  1082) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (COMMA .  827) (RIGHT_PAREN .  1081))
       ((default . error) (BAR . (discrete_choice . 2)) (EQUAL_GREATER . 
(discrete_choice . 2)) (RIGHT_PAREN . ((range_list . 0) 
(discrete_subtype_definition . 1))) (COMMA . ((range_list . 0) 
(discrete_subtype_definition . 1))))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (PRIVATE .  1088))
-      ((default . error) (AND .  1080) (WITH . (and_interface_list_opt . 1)) 
(SEMICOLON . (and_interface_list_opt . 1)))
+      ((default . error) (PRIVATE .  1079))
+      ((default . error) (AND .  1071) (WITH . (and_interface_list_opt . 1)) 
(SEMICOLON . (and_interface_list_opt . 1)))
       ((default . error) (WITH . (formal_package_actual_part . 0)) (SEMICOLON 
. (formal_package_actual_part . 0)))
       ((default . error) (PACKAGE . (formal_package_declaration . 0)) 
(PROCEDURE . (formal_package_declaration . 0)) (FUNCTION . 
(formal_package_declaration . 0)) (PRAGMA . (formal_package_declaration . 0)) 
(TYPE . (formal_package_declaration . 0)) (USE . (formal_package_declaration . 
0)) (WITH . (formal_package_declaration . 0)) (IDENTIFIER . 
(formal_package_declaration . 0)))
       ((default . error) (PACKAGE . (formal_object_declaration . 0)) 
(PROCEDURE . (formal_object_declaration . 0)) (FUNCTION . 
(formal_object_declaration . 0)) (PRAGMA . (formal_object_declaration . 0)) 
(TYPE . (formal_object_declaration . 0)) (USE . (formal_object_declaration . 
0)) (WITH . (formal_object_declaration . 0)) (IDENTIFIER . 
(formal_object_declaration . 0)))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RIGHT_PAREN . (parameter_specification . 0)) 
(SEMICOLON . (parameter_specification . 0)))
+      ((default . error) (RIGHT_PAREN . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN . (parameter_specification . 1)) 
(SEMICOLON . (parameter_specification . 1)))
       ((default . error) (WITH . (formal_derived_type_definition . 0)) 
(SEMICOLON . (formal_derived_type_definition . 0)))
       ((default . error) (DOT .  90) (TICK .  91) (WITH . (interface_list . 
1)) (SEMICOLON . (interface_list . 1)) (AND . (interface_list . 1)) (LEFT_PAREN 
.  107))
       ((default . error) (LOOP . (index_constraint . 0)) (DO . 
(index_constraint . 0)) (RIGHT_PAREN . (index_constraint . 0)) (COMMA . 
(index_constraint . 0)) (EQUAL_GREATER . (index_constraint . 0)) (COLON_EQUAL . 
(index_constraint . 0)) (WITH . (index_constraint . 0)) (SEMICOLON . 
(index_constraint . 0)) (AND . (index_constraint . 0)) (OF . (index_constraint 
. 0)))
       ((default . error) (PLUS . (primary . 1)) (MINUS . (primary . 1)) 
(AMPERSAND . (primary . 1)) (DOT_DOT . (primary . 1)) (MOD . (primary . 1)) 
(REM . (primary . 1)) (SLASH . (primary . 1)) (STAR . (primary . 1)) (XOR . 
(primary . 1)) (OR . (primary . 1)) (AND . (primary . 1)) (EQUAL_GREATER . 
(primary . 1)) (BAR . (primary . 1)) (IN . (primary . 1)) (NOT . (primary . 1)) 
(EQUAL . (primary . 1)) (GREATER . (primary . 1)) (GREATER_EQUAL . (primary . 
1)) (LESS . (primary . 1)) (LESS_EQ [...]
-      ((default . error) (ACCESS . (null_exclusion_opt . 0)) (NOT .  885) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (ACCESS . (null_exclusion_opt . 0)) (NOT .  875) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (WITH . (component_definition . 3)) (SEMICOLON . 
(component_definition . 3)) (COLON_EQUAL . (component_definition . 3)))
       ((default . error) (WITH . (array_type_definition . 0)) (SEMICOLON . 
(array_type_definition . 0)) (COLON_EQUAL . (array_type_definition . 0)))
       ((default . error) (WITH . (component_definition . 1)) (SEMICOLON . 
(component_definition . 1)) (COLON_EQUAL . (component_definition . 1)))
-      ((default . error) (BOX .  1076))
+      ((default . error) (BOX .  1067))
       ((default . error) (WITH . (array_type_definition . 1)) (SEMICOLON . 
(array_type_definition . 1)) (COLON_EQUAL . (array_type_definition . 1)))
-      ((default . error) (SEMICOLON .  1242))
-      ((default . error) (RECORD .  1241))
+      ((default . error) (SEMICOLON .  1233))
+      ((default . error) (RECORD .  1232))
       ((default . error) (IDENTIFIER . (component_clause_list . 1)) (END . 
(component_clause_list . 1)))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (PRIVATE . (package_body_stub . 0)) (END . 
(package_body_stub . 0)) (BEGIN . (package_body_stub . 0)) (ENTRY . 
(package_body_stub . 0)) (FOR . (package_body_stub . 0)) (FUNCTION . 
(package_body_stub . 0)) (GENERIC . (package_body_stub . 0)) (NOT . 
(package_body_stub . 0)) (OVERRIDING . (package_body_stub . 0)) (PACKAGE . 
(package_body_stub . 0)) (PRAGMA . (package_body_stub . 0)) (PROCEDURE . 
(package_body_stub . 0)) (PROTECTED . (package_body_stub . 0)) (SUBTYPE [...]
-      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED .  301) (TASK 
.  303) (PACKAGE .  300))
-      ((default . error) (END .  1238))
+      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED .  271) (TASK 
.  273) (PACKAGE .  270))
+      ((default . error) (END .  1229))
       ((default . error) (SEMICOLON . (protected_definition . 1)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (SEMICOLON .  1236))
+      ((default . error) (SEMICOLON .  1227))
       ((default . error) (PRIVATE . (protected_body_stub . 0)) (END . 
(protected_body_stub . 0)) (BEGIN . (protected_body_stub . 0)) (ENTRY . 
(protected_body_stub . 0)) (FOR . (protected_body_stub . 0)) (FUNCTION . 
(protected_body_stub . 0)) (GENERIC . (protected_body_stub . 0)) (NOT . 
(protected_body_stub . 0)) (OVERRIDING . (protected_body_stub . 0)) (PACKAGE . 
(protected_body_stub . 0)) (PRAGMA . (protected_body_stub . 0)) (PROCEDURE . 
(protected_body_stub . 0)) (PROTECTED . (protecte [...]
-      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED .  301) (TASK 
.  303) (PACKAGE .  300))
-      ((default . error) (END .  1234))
+      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED .  271) (TASK 
.  273) (PACKAGE .  270))
+      ((default . error) (END .  1225))
       ((default . error) (SEMICOLON . (task_definition . 1)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (SEMICOLON .  1232))
+      ((default . error) (SEMICOLON .  1223))
       ((default . error) (PRIVATE . (task_body_stub . 0)) (END . 
(task_body_stub . 0)) (BEGIN . (task_body_stub . 0)) (ENTRY . (task_body_stub . 
0)) (FOR . (task_body_stub . 0)) (FUNCTION . (task_body_stub . 0)) (GENERIC . 
(task_body_stub . 0)) (NOT . (task_body_stub . 0)) (OVERRIDING . 
(task_body_stub . 0)) (PACKAGE . (task_body_stub . 0)) (PRAGMA . 
(task_body_stub . 0)) (PROCEDURE . (task_body_stub . 0)) (PROTECTED . 
(task_body_stub . 0)) (SUBTYPE . (task_body_stub . 0)) (TASK . (task_ [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RANGE . (expression_opt . 0)) (WITH . 
(expression_opt . 0)) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) (PLUS . 
 155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL . 
 151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (WITH . (type_definition . 4)) (SEMICOLON . 
(type_definition . 4)))
       ((default . error) (WITH . (type_definition . 3)) (SEMICOLON . 
(type_definition . 3)))
       ((default . error) (SEMICOLON . (enumeration_type_definition . 0)) (WITH 
. (enumeration_type_definition . 0)))
-      ((default . error) (IDENTIFIER .  1044) (CHARACTER_LITERAL .  1045))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (ALIASED .  1092) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt 
. 0)) (NOT .  885))
-      ((default . error) (RECORD .  1226))
+      ((default . error) (IDENTIFIER .  1035) (CHARACTER_LITERAL .  1036))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (ALIASED .  1083) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt 
. 0)) (NOT .  875))
+      ((default . error) (RECORD .  1217))
       ((default . error) (WHEN . (component_list . 1)) (IDENTIFIER . 
(component_list . 1)) (FOR . (component_list . 1)) (CASE . (component_list . 
1)) (END . (component_list . 1)))
       ((default . error) (WHEN . (component_list . 2)) (IDENTIFIER . 
(component_list . 2)) (FOR . (component_list . 2)) (CASE . (component_list . 
2)) (END . (component_list . 2)))
       ((default . error) (WHEN . (component_list . 4)) (IDENTIFIER . 
(component_list . 4)) (FOR . (component_list . 4)) (CASE . (component_list . 
4)) (END . (component_list . 4)))
       ((default . error) (IS . (direct_name . 0)))
       ((default . error) (IS . (direct_name . 1)))
       ((default . error) (IS . (direct_name_opt . 1)))
-      ((default . error) (IS .  1225))
-      ((default . error) (WITH . (and_interface_list_opt . 0)) (AND .  821))
-      ((default . error) (DOT .  90) (TICK .  91) (AND .  821) (WITH . 
((constraint_opt . 0) (and_interface_list_opt . 0))) (SEMICOLON . 
(constraint_opt . 0)) (RANGE .  904) (LEFT_PAREN .  829))
-      ((default . error) (SEMICOLON .  1220))
+      ((default . error) (IS .  1216))
+      ((default . error) (WITH . (and_interface_list_opt . 0)) (AND .  812))
+      ((default . error) (DOT .  90) (TICK .  91) (AND .  812) (WITH . 
((constraint_opt . 0) (and_interface_list_opt . 0))) (SEMICOLON . 
(constraint_opt . 0)) (RANGE .  895) (LEFT_PAREN .  820))
+      ((default . error) (SEMICOLON .  1211))
       ((default . error) (END . (full_type_declaration . 0)) (PRIVATE . 
(full_type_declaration . 0)) (IDENTIFIER . (full_type_declaration . 0)) (USE . 
(full_type_declaration . 0)) (TYPE . (full_type_declaration . 0)) (TASK . 
(full_type_declaration . 0)) (SUBTYPE . (full_type_declaration . 0)) (PROTECTED 
. (full_type_declaration . 0)) (PROCEDURE . (full_type_declaration . 0)) 
(PRAGMA . (full_type_declaration . 0)) (PACKAGE . (full_type_declaration . 0)) 
(OVERRIDING . (full_type_declaratio [...]
       ((default . error) (END . (object_renaming_declaration . 2)) (PRIVATE . 
(object_renaming_declaration . 2)) (IDENTIFIER . (object_renaming_declaration . 
2)) (USE . (object_renaming_declaration . 2)) (TYPE . 
(object_renaming_declaration . 2)) (TASK . (object_renaming_declaration . 2)) 
(SUBTYPE . (object_renaming_declaration . 2)) (PROTECTED . 
(object_renaming_declaration . 2)) (PROCEDURE . (object_renaming_declaration . 
2)) (PRAGMA . (object_renaming_declaration . 2)) (PACKAGE . (obj [...]
       ((default . error) (END . (object_renaming_declaration . 1)) (PRIVATE . 
(object_renaming_declaration . 1)) (IDENTIFIER . (object_renaming_declaration . 
1)) (USE . (object_renaming_declaration . 1)) (TYPE . 
(object_renaming_declaration . 1)) (TASK . (object_renaming_declaration . 1)) 
(SUBTYPE . (object_renaming_declaration . 1)) (PROTECTED . 
(object_renaming_declaration . 1)) (PROCEDURE . (object_renaming_declaration . 
1)) (PRAGMA . (object_renaming_declaration . 1)) (PACKAGE . (obj [...]
-      ((default . error) (SEMICOLON .  1219))
+      ((default . error) (SEMICOLON .  1210))
       ((default . error) (PRIVATE . (object_declaration . 3)) (END . 
(object_declaration . 3)) (BEGIN . (object_declaration . 3)) (ENTRY . 
(object_declaration . 3)) (FOR . (object_declaration . 3)) (FUNCTION . 
(object_declaration . 3)) (GENERIC . (object_declaration . 3)) (NOT . 
(object_declaration . 3)) (OVERRIDING . (object_declaration . 3)) (PACKAGE . 
(object_declaration . 3)) (PRAGMA . (object_declaration . 3)) (PROCEDURE . 
(object_declaration . 3)) (PROTECTED . (object_declaration . [...]
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (PRIVATE . (object_declaration . 5)) (END . 
(object_declaration . 5)) (BEGIN . (object_declaration . 5)) (ENTRY . 
(object_declaration . 5)) (FOR . (object_declaration . 5)) (FUNCTION . 
(object_declaration . 5)) (GENERIC . (object_declaration . 5)) (NOT . 
(object_declaration . 5)) (OVERRIDING . (object_declaration . 5)) (PACKAGE . 
(object_declaration . 5)) (PRAGMA . (object_declaration . 5)) (PROCEDURE . 
(object_declaration . 5)) (PROTECTED . (object_declaration . [...]
@@ -2963,197 +2954,197 @@
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (END . (package_body . 0)) (BEGIN . (package_body . 
0)) (ENTRY . (package_body . 0)) (FOR . (package_body . 0)) (PROTECTED . 
(package_body . 0)) (SUBTYPE . (package_body . 0)) (TASK . (package_body . 0)) 
(TYPE . (package_body . 0)) (IDENTIFIER . (package_body . 0)) (WITH . 
(package_body . 0)) (USE . (package_body . 0)) (SEPARATE . (package_body . 0)) 
(PROCEDURE . (package_body . 0)) (PRIVATE . (package_body . 0)) (PRAGMA . 
(package_body . 0)) (PACKAGE . (package_ [...]
-      ((default . error) (ELSE . (elsif_expression_item . 0)) (ELSIF . 
(elsif_expression_item . 0)) (RIGHT_PAREN . (elsif_expression_item . 0)) (COMMA 
. (elsif_expression_item . 0)))
+      ((default . error) (ELSE . (elsif_expression_item . 0)) (ELSIF . 
(elsif_expression_item . 0)) (RIGHT_PAREN . (elsif_expression_item . 0)))
       ((default . error) (DOT .  90) (TICK .  91) (LOOP . 
(iterator_specification . 2)) (EQUAL_GREATER . (iterator_specification . 2)) 
(LEFT_PAREN .  107))
       ((default . error) (DO . (subtype_indication . 0)) (COLON_EQUAL . 
(subtype_indication . 0)) (LOOP . (subtype_indication . 0)) (RIGHT_PAREN . 
(subtype_indication . 0)) (COMMA . (subtype_indication . 0)) (EQUAL_GREATER . 
(subtype_indication . 0)) (WITH . (subtype_indication . 0)) (AND . 
(subtype_indication . 0)) (OF . (subtype_indication . 0)) (SEMICOLON . 
(subtype_indication . 0)))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
       ((default . error) (PROCEDURE . (protected_operation_item_list . 1)) 
(OVERRIDING . (protected_operation_item_list . 1)) (NOT . 
(protected_operation_item_list . 1)) (FUNCTION . (protected_operation_item_list 
. 1)) (FOR . (protected_operation_item_list . 1)) (ENTRY . 
(protected_operation_item_list . 1)) (END . (protected_operation_item_list . 
1)))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (IS . 
(aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (WHEN . (parameter_profile_opt . 0)) (LEFT_PAREN .  
1211))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
+      ((default . error) (WHEN . (parameter_profile_opt . 0)) (LEFT_PAREN .  
1202))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
       ((default . error) (THEN . (accept_statement . 1)) (WHEN . 
(accept_statement . 1)) (EXCEPTION . (accept_statement . 1)) (ELSIF . 
(accept_statement . 1)) (ELSE . (accept_statement . 1)) (OR . (accept_statement 
. 1)) (END . (accept_statement . 1)) (ACCEPT . (accept_statement . 1)) (ABORT . 
(accept_statement . 1)) (BEGIN . (accept_statement . 1)) (CASE . 
(accept_statement . 1)) (DECLARE . (accept_statement . 1)) (DELAY . 
(accept_statement . 1)) (EXIT . (accept_statement . 1)) (FOR . ( [...]
       ((default . error) (OR . (block_statement . 1)) (THEN . (block_statement 
. 1)) (WHEN . (block_statement . 1)) (EXCEPTION . (block_statement . 1)) (END . 
(block_statement . 1)) (LESS_LESS . (block_statement . 1)) (ACCEPT . 
(block_statement . 1)) (ABORT . (block_statement . 1)) (BEGIN . 
(block_statement . 1)) (CASE . (block_statement . 1)) (DECLARE . 
(block_statement . 1)) (DELAY . (block_statement . 1)) (EXIT . (block_statement 
. 1)) (FOR . (block_statement . 1)) (GOTO . (block_stat [...]
-      ((default . error) (CASE .  1208))
+      ((default . error) (CASE .  1199))
       ((default . error) (WHEN . (case_statement_alternative_list . 1)) (END . 
(case_statement_alternative_list . 1)))
-      ((default . error) (BAR .  286) (EQUAL_GREATER .  1207))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
+      ((default . error) (BAR .  356) (EQUAL_GREATER .  1198))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
       ((default . error) (OR . (exit_statement . 0)) (THEN . (exit_statement . 
0)) (WHEN . (exit_statement . 0)) (EXCEPTION . (exit_statement . 0)) (END . 
(exit_statement . 0)) (LESS_LESS . (exit_statement . 0)) (ACCEPT . 
(exit_statement . 0)) (ABORT . (exit_statement . 0)) (BEGIN . (exit_statement . 
0)) (CASE . (exit_statement . 0)) (DECLARE . (exit_statement . 0)) (DELAY . 
(exit_statement . 0)) (EXIT . (exit_statement . 0)) (FOR . (exit_statement . 
0)) (GOTO . (exit_statement . 0)) (IF [...]
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
-      ((default . error) (THEN . (expression_opt . 0)) (RAISE .  152) (PLUS .  
154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
-      ((default . error) (IF .  1203))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
+      ((default . error) (THEN . (expression_opt . 0)) (RAISE .  153) (PLUS .  
155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (IF .  1194))
       ((default . error) (END . (elsif_statement_list . 0)) (ELSE . 
(elsif_statement_list . 0)) (ELSIF . (elsif_statement_list . 0)))
-      ((default . error) (END .  1201) (ELSE .  1200) (ELSIF .  1163))
-      ((default . error) (SEMICOLON .  1199))
+      ((default . error) (END .  1192) (ELSE .  1191) (ELSIF .  1154))
+      ((default . error) (SEMICOLON .  1190))
       ((default . error) (OR . (raise_statement . 1)) (THEN . (raise_statement 
. 1)) (WHEN . (raise_statement . 1)) (EXCEPTION . (raise_statement . 1)) (END . 
(raise_statement . 1)) (LESS_LESS . (raise_statement . 1)) (ACCEPT . 
(raise_statement . 1)) (ABORT . (raise_statement . 1)) (BEGIN . 
(raise_statement . 1)) (CASE . (raise_statement . 1)) (DECLARE . 
(raise_statement . 1)) (DELAY . (raise_statement . 1)) (EXIT . (raise_statement 
. 1)) (FOR . (raise_statement . 1)) (GOTO . (raise_stat [...]
       ((default . error) (OR . (requeue_statement . 0)) (THEN . 
(requeue_statement . 0)) (WHEN . (requeue_statement . 0)) (EXCEPTION . 
(requeue_statement . 0)) (END . (requeue_statement . 0)) (LESS_LESS . 
(requeue_statement . 0)) (ACCEPT . (requeue_statement . 0)) (ABORT . 
(requeue_statement . 0)) (BEGIN . (requeue_statement . 0)) (CASE . 
(requeue_statement . 0)) (DECLARE . (requeue_statement . 0)) (DELAY . 
(requeue_statement . 0)) (EXIT . (requeue_statement . 0)) (FOR . 
(requeue_stateme [...]
-      ((default . error) (RETURN .  1198))
-      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt . 0)) (NOT .  885))
-      ((default . error) (END .  1194))
-      ((default . error) (SELECT .  1193))
+      ((default . error) (RETURN .  1189))
+      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt . 0)) (NOT .  875))
+      ((default . error) (END .  1185))
+      ((default . error) (SELECT .  1184))
       ((default . error) (OR . (selective_accept . 1)) (THEN . 
(selective_accept . 1)) (WHEN . (selective_accept . 1)) (EXCEPTION . 
(selective_accept . 1)) (END . (selective_accept . 1)) (LESS_LESS . 
(selective_accept . 1)) (ACCEPT . (selective_accept . 1)) (ABORT . 
(selective_accept . 1)) (BEGIN . (selective_accept . 1)) (CASE . 
(selective_accept . 1)) (DECLARE . (selective_accept . 1)) (DELAY . 
(selective_accept . 1)) (EXIT . (selective_accept . 1)) (FOR . 
(selective_accept . 1)) (GOTO [...]
-      ((default . error) (SELECT .  1192))
+      ((default . error) (SELECT .  1183))
       ((default . error) (END . (delay_alternative . 0)) (OR . 
(delay_alternative . 0)) (ELSE . (delay_alternative . 0)))
-      ((default . error) (SELECT .  1191))
-      ((default . error) (SEMICOLON .  1190))
-      ((default . error) (ELSE . (sequence_of_statements_opt . 0)) (OR . 
(sequence_of_statements_opt . 0)) (END . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO . ( [...]
+      ((default . error) (SELECT .  1182))
+      ((default . error) (SEMICOLON .  1181))
+      ((default . error) (ELSE . (sequence_of_statements_opt . 0)) (OR . 
(sequence_of_statements_opt . 0)) (END . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO . ( [...]
       ((default . error) (END . (select_alternative . 2)) (OR . 
(select_alternative . 2)) (ELSE . (select_alternative . 2)))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (OTHERS .  957) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49))
-      ((default . error) (WHEN . (sequence_of_statements_opt . 0)) (END . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt . 0)) [...]
-      ((default . error) (OTHERS .  957) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49))
-      ((default . error) (BAR .  1182) (EQUAL_GREATER .  1286))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (OTHERS .  948) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49))
+      ((default . error) (WHEN . (sequence_of_statements_opt . 0)) (END . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt . 0)) [...]
+      ((default . error) (OTHERS .  948) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49))
+      ((default . error) (BAR .  1173) (EQUAL_GREATER .  1277))
       ((default . error) (WHEN . (exception_handler . 1)) (END . 
(exception_handler . 1)))
       ((default . error) (EQUAL_GREATER . (exception_choice_list . 1)) (BAR . 
(exception_choice_list . 1)))
-      ((default . error) (SEMICOLON .  1285))
+      ((default . error) (SEMICOLON .  1276))
       ((default . error) (ELSE . (select_alternative . 0)) (OR . 
(select_alternative . 0)) (END . (select_alternative . 0)))
       ((default . error) (ELSE . (select_alternative . 4)) (OR . 
(select_alternative . 4)) (END . (select_alternative . 4)))
-      ((default . error) (SEMICOLON .  1284))
-      ((default . error) (SEMICOLON .  1283))
-      ((default . error) (SEMICOLON .  1282))
-      ((default . error) (SELECT .  1281))
+      ((default . error) (SEMICOLON .  1275))
+      ((default . error) (SEMICOLON .  1274))
+      ((default . error) (SEMICOLON .  1273))
+      ((default . error) (SELECT .  1272))
       ((default . error) (DO . (return_subtype_indication . 1)) (SEMICOLON . 
(return_subtype_indication . 1)) (COLON_EQUAL . (return_subtype_indication . 
1)))
-      ((default . error) (DO . (extended_return_object_declaration . 1)) 
(SEMICOLON . (extended_return_object_declaration . 1)) (COLON_EQUAL .  1280))
+      ((default . error) (DO . (extended_return_object_declaration . 1)) 
(SEMICOLON . (extended_return_object_declaration . 1)) (COLON_EQUAL .  1271))
       ((default . error) (DO . (return_subtype_indication . 0)) (SEMICOLON . 
(return_subtype_indication . 0)) (COLON_EQUAL . (return_subtype_indication . 
0)))
-      ((default . error) (SEMICOLON .  1279))
+      ((default . error) (SEMICOLON .  1270))
       ((default . error) (WHEN . (loop_statement . 1)) (THEN . (loop_statement 
. 1)) (OR . (loop_statement . 1)) (ELSIF . (loop_statement . 1)) (ELSE . 
(loop_statement . 1)) (CHARACTER_LITERAL . (loop_statement . 1)) 
(STRING_LITERAL . (loop_statement . 1)) (IDENTIFIER . (loop_statement . 1)) 
(WHILE . (loop_statement . 1)) (SELECT . (loop_statement . 1)) (RETURN . 
(loop_statement . 1)) (REQUEUE . (loop_statement . 1)) (RAISE . (loop_statement 
. 1)) (PRAGMA . (loop_statement . 1)) (NULL .  [...]
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
-      ((default . error) (IF .  1277))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
+      ((default . error) (IF .  1268))
       ((default . error) (ELSIF . (elsif_statement_list . 1)) (ELSE . 
(elsif_statement_list . 1)) (END . (elsif_statement_list . 1)))
-      ((default . error) (SEMICOLON .  1276))
-      ((default . error) (THEN .  1275))
-      ((default . error) (END .  1274))
-      ((default . error) (SEMICOLON .  1273))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (WHEN . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt . 0)) [...]
-      ((default . error) (SEMICOLON .  1271))
-      ((default . error) (END .  1270))
-      ((default . error) (END .  1269))
-      ((default . error) (FOR .  1268) (IDENTIFIER .  77))
-      ((default . error) (WHEN .  1267))
-      ((default . error) (WHEN . (entry_body_formal_part . 1)))
-      ((default . error) (SEMICOLON .  1266))
-      ((default . error) (SEMICOLON .  1265))
+      ((default . error) (SEMICOLON .  1267))
+      ((default . error) (THEN .  1266))
+      ((default . error) (END .  1265))
       ((default . error) (SEMICOLON .  1264))
-      ((default . error) (SEMICOLON .  1263))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (WHEN . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt . 0)) [...]
       ((default . error) (SEMICOLON .  1262))
+      ((default . error) (END .  1261))
+      ((default . error) (END .  1260))
+      ((default . error) (FOR .  1259) (SEMICOLON . (parameter_specification . 
0)) (RIGHT_PAREN . (parameter_specification . 0)) (IDENTIFIER .  77))
+      ((default . error) (WHEN .  1258))
+      ((default . error) (WHEN . (entry_body_formal_part . 1)))
+      ((default . error) (SEMICOLON .  1257))
+      ((default . error) (SEMICOLON .  1256))
+      ((default . error) (SEMICOLON .  1255))
+      ((default . error) (SEMICOLON .  1254))
+      ((default . error) (SEMICOLON .  1253))
       ((default . error) (BEGIN . (object_renaming_declaration . 0)) (ENTRY . 
(object_renaming_declaration . 0)) (FOR . (object_renaming_declaration . 0)) 
(FUNCTION . (object_renaming_declaration . 0)) (GENERIC . 
(object_renaming_declaration . 0)) (NOT . (object_renaming_declaration . 0)) 
(OVERRIDING . (object_renaming_declaration . 0)) (PACKAGE . 
(object_renaming_declaration . 0)) (PRAGMA . (object_renaming_declaration . 0)) 
(PROCEDURE . (object_renaming_declaration . 0)) (PROTECTED . ( [...]
       ((default . error) (BEGIN . (private_type_declaration . 0)) (ENTRY . 
(private_type_declaration . 0)) (FOR . (private_type_declaration . 0)) 
(FUNCTION . (private_type_declaration . 0)) (GENERIC . 
(private_type_declaration . 0)) (NOT . (private_type_declaration . 0)) 
(OVERRIDING . (private_type_declaration . 0)) (PACKAGE . 
(private_type_declaration . 0)) (PRAGMA . (private_type_declaration . 0)) 
(PROCEDURE . (private_type_declaration . 0)) (PROTECTED . 
(private_type_declaration . 0)) [...]
-      ((default . error) (WITH .  1261))
+      ((default . error) (WITH .  1252))
       ((default . error) (WITH . (constraint_opt . 1)) (SEMICOLON . 
(constraint_opt . 1)))
       ((default . error) (WITH . (derived_type_definition . 1)) (SEMICOLON . 
(derived_type_definition . 1)))
-      ((default . error) (WITH .  1260))
-      ((default . error) (WHEN .  1257))
+      ((default . error) (WITH .  1251))
+      ((default . error) (WHEN .  1248))
       ((default . error) (SEMICOLON . (record_definition . 0)) (WITH . 
(record_definition . 0)))
-      ((default . error) (COLON_EQUAL .  1255) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (COLON_EQUAL .  1246) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
       ((default . error) (SEMICOLON . (type_definition . 1)) (WITH . 
(type_definition . 1)))
       ((default . error) (RIGHT_PAREN . (enumeration_literal_list . 1)) (COMMA 
. (enumeration_literal_list . 1)))
-      ((default . error) (DOT_DOT .  1254))
-      ((default . error) (WITH . (real_range_specification_opt . 0)) 
(SEMICOLON . (real_range_specification_opt . 0)) (RANGE .  1116))
+      ((default . error) (DOT_DOT .  1245))
+      ((default . error) (WITH . (real_range_specification_opt . 0)) 
(SEMICOLON . (real_range_specification_opt . 0)) (RANGE .  1107))
       ((default . error) (IDENTIFIER . (task_type_declaration . 1)) (USE . 
(task_type_declaration . 1)) (TYPE . (task_type_declaration . 1)) (TASK . 
(task_type_declaration . 1)) (SUBTYPE . (task_type_declaration . 1)) (PROTECTED 
. (task_type_declaration . 1)) (PROCEDURE . (task_type_declaration . 1)) 
(PRAGMA . (task_type_declaration . 1)) (PACKAGE . (task_type_declaration . 1)) 
(OVERRIDING . (task_type_declaration . 1)) (NOT . (task_type_declaration . 1)) 
(GENERIC . (task_type_declaratio [...]
-      ((default . error) (AND .  1080) (WITH .  1252))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (SEMICOLON .  1250))
+      ((default . error) (AND .  1071) (WITH .  1243))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (SEMICOLON .  1241))
       ((default . error) (IDENTIFIER . (protected_type_declaration . 1)) (USE 
. (protected_type_declaration . 1)) (TYPE . (protected_type_declaration . 1)) 
(TASK . (protected_type_declaration . 1)) (SUBTYPE . 
(protected_type_declaration . 1)) (PROTECTED . (protected_type_declaration . 
1)) (PROCEDURE . (protected_type_declaration . 1)) (PRAGMA . 
(protected_type_declaration . 1)) (PACKAGE . (protected_type_declaration . 1)) 
(OVERRIDING . (protected_type_declaration . 1)) (NOT . (protected_ [...]
-      ((default . error) (AND .  1080) (WITH .  1249))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (SEMICOLON .  1247))
-      ((default . error) (RANGE .  1246))
+      ((default . error) (AND .  1071) (WITH .  1240))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (SEMICOLON .  1238))
+      ((default . error) (RANGE .  1237))
       ((default . error) (SEMICOLON . (record_rep . 0)))
       ((default . error) (IDENTIFIER . (mod_clause_opt . 1)))
       ((default . error) (COLON_EQUAL . (component_definition . 2)) (SEMICOLON 
. (component_definition . 2)) (WITH . (component_definition . 2)))
       ((default . error) (COLON_EQUAL . (component_definition . 0)) (SEMICOLON 
. (component_definition . 0)) (WITH . (component_definition . 0)))
-      ((default . error) (RIGHT_PAREN . (subtype_indication . 1)) (COMMA . 
(subtype_indication . 1)) (DOT .  90) (TICK .  91) (BAR . (discrete_choice . 
1)) (EQUAL_GREATER . (discrete_choice . 1)) (RANGE .  904) (LEFT_PAREN .  829))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN . (subtype_indication . 1)) (COMMA . 
(subtype_indication . 1)) (DOT .  90) (TICK .  91) (BAR . (discrete_choice . 
1)) (EQUAL_GREATER . (discrete_choice . 1)) (RANGE .  895) (LEFT_PAREN .  820))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (END . (single_protected_declaration . 0)) (PRIVATE . 
(single_protected_declaration . 0)) (IDENTIFIER . (single_protected_declaration 
. 0)) (USE . (single_protected_declaration . 0)) (TYPE . 
(single_protected_declaration . 0)) (TASK . (single_protected_declaration . 0)) 
(SUBTYPE . (single_protected_declaration . 0)) (PROTECTED . 
(single_protected_declaration . 0)) (PROCEDURE . (single_protected_declaration 
. 0)) (PRAGMA . (single_protected_declaration . 0)) (PACK [...]
       ((default . error) (SEMICOLON . (protected_definition . 0)))
-      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED .  301) (TASK 
.  303) (PACKAGE .  300))
+      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED .  271) (TASK 
.  273) (PACKAGE .  270))
       ((default . error) (END . (single_task_declaration . 0)) (PRIVATE . 
(single_task_declaration . 0)) (IDENTIFIER . (single_task_declaration . 0)) 
(USE . (single_task_declaration . 0)) (TYPE . (single_task_declaration . 0)) 
(TASK . (single_task_declaration . 0)) (SUBTYPE . (single_task_declaration . 
0)) (PROTECTED . (single_task_declaration . 0)) (PROCEDURE . 
(single_task_declaration . 0)) (PRAGMA . (single_task_declaration . 0)) 
(PACKAGE . (single_task_declaration . 0)) (OVERRIDING . [...]
       ((default . error) (SEMICOLON . (task_definition . 0)))
-      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED .  301) (TASK 
.  303) (PACKAGE .  300))
+      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED .  271) (TASK 
.  273) (PACKAGE .  270))
       ((default . error) (WITH . (type_definition . 5)) (SEMICOLON . 
(type_definition . 5)))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  1303))
-      ((default . error) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  182) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) 
(ABS .  144) (NOT .  181) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
-      ((default . error) (END .  1300) (WHEN .  1257))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (WITH . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  1294))
+      ((default . error) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  152) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) 
(ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
+      ((default . error) (END .  1291) (WHEN .  1248))
       ((default . error) (END . (variant_list . 0)) (WHEN . (variant_list . 
0)))
-      ((default . error) (PRIVATE .  1299))
-      ((default . error) (RECORD .  868) (NULL .  866))
+      ((default . error) (PRIVATE .  1290))
+      ((default . error) (RECORD .  858) (NULL .  856))
       ((default . error) (PRIVATE . (object_declaration . 2)) (END . 
(object_declaration . 2)) (BEGIN . (object_declaration . 2)) (ENTRY . 
(object_declaration . 2)) (FOR . (object_declaration . 2)) (FUNCTION . 
(object_declaration . 2)) (GENERIC . (object_declaration . 2)) (NOT . 
(object_declaration . 2)) (OVERRIDING . (object_declaration . 2)) (PACKAGE . 
(object_declaration . 2)) (PRAGMA . (object_declaration . 2)) (PROCEDURE . 
(object_declaration . 2)) (PROTECTED . (object_declaration . [...]
       ((default . error) (PRIVATE . (object_declaration . 4)) (END . 
(object_declaration . 4)) (BEGIN . (object_declaration . 4)) (ENTRY . 
(object_declaration . 4)) (FOR . (object_declaration . 4)) (FUNCTION . 
(object_declaration . 4)) (GENERIC . (object_declaration . 4)) (NOT . 
(object_declaration . 4)) (OVERRIDING . (object_declaration . 4)) (PACKAGE . 
(object_declaration . 4)) (PRAGMA . (object_declaration . 4)) (PROCEDURE . 
(object_declaration . 4)) (PROTECTED . (object_declaration . [...]
       ((default . error) (PRIVATE . (object_declaration . 0)) (END . 
(object_declaration . 0)) (BEGIN . (object_declaration . 0)) (ENTRY . 
(object_declaration . 0)) (FOR . (object_declaration . 0)) (FUNCTION . 
(object_declaration . 0)) (GENERIC . (object_declaration . 0)) (NOT . 
(object_declaration . 0)) (OVERRIDING . (object_declaration . 0)) (PACKAGE . 
(object_declaration . 0)) (PRAGMA . (object_declaration . 0)) (PROCEDURE . 
(object_declaration . 0)) (PROTECTED . (object_declaration . [...]
       ((default . error) (PRIVATE . (entry_declaration . 0)) (END . 
(entry_declaration . 0)) (BEGIN . (entry_declaration . 0)) (ENTRY . 
(entry_declaration . 0)) (FOR . (entry_declaration . 0)) (FUNCTION . 
(entry_declaration . 0)) (GENERIC . (entry_declaration . 0)) (NOT . 
(entry_declaration . 0)) (OVERRIDING . (entry_declaration . 0)) (PACKAGE . 
(entry_declaration . 0)) (PRAGMA . (entry_declaration . 0)) (PROCEDURE . 
(entry_declaration . 0)) (PROTECTED . (entry_declaration . 0)) (SUBTYPE [...]
       ((default . error) (PRIVATE . (protected_body . 0)) (END . 
(protected_body . 0)) (BEGIN . (protected_body . 0)) (ENTRY . (protected_body . 
0)) (FOR . (protected_body . 0)) (FUNCTION . (protected_body . 0)) (GENERIC . 
(protected_body . 0)) (NOT . (protected_body . 0)) (OVERRIDING . 
(protected_body . 0)) (PACKAGE . (protected_body . 0)) (PRAGMA . 
(protected_body . 0)) (PROCEDURE . (protected_body . 0)) (PROTECTED . 
(protected_body . 0)) (SUBTYPE . (protected_body . 0)) (TASK . (prote [...]
-      ((default . error) (IS . (expression_opt . 0)) (RAISE .  152) (PLUS .  
154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
-      ((default . error) (IDENTIFIER .  1296))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
+      ((default . error) (IS . (expression_opt . 0)) (RAISE .  153) (PLUS .  
155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (IDENTIFIER .  1287))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
       ((default . error) (OR . (case_statement . 0)) (THEN . (case_statement . 
0)) (WHEN . (case_statement . 0)) (EXCEPTION . (case_statement . 0)) (END . 
(case_statement . 0)) (LESS_LESS . (case_statement . 0)) (ACCEPT . 
(case_statement . 0)) (ABORT . (case_statement . 0)) (BEGIN . (case_statement . 
0)) (CASE . (case_statement . 0)) (DECLARE . (case_statement . 0)) (DELAY . 
(case_statement . 0)) (EXIT . (case_statement . 0)) (FOR . (case_statement . 
0)) (GOTO . (case_statement . 0)) (IF [...]
       ((default . error) (END . (case_statement_alternative . 0)) (WHEN . 
(case_statement_alternative . 0)))
       ((default . error) (OR . (block_statement . 0)) (THEN . (block_statement 
. 0)) (WHEN . (block_statement . 0)) (EXCEPTION . (block_statement . 0)) (END . 
(block_statement . 0)) (LESS_LESS . (block_statement . 0)) (ACCEPT . 
(block_statement . 0)) (ABORT . (block_statement . 0)) (BEGIN . 
(block_statement . 0)) (CASE . (block_statement . 0)) (DECLARE . 
(block_statement . 0)) (DELAY . (block_statement . 0)) (EXIT . (block_statement 
. 0)) (FOR . (block_statement . 0)) (GOTO . (block_stat [...]
-      ((default . error) (IF .  1293))
-      ((default . error) (ELSE . (sequence_of_statements_opt . 0)) (ELSIF . 
(sequence_of_statements_opt . 0)) (END . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO  [...]
+      ((default . error) (IF .  1284))
+      ((default . error) (ELSE . (sequence_of_statements_opt . 0)) (ELSIF . 
(sequence_of_statements_opt . 0)) (END . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO  [...]
       ((default . error) (OR . (if_statement . 3)) (THEN . (if_statement . 3)) 
(WHEN . (if_statement . 3)) (EXCEPTION . (if_statement . 3)) (END . 
(if_statement . 3)) (LESS_LESS . (if_statement . 3)) (ACCEPT . (if_statement . 
3)) (ABORT . (if_statement . 3)) (BEGIN . (if_statement . 3)) (CASE . 
(if_statement . 3)) (DECLARE . (if_statement . 3)) (DELAY . (if_statement . 3)) 
(EXIT . (if_statement . 3)) (FOR . (if_statement . 3)) (GOTO . (if_statement . 
3)) (IF . (if_statement . 3)) (LOOP . [...]
-      ((default . error) (SEMICOLON .  1291))
-      ((default . error) (END .  1290))
+      ((default . error) (SEMICOLON .  1282))
+      ((default . error) (END .  1281))
       ((default . error) (OR . (extended_return_statement . 0)) (THEN . 
(extended_return_statement . 0)) (WHEN . (extended_return_statement . 0)) 
(EXCEPTION . (extended_return_statement . 0)) (END . (extended_return_statement 
. 0)) (LESS_LESS . (extended_return_statement . 0)) (ACCEPT . 
(extended_return_statement . 0)) (ABORT . (extended_return_statement . 0)) 
(BEGIN . (extended_return_statement . 0)) (CASE . (extended_return_statement . 
0)) (DECLARE . (extended_return_statement . 0)) (D [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  1288))
+      ((default . error) (DO . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  1279))
       ((default . error) (OR . (selective_accept . 0)) (THEN . 
(selective_accept . 0)) (WHEN . (selective_accept . 0)) (EXCEPTION . 
(selective_accept . 0)) (END . (selective_accept . 0)) (LESS_LESS . 
(selective_accept . 0)) (ACCEPT . (selective_accept . 0)) (ABORT . 
(selective_accept . 0)) (BEGIN . (selective_accept . 0)) (CASE . 
(selective_accept . 0)) (DECLARE . (selective_accept . 0)) (DELAY . 
(selective_accept . 0)) (EXIT . (selective_accept . 0)) (FOR . 
(selective_accept . 0)) (GOTO [...]
       ((default . error) (OR . (conditional_entry_call . 0)) (THEN . 
(conditional_entry_call . 0)) (WHEN . (conditional_entry_call . 0)) (EXCEPTION 
. (conditional_entry_call . 0)) (END . (conditional_entry_call . 0)) (LESS_LESS 
. (conditional_entry_call . 0)) (ACCEPT . (conditional_entry_call . 0)) (ABORT 
. (conditional_entry_call . 0)) (BEGIN . (conditional_entry_call . 0)) (CASE . 
(conditional_entry_call . 0)) (DECLARE . (conditional_entry_call . 0)) (DELAY . 
(conditional_entry_call .  [...]
       ((default . error) (OR . (timed_entry_call . 0)) (THEN . 
(timed_entry_call . 0)) (WHEN . (timed_entry_call . 0)) (EXCEPTION . 
(timed_entry_call . 0)) (END . (timed_entry_call . 0)) (LESS_LESS . 
(timed_entry_call . 0)) (ACCEPT . (timed_entry_call . 0)) (ABORT . 
(timed_entry_call . 0)) (BEGIN . (timed_entry_call . 0)) (CASE . 
(timed_entry_call . 0)) (DECLARE . (timed_entry_call . 0)) (DELAY . 
(timed_entry_call . 0)) (EXIT . (timed_entry_call . 0)) (FOR . 
(timed_entry_call . 0)) (GOTO [...]
       ((default . error) (OR . (loop_statement . 0)) (THEN . (loop_statement . 
0)) (WHEN . (loop_statement . 0)) (EXCEPTION . (loop_statement . 0)) (END . 
(loop_statement . 0)) (LESS_LESS . (loop_statement . 0)) (ACCEPT . 
(loop_statement . 0)) (ABORT . (loop_statement . 0)) (BEGIN . (loop_statement . 
0)) (CASE . (loop_statement . 0)) (DECLARE . (loop_statement . 0)) (DELAY . 
(loop_statement . 0)) (EXIT . (loop_statement . 0)) (FOR . (loop_statement . 
0)) (GOTO . (loop_statement . 0)) (IF [...]
-      ((default . error) (WHEN . (sequence_of_statements_opt . 0)) (END . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt . 0)) [...]
+      ((default . error) (WHEN . (sequence_of_statements_opt . 0)) (END . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt . 0)) [...]
       ((default . error) (WHEN . (exception_handler . 0)) (END . 
(exception_handler . 0)))
       ((default . error) (WHEN . (asynchronous_select . 0)) (THEN . 
(asynchronous_select . 0)) (OR . (asynchronous_select . 0)) (ELSIF . 
(asynchronous_select . 0)) (ELSE . (asynchronous_select . 0)) 
(CHARACTER_LITERAL . (asynchronous_select . 0)) (STRING_LITERAL . 
(asynchronous_select . 0)) (IDENTIFIER . (asynchronous_select . 0)) (WHILE . 
(asynchronous_select . 0)) (SELECT . (asynchronous_select . 0)) (RETURN . 
(asynchronous_select . 0)) (REQUEUE . (asynchronous_select . 0)) (RAISE . (a 
[...]
       ((default . error) (DO . (extended_return_object_declaration . 0)) 
(SEMICOLON . (extended_return_object_declaration . 0)))
-      ((default . error) (IF .  1321))
+      ((default . error) (IF .  1312))
       ((default . error) (WHEN . (if_statement . 1)) (THEN . (if_statement . 
1)) (OR . (if_statement . 1)) (ELSIF . (if_statement . 1)) (ELSE . 
(if_statement . 1)) (CHARACTER_LITERAL . (if_statement . 1)) (STRING_LITERAL . 
(if_statement . 1)) (IDENTIFIER . (if_statement . 1)) (WHILE . (if_statement . 
1)) (SELECT . (if_statement . 1)) (RETURN . (if_statement . 1)) (REQUEUE . 
(if_statement . 1)) (RAISE . (if_statement . 1)) (PRAGMA . (if_statement . 1)) 
(NULL . (if_statement . 1)) (LOOP .  [...]
       ((default . error) (ELSE . (elsif_statement_item . 0)) (ELSIF . 
(elsif_statement_item . 0)) (END . (elsif_statement_item . 0)))
-      ((default . error) (SEMICOLON .  1320))
-      ((default . error) (SEMICOLON .  1319))
-      ((default . error) (SEMICOLON .  1318))
-      ((default . error) (IN .  1317))
-      ((default . error) (IS .  1316))
+      ((default . error) (SEMICOLON .  1311))
+      ((default . error) (SEMICOLON .  1310))
+      ((default . error) (SEMICOLON .  1309))
+      ((default . error) (IN .  1308))
+      ((default . error) (IS .  1307))
       ((default . error) (WITH . (derived_type_definition . 0)) (SEMICOLON . 
(derived_type_definition . 0)))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
-      ((default . error) (CASE .  1314))
+      ((default . error) (CASE .  1305))
       ((default . error) (WHEN . (variant_list . 1)) (END . (variant_list . 
1)))
-      ((default . error) (BAR .  286) (EQUAL_GREATER .  1313))
+      ((default . error) (BAR .  356) (EQUAL_GREATER .  1304))
       ((default . error) (WHEN . (component_declaration . 1)) (END . 
(component_declaration . 1)) (CASE . (component_declaration . 1)) (FOR . 
(component_declaration . 1)) (IDENTIFIER . (component_declaration . 1)))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (SEMICOLON . (real_range_specification_opt . 1)) 
(WITH . (real_range_specification_opt . 1)))
-      ((default . error) (SEMICOLON .  1311))
-      ((default . error) (SEMICOLON .  1310))
-      ((default . error) (DOT_DOT .  1309))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  1302))
+      ((default . error) (SEMICOLON .  1301))
+      ((default . error) (DOT_DOT .  1300))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (PRIVATE . (protected_type_declaration . 0)) (END . 
(protected_type_declaration . 0)) (BEGIN . (protected_type_declaration . 0)) 
(ENTRY . (protected_type_declaration . 0)) (FOR . (protected_type_declaration . 
0)) (FUNCTION . (protected_type_declaration . 0)) (GENERIC . 
(protected_type_declaration . 0)) (NOT . (protected_type_declaration . 0)) 
(OVERRIDING . (protected_type_declaration . 0)) (PACKAGE . 
(protected_type_declaration . 0)) (PRAGMA . (protected_type_dec [...]
       ((default . error) (PRIVATE . (task_type_declaration . 0)) (END . 
(task_type_declaration . 0)) (BEGIN . (task_type_declaration . 0)) (ENTRY . 
(task_type_declaration . 0)) (FOR . (task_type_declaration . 0)) (FUNCTION . 
(task_type_declaration . 0)) (GENERIC . (task_type_declaration . 0)) (NOT . 
(task_type_declaration . 0)) (OVERRIDING . (task_type_declaration . 0)) 
(PACKAGE . (task_type_declaration . 0)) (PRAGMA . (task_type_declaration . 0)) 
(PROCEDURE . (task_type_declaration . 0) [...]
-      ((default . error) (SEMICOLON .  1328))
-      ((default . error) (END . (component_list_opt . 0)) (WHEN . 
(component_list_opt . 0)) (NULL .  1033) (CASE .  1032) (IDENTIFIER .  77) (FOR 
.  299))
-      ((default . error) (SEMICOLON .  1326))
-      ((default . error) (SEMICOLON .  1325))
-      ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  302) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE 
.  304) (GENERIC .  2) (PROTECTED .  301) (TASK .  303) (PACKAGE .  300))
-      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  736) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  1319))
+      ((default . error) (END . (component_list_opt . 0)) (WHEN . 
(component_list_opt . 0)) (NULL .  1024) (CASE .  1023) (IDENTIFIER .  77) (FOR 
.  269))
+      ((default . error) (SEMICOLON .  1317))
+      ((default . error) (SEMICOLON .  1316))
+      ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  272) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE 
.  274) (GENERIC .  2) (PROTECTED .  271) (TASK .  273) (PACKAGE .  270))
+      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  728) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (PRIVATE . (task_body . 0)) (END . (task_body . 0)) 
(BEGIN . (task_body . 0)) (ENTRY . (task_body . 0)) (FOR . (task_body . 0)) 
(FUNCTION . (task_body . 0)) (GENERIC . (task_body . 0)) (NOT . (task_body . 
0)) (OVERRIDING . (task_body . 0)) (PACKAGE . (task_body . 0)) (PRAGMA . 
(task_body . 0)) (PROCEDURE . (task_body . 0)) (PROTECTED . (task_body . 0)) 
(SUBTYPE . (task_body . 0)) (TASK . (task_body . 0)) (TYPE . (task_body . 0)) 
(USE . (task_body . 0)) (IDENTIFIE [...]
       ((default . error) (THEN . (accept_statement . 0)) (WHEN . 
(accept_statement . 0)) (EXCEPTION . (accept_statement . 0)) (ELSIF . 
(accept_statement . 0)) (ELSE . (accept_statement . 0)) (OR . (accept_statement 
. 0)) (END . (accept_statement . 0)) (ACCEPT . (accept_statement . 0)) (ABORT . 
(accept_statement . 0)) (BEGIN . (accept_statement . 0)) (CASE . 
(accept_statement . 0)) (DECLARE . (accept_statement . 0)) (DELAY . 
(accept_statement . 0)) (EXIT . (accept_statement . 0)) (FOR . ( [...]
       ((default . error) (OR . (if_statement . 2)) (THEN . (if_statement . 2)) 
(WHEN . (if_statement . 2)) (EXCEPTION . (if_statement . 2)) (END . 
(if_statement . 2)) (LESS_LESS . (if_statement . 2)) (ACCEPT . (if_statement . 
2)) (ABORT . (if_statement . 2)) (BEGIN . (if_statement . 2)) (CASE . 
(if_statement . 2)) (DECLARE . (if_statement . 2)) (DELAY . (if_statement . 2)) 
(EXIT . (if_statement . 2)) (FOR . (if_statement . 2)) (GOTO . (if_statement . 
2)) (IF . (if_statement . 2)) (LOOP . [...]
-      ((default . error) (SEMICOLON .  1322))
+      ((default . error) (SEMICOLON .  1313))
       ((default . error) (WHEN . (if_statement . 0)) (THEN . (if_statement . 
0)) (OR . (if_statement . 0)) (ELSIF . (if_statement . 0)) (ELSE . 
(if_statement . 0)) (CHARACTER_LITERAL . (if_statement . 0)) (STRING_LITERAL . 
(if_statement . 0)) (IDENTIFIER . (if_statement . 0)) (WHILE . (if_statement . 
0)) (SELECT . (if_statement . 0)) (RETURN . (if_statement . 0)) (REQUEUE . 
(if_statement . 0)) (RAISE . (if_statement . 0)) (PRAGMA . (if_statement . 0)) 
(NULL . (if_statement . 0)) (LOOP .  [...]
-      ((default . error) (RIGHT_PAREN .  1332))
-      ((default . error) (BEGIN .  1331))
+      ((default . error) (RIGHT_PAREN .  1323))
+      ((default . error) (BEGIN .  1322))
       ((default . error) (BEGIN . (private_extension_declaration . 0)) (ENTRY 
. (private_extension_declaration . 0)) (FOR . (private_extension_declaration . 
0)) (FUNCTION . (private_extension_declaration . 0)) (GENERIC . 
(private_extension_declaration . 0)) (NOT . (private_extension_declaration . 
0)) (OVERRIDING . (private_extension_declaration . 0)) (PACKAGE . 
(private_extension_declaration . 0)) (PRAGMA . (private_extension_declaration . 
0)) (PROCEDURE . (private_extension_declaration  [...]
       ((default . error) (WHEN . (variant_part . 0)) (END . (variant_part . 
0)) (CASE . (variant_part . 0)) (FOR . (variant_part . 0)) (IDENTIFIER . 
(variant_part . 0)))
       ((default . error) (END . (variant . 0)) (WHEN . (variant . 0)))
       ((default . error) (WHEN . (component_declaration . 0)) (END . 
(component_declaration . 0)) (CASE . (component_declaration . 0)) (FOR . 
(component_declaration . 0)) (IDENTIFIER . (component_declaration . 0)))
-      ((default . error) (SEMICOLON .  1330))
+      ((default . error) (SEMICOLON .  1321))
       ((default . error) (END . (component_clause . 0)) (IDENTIFIER . 
(component_clause . 0)))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
-      ((default . error) (WHEN . (parameter_profile_opt . 0)) (LEFT_PAREN .  
810))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
+      ((default . error) (WHEN . (parameter_profile_opt . 0)) (LEFT_PAREN .  
801))
       ((default . error) (WHEN . (entry_body_formal_part . 0)))
-      ((default . error) (END .  1335))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (SEMICOLON .  1337))
+      ((default . error) (END .  1326))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (SEMICOLON .  1328))
       ((default . error) (PROCEDURE . (entry_body . 0)) (OVERRIDING . 
(entry_body . 0)) (NOT . (entry_body . 0)) (FUNCTION . (entry_body . 0)) (FOR . 
(entry_body . 0)) (ENTRY . (entry_body . 0)) (END . (entry_body . 0)))]
      [((compilation_unit . 13)(compilation_unit_list . 14)(context_item . 
15)(function_specification . 16)(generic_declaration . 17)(generic_formal_part 
. 18)(generic_instantiation . 19)(generic_package_declaration . 
20)(generic_renaming_declaration . 21)(generic_subprogram_declaration . 
22)(library_item . 23)(library_unit_declaration . 
24)(library_unit_renaming_declaration . 25)(overriding_indicator_opt . 
26)(package_body . 27)(package_declaration . 28)(package_renaming_declaration . 
29 [...]
       ((attribute_reference . 51)(name . 87)(qualified_expression . 
54)(selected_component . 55))
@@ -3243,31 +3234,31 @@
       nil
       nil
       ((actual_parameter_part . 92)(formal_part . 
93)(parameter_and_result_profile . 94))
-      ((aggregate . 157)(association_opt . 184)(association_list . 
201)(attribute_reference . 51)(case_expression . 158)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 
192)(conditional_quantified_expression . 202)(discrete_choice . 
193)(discrete_choice_list . 194)(expression . 195)(expression_opt . 196)(factor 
. 161)(identifie [...]
-      ((access_definition . 233)(null_exclusion_opt . 234))
+      ((aggregate . 158)(association_opt . 159)(association_list . 
195)(attribute_reference . 51)(case_expression . 161)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 
168)(conditional_quantified_expression . 196)(discrete_choice . 
170)(discrete_choice_list . 171)(expression . 172)(expression_opt . 173)(factor 
. 174)(identifie [...]
+      ((access_definition . 227)(null_exclusion_opt . 228))
       nil
-      ((aggregate . 225)(attribute_reference . 51)(attribute_designator . 
226)(name . 227)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 219)(attribute_reference . 51)(attribute_designator . 
220)(name . 221)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
       nil
-      ((mode_opt . 219))
+      ((mode_opt . 213))
       nil
       nil
-      ((attribute_reference . 51)(name . 215)(qualified_expression . 
54)(selected_component . 55))
-      ((aspect_specification_opt . 214))
-      ((discriminant_part_opt . 212))
+      ((attribute_reference . 51)(name . 209)(qualified_expression . 
54)(selected_component . 55))
+      ((aspect_specification_opt . 208))
+      ((discriminant_part_opt . 206))
       ((actual_parameter_part . 92))
       ((actual_parameter_part . 92))
       ((actual_parameter_part . 92))
       nil
-      ((attribute_reference . 51)(name_list . 206)(name . 
53)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(name_list . 200)(name . 
53)(qualified_expression . 54)(selected_component . 55))
       nil
-      ((aggregate . 157)(association_opt . 184)(association_list . 
201)(attribute_reference . 51)(case_expression . 158)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 
192)(conditional_quantified_expression . 202)(discrete_choice . 
193)(discrete_choice_list . 194)(expression . 195)(expression_opt . 196)(factor 
. 161)(if_expres [...]
-      ((attribute_reference . 51)(name . 200)(qualified_expression . 
54)(selected_component . 55))
-      ((aggregate . 157)(association_opt . 184)(association_list . 
185)(attribute_reference . 51)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 192)(discrete_choice 
. 193)(discrete_choice_list . 194)(expression . 195)(expression_opt . 
196)(factor . 161)(name . 197)(primary . 166)(qualified_expression . 
54)(raise_expression .  [...]
+      ((aggregate . 158)(association_opt . 159)(association_list . 
195)(attribute_reference . 51)(case_expression . 161)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 
168)(conditional_quantified_expression . 196)(discrete_choice . 
170)(discrete_choice_list . 171)(expression . 172)(expression_opt . 173)(factor 
. 174)(if_expres [...]
+      ((attribute_reference . 51)(name . 194)(qualified_expression . 
54)(selected_component . 55))
+      ((aggregate . 158)(association_opt . 159)(association_list . 
193)(attribute_reference . 51)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 168)(discrete_choice 
. 170)(discrete_choice_list . 171)(expression . 172)(expression_opt . 
173)(factor . 174)(name . 176)(primary . 177)(qualified_expression . 
54)(raise_expression .  [...]
       nil
-      ((actual_parameter_part . 92)(aspect_specification_opt . 179))
-      ((aggregate . 157)(attribute_reference . 51)(case_expression . 
158)(conditional_quantified_expression . 159)(expression . 160)(factor . 
161)(if_expression . 162)(name . 163)(pragma_argument_association . 
164)(pragma_argument_association_list . 165)(primary . 
166)(qualified_expression . 54)(quantified_expression . 167)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation  [...]
+      ((actual_parameter_part . 92)(aspect_specification_opt . 191))
+      ((aggregate . 158)(association_opt . 159)(association_list . 
160)(attribute_reference . 51)(case_expression . 161)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 
168)(conditional_quantified_expression . 169)(discrete_choice . 
170)(discrete_choice_list . 171)(expression . 172)(expression_opt . 173)(factor 
. 174)(if_expres [...]
       nil
       ((aspect_specification_opt . 143))
       nil
@@ -3289,26 +3280,26 @@
       ((actual_parameter_part . 92)(formal_part . 
93)(parameter_and_result_profile . 94))
       nil
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 397)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 391)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
-      ((actual_parameter_part . 92)(aspect_specification_opt . 396))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 390))
       nil
       nil
       nil
       ((actual_parameter_part . 92))
-      ((function_specification . 16)(overriding_indicator_opt . 
393)(package_body . 328)(procedure_specification . 32)(proper_body . 
394)(protected_body . 336)(subprogram_body . 343)(task_body . 348))
+      ((function_specification . 16)(overriding_indicator_opt . 
387)(package_body . 298)(procedure_specification . 32)(proper_body . 
388)(protected_body . 306)(subprogram_body . 313)(task_body . 318))
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(name . 163)(primary . 
389)(qualified_expression . 54)(selected_component . 55))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 388)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((quantifier . 387))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 384)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(association_opt . 184)(association_list . 
381)(attribute_reference . 51)(case_expression . 158)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 
192)(conditional_quantified_expression . 382)(discrete_choice . 
193)(discrete_choice_list . 194)(expression . 383)(expression_opt . 196)(factor 
. 161)(if_expres [...]
-      ((attribute_reference . 51)(name . 379)(qualified_expression . 
54)(selected_component . 55))
-      ((aggregate . 157)(attribute_reference . 51)(name . 163)(primary . 
298)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(name . 325)(primary . 
383)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 382)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((quantifier . 381))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 377)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(association_opt . 159)(association_list . 
374)(attribute_reference . 51)(case_expression . 161)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 
168)(conditional_quantified_expression . 375)(discrete_choice . 
170)(discrete_choice_list . 171)(expression . 172)(expression_opt . 376)(factor 
. 174)(if_expres [...]
+      ((attribute_reference . 51)(name . 372)(qualified_expression . 
54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(name . 325)(primary . 
371)(qualified_expression . 54)(selected_component . 55))
       nil
-      ((attribute_reference . 51)(name . 378)(qualified_expression . 
54)(selected_component . 55))
       nil
+      ((attribute_reference . 51)(name . 369)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
       nil
@@ -3318,9 +3309,6 @@
       nil
       nil
       nil
-      ((actual_parameter_part . 92))
-      nil
-      nil
       nil
       nil
       nil
@@ -3330,16 +3318,11 @@
       nil
       nil
       nil
-      ((relational_operator . 364))
-      ((multiplying_operator . 363))
-      ((binary_adding_operator . 358))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 55)(term . 
176)(term_list . 354))
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 313)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
-      ((aggregate . 157)(attribute_reference . 51)(name . 163)(primary . 
298)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
       nil
+      ((actual_parameter_part . 92))
       nil
       nil
       nil
@@ -3350,32 +3333,34 @@
       nil
       nil
       nil
+      ((relational_operator . 345))
+      ((multiplying_operator . 335))
+      ((binary_adding_operator . 330))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 55)(term . 
188)(term_list . 326))
       nil
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 283)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
-      ((actual_parameter_part . 92))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 268))
       nil
-      ((relational_operator . 284))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 274))
       nil
       nil
       nil
+      ((attribute_reference . 51)(name . 262)(qualified_expression . 
54)(selected_component . 55))
       nil
-      ((attribute_reference . 51)(name . 268)(qualified_expression . 
54)(selected_component . 55))
       nil
-      nil
-      ((attribute_reference . 51)(name . 266)(qualified_expression . 
54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 265)(qualified_expression . 
54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 264)(qualified_expression . 
54)(selected_component . 55))
-      ((discriminant_specification_opt . 261)(discriminant_specification_list 
. 262)(identifier_list . 263))
-      ((aspect_specification_opt . 259))
-      ((attribute_reference . 51)(name . 256)(qualified_expression . 
54)(selected_component . 55)(subprogram_default . 257))
+      ((attribute_reference . 51)(name . 260)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 259)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 258)(qualified_expression . 
54)(selected_component . 55))
+      ((discriminant_specification_opt . 255)(discriminant_specification_list 
. 256)(identifier_list . 257))
+      ((aspect_specification_opt . 253))
+      ((attribute_reference . 51)(name . 250)(qualified_expression . 
54)(selected_component . 55)(subprogram_default . 251))
       nil
       ((actual_parameter_part . 92))
       nil
       nil
       nil
-      ((access_definition . 248)(null_exclusion_opt . 249))
-      ((access_definition . 246)(null_exclusion_opt . 247))
+      ((access_definition . 242)(null_exclusion_opt . 243))
+      ((access_definition . 240)(null_exclusion_opt . 241))
       nil
       nil
       nil
@@ -3389,75 +3374,61 @@
       nil
       nil
       nil
-      ((attribute_reference . 51)(name . 243)(name_opt . 
244)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 237)(name_opt . 
238)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
       nil
       nil
       nil
-      ((identifier_list . 236)(parameter_specification . 533))
-      ((aliased_opt . 532))
-      ((general_access_modifier_opt . 529)(protected_opt . 530))
+      ((identifier_list . 230)(parameter_specification . 525))
+      ((aliased_opt . 524))
+      ((general_access_modifier_opt . 521)(protected_opt . 522))
       ((actual_parameter_part . 92))
       nil
       nil
       nil
-      ((attribute_reference . 51)(name . 243)(name_opt . 
525)(qualified_expression . 54)(selected_component . 55))
-      ((aspect_specification_opt . 524))
-      ((attribute_reference . 51)(name . 522)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 237)(name_opt . 
517)(qualified_expression . 54)(selected_component . 55))
+      ((aspect_specification_opt . 516))
+      ((attribute_reference . 51)(name . 514)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
       nil
-      ((aspect_specification_opt . 519)(attribute_reference . 51)(name . 
256)(qualified_expression . 54)(selected_component . 55)(subprogram_default . 
520))
+      ((aspect_specification_opt . 511)(attribute_reference . 51)(name . 
250)(qualified_expression . 54)(selected_component . 55)(subprogram_default . 
512))
       nil
       nil
       ((actual_parameter_part . 92))
-      ((aspect_specification_opt . 518))
-      ((abstract_limited_synchronized_opt . 510)(abstract_tagged_limited_opt . 
511)(access_definition . 512)(array_type_definition . 
513)(formal_type_definition . 514)(formal_derived_type_definition . 
515)(interface_type_definition . 516)(null_exclusion_opt . 517))
-      nil
+      ((aspect_specification_opt . 510))
+      ((abstract_limited_synchronized_opt . 502)(abstract_tagged_limited_opt . 
503)(access_definition . 504)(array_type_definition . 
505)(formal_type_definition . 506)(formal_derived_type_definition . 
507)(interface_type_definition . 508)(null_exclusion_opt . 509))
       nil
       nil
       nil
       nil
-      ((actual_parameter_part . 92)(aspect_specification_opt . 491))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 490))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 489))
       nil
-      ((actual_parameter_part . 92)(aspect_specification_opt . 488))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 483))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 482))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 481))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
197)(primary . 166)(qualified_expression . 54)(range . 486)(selected_component 
. 55)(simple_expression . 487)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 480))
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
176)(primary . 177)(qualified_expression . 54)(range . 478)(selected_component 
. 55)(simple_expression . 479)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(association_opt . 485)(attribute_reference . 
51)(choice_expression . 186)(choice_relation_and_list . 
187)(choice_relation_or_list . 188)(choice_relation_xor_list . 
189)(choice_relation_and_then_list . 190)(choice_relation_or_else_list . 
191)(choice_relation . 192)(discrete_choice . 193)(discrete_choice_list . 
194)(expression . 195)(expression_opt . 196)(factor . 161)(name . 197)(primary 
. 166)(qualified_expression . 54)(raise_expression . 168)(range . 198)(relati 
[...]
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 
161)(membership_choice_list . 480)(membership_choice . 481)(name . 197)(primary 
. 166)(qualified_expression . 54)(range . 482)(selected_component . 
55)(simple_expression . 483)(term . 176)(term_list . 177)(unary_adding_operator 
. 178))
+      ((aggregate . 158)(association_opt . 477)(attribute_reference . 
51)(choice_expression . 162)(choice_relation_and_list . 
163)(choice_relation_or_list . 164)(choice_relation_xor_list . 
165)(choice_relation_and_then_list . 166)(choice_relation_or_else_list . 
167)(choice_relation . 168)(discrete_choice . 170)(discrete_choice_list . 
171)(expression . 172)(expression_opt . 173)(factor . 174)(name . 176)(primary 
. 177)(qualified_expression . 54)(raise_expression . 179)(range . 180)(relati 
[...]
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 478)(term . 176)(term_list . 177)(unary_adding_operator 
. 178))
+      ((attribute_reference . 473)(direct_name . 474)(name . 
475)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 68)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
       nil
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 477)(term . 176)(term_list . 177)(unary_adding_operator 
. 178))
-      ((aggregate . 225)(attribute_reference . 51)(attribute_designator . 
226)(name . 227)(qualified_expression . 54)(selected_component . 55))
-      ((aggregate . 157)(attribute_reference . 51)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 192)(discrete_choice 
. 474)(factor . 161)(name . 197)(primary . 166)(qualified_expression . 
54)(range . 198)(selected_component . 55)(simple_expression . 475)(term . 
176)(term_list . 177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 473)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
471)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
469)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
467)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
464)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
463)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
461)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 460)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((attribute_reference . 51)(name . 458)(qualified_expression . 
54)(selected_component . 55))
       nil
-      ((attribute_reference . 455)(direct_name . 456)(name . 
457)(qualified_expression . 54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 68)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 460)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(generic_renaming_declaration . 
291)(generic_subprog [...]
       nil
       nil
       nil
@@ -3467,12 +3438,12 @@
       nil
       nil
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 442)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(generic_renaming_declaration . 
321)(generic_subprog [...]
       nil
       nil
       nil
       nil
       nil
+      ((function_specification . 454)(procedure_specification . 
455)(subprogram_specification . 456))
       nil
       nil
       nil
@@ -3482,7 +3453,6 @@
       nil
       nil
       nil
-      ((function_specification . 436)(procedure_specification . 
437)(subprogram_specification . 438))
       nil
       nil
       nil
@@ -3499,146 +3469,159 @@
       nil
       nil
       nil
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 452)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
+      ((aggregate . 158)(attribute_reference . 51)(name . 325)(primary . 
371)(qualified_expression . 54)(selected_component . 55))
+      ((actual_parameter_part . 92))
+      ((binary_adding_operator . 330))
       nil
       nil
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 55)(term . 
451))
       nil
       nil
       nil
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 450)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 
174)(membership_choice_list . 446)(membership_choice . 447)(name . 176)(primary 
. 177)(qualified_expression . 54)(range . 448)(selected_component . 
55)(simple_expression . 449)(term . 188)(term_list . 189)(unary_adding_operator 
. 190))
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 444)(term . 188)(term_list . 189)(unary_adding_operator 
. 190))
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 434)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
-      ((binary_adding_operator . 358))
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 55)(term . 
433))
       nil
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 443)(term . 188)(term_list . 189)(unary_adding_operator 
. 190))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 442)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 440)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 438)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 437)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 435)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 432)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 55))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 431)(term . 176)(term_list . 177)(unary_adding_operator 
. 178))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 430)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 428)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 426)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 425)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 433)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(name . 325)(primary . 
432)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 219)(attribute_reference . 51)(attribute_designator . 
220)(name . 221)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 168)(discrete_choice 
. 429)(factor . 174)(name . 176)(primary . 177)(qualified_expression . 
54)(range . 180)(selected_component . 55)(simple_expression . 430)(term . 
188)(term_list . 189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 428)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 423)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
425)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
423)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
421)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 421)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(name . 163)(primary . 
420)(qualified_expression . 54)(selected_component . 55))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(case_expression . 
158)(conditional_quantified_expression . 159)(expression . 160)(factor . 
161)(if_expression . 162)(name . 163)(pragma_argument_association . 
418)(primary . 166)(qualified_expression . 54)(quantified_expression . 
167)(raise_expression . 168)(relation_and_list . 169)(relation_and_then_list . 
170)(relation_or_list . 171)(relation_or_else_list . 172)(relation_xor_list . 
173)(relation . 174)(selected_component . 55)(simple_e [...]
-      ((aggregate . 157)(attribute_reference . 51)(expression . 417)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
418)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
417)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
415)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 413)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       ((actual_parameter_part . 92))
-      ((actual_parameter_part . 92))
-      nil
-      nil
+      ((attribute_reference . 51)(name . 410)(qualified_expression . 
54)(selected_component . 55))
       nil
+      ((actual_parameter_part . 92))
       nil
       nil
       nil
       nil
-      ((iterator_specification . 409))
       nil
+      ((relational_operator . 404))
       nil
       nil
+      ((iterator_specification . 403))
       nil
       nil
-      ((function_specification . 16)(procedure_specification . 
32)(subprogram_specification . 404))
       nil
       nil
       nil
+      ((function_specification . 16)(procedure_specification . 
32)(subprogram_specification . 398))
       nil
-      ((attribute_reference . 51)(name . 401)(qualified_expression . 
54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 400)(qualified_expression . 
54)(selected_component . 55))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 677))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 676))
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(handled_sequence_of_statements . 659)(if_statement . 660)(iteration_scheme 
. 661)(label_opt . 662)(loop_statement . 663)(name . 664)(pragma . 
665)(procedure_call_statement . 666)(qualified_expression . 54)(ra [...]
       nil
-      ((aspect_specification_opt . 629))
       nil
       nil
-      ((case_expression_alternative . 625)(case_expression_alternative_list . 
626))
+      ((attribute_reference . 51)(name . 395)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 394)(qualified_expression . 
54)(selected_component . 55))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 669))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 668))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(handled_sequence_of_statements . 651)(if_statement . 652)(iteration_scheme 
. 653)(label_opt . 654)(loop_statement . 655)(name . 656)(pragma . 
657)(procedure_call_statement . 658)(qualified_expression . 54)(ra [...]
       nil
+      ((aspect_specification_opt . 621))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 619)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(association_opt . 184)(association_list . 
618)(attribute_reference . 51)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 192)(discrete_choice 
. 193)(discrete_choice_list . 194)(expression . 195)(expression_opt . 
196)(factor . 161)(name . 197)(primary . 166)(qualified_expression . 
54)(raise_expression .  [...]
       nil
+      ((case_expression_alternative . 617)(case_expression_alternative_list . 
618))
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 615)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 611)(term . 188)(term_list . 189)(unary_adding_operator 
. 190))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 610)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(association_opt . 159)(association_list . 
609)(attribute_reference . 51)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 168)(discrete_choice 
. 170)(discrete_choice_list . 171)(expression . 172)(expression_opt . 
173)(factor . 174)(name . 176)(primary . 177)(qualified_expression . 
54)(raise_expression .  [...]
       nil
       nil
       nil
+      ((actual_parameter_part . 92))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 606)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 613)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 612)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
+      ((relational_operator . 601))
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 611)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
605)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
604)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 610)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
603)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
602)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
-      ((multiplying_operator . 363))
       nil
       nil
       nil
+      ((relational_operator . 601))
       nil
-      ((aspect_specification_opt . 129))
-      ((aliased_opt . 603))
-      ((attribute_reference . 51)(name . 243)(name_opt . 
600)(qualified_expression . 54)(selected_component . 55))
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 599)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
       nil
-      ((access_definition . 597)(null_exclusion_opt . 598))
-      ((discriminant_part_opt . 595))
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 599)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
       nil
-      ((aspect_specification_opt . 592))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 598)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
       nil
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 597)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
       nil
-      ((aspect_specification_opt . 588))
-      ((attribute_reference . 51)(name . 587)(qualified_expression . 
54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 596)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
       nil
       nil
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 
174)(membership_choice_list . 595)(membership_choice . 447)(name . 176)(primary 
. 177)(qualified_expression . 54)(range . 448)(selected_component . 
55)(simple_expression . 449)(term . 188)(term_list . 189)(unary_adding_operator 
. 190))
       nil
-      ((actual_parameter_part . 92))
-      ((actual_parameter_part . 92))
       nil
       nil
       nil
-      ((relational_operator . 579))
       nil
+      ((multiplying_operator . 335))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
583)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
582)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
581)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
580)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
       nil
+      ((aspect_specification_opt . 129))
+      ((aliased_opt . 587))
+      ((attribute_reference . 51)(name . 237)(name_opt . 
584)(qualified_expression . 54)(selected_component . 55))
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 583)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
+      ((access_definition . 581)(null_exclusion_opt . 582))
+      ((discriminant_part_opt . 579))
       nil
       nil
-      ((relational_operator . 579))
+      ((aspect_specification_opt . 576))
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 
161)(membership_choice_list . 577)(membership_choice . 481)(name . 197)(primary 
. 166)(qualified_expression . 54)(range . 482)(selected_component . 
55)(simple_expression . 483)(term . 176)(term_list . 177)(unary_adding_operator 
. 178))
+      ((aspect_specification_opt . 572))
+      ((attribute_reference . 51)(name . 571)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
       nil
       nil
+      ((actual_parameter_part . 92))
       nil
       nil
       nil
@@ -3647,9 +3630,9 @@
       nil
       nil
       nil
-      ((access_definition . 568)(attribute_reference . 51)(name . 
569)(null_exclusion_opt . 517)(null_exclusion_opt_name_type . 
570)(qualified_expression . 54)(selected_component . 571))
+      ((access_definition . 560)(attribute_reference . 51)(name . 
561)(null_exclusion_opt . 509)(null_exclusion_opt_name_type . 
562)(qualified_expression . 54)(selected_component . 563))
       nil
-      ((discriminant_specification_opt . 565)(identifier_list . 263))
+      ((discriminant_specification_opt . 557)(identifier_list . 257))
       nil
       nil
       nil
@@ -3663,48 +3646,48 @@
       nil
       nil
       nil
-      ((aspect_specification_opt . 552))
+      ((aspect_specification_opt . 544))
       nil
       nil
       nil
       nil
       nil
-      ((aspect_specification_opt . 547))
+      ((aspect_specification_opt . 539))
       nil
       nil
       nil
       nil
       nil
-      ((aspect_specification_opt . 544))
-      ((attribute_reference . 51)(name . 543)(qualified_expression . 
54)(selected_component . 55))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 542))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 540)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aspect_specification_opt . 536))
+      ((attribute_reference . 51)(name . 535)(qualified_expression . 
54)(selected_component . 55))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 534))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 532)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
       nil
       nil
-      ((attribute_reference . 51)(name . 538)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 530)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
-      ((access_definition . 534)(mode_opt . 535)(null_exclusion_opt . 517))
+      ((access_definition . 526)(mode_opt . 527)(null_exclusion_opt . 509))
       nil
       nil
-      ((null_exclusion_opt . 813))
-      ((formal_part . 93)(parameter_and_result_profile . 812))
-      ((formal_part . 117)(parameter_profile_opt . 811))
+      ((null_exclusion_opt . 804))
+      ((formal_part . 93)(parameter_and_result_profile . 803))
+      ((formal_part . 117)(parameter_profile_opt . 802))
       ((actual_parameter_part . 92))
       nil
-      ((aspect_specification_opt . 809))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 808)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aspect_specification_opt . 800))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 799)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((actual_parameter_part . 92)(formal_package_actual_part . 806))
+      ((actual_parameter_part . 92)(formal_package_actual_part . 797))
       nil
       nil
       nil
       nil
       nil
-      ((attribute_reference . 51)(name . 802)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 793)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
       nil
@@ -3716,7 +3699,7 @@
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(discrete_subtype_definition 
. 790)(discrete_subtype_definition_list . 791)(factor . 
161)(index_subtype_definition . 792)(index_subtype_definition_list . 793)(name 
. 794)(primary . 166)(qualified_expression . 54)(range . 
740)(selected_component . 55)(simple_expression . 487)(subtype_indication . 
741)(term . 176)(term_list . 177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(discrete_subtype_definition 
. 781)(discrete_subtype_definition_list . 782)(factor . 
174)(index_subtype_definition . 783)(index_subtype_definition_list . 784)(name 
. 785)(primary . 177)(qualified_expression . 54)(range . 
732)(selected_component . 55)(simple_expression . 479)(subtype_indication . 
733)(term . 188)(term_list . 189)(unary_adding_operator . 190))
       nil
       nil
       nil
@@ -3731,77 +3714,77 @@
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 
161)(membership_choice . 785)(name . 197)(primary . 166)(qualified_expression . 
54)(range . 482)(selected_component . 55)(simple_expression . 483)(term . 
176)(term_list . 177)(unary_adding_operator . 178))
+      ((aggregate . 775)(record_rep . 776))
+      nil
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 772)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 191))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 784)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 783)(term . 176)(term_list . 177)(unary_adding_operator 
. 178))
+      ((discriminant_part_opt . 769))
+      ((aspect_specification_opt . 720))
+      ((attribute_reference . 51)(name . 724)(qualified_expression . 
54)(selected_component . 55)(subtype_indication . 767))
       nil
+      ((discriminant_part_opt . 764))
+      ((aspect_specification_opt . 719))
       nil
       nil
       nil
-      ((aggregate . 781)(record_rep . 782))
+      ((attribute_reference . 51)(name . 758)(qualified_expression . 
54)(selected_component . 55))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 778)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 179))
       nil
-      ((discriminant_part_opt . 775))
-      ((aspect_specification_opt . 728))
-      ((attribute_reference . 51)(name . 732)(qualified_expression . 
54)(selected_component . 55)(subtype_indication . 773))
       nil
-      ((discriminant_part_opt . 770))
-      ((aspect_specification_opt . 727))
       nil
+      ((constant_opt . 754))
       nil
       nil
-      ((attribute_reference . 51)(name . 764)(qualified_expression . 
54)(selected_component . 55))
+      ((paren_expression . 749))
+      ((formal_part . 117)(parameter_profile_opt . 747))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(handled_sequence_of_statements . 745)(if_statement . 652)(iteration_scheme 
. 653)(label_opt . 654)(loop_statement . 655)(name . 656)(pragma . 
657)(procedure_call_statement . 658)(qualified_expression . 54)(ra [...]
+      ((attribute_reference . 51)(name . 237)(name_opt . 
744)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 
174)(membership_choice . 743)(name . 176)(primary . 177)(qualified_expression . 
54)(range . 448)(selected_component . 55)(simple_expression . 449)(term . 
188)(term_list . 189)(unary_adding_operator . 190))
       nil
       nil
       nil
       nil
-      ((constant_opt . 760))
       nil
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 742)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 741)(term . 188)(term_list . 189)(unary_adding_operator 
. 190))
       nil
-      ((paren_expression . 755))
-      ((formal_part . 117)(parameter_profile_opt . 753))
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(handled_sequence_of_statements . 751)(if_statement . 660)(iteration_scheme 
. 661)(label_opt . 662)(loop_statement . 663)(name . 664)(pragma . 
665)(procedure_call_statement . 666)(qualified_expression . 54)(ra [...]
-      ((attribute_reference . 51)(name . 243)(name_opt . 
750)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 749)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
       nil
       nil
       nil
+      ((elsif_expression_item . 737)(elsif_expression_list . 738))
       nil
-      ((elsif_expression_item . 745)(elsif_expression_list . 746))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 742)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(discrete_subtype_definition 
. 738)(factor . 161)(name . 739)(primary . 166)(qualified_expression . 
54)(range . 740)(selected_component . 55)(simple_expression . 
487)(subtype_indication . 741)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((attribute_reference . 51)(name . 735)(qualified_expression . 
54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 732)(qualified_expression . 
54)(selected_component . 55)(subtype_indication . 733))
-      ((aggregate . 157)(attribute_reference . 51)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 192)(discrete_choice 
. 193)(discrete_choice_list . 730)(factor . 161)(name . 197)(primary . 
166)(qualified_expression . 54)(range . 198)(selected_component . 
55)(simple_expression . 475)(term . 176)(term_list . 177)(unary_adding_o [...]
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 734)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(discrete_subtype_definition 
. 730)(factor . 174)(name . 731)(primary . 177)(qualified_expression . 
54)(range . 732)(selected_component . 55)(simple_expression . 
479)(subtype_indication . 733)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((attribute_reference . 51)(name . 727)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 724)(qualified_expression . 
54)(selected_component . 55)(subtype_indication . 725))
+      ((aggregate . 158)(attribute_reference . 51)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 168)(discrete_choice 
. 170)(discrete_choice_list . 722)(factor . 174)(name . 176)(primary . 
177)(qualified_expression . 54)(range . 180)(selected_component . 
55)(simple_expression . 430)(term . 188)(term_list . 189)(unary_adding_o [...]
       nil
       nil
-      ((aspect_specification_opt . 728))
-      ((aspect_specification_opt . 727))
+      ((aspect_specification_opt . 720))
+      ((aspect_specification_opt . 719))
       nil
       nil
-      ((attribute_reference . 51)(name . 725)(qualified_expression . 
54)(selected_component . 55))
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(handled_sequence_of_statements . 724)(if_statement . 660)(iteration_scheme 
. 661)(label_opt . 662)(loop_statement . 663)(name . 664)(pragma . 
665)(procedure_call_statement . 666)(qualified_expression . 54)(ra [...]
-      ((aggregate . 157)(attribute_reference . 51)(expression . 
195)(expression_opt . 723)(factor . 161)(name . 163)(primary . 
166)(qualified_expression . 54)(raise_expression . 168)(relation_and_list . 
169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 722)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
-      ((aggregate . 157)(attribute_reference . 51)(expression . 721)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((identifier_opt . 719))
-      ((iterator_specification . 716)(iterator_specification_opt . 717))
+      ((attribute_reference . 51)(name . 717)(qualified_expression . 
54)(selected_component . 55))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(handled_sequence_of_statements . 716)(if_statement . 652)(iteration_scheme 
. 653)(label_opt . 654)(loop_statement . 655)(name . 656)(pragma . 
657)(procedure_call_statement . 658)(qualified_expression . 54)(ra [...]
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 715)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 714)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 713)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((identifier_opt . 711))
+      ((iterator_specification . 708)(iterator_specification_opt . 709))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 
195)(expression_opt . 714)(factor . 161)(name . 163)(primary . 
166)(qualified_expression . 54)(raise_expression . 168)(relation_and_list . 
169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 706)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
-      ((attribute_reference . 51)(name . 711)(qualified_expression . 
54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 709)(qualified_expression . 
54)(selected_component . 55))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 
706)(extended_return_object_declaration . 
707)(extended_return_object_declaration_opt . 708)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_op [...]
-      ((accept_statement . 694)(attribute_reference . 51)(delay_alternative . 
695)(delay_statement . 696)(entry_call_alternative . 697)(name . 
698)(procedure_call_statement . 699)(qualified_expression . 
54)(selected_component . 55)(select_alternative . 700)(select_alternative_list 
. 701)(select_alternative_list_opt . 702)(triggering_alternative . 703))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 
195)(expression_opt . 691)(factor . 161)(name . 163)(primary . 
166)(qualified_expression . 54)(raise_expression . 168)(relation_and_list . 
169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((attribute_reference . 51)(name . 703)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 701)(qualified_expression . 
54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 698)(extended_return_object_declaration . 
699)(extended_return_object_declaration_opt . 700)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 
179)(relation_and_list . 181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list  
[...]
+      ((accept_statement . 686)(attribute_reference . 51)(delay_alternative . 
687)(delay_statement . 688)(entry_call_alternative . 689)(name . 
690)(procedure_call_statement . 691)(qualified_expression . 
54)(selected_component . 55)(select_alternative . 692)(select_alternative_list 
. 693)(select_alternative_list_opt . 694)(triggering_alternative . 695))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 683)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
@@ -3817,7 +3800,7 @@
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(compound_statement . 685)(conditional_entry_call . 
654)(delay_statement . 655)(exit_statement . 656)(extended_return_statement . 
657)(if_statement . 660)(iteration_scheme . 661)(loop_statement . 663)(name . 
664)(pragma . 665)(procedure_call_statement . 666)(qualified_expression . 
54)(raise_statement . 667)(requeue_statement . 668)(s [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(compound_statement . 677)(conditional_entry_call . 
646)(delay_statement . 647)(exit_statement . 648)(extended_return_statement . 
649)(if_statement . 652)(iteration_scheme . 653)(loop_statement . 655)(name . 
656)(pragma . 657)(procedure_call_statement . 658)(qualified_expression . 
54)(raise_statement . 659)(requeue_statement . 660)(s [...]
       nil
       ((actual_parameter_part . 92))
       nil
@@ -3826,7 +3809,7 @@
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
681)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
673)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
       nil
       nil
@@ -3835,26 +3818,26 @@
       nil
       nil
       nil
-      ((exception_handler . 953)(exception_handler_list . 
954)(exception_handler_list_opt . 955))
+      ((exception_handler . 944)(exception_handler_list . 
945)(exception_handler_list_opt . 946))
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 951)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 942)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
-      ((attribute_reference . 51)(name . 243)(name_opt . 
949)(qualified_expression . 54)(selected_component . 55))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
+      ((attribute_reference . 51)(name . 237)(name_opt . 
940)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 946)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 937)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
-      ((accept_statement . 649)(actual_parameter_part . 
92)(assignment_statement . 650)(asynchronous_select . 651)(attribute_reference 
. 51)(block_statement . 652)(case_statement . 653)(conditional_entry_call . 
654)(delay_statement . 655)(exit_statement . 656)(extended_return_statement . 
657)(goto_label . 658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statem [...]
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(actual_parameter_part . 
92)(assignment_statement . 642)(asynchronous_select . 643)(attribute_reference 
. 51)(block_statement . 644)(case_statement . 645)(conditional_entry_call . 
646)(delay_statement . 647)(exit_statement . 648)(extended_return_statement . 
649)(goto_label . 650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statem [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
       nil
       nil
@@ -3875,108 +3858,107 @@
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 922)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 913)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
       nil
       ((actual_parameter_part . 92))
-      ((actual_parameter_part . 915)(actual_parameter_part_opt . 916))
+      ((actual_parameter_part . 906)(actual_parameter_part_opt . 907))
       nil
       nil
-      ((case_expression_alternative . 911))
+      ((case_expression_alternative . 902))
       nil
       nil
-      ((actual_parameter_part . 92)(constraint . 831)(index_constraint . 832))
+      ((actual_parameter_part . 92)(constraint . 822)(index_constraint . 823))
       nil
-      ((attribute_reference . 51)(name . 907)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 898)(qualified_expression . 
54)(selected_component . 55))
       ((actual_parameter_part . 92))
-      ((aggregate . 157)(attribute_reference . 51)(name . 163)(primary . 
298)(qualified_expression . 54)(selected_component . 55))
-      ((aggregate . 157)(attribute_reference . 51)(discrete_subtype_definition 
. 905)(factor . 161)(name . 739)(primary . 166)(qualified_expression . 
54)(range . 740)(selected_component . 55)(simple_expression . 
487)(subtype_indication . 741)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(name . 325)(primary . 
371)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(discrete_subtype_definition 
. 896)(factor . 174)(name . 731)(primary . 177)(qualified_expression . 
54)(range . 732)(selected_component . 55)(simple_expression . 
479)(subtype_indication . 733)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((actual_parameter_part . 92)(constraint . 831)(index_constraint . 832))
+      ((actual_parameter_part . 92)(constraint . 822)(index_constraint . 823))
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 903)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 902)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 894)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 893)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((elsif_expression_item . 901))
+      ((elsif_expression_item . 892))
       nil
       nil
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(discrete_subtype_definition 
. 896)(factor . 161)(identifier_list . 236)(name . 739)(parameter_specification 
. 237)(parameter_specification_list . 238)(primary . 166)(qualified_expression 
. 54)(range . 740)(selected_component . 55)(simple_expression . 
487)(subtype_indication . 741)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aspect_specification_opt . 895))
-      ((aggregate . 157)(attribute_reference . 51)(case_expression . 
158)(conditional_quantified_expression . 893)(expression . 894)(factor . 
161)(if_expression . 162)(name . 163)(primary . 166)(qualified_expression . 
54)(quantified_expression . 167)(raise_expression . 168)(relation_and_list . 
169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_l [...]
-      ((aspect_specification_opt . 892))
-      ((aspect_specification_opt . 891))
-      ((aspect_specification_opt . 890))
-      ((aspect_specification_opt . 889))
       nil
-      ((access_definition . 886)(array_type_definition . 
887)(attribute_reference . 51)(name . 732)(null_exclusion_opt . 
517)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 
888))
-      nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 884)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((attribute_reference . 51)(name . 243)(name_opt . 
883)(qualified_expression . 54)(selected_component . 55))
-      ((actual_parameter_part . 92))
-      ((attribute_reference . 51)(name . 881)(qualified_expression . 
54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 880)(qualified_expression . 
54)(selected_component . 55))
-      ((abstract_limited_synchronized_opt . 870)(abstract_limited_opt . 
871)(abstract_tagged_limited_opt . 872)(access_definition . 
873)(array_type_definition . 874)(derived_type_definition . 
875)(enumeration_type_definition . 876)(interface_type_definition . 
877)(null_exclusion_opt . 517)(record_type_definition . 878)(type_definition . 
879))
       nil
+      ((aggregate . 158)(attribute_reference . 51)(discrete_subtype_definition 
. 886)(factor . 174)(identifier_list . 230)(name . 731)(parameter_specification 
. 231)(parameter_specification_list . 232)(primary . 177)(qualified_expression 
. 54)(range . 732)(selected_component . 55)(simple_expression . 
479)(subtype_indication . 733)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aspect_specification_opt . 885))
+      ((aggregate . 158)(attribute_reference . 51)(case_expression . 
161)(conditional_quantified_expression . 883)(expression . 172)(expression_opt 
. 884)(factor . 174)(if_expression . 175)(name . 325)(primary . 
177)(qualified_expression . 54)(quantified_expression . 178)(raise_expression . 
179)(relation_and_list . 181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 3 [...]
+      ((aspect_specification_opt . 882))
+      ((aspect_specification_opt . 881))
+      ((aspect_specification_opt . 880))
+      ((aspect_specification_opt . 879))
       nil
-      ((aspect_specification_opt . 858))
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 856)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
+      ((access_definition . 876)(array_type_definition . 
877)(attribute_reference . 51)(name . 724)(null_exclusion_opt . 
509)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 
878))
       nil
-      ((aspect_specification_opt . 854))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 874)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((attribute_reference . 51)(name . 237)(name_opt . 
873)(qualified_expression . 54)(selected_component . 55))
+      ((actual_parameter_part . 92))
+      ((attribute_reference . 51)(name . 871)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 870)(qualified_expression . 
54)(selected_component . 55))
+      ((abstract_limited_synchronized_opt . 860)(abstract_limited_opt . 
861)(abstract_tagged_limited_opt . 862)(access_definition . 
863)(array_type_definition . 864)(derived_type_definition . 
865)(enumeration_type_definition . 866)(interface_type_definition . 
867)(null_exclusion_opt . 509)(record_type_definition . 868)(type_definition . 
869))
       nil
-      ((aspect_specification_opt . 852))
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 850)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
       nil
+      ((aspect_specification_opt . 848))
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 846)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 846)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((mod_clause_opt . 845))
+      ((aspect_specification_opt . 844))
       nil
+      ((aspect_specification_opt . 842))
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 840)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
       nil
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 836)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((mod_clause_opt . 835))
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 840)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 839)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((attribute_reference . 51)(name . 569)(qualified_expression . 
54)(selected_component . 838))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 831)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 830)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((attribute_reference . 51)(name . 561)(qualified_expression . 
54)(selected_component . 829))
       nil
       nil
       nil
       nil
       nil
-      ((actual_parameter_part . 92)(constraint . 831)(index_constraint . 832))
+      ((actual_parameter_part . 92)(constraint . 822)(index_constraint . 823))
       nil
       nil
-      ((attribute_reference . 51)(interface_list . 827)(name . 
824)(qualified_expression . 54)(selected_component . 55))
-      ((attribute_reference . 51)(interface_list . 826)(name . 
824)(qualified_expression . 54)(selected_component . 55))
-      ((attribute_reference . 51)(interface_list . 825)(name . 
824)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(interface_list . 818)(name . 
815)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(interface_list . 817)(name . 
815)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(interface_list . 816)(name . 
815)(qualified_expression . 54)(selected_component . 55))
       nil
-      ((attribute_reference . 51)(interface_list . 823)(name . 
824)(qualified_expression . 54)(selected_component . 55))
-      ((actual_parameter_part . 92)(and_interface_list_opt . 822))
+      ((attribute_reference . 51)(interface_list . 814)(name . 
815)(qualified_expression . 54)(selected_component . 55))
+      ((actual_parameter_part . 92)(and_interface_list_opt . 813))
       nil
       nil
-      ((aggregate . 157)(association_opt . 184)(association_list . 
201)(attribute_reference . 51)(case_expression . 158)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 
192)(conditional_quantified_expression . 202)(discrete_choice . 
193)(discrete_choice_list . 194)(expression . 195)(expression_opt . 196)(factor 
. 161)(if_expres [...]
-      ((aspect_specification_opt . 819))
+      ((aggregate . 158)(association_opt . 159)(association_list . 
195)(attribute_reference . 51)(case_expression . 161)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 
168)(conditional_quantified_expression . 196)(discrete_choice . 
170)(discrete_choice_list . 171)(expression . 172)(expression_opt . 173)(factor 
. 174)(if_expres [...]
+      ((aspect_specification_opt . 810))
       nil
-      ((aspect_specification_opt . 818))
+      ((aspect_specification_opt . 809))
       nil
-      ((identifier_list . 236)(parameter_specification . 
237)(parameter_specification_list . 238))
+      ((identifier_list . 230)(parameter_specification . 
231)(parameter_specification_list . 232))
       nil
       nil
-      ((attribute_reference . 51)(name . 816)(qualified_expression . 
54)(selected_component . 55))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 815)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((attribute_reference . 51)(name . 807)(qualified_expression . 
54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 806)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       ((actual_parameter_part . 92))
       nil
       nil
       nil
       nil
-      ((attribute_reference . 51)(interface_list . 1082)(name . 
824)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(interface_list . 1073)(name . 
815)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
       ((actual_parameter_part . 92))
@@ -3984,14 +3966,14 @@
       nil
       nil
       nil
-      ((aggregate . 157)(association_opt . 184)(association_list . 
201)(attribute_reference . 51)(case_expression . 158)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 
192)(conditional_quantified_expression . 202)(discrete_choice . 
193)(discrete_choice_list . 194)(discrete_subtype_definition . 
790)(discrete_subtype_definition_ [...]
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
197)(primary . 166)(qualified_expression . 54)(range . 1003)(selected_component 
. 55)(simple_expression . 487)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(association_opt . 159)(association_list . 
195)(attribute_reference . 51)(case_expression . 161)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 
168)(conditional_quantified_expression . 196)(discrete_choice . 
170)(discrete_choice_list . 171)(discrete_subtype_definition . 
781)(discrete_subtype_definition_ [...]
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
176)(primary . 177)(qualified_expression . 54)(range . 994)(selected_component 
. 55)(simple_expression . 479)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
-      ((attribute_reference . 51)(index_subtype_definition . 1073)(name . 
1074)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(index_subtype_definition . 1064)(name . 
1065)(qualified_expression . 54)(selected_component . 55))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(discrete_subtype_definition 
. 1071)(factor . 161)(name . 739)(primary . 166)(qualified_expression . 
54)(range . 740)(selected_component . 55)(simple_expression . 
487)(subtype_indication . 741)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(discrete_subtype_definition 
. 1062)(factor . 174)(name . 731)(primary . 177)(qualified_expression . 
54)(range . 732)(selected_component . 55)(simple_expression . 
479)(subtype_indication . 733)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
@@ -3999,51 +3981,51 @@
       nil
       nil
       nil
+      ((component_clause . 1059)(component_clause_list . 1060))
       nil
-      ((component_clause . 1068)(component_clause_list . 1069))
       nil
+      ((aspect_specification_opt . 1056))
+      ((attribute_reference . 51)(interface_list . 1055)(name . 
815)(qualified_expression . 54)(selected_component . 55))
       nil
-      ((aspect_specification_opt . 1065))
-      ((attribute_reference . 51)(interface_list . 1064)(name . 
824)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
+      ((aspect_specification_opt . 1050))
       nil
-      ((aspect_specification_opt . 1059))
+      ((attribute_reference . 51)(interface_list . 1048)(name . 
815)(qualified_expression . 54)(selected_component . 55))
       nil
-      ((attribute_reference . 51)(interface_list . 1057)(name . 
824)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
+      ((aspect_specification_opt . 1042))
       nil
-      ((aspect_specification_opt . 1051))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1040)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1039)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((enumeration_literal . 1037)(enumeration_literal_list . 1038))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1049)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1048)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((enumeration_literal . 1046)(enumeration_literal_list . 1047))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1034)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1043)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1032)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aspect_clause . 1025)(at_clause . 278)(component_declaration . 
1026)(component_item . 1027)(component_list . 1028)(component_list_opt . 
1029)(enumeration_representation_clause . 285)(identifier_list . 
1030)(record_representation_clause . 309)(variant_part . 1031))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1041)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aspect_clause . 1034)(at_clause . 308)(component_declaration . 
1035)(component_item . 1036)(component_list . 1037)(component_list_opt . 
1038)(enumeration_representation_clause . 315)(identifier_list . 
1039)(record_representation_clause . 339)(variant_part . 1040))
       nil
       nil
+      ((record_definition . 1019))
       nil
-      ((record_definition . 1028))
       nil
       nil
       nil
       nil
       nil
+      ((aspect_specification_opt . 1017))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 1016))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 1015))
+      ((attribute_reference . 51)(name . 1014)(qualified_expression . 
54)(selected_component . 55))
       nil
-      ((aspect_specification_opt . 1026))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 1025))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 1024))
-      ((attribute_reference . 51)(name . 1023)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
+      ((aspect_specification_opt . 1011))
+      ((aspect_specification_opt . 1009))
+      ((aspect_specification_opt . 1007))
       nil
-      ((aspect_specification_opt . 1020))
-      ((aspect_specification_opt . 1018))
-      ((aspect_specification_opt . 1016))
       nil
       nil
       nil
@@ -4051,54 +4033,54 @@
       nil
       nil
       nil
+      ((attribute_reference . 51)(name . 237)(name_opt . 
997)(qualified_expression . 54)(selected_component . 55))
       nil
-      ((attribute_reference . 51)(name . 243)(name_opt . 
1006)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1005)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 996)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
197)(primary . 166)(qualified_expression . 54)(range . 1003)(selected_component 
. 55)(simple_expression . 487)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
176)(primary . 177)(qualified_expression . 54)(range . 994)(selected_component 
. 55)(simple_expression . 479)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((attribute_reference . 51)(name . 1000)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 991)(qualified_expression . 
54)(selected_component . 55))
       ((actual_parameter_part . 92))
-      ((attribute_reference . 51)(name . 1002)(qualified_expression . 
54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 1000)(qualified_expression . 
54)(selected_component . 55))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 999)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((attribute_reference . 51)(name . 993)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 991)(qualified_expression . 
54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 990)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aspect_clause . 989)(at_clause . 308)(entry_body . 
990)(enumeration_representation_clause . 315)(expression_function_declaration . 
991)(function_specification . 16)(null_procedure_declaration . 
992)(overriding_indicator_opt . 993)(procedure_specification . 
32)(protected_operation_item . 994)(protected_operation_item_list . 
995)(protected_operation_item_list_opt . 996)(record_representation_clause . 
339)(subprogram_body . 997)(subprogram_declaration . 998))
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 987)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
-      ((aggregate . 157)(association_opt . 184)(association_list . 
201)(attribute_reference . 51)(case_expression . 158)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 
192)(conditional_quantified_expression . 202)(discrete_choice . 
193)(discrete_choice_list . 194)(expression . 195)(expression_opt . 196)(factor 
. 161)(if_expres [...]
+      ((aspect_clause . 980)(at_clause . 278)(entry_body . 
981)(enumeration_representation_clause . 285)(expression_function_declaration . 
982)(function_specification . 16)(null_procedure_declaration . 
983)(overriding_indicator_opt . 984)(procedure_specification . 
32)(protected_operation_item . 985)(protected_operation_item_list . 
986)(protected_operation_item_list_opt . 987)(record_representation_clause . 
309)(subprogram_body . 988)(subprogram_declaration . 989))
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 978)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
+      ((aggregate . 158)(association_opt . 159)(association_list . 
195)(attribute_reference . 51)(case_expression . 161)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 
168)(conditional_quantified_expression . 196)(discrete_choice . 
170)(discrete_choice_list . 171)(expression . 172)(expression_opt . 173)(factor 
. 174)(if_expres [...]
       nil
-      ((formal_part . 117)(parameter_profile_opt . 986))
+      ((formal_part . 117)(parameter_profile_opt . 977))
       nil
-      ((identifier_opt . 985))
-      ((case_statement_alternative . 983)(case_statement_alternative_list . 
984))
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(handled_sequence_of_statements . 981)(if_statement . 660)(iteration_scheme 
. 661)(label_opt . 662)(loop_statement . 663)(name . 664)(pragma . 
665)(procedure_call_statement . 666)(qualified_expression . 54)(ra [...]
+      ((identifier_opt . 976))
+      ((case_statement_alternative . 974)(case_statement_alternative_list . 
975))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(handled_sequence_of_statements . 972)(if_statement . 652)(iteration_scheme 
. 653)(label_opt . 654)(loop_statement . 655)(name . 656)(pragma . 
657)(procedure_call_statement . 658)(qualified_expression . 54)(ra [...]
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 
195)(expression_opt . 979)(factor . 161)(name . 163)(primary . 
166)(qualified_expression . 54)(raise_expression . 168)(relation_and_list . 
169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 970)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 976)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 967)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(handled_sequence_of_statements . 974)(if_statement . 660)(iteration_scheme 
. 661)(label_opt . 662)(loop_statement . 663)(name . 664)(pragma . 
665)(procedure_call_statement . 666)(qualified_expression . 54)(ra [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(handled_sequence_of_statements . 965)(if_statement . 652)(iteration_scheme 
. 653)(label_opt . 654)(loop_statement . 655)(name . 656)(pragma . 
657)(procedure_call_statement . 658)(qualified_expression . 54)(ra [...]
       nil
       nil
-      ((aliased_opt . 973))
+      ((aliased_opt . 964))
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
-      ((accept_statement . 694)(delay_alternative . 695)(delay_statement . 
967)(select_alternative . 969))
+      ((accept_statement . 686)(delay_alternative . 687)(delay_statement . 
958)(select_alternative . 960))
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
-      ((delay_alternative . 966)(delay_statement . 967))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
+      ((delay_alternative . 957)(delay_statement . 958))
       nil
       nil
       nil
@@ -4107,9 +4089,9 @@
       nil
       nil
       nil
-      ((attribute_reference . 51)(exception_choice . 
959)(exception_choice_list . 960)(name . 961)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(exception_choice . 
950)(exception_choice_list . 951)(name . 952)(qualified_expression . 
54)(selected_component . 55))
       nil
-      ((exception_handler . 956))
+      ((exception_handler . 947))
       nil
       nil
       nil
@@ -4120,26 +4102,26 @@
       nil
       nil
       nil
-      ((accept_statement . 1179)(delay_alternative . 1180)(delay_statement . 
967))
+      ((accept_statement . 1170)(delay_alternative . 1171)(delay_statement . 
958))
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
-      ((constant_opt . 1171))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
+      ((constant_opt . 1162))
       nil
       nil
       nil
-      ((identifier_opt . 1167))
-      ((elsif_statement_item . 1165)(elsif_statement_list . 1166))
+      ((identifier_opt . 1158))
+      ((elsif_statement_item . 1156)(elsif_statement_list . 1157))
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 192)(discrete_choice 
. 193)(discrete_choice_list . 1159)(factor . 161)(name . 197)(primary . 
166)(qualified_expression . 54)(range . 198)(selected_component . 
55)(simple_expression . 475)(term . 176)(term_list . 177)(unary_adding_ [...]
+      ((aggregate . 158)(attribute_reference . 51)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 168)(discrete_choice 
. 170)(discrete_choice_list . 1150)(factor . 174)(name . 176)(primary . 
177)(qualified_expression . 54)(range . 180)(selected_component . 
55)(simple_expression . 430)(term . 188)(term_list . 189)(unary_adding_ [...]
       nil
-      ((case_statement_alternative . 1158))
+      ((case_statement_alternative . 1149))
       nil
       nil
       nil
@@ -4148,21 +4130,21 @@
       nil
       nil
       nil
-      ((function_specification . 436)(procedure_specification . 
437)(subprogram_specification . 1151))
+      ((function_specification . 454)(procedure_specification . 
455)(subprogram_specification . 1142))
       nil
-      ((aspect_clause . 989)(at_clause . 308)(entry_body . 
990)(enumeration_representation_clause . 315)(expression_function_declaration . 
991)(function_specification . 16)(null_procedure_declaration . 
992)(overriding_indicator_opt . 993)(procedure_specification . 
32)(protected_operation_item . 1150)(record_representation_clause . 
339)(subprogram_body . 997)(subprogram_declaration . 998))
+      ((aspect_clause . 980)(at_clause . 278)(entry_body . 
981)(enumeration_representation_clause . 285)(expression_function_declaration . 
982)(function_specification . 16)(null_procedure_declaration . 
983)(overriding_indicator_opt . 984)(procedure_specification . 
32)(protected_operation_item . 1141)(record_representation_clause . 
309)(subprogram_body . 988)(subprogram_declaration . 989))
       nil
       nil
       nil
       nil
-      ((actual_parameter_part . 92)(constraint . 1148)(index_constraint . 832))
-      ((attribute_reference . 51)(name . 1147)(qualified_expression . 
54)(selected_component . 55))
+      ((actual_parameter_part . 92)(constraint . 1139)(index_constraint . 823))
+      ((attribute_reference . 51)(name . 1138)(qualified_expression . 
54)(selected_component . 55))
       ((actual_parameter_part . 92))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1146)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1137)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
-      ((formal_part . 117)(parameter_profile_opt . 1144))
+      ((formal_part . 117)(parameter_profile_opt . 1135))
       nil
       nil
       nil
@@ -4170,29 +4152,29 @@
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1143)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1134)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1141)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1132)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1139)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1130)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((attribute_reference . 51)(name . 1000)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 991)(qualified_expression . 
54)(selected_component . 55))
       nil
-      ((actual_parameter_part . 92)(aspect_specification_opt . 1137))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 1128))
       nil
       nil
       nil
-      ((aspect_specification_opt . 1133))
+      ((aspect_specification_opt . 1124))
       nil
-      ((attribute_reference . 51)(name . 1132)(qualified_expression . 
54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 732)(qualified_expression . 
54)(selected_component . 55)(subtype_indication . 1131))
+      ((attribute_reference . 51)(name . 1123)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 724)(qualified_expression . 
54)(selected_component . 55)(subtype_indication . 1122))
       nil
-      ((direct_name . 1129)(direct_name_opt . 1130))
+      ((direct_name . 1120)(direct_name_opt . 1121))
       nil
       nil
       nil
       nil
-      ((aspect_clause . 1034)(at_clause . 308)(component_declaration . 
1035)(component_item . 1124)(enumeration_representation_clause . 
315)(identifier_list . 1039)(record_representation_clause . 339)(variant_part . 
1125))
+      ((aspect_clause . 1025)(at_clause . 278)(component_declaration . 
1026)(component_item . 1115)(enumeration_representation_clause . 
285)(identifier_list . 1030)(record_representation_clause . 309)(variant_part . 
1116))
       nil
       nil
       nil
@@ -4203,51 +4185,51 @@
       nil
       nil
       nil
-      ((real_range_specification_opt . 1118))
-      ((real_range_specification_opt . 1117))
+      ((real_range_specification_opt . 1109))
+      ((real_range_specification_opt . 1108))
       nil
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 856)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 846)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
       nil
-      ((identifier_opt . 1111))
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 1110)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(ge [...]
+      ((identifier_opt . 1102))
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 1101)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(ge [...]
       nil
       nil
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 850)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 840)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
-      ((identifier_opt . 1105))
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 1104)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(ge [...]
+      ((identifier_opt . 1096))
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 1095)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(ge [...]
       nil
       nil
       nil
       nil
       nil
-      ((component_clause . 1100))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1098)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((component_clause . 1091))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1089)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((access_definition . 1093)(attribute_reference . 
51)(component_definition . 1097)(name . 732)(null_exclusion_opt . 
517)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 
1095))
+      ((access_definition . 1084)(attribute_reference . 
51)(component_definition . 1088)(name . 724)(null_exclusion_opt . 
509)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 
1086))
       nil
       ((actual_parameter_part . 92))
-      ((access_definition . 1093)(attribute_reference . 
51)(component_definition . 1094)(name . 732)(null_exclusion_opt . 
517)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 
1095))
+      ((access_definition . 1084)(attribute_reference . 
51)(component_definition . 1085)(name . 724)(null_exclusion_opt . 
509)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 
1086))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(name . 163)(primary . 
298)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(name . 325)(primary . 
371)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
-      ((attribute_reference . 51)(name . 1089)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 1080)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1087)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1078)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       ((actual_parameter_part . 92))
       nil
-      ((attribute_reference . 51)(name . 1245)(qualified_expression . 
54)(selected_component . 55))
-      ((access_definition . 1243)(attribute_reference . 51)(name . 
732)(null_exclusion_opt . 517)(qualified_expression . 54)(selected_component . 
55)(subtype_indication . 1244))
+      ((attribute_reference . 51)(name . 1236)(qualified_expression . 
54)(selected_component . 55))
+      ((access_definition . 1234)(attribute_reference . 51)(name . 
724)(null_exclusion_opt . 509)(qualified_expression . 54)(selected_component . 
55)(subtype_indication . 1235))
       nil
       nil
       nil
@@ -4256,28 +4238,28 @@
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1240)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1231)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 850)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 840)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
       nil
-      ((attribute_reference . 51)(interface_list . 1237)(name . 
824)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(interface_list . 1228)(name . 
815)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 856)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 846)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
       nil
-      ((attribute_reference . 51)(interface_list . 1233)(name . 
824)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(interface_list . 1224)(name . 
815)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1231)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1230)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1222)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1221)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
-      ((enumeration_literal . 1229))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1228)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((access_definition . 1093)(attribute_reference . 
51)(component_definition . 1227)(name . 732)(null_exclusion_opt . 
517)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 
1095))
+      ((enumeration_literal . 1220))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1219)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((access_definition . 1084)(attribute_reference . 
51)(component_definition . 1218)(name . 724)(null_exclusion_opt . 
509)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 
1086))
       nil
       nil
       nil
@@ -4286,47 +4268,47 @@
       nil
       nil
       nil
-      ((and_interface_list_opt . 1224))
-      ((actual_parameter_part . 92)(and_interface_list_opt . 1221)(constraint 
. 1222)(constraint_opt . 1223)(index_constraint . 832))
+      ((and_interface_list_opt . 1215))
+      ((actual_parameter_part . 92)(and_interface_list_opt . 1212)(constraint 
. 1213)(constraint_opt . 1214)(index_constraint . 823))
       nil
       nil
       nil
       nil
       nil
       nil
-      ((aspect_specification_opt . 1218))
+      ((aspect_specification_opt . 1209))
       nil
-      ((aspect_specification_opt . 1217))
+      ((aspect_specification_opt . 1208))
       nil
-      ((aspect_specification_opt . 1216))
-      ((aspect_specification_opt . 1215))
+      ((aspect_specification_opt . 1207))
+      ((aspect_specification_opt . 1206))
       nil
       nil
       ((actual_parameter_part . 92))
       nil
-      ((identifier_opt . 1214))
+      ((identifier_opt . 1205))
       nil
       ((aspect_specification_opt . 129))
-      ((entry_body_formal_part . 1212)(formal_part . 
117)(parameter_profile_opt . 1213))
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(handled_sequence_of_statements . 1210)(if_statement . 
660)(iteration_scheme . 661)(label_opt . 662)(loop_statement . 663)(name . 
664)(pragma . 665)(procedure_call_statement . 666)(qualified_expression . 54)(r 
[...]
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(handled_sequence_of_statements . 1209)(if_statement . 
660)(iteration_scheme . 661)(label_opt . 662)(loop_statement . 663)(name . 
664)(pragma . 665)(procedure_call_statement . 666)(qualified_expression . 54)(r 
[...]
+      ((entry_body_formal_part . 1203)(formal_part . 
117)(parameter_profile_opt . 1204))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(handled_sequence_of_statements . 1201)(if_statement . 
652)(iteration_scheme . 653)(label_opt . 654)(loop_statement . 655)(name . 
656)(pragma . 657)(procedure_call_statement . 658)(qualified_expression . 54)(r 
[...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(handled_sequence_of_statements . 1200)(if_statement . 
652)(iteration_scheme . 653)(label_opt . 654)(loop_statement . 655)(name . 
656)(pragma . 657)(procedure_call_statement . 658)(qualified_expression . 54)(r 
[...]
       nil
       nil
       nil
       nil
       nil
-      ((identifier_opt . 1206))
+      ((identifier_opt . 1197))
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
-      ((aggregate . 157)(attribute_reference . 51)(expression . 
195)(expression_opt . 1204)(factor . 161)(name . 163)(primary . 
166)(qualified_expression . 54)(raise_expression . 168)(relation_and_list . 
169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1195)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
-      ((elsif_statement_item . 1202))
+      ((elsif_statement_item . 1193))
       nil
       nil
       nil
       nil
-      ((access_definition . 1195)(attribute_reference . 51)(name . 
732)(null_exclusion_opt . 517)(qualified_expression . 
54)(return_subtype_indication . 1196)(selected_component . 
55)(subtype_indication . 1197))
+      ((access_definition . 1186)(attribute_reference . 51)(name . 
724)(null_exclusion_opt . 509)(qualified_expression . 
54)(return_subtype_indication . 1187)(selected_component . 
55)(subtype_indication . 1188))
       nil
       nil
       nil
@@ -4334,12 +4316,12 @@
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
-      ((identifier_opt . 1188))
-      ((attribute_reference . 51)(exception_choice . 1187)(name . 
961)(qualified_expression . 54)(selected_component . 55))
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
-      ((attribute_reference . 51)(exception_choice . 
959)(exception_choice_list . 1185)(name . 961)(qualified_expression . 
54)(selected_component . 55))
+      ((identifier_opt . 1179))
+      ((attribute_reference . 51)(exception_choice . 1178)(name . 
952)(qualified_expression . 54)(selected_component . 55))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
+      ((attribute_reference . 51)(exception_choice . 
950)(exception_choice_list . 1176)(name . 952)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
       nil
@@ -4355,18 +4337,18 @@
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
       nil
       nil
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
       nil
       nil
-      ((identifier_list . 236)(parameter_specification . 
237)(parameter_specification_list . 238))
+      ((identifier_list . 230)(parameter_specification . 
231)(parameter_specification_list . 232))
       nil
       nil
       nil
@@ -4380,68 +4362,68 @@
       nil
       nil
       nil
-      ((variant_list . 1258)(variant . 1259))
+      ((variant_list . 1249)(variant . 1250))
       nil
-      ((aspect_specification_opt . 1256))
+      ((aspect_specification_opt . 1247))
       nil
       nil
       nil
-      ((real_range_specification_opt . 1253))
+      ((real_range_specification_opt . 1244))
       nil
       nil
-      ((identifier_opt . 1251))
+      ((identifier_opt . 1242))
       nil
       nil
       nil
-      ((identifier_opt . 1248))
+      ((identifier_opt . 1239))
       nil
       nil
       nil
       nil
       nil
       nil
-      ((actual_parameter_part . 92)(constraint . 1148)(index_constraint . 832))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1308)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((actual_parameter_part . 92)(constraint . 1139)(index_constraint . 823))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1299)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 850)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 840)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 856)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 846)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1305)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1304)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1296)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1295)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 192)(discrete_choice 
. 193)(discrete_choice_list . 1302)(factor . 161)(name . 197)(primary . 
166)(qualified_expression . 54)(range . 198)(selected_component . 
55)(simple_expression . 475)(term . 176)(term_list . 177)(unary_adding_ [...]
-      ((variant . 1301))
+      ((aggregate . 158)(attribute_reference . 51)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 168)(discrete_choice 
. 170)(discrete_choice_list . 1293)(factor . 174)(name . 176)(primary . 
177)(qualified_expression . 54)(range . 180)(selected_component . 
55)(simple_expression . 430)(term . 188)(term_list . 189)(unary_adding_ [...]
+      ((variant . 1292))
       nil
       nil
-      ((record_definition . 1298))
+      ((record_definition . 1289))
       nil
       nil
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 
195)(expression_opt . 1297)(factor . 161)(name . 163)(primary . 
166)(qualified_expression . 54)(raise_expression . 168)(relation_and_list . 
169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1288)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((identifier_opt . 1295))
-      ((identifier_opt . 1294))
+      ((identifier_opt . 1286))
+      ((identifier_opt . 1285))
       nil
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1289)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1280)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
       nil
       nil
@@ -4454,25 +4436,25 @@
       nil
       nil
       nil
-      ((aspect_specification_opt . 1315))
+      ((aspect_specification_opt . 1306))
       nil
       nil
       nil
       nil
-      ((aspect_specification_opt . 1312))
+      ((aspect_specification_opt . 1303))
       nil
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1329)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1320)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
-      ((aspect_clause . 1034)(at_clause . 308)(component_declaration . 
1035)(component_item . 1036)(component_list . 1037)(component_list_opt . 
1327)(enumeration_representation_clause . 315)(identifier_list . 
1039)(record_representation_clause . 339)(variant_part . 1040))
+      ((aspect_clause . 1025)(at_clause . 278)(component_declaration . 
1026)(component_item . 1027)(component_list . 1028)(component_list_opt . 
1318)(enumeration_representation_clause . 285)(identifier_list . 
1030)(record_representation_clause . 309)(variant_part . 1031))
       nil
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 1324)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(ge [...]
-      ((aggregate . 157)(attribute_reference . 51)(discrete_subtype_definition 
. 1323)(factor . 161)(name . 739)(primary . 166)(qualified_expression . 
54)(range . 740)(selected_component . 55)(simple_expression . 
487)(subtype_indication . 741)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 1315)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(ge [...]
+      ((aggregate . 158)(attribute_reference . 51)(discrete_subtype_definition 
. 1314)(factor . 174)(name . 731)(primary . 177)(qualified_expression . 
54)(range . 732)(selected_component . 55)(simple_expression . 
479)(subtype_indication . 733)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
@@ -4486,11 +4468,11 @@
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(handled_sequence_of_statements . 1334)(if_statement . 
660)(iteration_scheme . 661)(label_opt . 662)(loop_statement . 663)(name . 
664)(pragma . 665)(procedure_call_statement . 666)(qualified_expression . 54)(r 
[...]
-      ((formal_part . 117)(parameter_profile_opt . 1333))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(handled_sequence_of_statements . 1325)(if_statement . 
652)(iteration_scheme . 653)(label_opt . 654)(loop_statement . 655)(name . 
656)(pragma . 657)(procedure_call_statement . 658)(qualified_expression . 54)(r 
[...]
+      ((formal_part . 117)(parameter_profile_opt . 1324))
       nil
       nil
-      ((identifier_opt . 1336))
+      ((identifier_opt . 1327))
       nil
       nil]))
   "Parser table.")
diff --git a/packages/ada-mode/ada-mode.el b/packages/ada-mode/ada-mode.el
index 4399b77..c3373a8 100755
--- a/packages/ada-mode/ada-mode.el
+++ b/packages/ada-mode/ada-mode.el
@@ -6,9 +6,9 @@
 ;; Maintainer: Stephen Leake <address@hidden>
 ;; Keywords: languages
 ;;  ada
-;; Version: 5.2.0
-;; package-requires: ((wisi "1.1.3") (cl-lib "0.4") (emacs "24.2"))
-;; url: http://stephe-leake.org/emacs/ada-mode/emacs-ada-mode.html
+;; Version: 5.2.1
+;; package-requires: ((wisi "1.1.4") (cl-lib "0.4") (emacs "24.2"))
+;; url: http://www.nongnu.org/ada-mode/
 ;;
 ;; (Gnu ELPA requires single digits between dots in versions)
 ;;
@@ -168,7 +168,7 @@
 (defun ada-mode-version ()
   "Return Ada mode version."
   (interactive)
-  (let ((version-string "5.2.0"))
+  (let ((version-string "5.2.1"))
     ;; must match:
     ;; ada-mode.texi
     ;; README-ada-mode
@@ -300,6 +300,12 @@ Useful for setting `ada-xref-tool' and similar vars."
   :type 'function
   :group 'ada)
 
+(defcustom ada-xref-full-path nil
+  "If t, cross-references show the full path to source files; if
+nil, only the file name."
+  :type 'boolean
+  :safe #'booleanp)
+
 ;;;;; end of user variables
 
 (defconst ada-symbol-end
@@ -352,6 +358,7 @@ Values defined by cross reference packages.")
     (define-key map "\C-c\C-e"          'ada-expand)
     (define-key map "\C-c\C-f"          'ada-show-parse-error)
     (define-key map "\C-c\C-i"          'ada-indent-statement)
+    (define-key map "\C-c\C-l"          'ada-show-local-references)
     (define-key map "\C-c\C-m"   'ada-build-set-make)
     (define-key map "\C-c\C-n"          'ada-next-statement-keyword)
     (define-key map "\C-c\M-n"          'ada-next-placeholder)
@@ -1344,7 +1351,7 @@ Optional PLIST defaults to `ada-prj-current-project'."
                             ada-case-exception-file
                           (list ada-case-exception-file)))
        (path_sep        path-separator)
-       (proc_env        process-environment)
+       (proc_env        (cl-copy-list process-environment))
        (src_dir         (list (directory-file-name default-directory)))
        (xref_tool       ada-xref-tool)
        ))))
@@ -1400,7 +1407,7 @@ Include properties set via 
`ada-prj-default-compiler-alist',
                           ada-case-exception-file
                         (list ada-case-exception-file))
       'path_sep        path-separator;; prj variable so users can override it 
for their compiler
-      'proc_env        process-environment
+      'proc_env        (cl-copy-list process-environment)
       'src_dir         (if src-dir (list src-dir) nil)
       'xref_tool       ada-xref-tool
       ))
@@ -1574,11 +1581,11 @@ Return new value of PROJECT."
                  ;; process env var. We don't do expand-file-name
                  ;; here because the application may be expecting a
                  ;; simple string.
-                 (let ((process-environment (plist-get project 'proc_env)))
+                 (let ((process-environment (cl-copy-list (plist-get project 
'proc_env))))
                    (setenv (substring (match-string 1) 1)
                            (substitute-in-file-name (match-string 2)))
                    (setq project
-                         (plist-put project 'proc_env process-environment)))
+                         (plist-put project 'proc_env (cl-copy-list 
process-environment))))
 
                ;; not recognized; assume it is a user-defined variable like 
"comp_opt"
                (setq project (plist-put project (intern (match-string 1)) 
(match-string 2)))
@@ -2305,6 +2312,7 @@ Called with four arguments:
 - filename containing the identifier
 - line number containing the identifier
 - column of the start of the identifier
+- local-only; if t, show references in current file only
 Displays a buffer in compilation-mode giving locations where the
 identifier is declared or referenced.")
 
@@ -2320,7 +2328,24 @@ identifier is declared or referenced.")
           (ada-identifier-at-point)
           (file-name-nondirectory (buffer-file-name))
           (line-number-at-pos)
-          (1+ (current-column)))
+          (1+ (current-column))
+          nil)
+  )
+
+(defun ada-show-local-references ()
+  "Show all references of identifier at point."
+  (interactive)
+  (ada-check-current-project (buffer-file-name))
+
+  (when (null ada-xref-all-function)
+    (error "no cross reference information available"))
+
+  (funcall ada-xref-all-function
+          (ada-identifier-at-point)
+          (file-name-nondirectory (buffer-file-name))
+          (line-number-at-pos)
+          (1+ (current-column))
+          t)
   )
 
 (defvar ada-xref-overriding-function nil
diff --git a/packages/ada-mode/ada-mode.info b/packages/ada-mode/ada-mode.info
index 48e429a..0c703b5 100644
--- a/packages/ada-mode/ada-mode.info
+++ b/packages/ada-mode/ada-mode.info
@@ -22,7 +22,7 @@ END-INFO-DIR-ENTRY
 
 File: ada-mode.info,  Node: Top,  Next: Overview,  Prev: (dir),  Up: (dir)
 
-Ada Mode Version 5.2.0
+Ada Mode Version 5.2.1
 
    Copyright (C) 1999 - 2016 Free Software Foundation, Inc.
 
@@ -1705,6 +1705,8 @@ here's an overview.
 * Package organization::
 * OpenToken::
 * ELPA::
+* Savannah::
+* ada-france::
 
 
 File: ada-mode.info,  Node: Directory structure,  Next: Package organization,  
Prev: Developer overview,  Up: Developer overview
@@ -1992,6 +1994,26 @@ Gnu ELPA via git:
 elpa workspace, and for building the elpa archive there.
 
 
+File: ada-mode.info,  Node: Savannah,  Prev: OpenToken,  Up: Developer overview
+
+14.5 Savannah
+=============
+
+The ada-mode web page, mailing list, and tarball download are hosted on
+savannah.non-gnu.org, project Emacs Ada mode
+(<https://savannah.nongnu.org/projects/ada-mode/>).  See the project
+admin page there for more information.
+
+
+File: ada-mode.info,  Node: ada-france,  Prev: OpenToken,  Up: Developer 
overview
+
+14.6 ada-france
+===============
+
+The source code for ada-mode is maintained in a monotone repository in
+the ada-france server <mtn://www.ada-france.org>.
+
+
 File: ada-mode.info,  Node: GNU Free Documentation License,  Next: Index,  
Prev: Developer overview,  Up: Top
 
 Appendix A GNU Free Documentation License
@@ -2538,15 +2560,17 @@ Node: Automatic casing53921
 Node: Comment Handling56625
 Node: Key summary57144
 Node: Developer overview59771
-Node: Directory structure60111
-Node: Package organization64082
-Node: Ada mode64317
-Node: gpr mode66513
-Node: GNAT core66796
-Node: Wisi67630
-Node: OpenToken68530
-Node: ELPA69132
-Node: GNU Free Documentation License69742
-Node: Index94903
+Node: Directory structure60139
+Node: Package organization64110
+Node: Ada mode64345
+Node: gpr mode66541
+Node: GNAT core66824
+Node: Wisi67658
+Node: OpenToken68558
+Node: ELPA69160
+Node: Savannah69770
+Node: ada-france70108
+Node: GNU Free Documentation License70348
+Node: Index95509
 
 End Tag Table
diff --git a/packages/ada-mode/ada-mode.texi b/packages/ada-mode/ada-mode.texi
index 51c7825..755347a 100755
--- a/packages/ada-mode/ada-mode.texi
+++ b/packages/ada-mode/ada-mode.texi
@@ -26,7 +26,7 @@ developing GNU and promoting software freedom.''
 
 @titlepage
 @sp 10
address@hidden Ada Mode Version 5.2.0
address@hidden Ada Mode Version 5.2.1
 @page
 @vskip 0pt plus 1filll
 @insertcopying
@@ -36,7 +36,7 @@ developing GNU and promoting software freedom.''
 
 @node Top, Overview, (dir), (dir)
 
-Ada Mode Version 5.2.0
+Ada Mode Version 5.2.1
 
 @ifnottex
 @insertcopying
@@ -1821,6 +1821,8 @@ sources, here's an overview.
 * Package organization::
 * OpenToken::
 * ELPA::
+* Savannah::
+* ada-france::
 @end menu
 
 @node Directory structure, Package organization, Developer overview, Developer 
overview
@@ -2095,6 +2097,20 @@ git clone <login>@@git.savannah.gnu.org/emacs/elpa.git
 @file{build/Makefile} contains targets for copying Ada mode source to
 the elpa workspace, and for building the elpa archive there.
 
address@hidden Savannah,  , OpenToken, Developer overview
address@hidden Savannah
+
+The ada-mode web page, mailing list, and tarball download are hosted
+on savannah.non-gnu.org, project Emacs Ada mode
+(@url{https://savannah.nongnu.org/projects/ada-mode/}). See the
+project admin page there for more information.
+
address@hidden ada-france,  , OpenToken, Developer overview
address@hidden ada-france
+
+The source code for ada-mode is maintained in a monotone repository in
+the ada-france server @url{mtn://www.ada-france.org}.
+
 @node GNU Free Documentation License, Index, Developer overview, Top
 @appendix GNU Free Documentation License
 @include doclicense.texi
diff --git a/packages/ada-mode/ada-wisi-opentoken.el 
b/packages/ada-mode/ada-wisi-opentoken.el
old mode 100644
new mode 100755
index fbc4daf..374c599
--- a/packages/ada-mode/ada-wisi-opentoken.el
+++ b/packages/ada-mode/ada-wisi-opentoken.el
@@ -1,7 +1,7 @@
 ;; ada-wisi-opentoken.el --- An indentation function for ada-wisi that indents 
 -*- lexical-binding:t -*-
 ;; OpenTokengrammar statements nicely.
 
-;; Copyright (C) 2013-2015  Free Software Foundation, Inc.
+;; Copyright (C) 2013-2016  Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -46,13 +46,22 @@
     (let ((token-text (wisi-token-text (wisi-backward-token))))
       (cond
        ((equal token-text "<=")
-       (back-to-indentation)
-       (+ (current-column) ada-indent-broken))
+       (+ (current-indentation) ada-indent-broken))
 
        ((member token-text '("+" "&"))
        (while (not (equal "<=" (wisi-token-text (wisi-backward-token)))))
-       (back-to-indentation)
-       (+ (current-column) ada-indent-broken))
+       (+ (current-indentation) ada-indent-broken))
+
+       ((equal token-text "and")
+       (wisi-goto-containing (wisi-backward-cache))
+       ;; test/ada_mode-opentoken.ads
+       ;; Tokens.Statement <= Add_Statement and
+       ;; Add_Statement <=
+       ;;   ... and
+       ;; Add_Statement <=
+       ;;
+       ;; point is on :=
+       (+ (current-indentation) ada-indent-broken))
        ))))
 
 (defconst ada-wisi-opentoken-align
diff --git a/packages/ada-mode/ada-wisi.el b/packages/ada-mode/ada-wisi.el
old mode 100644
new mode 100755
index 57fd495..d4ae61f
--- a/packages/ada-mode/ada-wisi.el
+++ b/packages/ada-mode/ada-wisi.el
@@ -39,6 +39,8 @@
     block-middle ;; not start of statement
     block-start ;; start of block is start of statement
     close-paren
+    expression-start
+    label
     list-break
     name
     name-paren ;; anything that looks like a procedure call, since the grammar 
can't distinguish most of them
@@ -54,137 +56,193 @@
 ;;;; indentation
 
 (defun ada-wisi-current-indentation ()
-  "Return indentation appropriate for point on current line:
-if not in paren, beginning of line
-if in paren, pos following paren."
-  (if (not (ada-in-paren-p))
-      (current-indentation)
-
-    (or
-     (save-excursion
-       (let ((line (line-number-at-pos)))
-        (ada-goto-open-paren 1)
-        (when (= line (line-number-at-pos))
-          (current-column))))
-     (save-excursion
-       (back-to-indentation)
-       (current-column)))
-    ))
-
-(defun ada-wisi-indent-cache (offset cache)
-  "Return indentation of OFFSET plus indentation of line containing point. 
Point must be at CACHE."
-  (let ((indent (current-indentation)))
-    (cond
-     ;; special cases
-     ;;
-     ((eq 'LEFT_PAREN (wisi-cache-token cache))
-      ;; test/ada_mode-long_paren.adb
-      ;; (RT                            => RT,
-      ;;  Monitor                       => True,
-      ;;  RX_Enable                     =>
-      ;;    (RX_Torque_Subaddress |
-      ;;   indenting '(RX_'
-      ;;
-      ;; test/ada_mode-parens.adb
-      ;; return Float (
-      ;;               Integer'Value
-      ;;                 (Local_6));
-      ;;   indenting '(local_6)'; 'offset' = ada-indent - 1
-      (+ (current-column) 1 offset))
-
-     ((save-excursion
-       (let ((containing (wisi-goto-containing-paren cache)))
-         (and containing
-              ;; test/ada_mode-conditional_expressions.adb
-              ;; K2 : Integer := (if J > 42
-              ;;                  then -1
-              ;;   indenting 'then'; offset = 0
-              ;;
-              ;; L1 : Integer := (case J is
-              ;;                     when 42 => -1,
-              ;;
-              ;; test/indent.ads
-              ;; C_S_Controls : constant
-              ;;   CSCL_Type :=
-              ;;     CSCL_Type'
-              ;;       (
-              ;;        1 =>  --  Used to be aligned on "CSCL_Type'"
-              ;;              --  aligned with previous comment.
-              ;;          IO_CPU_Control_State_S_Pkg.CPU2_Fault_Status_Type'
-              ;;            (Unused2  => 10,  -- Used to be aligned on "1 =>"
-              ;;  indenting '(Unused2'
-              (+ (current-column) offset)))))
-
-     ;; all other structures
-     (t
-      ;; current cache may be preceded by something on same
-      ;; line. Handle common cases nicely.
-      (while (and cache
-                 (or
-                  (not (= (current-column) indent))
-                  (eq 'EQUAL_GREATER (wisi-cache-token cache))))
-       (when (and
-              (eq 'WHEN (wisi-cache-token cache))
-              (not (eq 'exit_statement (wisi-cache-nonterm cache))))
-         (setq offset (+ offset ada-indent-when)))
-       (setq cache (wisi-goto-containing cache))
-       (setq indent (current-indentation)))
-
+  "Return indentation of current line, taking into account leading parens and 
labels."
+  (let ((in-paren (ada-in-paren-p))
+       cache)
+    (save-excursion
+      (back-to-indentation)
       (cond
-       ((null cache)
-       ;; test/ada_mode-opentoken.ads
-       ;; private package GDS.Commands.Add_Statement is
-       ;;    type Instance is new Nonterminal.Instance with null record;
-       ;;
-       ;; test/ada_mode-nominal.adb
-       ;;     return B : Integer :=
-       ;;       (Local_Function);
-       (+ indent offset))
+       ((and (eq ?\( (char-after (point)))
+            in-paren)
+       (forward-same-syntax) ;; skip all leading parens
+       (current-column))
 
-       ((eq 'label_opt (wisi-cache-token cache))
-       (+ indent (- ada-indent-label) offset))
+       ((and (setq cache (wisi-get-cache (point)))
+            (eq 'label (wisi-cache-class cache)))
+       (- (current-column) ada-indent-label))
 
        (t
-       ;; test/ada_mode-generic_instantiation.ads
-       ;; function Function_1 is new Instance.Generic_Function
-       ;;   (Param_Type  => Integer,
-       ;;
-       ;; test/ada_mode-nested_packages.adb
-       ;; function Create (Model   : in Integer;
-       ;;                  Context : in String) return String is
-       ;;    ...
-       ;;    Cache : array (1 .. 10) of Boolean := (True, False, others => 
False);
-       (+ indent offset))
-       ))
-     )))
+       (current-column))
 
-(defun ada-wisi-indent-containing (offset cache &optional before)
+       ))))
+
+(defun ada-wisi-indent-containing (offset cache &optional before indenting)
   "Return indentation of OFFSET plus indentation of token containing CACHE.
-BEFORE should be t when called from ada-wisi-before-cache, nil otherwise."
-  (save-excursion
-    (cond
-     ((markerp (wisi-cache-containing cache))
-      (ada-wisi-indent-cache offset (wisi-goto-containing cache)))
+point should be at CACHE.
+BEFORE should be t when called from ada-wisi-before-cache, nil otherwise.
+If may be in parens, INDENTING must be point at indenting token."
+  ;; First move to the right containing token
+  (while
+      (and (progn
+            (when (and (eq (wisi-cache-token cache) 'WHEN)
+                       (memq (wisi-cache-nonterm cache)
+                             '(case_statement_alternative
+                               ;; test/ada_mode-nominal.adb
+                               ;; case Local_4 is
+                               ;;    when A =>
+                               case_expression_alternative
+                               ;; test/ada_mode-conditional_expressions.adb
+                               ;; elsif K = 0 then
+                               ;;   (case J is
+                               ;;       when 42                  => -1,
+                               exception_handler
+                               ;; test/ada_mode-nominal.adb
+                               ;; exception
+                               ;;    when others =>
+                               ;;       return 0.0;
+                               select_alternative
+                               ;; test/ada_mode-nominal.adb
+                               ;; or
+                               ;;    when Started => -- Ada mode 4.01 
ada-when-indent, GPS ada-indent
+                               variant
+                               ;; test/generic_param.adb
+                               ;; type Rte_Item_T (Item_Type : Item_Type_T := 
Fix) is record
+                               ;;    case Item_Type is
+                               ;;       when Fix | Airport =>
+                               )))
+              (setq offset (+ offset ada-indent-when)))
+            (setq cache (wisi-goto-containing cache nil)))
+          (or (memq
+               (wisi-cache-token cache)
+               '(EQUAL_GREATER
+                 ;; test/ada_mode-nominal.adb
+                 ;; case Local_4 is
+                 ;;    when
+                 ;;    ...
+                 ;;      => -- Ada mode 4.01 indentation
+                 ;;      ...
+                 ;;    Loop_1 :
+                 IS
+                 ;; test/ada_mode-nominal.adb
+                 ;; package body Ada_Mode.Nominal
+                 ;; ...
+                 ;; is
+                 ;;    use Ada.Strings;
+                 ))
+              (memq
+               (wisi-cache-nonterm cache)
+               '(name
+                 ;; test/ada_mode-nominal.adb
+                 ;; raise Constraint_Error with Count'Image (Line (File)) &
+                 ;;    "foo";
+                 ;;
+                 ;; test/ada_mode-slices.adb
+                 ;; Put_Line(Day'Image(D1) & " - " & Day'Image(D2) & " = " &
+                 ;;            Integer'Image(N));
+                 ))
+              (memq
+               (wisi-cache-class cache)
+               '(list-break
+                 ;; test/ada_mode-nominal.adb
+                 ;; 3
+                 ;;   => (others => 3.0));
+                 ))
+              (and (not (eq (current-column) (current-indentation)))
+                   (memq (wisi-cache-class cache)
+                         '(block-start
+                           ;; test/ada_mode-nominal.adb
+                           ;; or when Started
+                           ;;   =>
+                           block-middle
+                           ;; test/ada_mode-quantified_expressions.adb
+                           ;; for Element : Float of reverse
+                           ;;   Board loop
+                           ;;    Element := Element * 2.0;
+                           ))
+                   (not (eq (wisi-cache-token cache) 'RECORD))
+                   ;; test/ada_mode-nominal.ads
+                   ;; is tagged record
+                   ;;    Component_1 : Integer; -- end 2
+                   )
+              )))
 
-     (t
+  (let ((cur-line (line-number-at-pos (point)))
+       (paren-line (line-number-at-pos (nth 1 (syntax-ppss)))))
+    (cond
+     (cache
       (cond
-       ((ada-in-paren-p)
-       (ada-goto-open-paren 1)
-       (+ (current-column) offset))
+       ((and (ada-in-paren-p)
+            (eq cur-line paren-line)
+            (memq (wisi-cache-class cache)
+                  '(block-middle
+                    ;; ada_mode-conditional_expressions.adb
+                    ;; K := (if K < 0 then 42
+                    ;;       elsif K = 0 then
+
+                    expression-start
+                    ;; test/ada_mode-parens.adb
+                    ;; := Local_11_Type'(A => Integer
+                    ;;                     (1.0),
+
+                    statement-start
+                    ;; ada_mode-conditional_expressions.adb
+                    ;; K1 : Integer := (if J > 42 then -1
+                    ;;                  else +1);
+                    )))
+
+       (wisi-indent-paren (1+ offset)))
+
+       ((eq 'LEFT_PAREN (wisi-cache-token cache))
+       ;; test/ada_mode-parens.adb
+       ;; or else ((B.all
+       ;;             and then C)
+       ;;            or else
+       ;;
+       ;; test/ada_mode-nominal.adb
+       ;; => (others
+       ;;       => 2.0),
+       (goto-char indenting)
+       (wisi-indent-paren (1+ offset)))
+
+       ((memq (wisi-cache-class cache)
+             '(expression-start))
+       ;; test/indent.ads
+       ;; in higher-level parens, but that's not significant
+       ;; IO_CPU_Control_State_S_Pkg.CPU2_Fault_Status_Type'
+       ;;   (Unused2  => 10,  -- Used to be aligned on "1 =>"
+       ;;
+       ;; test/ada_mode-conditional_expressions.adb
+       ;; when B =>
+       ;;   Fun (J) = 0
+       ;;     or else M,
+       (+ (ada-wisi-current-indentation) offset))
 
        (t
-       ;; at outermost containing statement. If called from
-       ;; ada-wisi-before-cache, we want to ignore OFFSET (indenting
-       ;; 'package' in a package spec). If called from
-       ;; ada-wisi-after-cache, we want to include offset (indenting
-       ;; first declaration in the package).
-       (if before 0 offset))
+       ;; not in paren
+       ;; test/ada_mode-nominal.adb
+       ;; function Local_Function return Integer
+       ;; is -- target 3
+       (+ (ada-wisi-current-indentation) offset))
        ))
-      )))
+
+     (t
+      ;; at outermost containing statement. If called from
+      ;; ada-wisi-before-cache, we want to ignore OFFSET (indenting
+      ;; 'package' in a package spec). If called from
+      ;; ada-wisi-after-cache, we want to include offset (indenting
+      ;; first declaration in the package).
+      (if before
+         ;; test/ada_mode-nominal.adb
+         ;; package body Ada_Mode.Nominal
+         0
+       ;; test/ada_mode-nominal.adb
+       ;;      use Ada.Strings;
+       offset)
+      ))))
 
 (defun ada-wisi-indent-list-break (cache prev-token)
-  "Return indentation for a token contained by CACHE, which must be a 
list-break.
-point must be on CACHE. PREV-TOKEN is the token before the one being indented."
+  "Return indentation for a token contained or preceeded by CACHE, which must 
be a list-break.
+Point must be on CACHE. PREV-TOKEN is the token before the one being indented."
   (let ((break-point (point))
        (containing (wisi-goto-containing cache)))
     (cl-ecase (wisi-cache-token containing)
@@ -195,15 +253,18 @@ point must be on CACHE. PREV-TOKEN is the token before 
the one being indented."
           ;; test/parent.adb
           ;; Append_To (Formals,
           ;;            Make_Parameter_Specification (Loc,
-          ;; indenting 'Make_...'
           ;;
           ;; test/ada_mode-generic_instantiation.ads
           ;; function Function_1 is new Instance.Generic_Function
           ;;   (Param_Type  => Integer,
           ;;    Result_Type => Boolean,
-          ;;    Threshold   => 2);
-          ;; indenting 'Result_Type'
+          ;;
+          ;; test/ada_mode-parens.adb
+          ;; Local_14 : Local_14_Type :=
+          ;;   ("123",
+          ;;    "456" &
           (+ (current-column) 1)
+
         ;; else hanging
         ;;
         ;; test/ada_mode-parens.adb
@@ -212,7 +273,6 @@ point must be on CACHE. PREV-TOKEN is the token before the 
one being indented."
         ;;      2 => (1, 1, 1),
         ;;    3 |
         ;;      4 => (2, 2, 2));
-        ;; indenting '4 =>'
         (+ (current-column) 1 ada-indent-broken)))
 
       (IS
@@ -220,7 +280,6 @@ point must be on CACHE. PREV-TOKEN is the token before the 
one being indented."
        ;; L1 : Integer := (case J is
        ;;                     when 42 => -1,
        ;;                     -- comment aligned with 'when'
-       ;; indenting '-- comment'
        (wisi-indent-paren (+ 1 ada-indent-when)))
 
       (WITH
@@ -230,7 +289,6 @@ point must be on CACHE. PREV-TOKEN is the token before the 
one being indented."
          ;; (Default_Parent with
          ;;  Child_Element_1 => 10,
          ;;  Child_Element_2 => 12.0,
-         ;; indenting 'Child_Element_2'
          (wisi-indent-paren 1))
 
         (aspect_specification_opt
@@ -239,7 +297,6 @@ point must be on CACHE. PREV-TOKEN is the token before the 
one being indented."
          ;; with
          ;;   Constant_Indexing => Constant_Reference,
          ;;   Variable_Indexing => Reference,
-         ;; indenting 'Variable_Indexing'
          (+ (current-indentation) ada-indent-broken))
         ))
       )
@@ -247,595 +304,283 @@ point must be on CACHE. PREV-TOKEN is the token before 
the one being indented."
 
 (defun ada-wisi-before-cache ()
   "Point is at indentation, before a cached token. Return new indentation for 
point."
-  (let ((pos-0 (point))
-       (cache (wisi-get-cache (point)))
-       (prev-token (save-excursion (wisi-backward-token)))
-       )
-    (when cache
-      (cl-ecase (wisi-cache-class cache)
-       (block-start
-        (cl-case (wisi-cache-token cache)
-          (IS ;; subprogram body
-           (ada-wisi-indent-containing 0 cache t))
-
-          (RECORD
-           ;; test/ada_mode-nominal.ads; ada-indent-record-rel-type = 3
-           ;; type Private_Type_2 is abstract tagged limited
-           ;;    record
-           ;; indenting 'record'
-           ;;
-           ;; type Limited_Derived_Type_1d is
-           ;;    abstract limited new Private_Type_1 with
-           ;;    record
-           ;; indenting 'record'
-           ;;
-           ;; for Record_Type_1 use
-           ;;   record
-           ;;   indenting 'record'
-           (let ((containing (wisi-goto-containing cache)))
-             (while (not (memq (wisi-cache-token containing) '(FOR TYPE)))
-               (setq containing (wisi-goto-containing containing)))
-             (+ (current-column) ada-indent-record-rel-type)))
-
-          (t ;; other
-           (ada-wisi-indent-containing ada-indent cache t))))
-
-       (block-end
-        (cl-case (wisi-cache-nonterm cache)
-          (record_definition
-           (save-excursion
-             (wisi-goto-containing cache);; now on 'record'
-             (current-indentation)))
-
-          (t
-           (ada-wisi-indent-containing 0 cache t))
-          ))
-
-       (block-middle
-        (cl-case (wisi-cache-token cache)
-          (WHEN
-           (ada-wisi-indent-containing ada-indent-when cache t))
-
-          (t
-           (ada-wisi-indent-containing 0 cache t))
-          ))
-
-       (close-paren (wisi-indent-paren 0))
-
-       (keyword
-        ;; defer to after-cache)
-        nil)
-
-       (list-break
-       ;; test/ada_mode-parens.adb
-        ;; Foo (X
-        ;;        ,    --  used to get an error here; don't care about the 
actual indentation
-        ;; indenting ','
-        ;;
-        ;; We don't actually care what the indentation is, since this
-        ;; should only occur while editing; defer to after-cache
-        ;; avoids an error and does something reasonable.
-        nil)
-
-       (name
-        (cond
-         ((let ((temp (save-excursion (wisi-goto-containing cache))))
-            (and temp
-                 (memq (wisi-cache-nonterm temp) '(subprogram_body 
subprogram_declaration))))
-          ;; test/ada_mode-nominal.ads
-          ;; not
-          ;; overriding
-          ;; procedure
-          ;;   Procedure_1c (Item  : in out Parent_Type_1);
-          ;; indenting 'Procedure_1c'
-          ;;
-          ;; not overriding function
-          ;;   Function_2e (Param : in Parent_Type_1) return Float;
-          ;; indenting 'Function_2e'
-          (ada-wisi-indent-containing ada-indent-broken cache t))
-
-         (t
-          ;; defer to ada-wisi-after-cache, for consistency
-          nil)
-         ))
-
-       (name-paren
-        ;; defer to ada-wisi-after-cache, for consistency
-        nil)
+  (save-excursion
+    (let ((start (point))
+         (cache (wisi-get-cache (point))))
+      (when cache
+       (cl-ecase (wisi-cache-class cache)
+         (block-start
+          (cl-case (wisi-cache-token cache)
+            (IS ;; subprogram body
+             (ada-wisi-indent-containing 0 cache t))
 
-       (open-paren
-        (let* ((containing (wisi-goto-containing cache))
-               (containing-pos (point)))
-          (cl-case (wisi-cache-token containing)
-            (COMMA
-             ;; test/ada_mode-parens.adb
-             ;; A : Matrix_Type :=
-             ;;   ((1, 2, 3),
-             ;;    (4, 5, 6),
-             ;; indenting (4; containing is '),' ; 0
+            (RECORD
+             ;; test/ada_mode-nominal.ads; ada-indent-record-rel-type = 3
+             ;; type Private_Type_2 is abstract tagged limited
+             ;;    record
              ;;
-             ;; test/ada_mode-parens.adb
-             ;; Local_14 : Local_14_Type :=
-             ;;   ("123",
-             ;;    "456" &
-             ;;    ("789"));
-             ;; indenting ("4"; contaning is '3",' ; ada-indent-broken
-
-             (ada-wisi-indent-containing
-              (if (= (nth 1 prev-token) containing-pos) 0 ada-indent-broken)
-              containing))
-
-            (EQUAL_GREATER
-             (setq containing (wisi-goto-containing containing))
-             (cl-ecase (wisi-cache-token containing)
-               (COMMA
-                ;; test/ada_mode-long_paren.adb
-                ;; (RT                            => RT,
-                ;;  Monitor                       => True,
-                ;;  RX_Enable                     =>
-                ;;    (RX_Torque_Subaddress |
-                ;; indenting (RX_Torque
-                (ada-wisi-indent-containing ada-indent-broken containing t))
-               (LEFT_PAREN
-                ;; test/ada_mode-parens.adb
-                ;; (1 =>
-                ;;    (1 => 12,
-                ;; indenting '(1 => 12'; containing is '=>'
-                (ada-wisi-indent-cache (1- ada-indent) containing))
-               (WHEN
-                ;; test/ada_mode-conditional_expressions.adb
-                ;;  when 1 =>
-                ;;    (if J > 42
-                ;; indenting '(if'; containing is '=>'
-                (+ (current-column) -1 ada-indent))
-               (WITH
-                ;; test/aspects.ads
-                ;;    function Wuff return Boolean with Pre =>
-                ;;      (for all x in U =>
-                ;; indenting '(for';  containing is '=>', 'with', 'function'
-                (ada-wisi-indent-cache (1- ada-indent) containing))
-               ))
-
-            ((FUNCTION PROCEDURE)
-             ;; test/ada_mode-nominal.adb
-             ;; function Function_Access_11
-             ;;   (A_Param : in Float)
-             ;;   --  EMACSCMD:(test-face "function" font-lock-keyword-face)
-             ;;   return access function
-             ;;     (A_Param : in Float)
-             ;;     return
-             ;;     Standard.Float -- Ada mode 4.01, GPS do this differently
-             ;; indenting second '(A_Param)
-             (+ (current-indentation) -1 ada-indent))
-
-            (LEFT_PAREN
-             ;; test/ada_mode-parens.adb
-             ;; or else ((B.all
-             ;;             and then C)
-             ;;            or else
-             ;;            (D
-             ;; indenting (D
-             (+ (current-column) 1 ada-indent-broken))
+             ;; type Limited_Derived_Type_1d is
+             ;;   abstract limited new Private_Type_1 with
+             ;;    record
+             ;;
+             ;; for Record_Type_1 use
+             ;;   record
+             (let ((containing (wisi-goto-containing cache)))
+               (while (not (memq (wisi-cache-token containing) '(FOR TYPE)))
+                 (setq containing (wisi-goto-containing containing)))
+               (+ (current-column) ada-indent-record-rel-type)))
 
             (WHEN
              ;; test/ada_mode-nominal.adb
-             ;;
-             ;; when Local_1 = 0 and not
-             ;;   (Local_2 = 1)
-             ;; indenting (Local_2
-             ;;
-             ;; entry E3
-             ;;   (X : Integer) when Local_1 = 0 and not
-             ;;     (Local_2 = 1)
-             (+ (ada-wisi-current-indentation) ada-indent-broken))
+             ;; or
+             ;;    when Started => -- Ada mode 4.01 ada-when-indent, GPS 
ada-indent
+             (ada-wisi-indent-containing 0 cache t))
 
-            ((IDENTIFIER selected_component name)
-             ;; test/indent.ads
-             ;; CSCL_Type'
-             ;;   (
-             ;; identing (
-             ;;
-             ;; test/ada_mode-parens.adb
-             ;; Check
-             ;;   ("foo bar",
-             ;;    A
-             ;;      (1),
-             ;;    A(2));
-             ;; indenting (1)
-             ;;
-             ;; test/ada_mode-parens.adb
-             ;; Local_11 : Local_11_Type := Local_11_Type'
-             ;;   (A => Integer
-             ;;      (1.0),
-             ;;    B => Integer
-             ;;      (2.0));
-             ;;
-             ;; test/ada_mode-parens.adb
-             ;; Local_12 : Local_11_Type
-             ;;   := Local_11_Type'(A => Integer
-             ;;     (1.0),
-             ;; indenting (1.0)
-             (+ (ada-wisi-current-indentation) ada-indent-broken))
-
-            (t
-             (cond
-               ((memq (wisi-cache-class containing) '(block-start 
statement-start))
-                ;; test/ada_mode-nominal.adb
-                ;; entry E2
-                ;;   (X : Integer)
-                ;; indenting (X
-                (ada-wisi-indent-cache ada-indent-broken containing))
+            (t ;; other
+             (ada-wisi-indent-containing ada-indent cache t))))
 
-               (t
-                ;; Open paren in an expression.
-                ;;
-                ;; test/ada_mode-conditional_expressions.adb
-                ;; L0 : Integer :=
-                ;;   (case J is when 42 => -1, when Integer'First .. 41 => 0, 
when others => 1);
-                ;; indenting (case
-                (ada-wisi-indent-containing ada-indent-broken containing t))
-               ))
-            )))
+         (block-end
+          (cl-case (wisi-cache-nonterm cache)
+            (record_definition
+             (save-excursion
+               (wisi-goto-containing cache);; now on 'record'
+               (current-indentation)))
 
-       (return-with-params;; parameter list
-        (let ((return-pos (point)))
-          (wisi-goto-containing cache nil) ;; matching 'function'
-          (cond
-           ((<= ada-indent-return 0)
-            ;; indent relative to "("
-            (wisi-forward-find-class 'open-paren return-pos)
-            (+ (current-column) (- ada-indent-return)))
+            (t
+             (ada-wisi-indent-containing 0 cache t))
+            ))
 
-           (t
-            (+ (current-column) ada-indent-return))
-           )))
+         (block-middle
+          (ada-wisi-indent-containing 0 cache t start))
 
-       (return-without-params;; no parameter list
-        (wisi-goto-containing cache nil) ;; matching 'function'
-        (+ (current-column) ada-indent-broken))
+         (close-paren
+          (wisi-indent-paren 0))
 
-       (statement-end
-        (ada-wisi-indent-containing ada-indent-broken cache t))
+         (expression-start
+          ;; defer to after-cache)
+          nil)
 
-       (statement-other
-        (save-excursion
-          (let ((containing (wisi-goto-containing cache nil)))
-            (while (not (wisi-cache-nonterm containing))
-              (setq containing (wisi-goto-containing containing)))
+         (label
+          ;; test/ada_mode-nominal.adb
+          ;;    <<Label_1>>
+          ;;
+          ;; Block_1:
+          ;;    declare -- label, no statements between begin, label
+          ;; indenting Block_1
+          (ada-wisi-indent-containing (+ ada-indent-label ada-indent) cache t))
 
-            (cond
-             ;; cases to defer to after-cache
-             ((and
-               (eq (wisi-cache-nonterm cache) 'qualified_expression)
-               ;; test/ada_mode-parens.adb Local_13 Integer'
-               (not (eq (wisi-cache-token containing) 'COLON_EQUAL)))
-              ;; _not_ test/indent.ads CSCL_Type'
-              nil)
-
-             ;; handled here
-             (t
-              (cl-case (wisi-cache-token cache)
-                (EQUAL_GREATER
-                 (+ (current-column) ada-indent-broken))
-
-                (ELSIF
-                 ;; test/g-comlin.adb
-                 ;;   elsif Current_Argument < CL.Argument_Count then
-                 (ada-wisi-indent-cache 0 containing))
-
-                (RENAMES
-                 (cl-ecase (wisi-cache-nonterm containing)
-                   ((generic_renaming_declaration 
subprogram_renaming_declaration)
-                    (wisi-forward-find-token '(FUNCTION PROCEDURE) pos-0)
-                    (let ((pos-subprogram (point))
-                          (has-params
-                           ;; this is wrong for one return access
-                           ;; function case: overriding function Foo
-                           ;; return access Bar (...) renames ...;
-                           (wisi-forward-find-token 'LEFT_PAREN pos-0 t)))
-                      (if has-params
-                          (if (<= ada-indent-renames 0)
-                              ;; indent relative to paren
-                              (+ (current-column) (- ada-indent-renames))
-                            ;; else relative to line containing keyword
-                            (goto-char pos-subprogram)
-                            (+ (current-indentation) ada-indent-renames))
-
-                        ;; no params
-                        (goto-char pos-subprogram)
-                        (+ (current-indentation) ada-indent-broken))
-                      ))
+         (list-break
+          ;; test/ada_mode-parens.adb
+          ;; Slice_1 (1
+          ;;        ,    --  used to get an error here; don't care about the 
actual indentation
+          ;;
+          ;; We don't actually care what the indentation is, since this
+          ;; should only occur while editing; defer to after-cache
+          ;; avoids an error and does something reasonable.
+          nil)
 
-                   (object_renaming_declaration
-                    (+ (current-indentation) ada-indent-broken))
-                   ))
+         (name
+          (cond
+           ((let ((temp (wisi-get-containing-cache cache)))
+              (and temp
+                   (memq (wisi-cache-nonterm temp) '(subprogram_body 
subprogram_declaration))))
+            ;; test/ada_mode-nominal.ads
+            ;; not
+            ;; overriding
+            ;; procedure
+            ;;   Procedure_1c (Item  : in out Parent_Type_1);
+            ;;
+            ;; not overriding function
+            ;;   Function_2e (Param : in Parent_Type_1) return Float;
+            (ada-wisi-indent-containing ada-indent-broken cache t))
 
-                (t
-                 (cl-ecase (wisi-cache-nonterm containing)
+           (t
+            ;; defer to ada-wisi-after-cache, for consistency
+            nil)
+           ))
 
-                   ;; abstract_subprogram_declaration with subprogram_body
+         (name-paren
+          ;; defer to ada-wisi-after-cache, for consistency
+          nil)
 
-                   (aggregate
-                    ;; test/ada_mode-nominal-child.adb
-                    ;; return (Parent_Type_1
-                    ;;         with 1, 0.0, False);
-                    ;; indenting 'with'; containing is '('
-                    (+ (current-column) 1))
+         (open-paren
+          ;; In some cases, we indent the leading paren one less than
+          ;; normal, so the following lines look normal. However, when
+          ;; ada-indent-broken = 1- ada-indent, the distinction is
+          ;; moot.
+          (let ((content (save-excursion (wisi-forward-cache))))
+            (cond
+             ((or
+               (memq (wisi-cache-nonterm cache)
+                     '(formal_part)
+                     ;; test/ada_mode-nominal.adb
+                     ;; entry E2
+                     ;;   (X : Integer)
+                     )
+               (memq (wisi-cache-nonterm content)
+                     '(case_expression
+                       ;; test/ada_mode-conditional_expressions.adb
+                       ;; K :=
+                       ;;   (case Bounded (K) is
+
+                       if_expression
+                       ;; test/ada_mode-conditional_expressions.adb
+                       ;; when 1  =>
+                       ;;   (if J > 42
+                       )))
+
+              (ada-wisi-indent-containing (1- ada-indent) cache t start))
 
-                   (component_declaration
-                    ;; test/ada_mode-nominal.ads Record_Type_3 ':'
-                    (+ (current-column) ada-indent-broken))
+             (t
+              (ada-wisi-indent-containing ada-indent-broken cache t start))
+             )))
+
+         (return-with-params
+          ;; test/ada_mode-options-intent_return_1.ads, _2, _3
+          ;; indenting 'return' after ()
+          (let ((return-pos (point)))
+            (wisi-goto-containing cache nil) ;; matching 'function'
+            (cond
+             ((<= ada-indent-return 0)
+              ;; indent relative to "("
+              (wisi-forward-find-class 'open-paren return-pos)
+              (+ (current-column) (- ada-indent-return)))
 
-                   (entry_body
-                    ;; test/ada_mode-nominal.adb
-                    ;; entry E2
-                    ;;   (X : Integer)
-                    ;;   when Local_1 = 0 and not
-                    ;; indenting 'when'; containing is 'entry'
-                    (+ (current-column) ada-indent-broken))
+             (t
+              (+ (current-column) ada-indent-return))
+             )))
 
-                   ;; expression_function_declaration with subprogram_body
+         (return-without-params;; no parameter list
+          ;; test/ada_mode-options-intent_return_1.ads, _2, _3
+          ;; indenting 'return' with no ()
+          (wisi-goto-containing cache nil) ;; matching 'function'
+          (+ (current-column) ada-indent-broken))
 
-                   (formal_package_declaration
-                    ;; test/ada_mode-generic_package.ads
-                    ;; with package A_Package_7 is
-                    ;;   new Ada.Text_IO.Integer_IO (Num => 
Formal_Signed_Integer_Type);
-                    ;; indenting 'new'; containing is 'with'
-                    (+ (current-column) ada-indent-broken))
+         (statement-end
+          (ada-wisi-indent-containing ada-indent-broken cache t))
 
-                   ((full_type_declaration
-
-                     ;; shared code, but out of alphabetical order:
-                      protected_type_declaration
-                     single_protected_declaration
-                     single_task_declaration
-                     subtype_declaration
-                     task_type_declaration)
-
-                    (while (not (memq (wisi-cache-token containing) 
'(PROTECTED SUBTYPE TASK TYPE)))
-                      (setq containing (wisi-goto-containing containing)))
-
-                    (cond
-                     ((eq (wisi-cache-token cache) 'WITH)
-                      (let ((type-col (current-column))
-                            (null_private (save-excursion (wisi-goto-end-1 
cache)
-                                                          (eq 'WITH 
(wisi-cache-token (wisi-backward-cache))))))
-                        (cond
-                         ((eq 'aspect_specification_opt (wisi-cache-nonterm 
cache))
-                          ;; test/aspects.ads
-                          ;; subtype Integer_String is String
-                          ;;   with Dynamic_Predicate => Integer'Value 
(Integer_String) in Integer
-                          ;; indenting 'with'
-                          ;;
-                          ;; test/ada_mode.ads
-                          ;; protected Separate_Protected_Body
-                          ;; with
-                          ;;   Priority => 5
-                          ;; indenting 'with'
-                          ;;
-                          ;; test/ada_nominal.ads
-                          ;; task type Task_Type_1 (Name : access String)
-                          ;; with
-                          ;;    Storage_Size => 512 + 256
-                          ;; indenting 'with'
-                          type-col)
-
-                         (null_private
-                          ;; 'with null record;' or 'with private;'
-                          ;; test/ada_mode-nominal.ads
-                          ;; type Limited_Derived_Type_3 is abstract limited 
new Private_Type_1
-                          ;;   with null record;
-                          ;; indenting 'with'; containing is 'is'
-                          (+ type-col ada-indent-broken))
-
-                         (t
-                          ;; test/ada_mode-nominal.ads
-                          ;; type Unconstrained_Array_Type_3 is array (Integer 
range <>, Standard.Character range <>)
-                          ;;   of Object_Access_Type_1;
-                          ;; indenting 'of'; containing is 'is'
-                          ;;
-                          ;; type Object_Access_Type_7
-                          ;;   is access all Integer;
-                          ;; indenting 'is'; containing is 'type'
-                          (+ type-col ada-indent-record-rel-type)))))
-
-                     (t
-                      ;; test/ada_mode-nominal.ads
-                      ;; type Limited_Derived_Type_2a is abstract limited new 
Private_Type_1
-                      ;;   with record
-                      ;; indenting 'with record'
-                      ;;
-                      ;; test/access_in_record.ads
-                      ;; type A
-                      ;;    is new Ada.Streams.Root_Stream_Type with record
-                      ;;
-                      ;; test/adacore_9717_001.ads A_Long_Name
-                      ;; subtype A_Long_Name
-                      ;;   is Ada.Text_Io.Count;
-                      ;; indenting 'is'
-                      (+ (current-column) ada-indent-broken))
-                     ))
-
-                   (generic_instantiation
-                    ;; test/ada_mode-generic_instantiation.ads
-                    ;; procedure Procedure_7 is
-                    ;;   new Instance.Generic_Procedure (Integer, Function_1);
-                    ;; indenting 'new'
-                    (+ (current-column) ada-indent-broken))
+         (statement-other
+          (cond
+           ((and (eq (wisi-cache-token cache) 'IS)
+                 (memq (wisi-cache-nonterm cache)
+                       '(expression_function_declaration
+                         ;; test/ada_mode-expression-functions.ads
+                         ;; function Square (A : in Float) return Float
+                         ;;   is (A * A);
+
+                         null_procedure_declaration
+                         ;; test/ada_mode-nominal.ads
+                         ;; procedure Procedure_3c
+                         ;; is null;
+                         )))
+            (ada-wisi-indent-containing ada-indent-broken cache t start))
+
+           ((and (eq (wisi-cache-token cache) 'WITH)
+                 (eq (wisi-cache-nonterm cache) 'derived_type_definition))
+            ;; test/ada_mode-nominal.ads
+            ;; type Limited_Derived_Type_2a is abstract limited new 
Private_Type_1
+            ;;   with record
+            (ada-wisi-indent-containing ada-indent-record-rel-type cache t 
start))
 
-                   (generic_renaming_declaration
-                    ;; indenting keyword following 'generic'
-                    (current-column))
-
-                   ;; null_procedure_declaration with subprogram_body
-
-                   (object_declaration
-                    (cl-ecase (wisi-cache-token containing)
-                      (COLON
-                       ;; test/ada_mode-nominal.ads
-                       ;; Anon_Array_3 : array (1 .. 10)
-                       ;;   of Integer;
-                       ;; indenting 'of'
-                       (+ (current-indentation) ada-indent-broken))
-
-                      (COLON_EQUAL
-                       ;; test/indent.ads
-                       ;; C_S_Controls : constant
-                       ;;   CSCL_Type :=
-                       ;;     CSCL_Type'
-                       ;; indenting 'CSCL_Type'
-                       (+ (current-indentation) ada-indent-broken))
-
-                      (identifier_list
-                       ;; test/ada_mode-nominal.adb
-                       ;; Local_2 : constant Float
-                       ;;   := Local_1;
-                       (+ (current-indentation) ada-indent-broken))
-                      ))
-
-                    ((package_declaration
-                     package_body)
-                    ;; test/ada_mode-nominal.ads
-                    ;; package Ada_Mode.Nominal
-                    ;; with
-                    ;;   SPARK_Mode => On
-                    ;; is
-                    ;; indenting 'with'
-                    ;;
-                    ;; test/ada_mode-nominal.adb
-                    ;; package body Ada_Mode.Nominal
-                    ;; with
-                    ;;   SPARK_Mode => On
-                    ;; is
-                    (save-excursion
-                       (current-column)))
-
-                   (private_extension_declaration
-                    (cl-ecase (wisi-cache-token cache)
-                      (WITH
-                       ;; test/aspects.ads
-                       ;; type Date_Set is tagged private
-                       ;; with
-                       ;; indenting 'with'
-                       (current-indentation))
-
-                      (t
-                       ;; test/ada_mode-nominal.ads
-                       ;; type Limited_Derived_Type_3 is abstract limited
-                       ;;   new Private_Type_1 with private;
-                       ;; indenting 'new'
-                       (+ (current-indentation) ada-indent-broken))
-                      ))
-
-                   (private_type_declaration
-                    ;; test/aspects.ads
-                    ;; type Vector is tagged private
-                    ;; with
-                    ;; indenting 'with'
-                    (current-indentation))
-
-                   ;; protected_type_declaration with full_type_declaration
-
-                   (qualified_expression
-                    ;; test/ada_mode-nominal-child.ads
-                    ;; Child_Obj_5 : constant Child_Type_1 :=
-                    ;;   (Parent_Type_1'
-                    ;;     (Parent_Element_1 => 1,
-                    (ada-wisi-indent-cache ada-indent-broken containing))
-
-                   ;; single_protected_declaration with full_type_declaration
-                   ;; single_task_declaration with full_type_declaration
-
-                   (statement
-                    (cl-case (wisi-cache-token containing)
-                      (label_opt
-                       (- (current-column) ada-indent-label))
-
-                      (t
-                       ;; test/ada_mode-nominal.adb
-                       ;; select
-                       ;;    delay 1.0;
-                       ;; then
-                       ;;    -- ...
-                       ;;   abort
-                       (ada-wisi-indent-cache ada-indent-broken cache))
-                      ))
-
-                   ((subprogram_body
-                     subprogram_declaration
-                     subprogram_specification
+           (t
+            (cl-case (wisi-cache-nonterm cache)
+              ((generic_renaming_declaration subprogram_renaming_declaration)
+               ;; special case for ada-indent-renames
+
+               (cl-ecase (wisi-cache-token cache)
+                 ((FUNCTION PROCEDURE)
+                  ;; test/ada_mode-generic_instantiation.ads
+                  ;; generic
+                  ;; function Gen_Function_4 renames Instance.Generic_Function;
+                  ;;
+                  ;; generic
+                  ;; procedure
+                  (ada-wisi-indent-containing 0 cache t start))
+
+                 (RENAMES
+                  ;; test/ada_mode-generic_instantiation.ads
+                  ;; generic function Gen_Function_2
+                  ;;   renames Instance.Generic_Function;
+                  (wisi-goto-containing cache)
+                  (wisi-forward-find-token '(FUNCTION PROCEDURE) start)
+                  (let ((pos-subprogram (point))
+                        (has-params
+                         ;; this is wrong for one return access
+                         ;; function case: overriding function Foo
+                         ;; return access Bar (...) renames ...;
+                         (wisi-forward-find-token 'LEFT_PAREN start t)))
+                    (if has-params
+                        (if (<= ada-indent-renames 0)
+                            ;; indent relative to paren
+                            (+ (current-column) (- ada-indent-renames))
+                          ;; else relative to line containing keyword
+                          (goto-char pos-subprogram)
+                          (+ (current-indentation) ada-indent-renames))
+
+                      ;; no params
+                      (goto-char pos-subprogram)
+                      (+ (current-indentation) ada-indent-broken))
+                    ))
+                 ))
 
-                     ;; shared code, but out of alphabetical order:
-                     abstract_subprogram_declaration
-                     expression_function_declaration
-                     null_procedure_declaration)
-                    (cl-ecase (wisi-cache-token cache)
-                      (IS
-                       ;; test/ada_mode-nominal.ads
-                       ;; procedure Procedure_1d
-                       ;;   (Item   : in out Parent_Type_1;
-                       ;;    Item_1 : in     Character;
-                       ;;    Item_2 : out    Character)
-                       ;;   is null;
-                       ;; indenting 'is'
-                       (+ (current-column) ada-indent-broken))
-
-                      (OVERRIDING
-                       ;; indenting 'overriding' following 'not'
-                       (current-column))
-
-                      ((PROCEDURE FUNCTION)
-                       ;; indenting 'procedure' or 'function following 
'overriding'
-                       (current-column))
-
-                      (WITH
-                       ;; indenting aspect specification on subprogram 
declaration
-                       ;; test/aspects.ads
-                       ;; procedure Foo (X : Integer;
-                       ;;                Y : out Integer)
-                       ;; with Pre => X > 10 and
-                       ;; indenting 'with'
-                       (current-column))
-                      ))
-
-                   ;; subtype_declaration, task_type_declaration with 
full_type_declaration
-
-                   ))))
-             )))) ;; end statement-other
-
-       (statement-start
-        (cond
-         ((eq 'label_opt (wisi-cache-token cache))
-          (ada-wisi-indent-containing (+ ada-indent-label ada-indent) cache t))
+              ((aggregate
+                ;; test/ada_mode-nominal-child.adb
+                ;; return (Parent_Type_1
+                ;;         with 1, 0.0, False);
 
-         (t
-          (let ((containing-cache (wisi-get-containing-cache cache)))
-            (if (not containing-cache)
-                ;; at bob
-                0
-              ;; not at bob
-              (cl-case (wisi-cache-class containing-cache)
-                ((block-start block-middle)
-                 (wisi-goto-containing cache)
-                 (cl-case (wisi-cache-nonterm containing-cache)
-                   (record_definition
-                    (+ (current-indentation) ada-indent))
+                aspect_specification_opt
+                ;; test/ada_mode-nominal.ads
+                ;; package Ada_Mode.Nominal
+                ;; with
+                ;;
+                ;; test/ada_mode-nominal.adb
+                ;; package body Ada_Mode.Nominal
+                ;; with
 
-                   (t
-                    (ada-wisi-indent-cache ada-indent containing-cache))
-                   ))
+                elsif_expression_item
+                ;; test/ada_mode-conditional_expressions.adb
+                ;; K := (if K < 0 then 42
+                ;;       elsif K = 0 then
+
+                elsif_statement_item
+                ;; not in paren
+                ;; test/g-comlin.adb
+                ;;   elsif Current_Argument < CL.Argument_Count then
+
+                generic_renaming_declaration
+                ;; test/ada_mode-generic_instantiation.ads
+                ;; generic
+                ;; procedure
+
+                subprogram_body
+                subprogram_declaration
+                subprogram_specification
+                overriding_indicator_opt
+                abstract_subprogram_declaration
+                expression_function_declaration
+                null_procedure_declaration
+                ;; test/ada_mode-nominal.ads
+                ;; not
+                ;; overriding
+                ;;
+                ;; not overriding
+                ;; procedure Procedure_1b
+                )
+               (ada-wisi-indent-containing 0 cache t start))
 
-                (list-break
-                 (ada-wisi-indent-list-break cache prev-token))
+              (t
+               (ada-wisi-indent-containing ada-indent-broken cache t start))
+              ))
+           )) ;; end statement-other
 
-                ))))
-            ))
-       ))
-    ))
+         (statement-start
+          (ada-wisi-indent-containing ada-indent cache t start))
+         ))
+      )))
 
 (defun ada-wisi-after-cache ()
-  "Point is at indentation, not before a cached token. Find previous
-cached token, return new indentation for point."
+  "Point is at indentation. Find previous cached token, return
+new indentation for point."
   (save-excursion
     (let ((start (point))
          (prev-token (save-excursion (wisi-backward-token)))
@@ -846,13 +591,16 @@ cached token, return new indentation for point."
        0)
 
        (t
-       (while (memq (wisi-cache-class cache) '(keyword name name-paren type))
+       (while (memq (wisi-cache-class cache) '(name name-paren))
          ;; not useful for indenting
          (setq cache (wisi-backward-cache)))
 
        (cl-ecase (wisi-cache-class cache)
          (block-end
           ;; indenting block/subprogram name after 'end'
+          ;; test/ada_mode-nominal.adb
+          ;; end
+          ;;   Function_Access_11;
           (wisi-indent-current ada-indent-broken))
 
          (block-middle
@@ -861,152 +609,276 @@ cached token, return new indentation for point."
              (cl-case (wisi-cache-nonterm cache)
                (case_statement
                 ;; between 'case .. is' and first 'when'; most likely a comment
-                (ada-wisi-indent-containing 0 cache t))
+                ;; test/ada_mode-nominal.adb
+                ;; case Param_1 is
+                ;; -- comment after "is", before "when"
+                (ada-wisi-indent-containing 0 cache))
 
                (t
-                (+ (ada-wisi-indent-containing ada-indent cache t)))
+                ;; test/ada_mode-nominal.adb
+                ;; function F2 (Param_1 : Discrete_Type_1; B : Float) return 
Float
+                ;; is
+                ;;    Local : Object_Access_Type_0a := new Float'(9.0);
+                (+ (ada-wisi-indent-containing ada-indent cache)))
                ))
 
             ((THEN ELSE)
-             ;;
-             ;; test/ada_mode-conditional_expressions.adb
-             ;; K3 : Integer := (if
-             ;;                    J > 42
-             ;;                  then
-             ;;                    -1
-             ;;                  else
-             ;;                    +1);
-             ;; indenting -1, +1
              (let ((indent
-                    (cl-ecase (wisi-cache-nonterm (wisi-get-containing-cache 
cache))
-                      ((statement if_statement elsif_statement_item) 
ada-indent)
-                      ((if_expression elsif_expression_item) 
ada-indent-broken))))
-               (ada-wisi-indent-containing indent cache t)))
+                    (cl-ecase (wisi-cache-nonterm cache)
+                      ((asynchronous_select
+                       ;; test/ada_mode-nominal.adb
+                        ;; select
+                        ;;    delay 1.0;
+                        ;; then
+                        ;;    -- The comment after 'null' below has no space 
between ';'
+
+                        if_statement
+                        ;; test/ada_mode-nominal.adb
+                        ;; if A_Param > 0.0 then
+                        ;;    -- EMACSCMD:(test-face "new" 
font-lock-keyword-face)
+
+                        elsif_statement_item
+                        ;; test/ada_mode-nominal.adb
+                        ;; then -- 2
+                        ;;      --EMACSCMD:(progn ...
+
+                        selective_accept
+                        ;; test/ada_mode-nominal.adb
+                        ;; else
+                        ;;    --  comment after select else
+                        )
+                       ada-indent)
+
+                      ((if_expression
+                       ;; test/ada_mode-conditional_expressions.adb
+                       ;; K3 : Integer := (if
+                       ;;                    J > 42
+                       ;;                  then
+                       ;;                    -1
+                       ;;                  else
+                       ;;                    +1);
+                       ;; indenting -1, +1
+                       elsif_expression_item
+                       ;; test/ada_mode-conditional_expressions.adb
+                       ;; K := (if K < 0 then 42
+                       ;;       elsif K = 0 then
+                       ;;         (case J is
+                       )
+                       ada-indent-broken))))
+               (ada-wisi-indent-containing indent cache nil start)))
 
             (WHEN
-             ;; between 'when' and '=>'
-             (+ (current-column) ada-indent-broken))
+             (cl-ecase (wisi-cache-nonterm cache)
+               ((case_expression_alternative
+                 ;; test/ada_mode-conditional_expressions.adb
+                 ;; L2 : Integer := (case J is
+                 ;;                     when
+                 ;;                       42 => -1,
+
+                 case_statement_alternative
+                 ;; test/ada_mode-nominal.adb
+                 ;; case Local_4 is
+                 ;;    when
+                 ;;      A | -- continuation line; ada-indent-broken = 2
+
+                 exception_handler
+                 ;; test/ada_mode-nominal.adb
+                 ;; when -- 2
+                 ;;   Bad_Thing -- ada-mode 4.01 indentation
+                 ;;   =>        -- ""
+                 )
+                (+ (current-column) ada-indent-broken))
+               ))
 
             (t
-             ;; block-middle keyword may not be on separate line:
-             ;;       function Create (Model   : in Integer;
-             ;;                        Context : in String) return String is
+             ;; block-middle keyword other than above
+             ;; test/ada_mode-nominal.adb
+             ;; accept Middle_1 (Param_1 : in Integer) do
+             ;;    --  a comment after 'do'
+             ;;
+             ;; begin
+             ;;    --EMACSCMD:(progn 
(ada-goto-declarative-region-start)(looking-at " -- target 5"))
              (ada-wisi-indent-containing ada-indent cache nil))
             ))
 
          (block-start
           (cl-case (wisi-cache-nonterm cache)
-            (exception_handler
-             ;; between 'when' and '=>'
-             (+ (current-column) ada-indent-broken))
-
-            (if_expression
-             (ada-wisi-indent-containing ada-indent-broken cache nil))
-
-            (select_alternative
-             (ada-wisi-indent-containing (+ ada-indent-when ada-indent-broken) 
cache nil))
+            ((exception_handler
+              ;; test/ada_mode-nominal.adb
+              ;; when -- 2
+              ;;   Bad_Thing -- ada-mode 4.01 indentation
+
+              select_alternative
+              ;; test/ada_mode-nominal.adb
+              ;; when
+              ;;   Started =>
+              )
+              (+ (current-column) ada-indent-broken))
 
-            (t ;; other; normal block statement
-             (ada-wisi-indent-cache ada-indent cache))
+            (t
+             ;; test/ada_mode-nominal.adb
+             ;; task body Task_Type_1 is
+             ;;    -- a more typical task
+             (+ (ada-wisi-current-indentation) ada-indent))
             ))
 
          (close-paren
-          ;; actual_parameter_part: test/ada_mode-nominal.adb
-          ;; return 1.0 +
-          ;;   Foo (Bar) + -- multi-line expression that happens to have a 
cache at a line start
-          ;;   12;
-          ;; indenting '12'; don't indent relative to containing function name
-          ;;
-          ;; attribute_designator: test/ada_mode-nominal.adb
-          ;; raise Constraint_Error with Count'Image (Line (File)) &
-          ;;    "foo";
-          ;; indenting '"foo"'; relative to raise
-          ;;
-          ;; test/ada_mode-slices.adb
-          ;; Put_Line(Day'Image(D1) & " - " & Day'Image(D2) & " = " &
-          ;;            Integer'Image(N));
-          ;; indenting 'Integer'
-          (when (memq (wisi-cache-nonterm cache)
-                      '(actual_parameter_part attribute_designator))
-            (setq cache (wisi-goto-containing cache)))
-          (ada-wisi-indent-containing ada-indent-broken cache nil))
+          ;; test/ada_mode-parens.adb
+          ;;               and then E))
+          ;; or else G
+          (ada-wisi-indent-containing ada-indent-broken cache nil start))
 
-         (list-break
-          (ada-wisi-indent-list-break cache prev-token))
+         (expression-start
+          (cond
+           ((eq 'LEFT_PAREN (wisi-cache-token cache))
+            (if (= (point) (cadr prev-token))
+                ;; test/ada_mode-parens.adb
+                ;; Local_9 : String := (
+                ;;                      "123" &
+                (1+ (current-column))
+
+              ;; not at token preceding indenting token
+              ;; test/ada_mode-nominal.adb
+              ;; 2
+              ;;   => (others
+              ;;         => 2.0),
+              ;;
+              ;; test/ada_mode-parens.adb
+              ;; A :=
+              ;;   (1 |
+              ;;      2 => (0, 0, 0),
+              (+ 1 (current-column) ada-indent-broken)))
 
-         (open-paren
-          ;; 1) A parenthesized expression, or the first item in an aggregate:
-          ;;
-          ;;    (foo +
-          ;;       bar)
-          ;;    (foo =>
-          ;;       bar)
-          ;;
-          ;;     we are indenting 'bar'
-          ;;
-          ;; 2) A parenthesized expression, or the first item in an
-          ;;    aggregate, and there is whitespace between
-          ;;    ( and the first token:
-          ;;
-          ;; test/ada_mode-parens.adb
-          ;; Local_9 : String := (
-          ;;                      "123"
-          ;;
-          ;; 3) A parenthesized expression, or the first item in an
-          ;;    aggregate, and there is a comment between
-          ;;    ( and the first token:
-          ;;
+           (t
+            (let* ((containing1 (wisi-get-containing-cache cache))
+                   (containing2 (wisi-get-containing-cache containing1))
+                   (containing3 (wisi-get-containing-cache containing2)))
+
+              (cond
+               ((and (eq 'EQUAL_GREATER (wisi-cache-token containing1))
+                     (or
+                      (eq 'aspect_specification_opt (wisi-cache-nonterm 
containing2))
+                      (and (eq 'association_list (wisi-cache-nonterm 
containing2))
+                           (eq 'aspect_specification_opt (wisi-cache-nonterm 
containing3)))))
+                ;; special case for aspects
+                ;; test/aspects.ads
+                ;; with Pre => X > 10 and
+
+                (wisi-goto-containing cache);; EQUAL_GREATER
+                (let ((cache-col (current-column))
+                      (cache-pos (point))
+                      (line-end-pos (line-end-position)))
+                  (if (= (+ 2 cache-pos) line-end-pos)
+                      ;;   Post =>
+                      ;;     Y >= X and
+                      ;;     Some_Very_Verbose_Predicate (X, Y);
+                      (progn
+                        (goto-char cache-pos)
+                        (+ (current-indentation) ada-indent-broken))
+                    ;; with Pre => X > 10 and
+                    ;;             X < 50 and
+                    (+ 3 cache-col))
+                  ))
+
+               (t
+                (let ((cur-line (line-number-at-pos (point)))
+                      (paren-line (line-number-at-pos (nth 1 (syntax-ppss)))))
+                  (cond
+                   ((and (ada-in-paren-p)
+                         (eq cur-line paren-line))
+                    ;; test/ada_mode-parens.adb
+                    ;; Local_2 : Integer := (1 + 2 +
+                    ;;                         3);
+                    ;;
+                    ;; test/ada_mode-parens.adb
+                    ;; if A.all
+                    ;;   or else (B.all
+                    ;;              --EMACSCMD:(test-face "then" 
'font-lock-keyword-face)
+                    ;;              and then C
+                    (+ (current-column) ada-indent-broken))
+
+                   (t
+                    ;; test/ada_mode-conditional_expressions.adb
+                    ;; L5 : Boolean :=
+                    ;;   (case C is
+                    ;;       when A =>
+                    ;;          J = 4
+                    ;;            or else M, --  test case from Piotr Trojanek
+                    ;;
+                    ;; test/ada_mode-nominal.adb
+                    ;; return 1.0 +
+                    ;;          Function_2a (Parent_Type_1'(1, 2.0, False)) +
+                    (+ (ada-wisi-current-indentation) ada-indent-broken))
+                   )))
+               )))
+           ));; expression-start
+
+         (label
           ;; test/ada_mode-nominal.adb
-          ;; A :=
-          ;;   (
-          ;;    -- a comment between paren and first association
-          ;;    1 =>
-          ;;
-          ;; test/ada_mode-parens.adb
-          ;; return Float (
-          ;;               Integer'Value
-          ;; indenting 'Integer'
-          (let ((paren-column (current-column))
-                (start-is-comment (save-excursion (goto-char start) 
(looking-at comment-start-skip))))
-            (wisi-forward-token); point is now after paren
-            (if start-is-comment
-                (skip-syntax-forward " >"); point is now on comment
-              (forward-comment (point-max)); point is now on first token
-              )
-            (if (= (point) start)
-                ;; case 2) or 3)
-                (1+ paren-column)
-              ;; 1)
-              (+ paren-column 1 ada-indent-broken))))
+          ;; <<Label_1>>
+          ;;    --  a comment after a label
+          (+ (current-column) (- ada-indent-label)))
 
-         ((return-with-params return-without-params)
+         (list-break
           ;; test/ada_mode-nominal.adb
-          ;; function Function_Access_1
-          ;;   (A_Param : in Float)
-          ;;   return
-          ;;     Standard.Float
-          ;; indenting 'Standard.Float'
+          ;; with
+          ;;   Storage_Size => 512 + 256,
+          ;;   Priority => 5;
           ;;
-          ;; test/ada_mode-expression_functions.ads
-          ;; function Square (A : in Float) return Float
-          ;;   is (A * A);
-          ;; indenting 'is'
+          ;; (1 => (others => 1.0),
+          ;;  2
           ;;
-          ;; test/ada_mode-nominal.ads
-          ;; function Function_2g
-          ;;   (Param : in Private_Type_1)
-          ;;   return Float
-          ;;   is abstract;
-          ;; indenting 'is'
-          (back-to-indentation)
-          (+ (current-column) ada-indent-broken))
+          ;; test/format_paramlist.adb
+          ;; procedure X (Y : in     Z 'Class := Default_Z;
+          ;;              B : access Integer;
+          (ada-wisi-indent-list-break cache prev-token))
+
+         (open-paren
+          (cond
+           ((eq (cadr prev-token) (point))
+            ;; test/ada_mode-parens.adb
+            ;; return Float (
+            ;;               Integer'Value
+            (goto-char start)
+            (wisi-indent-paren 1))
+
+           (t
+            ;; test/ada_mode-parens.adb
+            ;; (Left,
+            ;;    Right : in Array_Type_1) -- ada-indent-broken to match 4.01
+            (goto-char start)
+            (wisi-indent-paren (1+ ada-indent-broken)))
+           ))
+
+         ((return-with-params
+           ;; test/ada_mode-nominal.adb
+           ;; function Function_Access_1
+           ;;   (A_Param : in Float)
+           ;;   return
+           ;;     Standard.Float
+           ;;
+           ;; test/ada_mode-nominal.ads
+           ;; function Function_2g
+           ;;   (Param : in Private_Type_1)
+           ;;   return Float
+           ;;     is abstract;
+           return-without-params
+           ;; test/ada_mode-nominal.adb
+           ;; type Function_Access_Type_2g is access protected function return
+           ;;   access Standard.Float;
+           )
+          (+ (current-indentation) ada-indent-broken))
 
          (statement-end
+          ;; test/ada_mode-nominal.ads
+          ;; pragma Elaborate_Body (Ada_Mode.Nominal);
+          ;; -- Comment after one line of code; broken versions of the
           (ada-wisi-indent-containing 0 cache nil))
 
          (statement-other
-          (cl-ecase (wisi-cache-token cache)
+          (cl-case (wisi-cache-token cache)
             (ABORT
+             ;; test/subdir/ada_mode-separate_task_body.adb
              ;; select
              ;;    Please_Abort;
              ;; then
@@ -1015,25 +887,14 @@ cached token, return new indentation for point."
              ;;    Titi;
              (ada-wisi-indent-containing ada-indent cache))
 
-            ;; test/subdir/ada_mode-separate_task_body.adb
-            ((COLON COLON_EQUAL)
-             ;; Local_3 : constant Float :=
-             ;;   Local_2;
-             ;;
-             ;; test/ada_mode-nominal.ads
-             ;; type Record_Type_3 (Discriminant_1 : access Integer) is tagged 
record
-             ;;    Component_1 : Integer; -- end 2
-             ;;    Component_2 :
-             ;;      Integer;
-             ;; indenting 'Integer'; containing is ';'
-             (ada-wisi-indent-cache ada-indent-broken cache))
-
             (COMMA
              (cl-ecase (wisi-cache-nonterm cache)
                (name_list
                 (cl-ecase (wisi-cache-nonterm (wisi-get-containing-cache 
cache))
                   (use_clause
                    ;; test/with_use1.adb
+                   ;; use Ada.Text_IO,
+                   ;;     Ada.Numerics,   --  used to be indented with 
ada-broken-indent
                    (ada-wisi-indent-containing ada-indent-use cache))
 
                   (with_clause
@@ -1047,194 +908,102 @@ cached token, return new indentation for point."
                   ))
                ))
 
-            (ELSIF
-             ;; test/g-comlin.adb
-             ;; elsif Index_Switches + Max_Length <= Switches'Last
-             ;;   and then Switches (Index_Switches + Max_Length) = '?'
-             (ada-wisi-indent-cache ada-indent-broken cache))
-
             (EQUAL_GREATER
-             (let ((cache-col (current-column))
-                   (cache-pos (point))
-                   (line-end-pos (line-end-position))
-                   (containing (wisi-goto-containing cache nil)))
-               (while (eq (wisi-cache-nonterm containing) 'association_list)
-                 (setq containing (wisi-goto-containing containing nil)))
-
-               (cl-ecase (wisi-cache-nonterm containing)
-                 ((actual_parameter_part aggregate)
-                  ;; ada_mode-generic_package.ads
-                  ;; with package A_Package_2 is new Ada.Text_IO.Integer_IO 
(Num =>
-                  ;;                                                           
Formal_Signed_Integer_Type);
-                  ;;  indenting 'Formal_Signed_...', point on '(Num'
-                  ;;
-                  ;; test/ada_mode-parens.adb
-                  ;; (1      =>
-                  ;;    1,
-                  ;;  2      =>
-                  ;;    1 + 2 * 3,
-                  ;; indenting '1,' or '1 +'; point on '(1'
-                  ;;
-                  ;; test/ada_mode-parens.adb
-                  ;; Local_13 : Local_11_Type
-                  ;;   := (Integer'(1),
-                  ;;       Integer'(2));
-                  ;; indenting 'Integer'; point on '(Integer'
-                  (+ (current-column) 1 ada-indent-broken))
-
-                 (aspect_specification_opt
-                  ;; test/aspects.ads
-                  ;; with Pre => X > 10 and
-                  ;;             X < 50 and
-                  ;;             F (X),
-                  ;;   Post =>
-                  ;;     Y >= X and
-                  ;; indenting 'X < 50' or 'Y >= X'; cache is '=>', point is 
on '=>'
-                  ;; or indenting 'Post =>'; cache is ',', point is on 'with'
-                  (cl-ecase (wisi-cache-token cache)
-                    (COMMA
-                     (+ (current-indentation) ada-indent-broken))
-
-                    (EQUAL_GREATER
-                     (if (= (+ 2 cache-pos) line-end-pos)
-                         ;;   Post =>
-                         ;;     Y >= X and
-                         (progn
-                           (goto-char cache-pos)
-                           (+ (current-indentation) ada-indent-broken))
-                       ;; with Pre => X > 10 and
-                       ;;             X < 50 and
-                       (+ 3 cache-col)))
-                    ))
-
-                 (association_list
-                  (cl-ecase (save-excursion (wisi-cache-token 
(wisi-goto-containing cache nil)))
-                    (COMMA
-                     (ada-wisi-indent-containing (* 2 ada-indent-broken) 
cache))
-                    ))
-
-                 ((case_expression_alternative case_statement_alternative 
exception_handler)
-                  ;; containing is 'when'
-                  (+ (current-column) ada-indent))
-
-                 (generic_renaming_declaration
-                  ;; not indenting keyword following 'generic'
-                  (+ (current-column) ada-indent-broken))
-
-                  (paren_expression
-                  ;; test/ada_mode-expression_functions.ads
-                  ;; (for some X of Y =>
-                  ;;    Pred (X));
-                  ;; indenting "Pred"
-                   (+ (current-column) ada-indent))
-
-                 (primary
-                  ;; test/ada_mode-quantified_expressions.adb
-                  ;; if (for some J in 1 .. 10 =>
-                  ;;       J/2 = 0)
-                  (ada-wisi-indent-containing ada-indent-broken cache))
-
-
-                 (select_alternative
+             (cond
+              ((or
+                (eq (wisi-cache-nonterm
+                     (wisi-get-containing-cache cache))
+                    'aspect_specification_opt)
+                ;; test/aspects.ads
+                ;; with
+                ;;   Pre =>
+                ;;     X > 10 and
+                (eq (wisi-cache-nonterm
+                     (wisi-get-containing-cache (wisi-get-containing-cache 
cache)))
+                    'aspect_specification_opt)
+                ;; test/aspects.ads
+                ;; with Pre => X > 10 and
+                ;;             X < 50 and
+                ;;             F (X),
+                ;;   Post =>
+                ;;     Y >= X and
+                )
+               (ada-wisi-indent-containing (* 2 ada-indent-broken) cache))
+
+              ((memq
+                (wisi-cache-nonterm cache)
+                '(case_statement_alternative
                   ;; test/ada_mode-nominal.adb
-                  ;; or when Started
-                  ;;      =>
-                  ;;       accept Finish;
-                  ;; indenting 'accept'; point is on 'when'
-                  (+ (current-column) ada-indent))
-
-                 (variant
-                  ;; test/generic_param.adb
-                  ;; case Item_Type is
-                  ;;    when Fix | Airport =>
-                  ;;       null;
-                  ;; indenting 'null'
-                  (+ (current-column) ada-indent))
-
-                 )))
+                  ;; when C =>
+                  ;;    --EMACSCMD:...
+                  exception_handler
+                  ;; test/ada_mode-nominal.adb
+                  ;; when E : Constraint_Error =>
+                  select_alternative
+                  ;; test/test_select.adb
+                  ;; or
+                  ;;    when Local = 0 =>
+                  ;;       --EMACSCMD:(test-face "E2" 
'font-lock-function-name-face)
+                  ))
+               (ada-wisi-indent-containing ada-indent cache nil start))
+
+              (t
+               ;; test/ada_mode-parens.adb
+               ;; (1      =>
+               ;;    1,
+               ;;  2      =>
+               ;;    1 + 2 * 3,
+               ;; indenting '1,' or '1 +'
+               ;;
+               ;; test/ada_mode-conditional_expressions.adb
+               ;; L3 : Integer := (case J is
+               ;;                     when 42 =>
+               ;;                        -1,
+               ;;                     when Integer'First .. 41 =>
+               ;;                        0,
+               ;; indenting -1, 0
+               (ada-wisi-indent-containing ada-indent-broken cache nil start))
+              ))
 
             (IS
-             (setq cache (wisi-goto-containing cache))
-             (cl-ecase (wisi-cache-nonterm cache)
+             (cl-case (wisi-cache-nonterm cache)
                (full_type_declaration
-                ;; ada_mode/nominal.ads
+                ;; test/ada_mode-nominal.ads
                 ;; type Limited_Derived_Type_1a is abstract limited new
                 ;;    Private_Type_1 with record
-                ;;       Component_1 : Integer;
-                ;; indenting 'Private_Type_1'; look for 'record'
-                (let ((type-column (current-column)))
-                  (goto-char start)
-                  (if (wisi-forward-find-token 'RECORD (line-end-position) t)
-                      ;; 'record' on line being indented
-                      (+ type-column ada-indent-record-rel-type)
-                    ;; 'record' on later line
-                    (+ type-column ada-indent-broken))))
-
-               ((formal_type_declaration
-                 ;; test/ada_mode-generic_package.ads
-                 ;; type Synchronized_Formal_Derived_Type is abstract 
synchronized new Formal_Private_Type and Interface_Type
-                 ;;   with private;
-
-                 subtype_declaration
-                 ;; test/ada_mode-nominal.ads
-                 ;;    subtype Subtype_2 is Signed_Integer_Type range 10 ..
-                 ;;      20;
-
-                 private_type_declaration
-                 ;; type Private_Type_2 is abstract tagged limited
-                 ;;  private;
-                 )
-                (+ (current-column) ada-indent-broken))
+                (goto-char start)
+                (if (wisi-forward-find-token 'RECORD (line-end-position) t)
+                    ;; 'record' on line being indented
+                    (ada-wisi-indent-containing ada-indent-record-rel-type 
cache)
+                  ;; 'record' on later line
+                  (ada-wisi-indent-containing ada-indent-broken cache)))
+
+               (t
+                ;; test/ada_mode-generic_package.ads
+                ;; type Synchronized_Formal_Derived_Type is abstract ...
+                ;;   with private;
 
-               (null_procedure_declaration
+                ;; test/ada_mode-nominal.ads
+                ;;    subtype Subtype_2 is Signed_Integer_Type range 10 ..
+                ;;      20;
+                ;;
+                ;; type Private_Type_2 is abstract tagged limited
+                ;;  private;
+                ;;
                 ;; ada_mode-nominal.ads
                 ;; procedure Procedure_3b is
                 ;;   null;
-                ;; indenting null
-                (+ (current-column) ada-indent-broken))
+                (ada-wisi-indent-containing ada-indent-broken cache))
 
                ))
 
-            (LEFT_PAREN
-             ;; test/indent.ads
-             ;; C_S_Controls : constant
-             ;;   CSCL_Type :=
-             ;;     CSCL_Type'
-             ;;       (
-             ;;        1 =>
-             (+ (current-column) 1))
-
-            (NEW
-             ;; ada_mode-nominal.ads
-             ;; type Limited_Derived_Type_2 is abstract limited new 
Private_Type_1 with
-             ;;   private;
-             ;;
-             ;; test/ada_mode-generic_instantiation.ads
-             ;;   procedure Procedure_6 is new
-             ;;     Instance.Generic_Procedure (Integer, Function_1);
-             ;; indenting 'Instance'; containing is 'new'
-             (ada-wisi-indent-containing ada-indent-broken cache))
-
-            (OF
-             ;; ada_mode-nominal.ads
-             ;; Anon_Array_2 : array (1 .. 10) of
-             ;;   Integer;
-             (ada-wisi-indent-containing ada-indent-broken cache))
-
-            (WHEN
-             ;; test/ada_mode-parens.adb
-             ;; exit when A.all
-             ;;   or else B.all
-             (ada-wisi-indent-containing ada-indent-broken cache))
-
             (WITH
              (cl-ecase (wisi-cache-nonterm cache)
                (aggregate
                 ;; test/ada_mode-nominal-child.ads
                 ;;   (Default_Parent with
                 ;;    10, 12.0, True);
-                ;; indenting '10'; containing is '('
-                (ada-wisi-indent-containing 0 cache nil))
+                (wisi-indent-paren 1))
 
                (aspect_specification_opt
                 ;; test/aspects.ads
@@ -1247,42 +1016,53 @@ cached token, return new indentation for point."
                (derived_type_definition
                 ;; test/ada_mode-nominal-child.ads
                 ;; type Child_Type_1 is new Parent_Type_1 with
-                ;;   -- comment between 'with' and 'record'
+                ;;    -- comment between 'with' and 'record'
                 ;;    record
                 ;; indenting comment
-                (+ (current-indentation) ada-indent-broken))
+                (+ (current-indentation) ada-indent-record-rel-type))
                ))
 
-            ;; otherwise just hanging
-            ((ACCEPT FUNCTION PROCEDURE RENAMES)
-             (back-to-indentation)
-             (+ (current-column) ada-indent-broken))
-
+            (t
+             ;; test/ada_mode-nominal.ads
+             ;; type Record_Type_3 (Discriminant_1 : access Integer) is tagged 
record
+             ;;    Component_1 : Integer; -- end 2
+             ;;    Component_2 :
+             ;;      Integer;
+             ;;
+             ;; test/ada_mode-nominal.adb
+             ;; Local_3 : constant Float :=
+             ;;   Local_2;
+             ;;
+             ;; test/g-comlin.adb
+             ;; elsif Index_Switches + Max_Length <= Switches'Last
+             ;;   and then Switches (Index_Switches + Max_Length) = '?'
+             ;;
+             ;; test/ada_mode-long_paren.adb
+             ;; Packet := new Packet_Type'
+             ;;   (RT                            => RT,
+             (+ (ada-wisi-current-indentation) ada-indent-broken))
             ))
 
          (statement-start
           (cl-case (wisi-cache-token cache)
-            (WITH ;; with_clause
+            (WITH
+             ;; test/ada_mode-nominal.ads
+             ;; with
+             ;;   Ada.Text_IO;
              (+ (current-column) ada-indent-with))
 
-            (label_opt
-             ;; comment after label
-             (+ (current-column) (- ada-indent-label)))
-
             (t
-             ;; procedure Procedure_8
-             ;;   is new Instance.Generic_Procedure (Integer, Function_1);
-             ;; indenting 'is'; hanging
-             ;;
-             ;; test/ada_mode-conditional_expressions.adb
-             ;; K3 : Integer := (if
-             ;;                    J > 42
-             ;;                  then
-             ;;                    -1
-             ;;                  else
-             ;;                    +1);
-             ;; indenting J
-             (ada-wisi-indent-cache ada-indent-broken cache))
+             (if (ada-in-paren-p)
+                 ;; test/ada_mode-conditional_expressions.adb
+                 ;; K3 : Integer := (if
+                 ;;                    J > 42
+                 (wisi-indent-paren (1+ ada-indent-broken))
+
+               ;; not in paren
+               ;; test/ada_mode-generic_instantiation.ads
+               ;; procedure Procedure_8
+               ;;   is new Instance.Generic_Procedure (Integer, Function_1);
+               (+ (ada-wisi-current-indentation) ada-indent-broken)))
             ))
          )))
       )))
@@ -1381,7 +1161,7 @@ cached token, return new indentation for point."
 
 (defun ada-wisi-context-clause ()
   "For `ada-fix-context-clause'."
-  (wisi-validate-cache (point-max))
+  (wisi-validate-cache (point-max) t)
   (save-excursion
     (goto-char (point-min))
     (let ((begin nil)
@@ -1429,45 +1209,39 @@ cached token, return new indentation for point."
 
 (defun ada-wisi-goto-subunit-name ()
   "For `ada-goto-subunit-name'."
-  (wisi-validate-cache (point-max))
-  (if (not (> wisi-cache-max (point)))
-      (progn
-       (message "parse failed; can't goto subunit name")
-       nil)
-
-    (let ((end nil)
-         cache
-         (name-pos nil))
-      (save-excursion
-       ;; move to top declaration
-       (goto-char (point-min))
-       (setq cache (or (wisi-get-cache (point))
-                       (wisi-forward-cache)))
-       (while (not end)
-         (cl-case (wisi-cache-nonterm cache)
-           ((pragma use_clause with_clause)
-            (wisi-goto-end-1 cache)
-            (setq cache (wisi-forward-cache)))
-           (t
-            ;; start of compilation unit
-            (setq end t))
-           ))
-       (when (eq (wisi-cache-nonterm cache) 'subunit)
-         (wisi-forward-find-class 'name (point-max)) ;; parent name
-         (wisi-forward-token)
-         (wisi-forward-find-class 'name (point-max)) ;; subunit name
-         (setq name-pos (point)))
-       )
-      (when name-pos
-       (goto-char name-pos))
-      )))
+  (wisi-validate-cache (point-max) t)
+
+  (let ((end nil)
+       cache
+       (name-pos nil))
+    (save-excursion
+      ;; move to top declaration
+      (goto-char (point-min))
+      (setq cache (or (wisi-get-cache (point))
+                     (wisi-forward-cache)))
+      (while (not end)
+       (cl-case (wisi-cache-nonterm cache)
+         ((pragma use_clause with_clause)
+          (wisi-goto-end-1 cache)
+          (setq cache (wisi-forward-cache)))
+         (t
+          ;; start of compilation unit
+          (setq end t))
+         ))
+      (when (eq (wisi-cache-nonterm cache) 'subunit)
+       (wisi-forward-find-class 'name (point-max)) ;; parent name
+       (wisi-forward-token)
+       (wisi-forward-find-class 'name (point-max)) ;; subunit name
+       (setq name-pos (point)))
+      )
+    (when name-pos
+      (goto-char name-pos))
+    ))
 
 (defun ada-wisi-goto-declaration-start ()
   "For `ada-goto-declaration-start', which see.
 Also return cache at start."
-  (wisi-validate-cache (point))
-  (unless (> wisi-cache-max (point))
-    (error "parse failed; can't goto declarative-region-start"))
+  (wisi-validate-cache (point) t)
 
   (let ((cache (wisi-get-cache (point)))
        (done nil))
@@ -1512,9 +1286,7 @@ Also return cache at start."
 
 (defun ada-wisi-goto-declarative-region-start ()
   "For `ada-goto-declarative-region-start', which see."
-  (wisi-validate-cache (point))
-  (unless (> wisi-cache-max (point))
-    (error "parse failed; can't goto declarative-region-start"))
+  (wisi-validate-cache (point) t)
 
   (let ((done nil)
        (first t)
@@ -1588,9 +1360,7 @@ Also return cache at start."
 
 (defun ada-wisi-make-subprogram-body ()
   "For `ada-make-subprogram-body'."
-  (wisi-validate-cache (point))
-  (when wisi-parse-failed
-    (error "syntax parse failed; cannot create body"))
+  (wisi-validate-cache (point) t)
 
   (let* ((begin (point))
         (end (save-excursion (wisi-forward-find-class 'statement-end 
(point-max)) (point)))
@@ -1600,7 +1370,7 @@ Also return cache at start."
                (+ (point) (wisi-cache-last cache)))))
     (goto-char end)
     (newline)
-    (insert " is begin\nnull;\nend ");; legal syntax; parse does not fail
+    (insert " is begin\n\nend ");; legal syntax; parse does not fail
     (insert name)
     (forward-char 1)
 
@@ -1608,14 +1378,12 @@ Also return cache at start."
     (newline-and-indent)
     (indent-region begin (point))
     (forward-line -2)
-    (back-to-indentation); before 'null;'
+    (back-to-indentation)
     ))
 
 (defun ada-wisi-scan-paramlist (begin end)
   "For `ada-scan-paramlist'."
-  (wisi-validate-cache end)
-  (when (< wisi-cache-max end)
-    (error "parse failed; can't scan paramlist"))
+  (wisi-validate-cache end t)
 
   (goto-char begin)
   (let (token
@@ -1728,52 +1496,55 @@ Also return cache at start."
 (defun ada-wisi-which-function ()
   "For `ada-which-function'."
   (wisi-validate-cache (point))
-  (save-excursion
-    (let ((result nil)
-         (cache (condition-case nil (ada-wisi-goto-declaration-start) (error 
nil))))
-      (if (null cache)
-         ;; bob or failed parse
-         (setq result "")
-
-       (when (memq (wisi-cache-nonterm cache)
-                   '(generic_package_declaration 
generic_subprogram_declaration))
-         ;; name is after next statement keyword
-         (wisi-next-statement-cache cache)
-         (setq cache (wisi-get-cache (point))))
-
-       ;; add or delete 'body' as needed
-       (cl-ecase (wisi-cache-nonterm cache)
-         (package_body
-          (setq result (ada-wisi-which-function-1 "package" nil)))
-
-         ((package_declaration
-           generic_package_declaration) ;; after 'generic'
-          (setq result (ada-wisi-which-function-1 "package" t)))
-
-         (protected_body
-          (setq result (ada-wisi-which-function-1 "protected" nil)))
-
-         ((protected_type_declaration single_protected_declaration)
-          (setq result (ada-wisi-which-function-1 "protected" t)))
-
-         ((abstract_subprogram_declaration
-           subprogram_declaration
-           generic_subprogram_declaration ;; after 'generic'
-           null_procedure_declaration)
-          (setq result (ada-wisi-which-function-1
-                        (wisi-cache-text (wisi-forward-find-token '(FUNCTION 
PROCEDURE) (point-max)))
-                        nil))) ;; no 'body' keyword in subprogram bodies
-
-         (subprogram_body
-          (setq result (ada-wisi-which-function-1
-                        (wisi-cache-text (wisi-forward-find-token '(FUNCTION 
PROCEDURE) (point-max)))
-                        nil)))
-
-         (task_type_declaration
-          (setq result (ada-wisi-which-function-1 "task" t)))
+  ;; no message on parse fail, since this could be called from which-func-mode
+  (when (> wisi-cache-max (point))
+    (save-excursion
+      (let ((result nil)
+           (cache (condition-case nil (ada-wisi-goto-declaration-start) (error 
nil))))
+       (if (null cache)
+           ;; bob or failed parse
+           (setq result "")
+
+         (when (memq (wisi-cache-nonterm cache)
+                     '(generic_package_declaration 
generic_subprogram_declaration))
+           ;; name is after next statement keyword
+           (wisi-next-statement-cache cache)
+           (setq cache (wisi-get-cache (point))))
+
+         ;; add or delete 'body' as needed
+         (cl-ecase (wisi-cache-nonterm cache)
+           (package_body
+            (setq result (ada-wisi-which-function-1 "package" nil)))
+
+           ((package_declaration
+             generic_package_declaration) ;; after 'generic'
+            (setq result (ada-wisi-which-function-1 "package" t)))
+
+           (protected_body
+            (setq result (ada-wisi-which-function-1 "protected" nil)))
+
+           ((protected_type_declaration single_protected_declaration)
+            (setq result (ada-wisi-which-function-1 "protected" t)))
+
+           ((abstract_subprogram_declaration
+             subprogram_declaration
+             generic_subprogram_declaration ;; after 'generic'
+             null_procedure_declaration)
+            (setq result (ada-wisi-which-function-1
+                          (wisi-cache-text (wisi-forward-find-token '(FUNCTION 
PROCEDURE) (point-max)))
+                          nil))) ;; no 'body' keyword in subprogram bodies
+
+           (subprogram_body
+            (setq result (ada-wisi-which-function-1
+                          (wisi-cache-text (wisi-forward-find-token '(FUNCTION 
PROCEDURE) (point-max)))
+                          nil)))
+
+           (task_type_declaration
+            (setq result (ada-wisi-which-function-1 "task" t)))
 
-         ))
-      result)))
+           ))
+       result))
+    ))
 
 ;;;; debugging
 (defun ada-wisi-debug-keys ()
diff --git a/packages/ada-mode/gnat-core.el b/packages/ada-mode/gnat-core.el
index c9cca70..66104c5 100644
--- a/packages/ada-mode/gnat-core.el
+++ b/packages/ada-mode/gnat-core.el
@@ -45,13 +45,13 @@
 
     (setq project (plist-put project 'prj_dir prj-dir))
 
-    (let ((process-environment (plist-get project 'proc_env)))
+    (let ((process-environment (cl-copy-list (plist-get project 'proc_env))))
       (setenv "GPR_PROJECT_PATH"
              (mapconcat 'identity
                         (plist-get project 'prj_dir)
                         (plist-get project 'path_sep)))
 
-      (setq project (plist-put project 'proc_env process-environment))
+      (setq project (plist-put project 'proc_env (cl-copy-list 
process-environment)))
       )
 
     project))
@@ -76,7 +76,7 @@
   "Handle gnat-specific Emacs Ada project file settings.
 Return new PROJECT if NAME recognized, nil otherwise.
 See also `gnat-parse-emacs-final'."
-  (let ((process-environment (plist-get project 'proc_env))); for 
substitute-in-file-name
+  (let ((process-environment (cl-copy-list (plist-get project 'proc_env)))); 
for substitute-in-file-name
     (cond
      ((or
        ;; we allow either name here for backward compatibility
@@ -264,7 +264,7 @@ Assumes current buffer is (gnat-run-buffer)"
 
   (setq command (cl-delete-if 'null command))
 
-  (let ((process-environment (ada-prj-get 'proc_env)) ;; for GPR_PROJECT_PATH
+  (let ((process-environment (cl-copy-list (ada-prj-get 'proc_env))) ;; for 
GPR_PROJECT_PATH
        status)
 
     (insert (format "GPR_PROJECT_PATH=%s\n%s " (getenv "GPR_PROJECT_PATH") 
exec)); for debugging
@@ -438,7 +438,7 @@ list."
                (split-string (ada-prj-get 'gnat_stub_opts))))
        (switches (when (ada-prj-get 'gnat_stub_switches)
                    (split-string (ada-prj-get 'gnat_stub_switches))))
-       (process-environment (ada-prj-get 'proc_env)) ;; for GPR_PROJECT_PATH
+       (process-environment (cl-copy-list (ada-prj-get 'proc_env))) ;; for 
GPR_PROJECT_PATH
        )
 
     ;; Make sure all relevant files are saved to disk.
diff --git a/packages/ada-mode/gpr-query.el b/packages/ada-mode/gpr-query.el
index 222f2a5..0e8e651 100755
--- a/packages/ada-mode/gpr-query.el
+++ b/packages/ada-mode/gpr-query.el
@@ -58,13 +58,11 @@
     (setf (gpr-query--session-buffer session) (gnat-run-buffer 
gpr-query-buffer-name-prefix)))
 
   (with-current-buffer (gpr-query--session-buffer session)
-    (let ((process-environment (ada-prj-get 'proc_env)) ;; for GPR_PROJECT_PATH
+    (let ((process-environment (cl-copy-list (ada-prj-get 'proc_env))) ;; for 
GPR_PROJECT_PATH
 
          (project-file (file-name-nondirectory (ada-prj-get 'gpr_file))))
       (erase-buffer); delete any previous messages, prompt
       (setf (gpr-query--session-process session)
-           ;; gnatcoll-1.6 can't handle aggregate projects; M910-032
-           ;; gpr_query can handle some aggregate projects, but not all
            (start-process (concat "gpr_query " (buffer-name))
                           (gpr-query--session-buffer session)
                           "gpr_query"
@@ -245,9 +243,9 @@ Uses `gpr_query'. Returns new list."
 (defun gpr-query-compilation (identifier file line col cmd comp-err)
   "Run gpr_query IDENTIFIER:FILE:LINE:COL CMD,
 set compilation-mode with compilation-error-regexp-alist set to COMP-ERR."
-  ;; Useful when gpr_query will return a list of references; we use
-  ;; `compilation-start' to run gpr_query, so the user can navigate
-  ;; to each result in turn via `next-error'.
+  ;; Useful when gpr_query will return a list of references; the user
+  ;; can navigate to each result in turn via `next-error'.
+  ;; FIXME: implement ada-xref-full-path.
   (let ((cmd-1 (format "%s %s:%s:%d:%d" cmd identifier file line col))
        (result-count 0)
        target-file target-line target-col)
@@ -557,8 +555,9 @@ Enable mode if ARG is positive."
       (message "parsing result ... done")
       result)))
 
-(defun gpr-query-all (identifier file line col)
+(defun gpr-query-all (identifier file line col _local-only)
   "For `ada-xref-all-function', using gpr_query."
+  ;; FIXME: implement local-only
   (gpr-query-compilation identifier file line col "refs" 
'gpr-query-ident-file))
 
 (defun gpr-query-parents (identifier file line col)
diff --git a/packages/ada-mode/gpr-wisi.el b/packages/ada-mode/gpr-wisi.el
index 13c8dcd..586fa5d 100644
--- a/packages/ada-mode/gpr-wisi.el
+++ b/packages/ada-mode/gpr-wisi.el
@@ -1,6 +1,6 @@
 ;; gpr-wisi.el --- Indentation engine for gpr mode, using the wisi parser  -*- 
lexical-binding:t -*-
 ;;
-;; Copyright (C) 2013 - 2015 Free Software Foundation, Inc.
+;; Copyright (C) 2013 - 2016 Free Software Foundation, Inc.
 ;;
 ;; Author: Stephen Leake <address@hidden>
 ;;
@@ -161,16 +161,19 @@ or containing ancestor of CACHE that is at a line 
beginning."
 (defun gpr-wisi-which-function ()
   "For `gpr-which-function'."
   (wisi-validate-cache (point))
-  (let ((cache (wisi-backward-cache)))
-    (while (and cache
-               (not (and
-                     (memq (wisi-cache-nonterm cache) '(package_spec 
simple_project_declaration))
-                     (eq (wisi-cache-class cache) 'statement-start))))
-      (setq cache (wisi-goto-containing cache)))
-    (when cache
-      (wisi-forward-token); package | project
-      (wisi-token-text (wisi-forward-token)); name
-      )))
+  ;; no message on parse fail, since this could be called from which-func-mode
+  (when (> wisi-cache-max (point))
+    (let ((cache (wisi-backward-cache)))
+      (while (and cache
+                 (not (and
+                       (memq (wisi-cache-nonterm cache) '(package_spec 
simple_project_declaration))
+                       (eq (wisi-cache-class cache) 'statement-start))))
+       (setq cache (wisi-goto-containing cache)))
+      (when cache
+       (wisi-forward-token); package | project
+       (wisi-token-text (wisi-forward-token)); name
+       ))
+    ))
 
 ;;; debugging
 (defun gpr-wisi-debug-keys ()
diff --git a/packages/aggressive-indent/aggressive-indent.el 
b/packages/aggressive-indent/aggressive-indent.el
index 3828bf2..a066c58 100644
--- a/packages/aggressive-indent/aggressive-indent.el
+++ b/packages/aggressive-indent/aggressive-indent.el
@@ -4,7 +4,7 @@
 
 ;; Author: Artur Malabarba <address@hidden>
 ;; URL: https://github.com/Malabarba/aggressive-indent-mode
-;; Version: 1.8.1
+;; Version: 1.8.3
 ;; Package-Requires: ((emacs "24.1") (cl-lib "0.5"))
 ;; Keywords: indent lisp maint tools
 ;; Prefix: aggressive-indent
@@ -105,7 +105,7 @@ Please include this in your report!"
 (defvar aggressive-indent-mode)
 
 ;;; Configuring indentarion
-(defcustom aggressive-indent-dont-electric-modes '(ruby-mode)
+(defcustom aggressive-indent-dont-electric-modes nil
   "List of major-modes where `electric-indent' should be disabled."
   :type '(choice
           (const :tag "Never use `electric-indent-mode'." t)
@@ -124,6 +124,9 @@ Please include this in your report!"
     doc-view-mode
     dos-mode
     erc-mode
+    feature-mode
+    fortran-mode
+    f90-mode
     jabber-chat-mode
     haml-mode
     haskell-mode
@@ -136,6 +139,7 @@ Please include this in your report!"
     netcmd-mode
     python-mode
     sass-mode
+    scala-mode
     slim-mode
     special-mode
     shell-mode
@@ -183,7 +187,7 @@ change."
   :package-version '(aggressive-indent . "0.3"))
 
 ;;; Preventing indentation
-(defvar aggressive-indent--internal-dont-indent-if
+(defconst aggressive-indent--internal-dont-indent-if
   '((memq this-command aggressive-indent-protected-commands)
     (region-active-p)
     buffer-read-only
@@ -239,6 +243,12 @@ This is for internal use only.  For user customization, use
                 '(and (derived-mode-p 'coq-mode)
                       (not (string-match "\\.[[:space:]]*$"
                                          (thing-at-point 'line))))))
+(eval-after-load 'ruby-mode
+  '(add-to-list 'aggressive-indent--internal-dont-indent-if
+                '(when (derived-mode-p 'ruby-mode)
+                   (let ((line (thing-at-point 'line)))
+                     (and (stringp line)
+                          (string-match "\\b\\(if\\|case\\|do\\|begin\\) *$" 
line))))))
 
 (defcustom aggressive-indent-dont-indent-if '()
   "List of variables and functions to prevent aggressive indenting.
@@ -366,6 +376,12 @@ or messages."
       (setq aggressive-indent--changed-list
             (cdr aggressive-indent--changed-list)))))
 
+(defcustom aggressive-indent-sit-for-time 0.05
+  "Time, in seconds, to wait before indenting.
+If you feel aggressive-indent is causing Emacs to hang while
+typing, try tweaking this number."
+  :type 'float)
+
 (defun aggressive-indent--indent-if-changed ()
   "Indent any region that changed in the last command loop."
   (when aggressive-indent--changed-list
@@ -374,6 +390,7 @@ or messages."
         (unless (or (run-hook-wrapped 
'aggressive-indent--internal-dont-indent-if #'eval)
                     (aggressive-indent--run-user-hooks))
           (while-no-input
+            (sit-for aggressive-indent-sit-for-time t)
             (redisplay)
             (aggressive-indent--proccess-changed-list-and-indent)))))))
 
diff --git a/packages/async/async.el b/packages/async/async.el
index 6619fff..99162cb 100644
--- a/packages/async/async.el
+++ b/packages/async/async.el
@@ -298,6 +298,42 @@ returns nil.  It can still be useful, however, as an 
argument to
   "Evaluate FUNC in a separate Emacs process, synchronously."
   `(async-get (async-start ,func)))
 
+(defun async--fold-left (fn forms bindings)
+  (let ((res forms))
+    (dolist (binding bindings)
+      (setq res (funcall fn res
+                         (if (listp binding)
+                             binding
+                             (list binding)))))
+    res))
+
+(defmacro async-let (bindings &rest forms)
+  "Implements `let', but each binding is established asynchronously.
+For example:
+
+  (async-let ((x (foo))
+              (y (bar)))
+     (message \"%s %s\" x y))
+
+    expands to ==>
+
+  (async-start (foo)
+   (lambda (x)
+     (async-start (bar)
+      (lambda (y)
+        (message \"%s %s\" x y)))))"
+  (declare (indent 1))
+  (async--fold-left
+   (lambda (acc binding)
+     (let ((fun (pcase (cadr binding)
+                  ((and (pred functionp) f) f)
+                  (f `(lambda () ,f)))))
+       `(async-start ,fun
+                     (lambda (,(car binding))
+                       ,acc))))
+   `(progn ,@forms)
+   (reverse bindings)))
+
 (provide 'async)
 
 ;;; async.el ends here
diff --git a/packages/async/dired-async.el b/packages/async/dired-async.el
index d0de789..ed37953 100644
--- a/packages/async/dired-async.el
+++ b/packages/async/dired-async.el
@@ -262,7 +262,7 @@ ESC or `q' to not overwrite any of the remaining files,
                           for destp = (file-exists-p to)
                           do (and bf destp
                                   (with-current-buffer bf
-                                    (set-visited-file-name to nil t))))))))
+                                    (set-visited-file-name to t t))))))))
     ;; Start async process.
     (when async-fn-list
       (async-start `(lambda ()
diff --git a/packages/beacon/beacon.el b/packages/beacon/beacon.el
index 9a3edac..2c33d5e 100644
--- a/packages/beacon/beacon.el
+++ b/packages/beacon/beacon.el
@@ -5,7 +5,7 @@
 ;; Author: Artur Malabarba <address@hidden>
 ;; URL: https://github.com/Malabarba/beacon
 ;; Keywords: convenience
-;; Version: 1.3.1
+;; Version: 1.3.2
 ;; Package-Requires: ((seq "2.14"))
 
 ;; This program is free software; you can redistribute it and/or modify
@@ -147,7 +147,13 @@ For instance, if you want to disable beacon on buffers 
where
     (add-hook \\='beacon-dont-blink-predicates
               (lambda () (bound-and-true-p hl-line-mode)))")
 
+(defun beacon--compilation-mode-p ()
+  "Non-nil if this is some form of compilation mode."
+  (or (derived-mode-p 'compilation-mode)
+      (bound-and-true-p compilation-minor-mode)))
+
 (add-hook 'beacon-dont-blink-predicates #'window-minibuffer-p)
+(add-hook 'beacon-dont-blink-predicates #'beacon--compilation-mode-p)
 
 (defcustom beacon-dont-blink-major-modes '(t magit-status-mode magit-popup-mode
                                        inf-ruby-mode
@@ -280,9 +286,10 @@ Only returns `beacon-size' elements."
                        (color-distance "white" bg)))
                (make-list 3 (* beacon-color 65535)))
               (t (make-list 3 (* (- 1 beacon-color) 65535))))))
-    (apply #'seq-mapn (lambda (r g b) (format "#%04x%04x%04x" r g b))
-           (mapcar (lambda (n) (butlast (beacon--int-range (elt fg n) (elt bg 
n))))
-                   [0 1 2]))))
+    (when bg
+      (apply #'seq-mapn (lambda (r g b) (format "#%04x%04x%04x" r g b))
+             (mapcar (lambda (n) (butlast (beacon--int-range (elt fg n) (elt 
bg n))))
+                     [0 1 2])))))
 
 
 ;;; Blinking
diff --git a/packages/company/NEWS.md b/packages/company/NEWS.md
index 758f0be..32d05b3 100644
--- a/packages/company/NEWS.md
+++ b/packages/company/NEWS.md
@@ -1,5 +1,18 @@
 # History of user-visible changes
 
+## 2016-11-12 (0.9.1)
+
+* `company-indent-or-complete-common` skips trying to indent if
+  `indent-line-function` is `indent-relative` or `indent-relative-maybe`.
+* Better visualization of search matches. New face 
`company-tooltip-search-selection`.
+* New variable `company-files-exclusions`.
+* `company-next-page` and `company-previous-page` adhere to
+  `company-selection-wrap-around` docstring more closely and only wrap around
+  when the selection is at the start of the end of the list.
+* `company-pseudo-tooltip-unless-just-one-frontend-with-delay` handles custom
+  frontends derived from `company-preview-frontend` better.
+* `company-idle-delay` is automatically adjusted to a non-zero value.
+
 ## 2016-06-23 (0.9.0)
 
 * Group of backends can now contain keyword `:separate`, which makes candidates
diff --git a/packages/company/company-dabbrev-code.el 
b/packages/company/company-dabbrev-code.el
index 9331087..37f287c 100644
--- a/packages/company/company-dabbrev-code.el
+++ b/packages/company/company-dabbrev-code.el
@@ -96,7 +96,7 @@ comments or strings."
                      (`t (list major-mode))
                      (`code company-dabbrev-code-modes)
                      (`all `all))
-                   t)))
+                   (not company-dabbrev-code-everywhere))))
     (ignore-case company-dabbrev-code-ignore-case)
     (duplicates t)))
 
diff --git a/packages/company/company-files.el 
b/packages/company/company-files.el
index c19d3d6..4410281 100644
--- a/packages/company/company-files.el
+++ b/packages/company/company-files.el
@@ -1,4 +1,4 @@
-;;; company-files.el --- company-mode completion backend for file paths
+;;; company-files.el --- company-mode completion backend for file names
 
 ;; Copyright (C) 2009-2011, 2014-2015  Free Software Foundation, Inc.
 
@@ -28,14 +28,40 @@
 (require 'company)
 (require 'cl-lib)
 
+(defgroup company-files nil
+  "Completion backend for file names."
+  :group 'company)
+
+(defcustom company-files-exclusions nil
+  "File name extensions and directory names to ignore.
+The values should use the same format as `completion-ignored-extensions'."
+  :type '(const string)
+  :package-version '(company . "0.9.1"))
+
 (defun company-files--directory-files (dir prefix)
-  (ignore-errors
-    ;; Don't use directory-files. It produces directories without trailing /.
-    (let ((comp (sort (file-name-all-completions prefix dir)
-                      (lambda (s1 s2) (string-lessp (downcase s1) (downcase 
s2))))))
-      (if (equal prefix "")
-          (delete "../" (delete "./" comp))
-        comp))))
+  ;; Don't use directory-files. It produces directories without trailing /.
+  (condition-case err
+      (let ((comp (sort (file-name-all-completions prefix dir)
+                        (lambda (s1 s2) (string-lessp (downcase s1) (downcase 
s2))))))
+        (when company-files-exclusions
+          (setq comp (company-files--exclusions-filtered comp)))
+        (if (equal prefix "")
+            (delete "../" (delete "./" comp))
+          comp))
+    (file-error nil)))
+
+(defun company-files--exclusions-filtered (completions)
+  (let* ((dir-exclusions (cl-delete-if-not #'company-files--trailing-slash-p
+                                           company-files-exclusions))
+         (file-exclusions (cl-set-difference company-files-exclusions
+                                             dir-exclusions)))
+    (cl-loop for c in completions
+             unless (if (company-files--trailing-slash-p c)
+                        (member c dir-exclusions)
+                      (cl-find-if (lambda (exclusion)
+                                    (string-suffix-p exclusion c))
+                                  file-exclusions))
+             collect c)))
 
 (defvar company-files--regexps
   (let* ((root (if (eq system-type 'windows-nt)
diff --git a/packages/company/company-gtags.el 
b/packages/company/company-gtags.el
index 5050783..82b8032 100644
--- a/packages/company/company-gtags.el
+++ b/packages/company/company-gtags.el
@@ -66,7 +66,8 @@ completion."
   (with-temp-buffer
     (let (tags)
       (when (= 0 (call-process company-gtags-executable nil
-                               (list (current-buffer) nil) nil "-xGq" (concat 
"^" prefix)))
+                               ;; "-T" goes through all the tag files listed 
in GTAGSLIBPATH
+                               (list (current-buffer) nil) nil "-xGqT" (concat 
"^" prefix)))
         (goto-char (point-min))
         (cl-loop while
                  (re-search-forward (concat
diff --git a/packages/company/company-keywords.el 
b/packages/company/company-keywords.el
index e59eaa2..fac37f5 100644
--- a/packages/company/company-keywords.el
+++ b/packages/company/company-keywords.el
@@ -210,6 +210,14 @@
      "do" "else" "elsif"  "end" "ensure" "false" "for" "if" "in" "module"
      "next" "nil" "not" "or" "redo" "rescue" "retry" "return" "self" "super"
      "then" "true" "undef" "unless" "until" "when" "while" "yield")
+    ;; From https://doc.rust-lang.org/grammar.html#keywords
+    ;; but excluding unused reserved words: 
https://www.reddit.com/r/rust/comments/34fq0k/is_there_a_good_list_of_rusts_keywords/cqucvnj
+    (rust-mode
+     "Self"
+     "as" "box" "break" "const" "continue" "crate" "else" "enum" "extern"
+     "false" "fn" "for" "if" "impl" "in" "let" "loop" "macro" "match" "mod"
+     "move" "mut" "pub" "ref" "return" "self" "static" "struct" "super"
+     "trait" "true" "type" "unsafe" "use" "where" "while")
     (scala-mode
      "abstract" "case" "catch" "class" "def" "do" "else" "extends" "false"
      "final" "finally" "for" "forSome" "if" "implicit" "import" "lazy" "match"
@@ -225,8 +233,10 @@
      )
     ;; aliases
     (js2-mode . javascript-mode)
+    (js2-jsx-mode . javascript-mode)
     (espresso-mode . javascript-mode)
     (js-mode . javascript-mode)
+    (js-jsx-mode . javascript-mode)
     (cperl-mode . perl-mode)
     (jde-mode . java-mode)
     (ess-julia-mode . julia-mode))
diff --git a/packages/company/company-tests.el 
b/packages/company/company-tests.el
index f0d669d..5f7a852 100644
--- a/packages/company/company-tests.el
+++ b/packages/company/company-tests.el
@@ -1,6 +1,6 @@
 ;;; company-tests.el --- company-mode test helpers  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2011, 2013-2014  Free Software Foundation, Inc.
+;; Copyright (C) 2011, 2013-2016  Free Software Foundation, Inc.
 
 ;; Author: Dmitry Gutov
 
@@ -21,6 +21,9 @@
 
 (require 'company)
 
+(defvar company-dir (file-name-directory (or load-file-name
+                                             buffer-file-name)))
+
 (defun company--column (&optional pos)
   (car (company--col-row pos)))
 
diff --git a/packages/company/company.el b/packages/company/company.el
index a2908af..32b4b1a 100644
--- a/packages/company/company.el
+++ b/packages/company/company.el
@@ -5,7 +5,7 @@
 ;; Author: Nikolaj Schumacher
 ;; Maintainer: Dmitry Gutov <address@hidden>
 ;; URL: http://company-mode.github.io/
-;; Version: 0.9.0
+;; Version: 0.9.2
 ;; Keywords: abbrev, convenience, matching
 ;; Package-Requires: ((emacs "24.1") (cl-lib "0.5"))
 
@@ -83,7 +83,17 @@ buffer-local wherever it is set."
       (declare (debug defvar) (doc-string 3))
       `(progn
          (defvar ,var ,val ,docstring)
-         (make-variable-buffer-local ',var)))))
+         (make-variable-buffer-local ',var))))
+
+  (unless (fboundp 'string-suffix-p)
+    (defun string-suffix-p (suffix string  &optional ignore-case)
+      "Return non-nil if SUFFIX is a suffix of STRING.
+If IGNORE-CASE is non-nil, the comparison is done without paying
+attention to case differences."
+      (let ((start-pos (- (length string) (length suffix))))
+        (and (>= start-pos 0)
+             (eq t (compare-strings suffix nil nil
+                                    string start-pos nil ignore-case)))))))
 
 (defgroup company nil
   "Extensible inline text completion mechanism"
@@ -108,9 +118,13 @@ buffer-local wherever it is set."
   "Face used for the selection in the tooltip.")
 
 (defface company-tooltip-search
-  '((default :inherit company-tooltip-selection))
+  '((default :inherit highlight))
   "Face used for the search string in the tooltip.")
 
+(defface company-tooltip-search-selection
+  '((default :inherit highlight))
+  "Face used for the search string inside the selection in the tooltip.")
+
 (defface company-tooltip-mouse
   '((default :inherit highlight))
   "Face used for the tooltip item under the mouse.")
@@ -683,6 +697,12 @@ asynchronous call into synchronous.")
       (unless (keywordp b)
         (company-init-backend b))))))
 
+(defun company--maybe-init-backend (backend)
+  (or (not (symbolp backend))
+      (eq t (get backend 'company-init))
+      (unless (get backend 'company-init)
+        (company-init-backend backend))))
+
 (defcustom company-lighter-base "company"
   "Base string to use for the `company-mode' lighter."
   :type 'string
@@ -735,9 +755,6 @@ keymap during active completions (`company-active-map'):
   nil company-lighter company-mode-map
   (if company-mode
       (progn
-        (when (eq company-idle-delay t)
-          (setq company-idle-delay 0)
-          (warn "Setting `company-idle-delay' to t is deprecated.  Set it to 0 
instead."))
         (add-hook 'pre-command-hook 'company-pre-command nil t)
         (add-hook 'post-command-hook 'company-post-command nil t)
         (mapc 'company-init-backend company-backends))
@@ -913,13 +930,16 @@ matches IDLE-BEGIN-AFTER-RE, return it wrapped in a cons."
       (if (functionp company-backend)
           (apply company-backend args)
         (apply #'company--multi-backend-adapter company-backend args))
+    (user-error (user-error
+                 "Company: backend %s user-error: %s"
+                 company-backend (error-message-string err)))
     (error (error "Company: backend %s error \"%s\" with args %s"
                   company-backend (error-message-string err) args))))
 
 (defun company--multi-backend-adapter (backends command &rest args)
   (let ((backends (cl-loop for b in backends
-                           when (not (and (symbolp b)
-                                          (eq 'failed (get b 'company-init))))
+                           when (or (keywordp b)
+                                    (company--maybe-init-backend b))
                            collect b))
         (separate (memq :separate backends)))
 
@@ -1428,7 +1448,7 @@ prefix match (same case) will be prioritized."
                (eq company-require-match t))))))
 
 (defun company-auto-complete-p (input)
-  "Return non-nil, if input starts with punctuation or parentheses."
+  "Return non-nil if INPUT should trigger auto-completion."
   (and (if (functionp company-auto-complete)
            (funcall company-auto-complete)
          company-auto-complete)
@@ -1437,7 +1457,8 @@ prefix match (same case) will be prioritized."
          (if (consp company-auto-complete-chars)
              (memq (char-syntax (string-to-char input))
                    company-auto-complete-chars)
-           (string-match (substring input 0 1) company-auto-complete-chars)))))
+           (string-match (regexp-quote (substring input 0 1))
+                          company-auto-complete-chars)))))
 
 (defun company--incremental-p ()
   (and (> (point) company-point)
@@ -1521,10 +1542,7 @@ prefix match (same case) will be prioritized."
       (setq prefix
             (if (or (symbolp backend)
                     (functionp backend))
-                (when (or (not (symbolp backend))
-                          (eq t (get backend 'company-init))
-                          (unless (get backend 'company-init)
-                            (company-init-backend backend)))
+                (when (company--maybe-init-backend backend)
                   (funcall backend 'prefix))
               (company--multi-backend-adapter backend 'prefix)))
       (when prefix
@@ -1638,11 +1656,13 @@ prefix match (same case) will be prioritized."
               (company--perform)))
           (if company-candidates
               (company-call-frontends 'post-command)
-            (and (numberp company-idle-delay)
+            (and (or (numberp company-idle-delay)
+                     ;; Deprecated.
+                     (eq company-idle-delay t))
                  (not defining-kbd-macro)
                  (company--should-begin)
                  (setq company-timer
-                       (run-with-timer company-idle-delay nil
+                       (run-with-timer (company--idle-delay) nil
                                        'company-idle-begin
                                        (current-buffer) (selected-window)
                                        (buffer-chars-modified-tick) 
(point))))))
@@ -1651,6 +1671,11 @@ prefix match (same case) will be prioritized."
              (company-cancel))))
   (company-install-map))
 
+(defun company--idle-delay ()
+  (if (memql company-idle-delay '(t 0 0.0))
+      0.01
+    company-idle-delay))
+
 (defvar company--begin-inhibit-commands '(company-abort
                                           company-complete-mouse
                                           company-complete
@@ -1977,15 +2002,23 @@ With ARG, move by that many elements."
   "Select the candidate one page further."
   (interactive)
   (when (company-manual-begin)
-    (company-set-selection (+ company-selection
-                              company-tooltip-limit))))
+    (if (and company-selection-wrap-around
+             (= company-selection (1- company-candidates-length)))
+        (company-set-selection 0)
+      (let (company-selection-wrap-around)
+        (company-set-selection (+ company-selection
+                                  company-tooltip-limit))))))
 
 (defun company-previous-page ()
   "Select the candidate one page earlier."
   (interactive)
   (when (company-manual-begin)
-    (company-set-selection (- company-selection
-                              company-tooltip-limit))))
+    (if (and company-selection-wrap-around
+             (zerop company-selection))
+        (company-set-selection (1- company-candidates-length))
+      (let (company-selection-wrap-around)
+        (company-set-selection (- company-selection
+                                  company-tooltip-limit))))))
 
 (defvar company-pseudo-tooltip-overlay)
 
@@ -2075,6 +2108,9 @@ With ARG, move by that many elements."
   (cond
    ((use-region-p)
     (indent-region (region-beginning) (region-end)))
+   ((memq indent-line-function
+          '(indent-relative indent-relative-maybe))
+    (company-complete-common))
    ((let ((old-point (point))
           (old-tick (buffer-chars-modified-tick))
           (tab-always-indent t))
@@ -2450,22 +2486,24 @@ If SHOW-VERSION is non-nil, show the version in the 
echo area."
                                          'company-tooltip-common-selection
                                        'company-tooltip-common)
                                      line)
-    (when selected
-      (if (let ((re (funcall company-search-regexp-function
+    (when (let ((re (funcall company-search-regexp-function
                              company-search-string)))
             (and (not (string= re ""))
                  (string-match re value (length company-prefix))))
-          (pcase-dolist (`(,mbeg . ,mend) (company--search-chunks))
-            (let ((beg (+ margin mbeg))
-                  (end (+ margin mend))
-                  (width (- width (length right))))
-              (when (< beg width)
-                (font-lock-prepend-text-property beg (min end width)
-                                                 'face 'company-tooltip-search
-                                                 line))))
-        (font-lock-append-text-property 0 width 'face
-                                        'company-tooltip-selection
-                                        line)))
+      (pcase-dolist (`(,mbeg . ,mend) (company--search-chunks))
+        (let ((beg (+ margin mbeg))
+              (end (+ margin mend))
+              (width (- width (length right))))
+          (when (< beg width)
+            (font-lock-prepend-text-property beg (min end width) 'face
+                                             (if selected
+                                                 
'company-tooltip-search-selection
+                                               'company-tooltip-search)
+                                             line)))))
+    (when selected
+      (font-lock-append-text-property 0 width 'face
+                                      'company-tooltip-selection
+                                      line))
     (font-lock-append-text-property 0 width 'face
                                     'company-tooltip
                                     line)
@@ -2865,20 +2903,20 @@ Returns a negative number if the tooltip should be 
displayed above point."
 (defun company-pseudo-tooltip-unless-just-one-frontend-with-delay (command)
   "`compandy-pseudo-tooltip-frontend', but shown after a delay.
 Delay is determined by `company-tooltip-idle-delay'."
+  (defvar company-preview-overlay)
+  (when (and (memq command '(pre-command hide))
+             company-tooltip-timer)
+    (cancel-timer company-tooltip-timer)
+    (setq company-tooltip-timer nil))
   (cl-case command
-    (pre-command
-     (company-pseudo-tooltip-unless-just-one-frontend command)
-     (when company-tooltip-timer
-       (cancel-timer company-tooltip-timer)
-       (setq company-tooltip-timer nil)))
     (post-command
      (if (or company-tooltip-timer
              (overlayp company-pseudo-tooltip-overlay))
-         (if (not (memq 'company-preview-frontend company-frontends))
+         (if (not (overlayp company-preview-overlay))
              (company-pseudo-tooltip-unless-just-one-frontend command)
-           (company-preview-frontend 'pre-command)
-           (company-pseudo-tooltip-unless-just-one-frontend command)
-           (company-preview-frontend 'post-command))
+           (let (company-tooltip-timer)
+             (company-call-frontends 'pre-command))
+           (company-call-frontends 'post-command))
        (setq company-tooltip-timer
              (run-with-timer company-tooltip-idle-delay nil
                              
'company-pseudo-tooltip-unless-just-one-frontend-with-delay
diff --git a/packages/company/test/files-tests.el 
b/packages/company/test/files-tests.el
new file mode 100644
index 0000000..2e89d8d
--- /dev/null
+++ b/packages/company/test/files-tests.el
@@ -0,0 +1,48 @@
+;;; filtes-tests.el --- company-mode tests  -*- lexical-binding: t -*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Dmitry Gutov
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+(require 'company-tests)
+(require 'company-files)
+
+(ert-deftest company-files-candidates-normal ()
+  (let (company-files--completion-cache)
+    (should (member (expand-file-name "test/" company-dir)
+                    (company-files 'candidates
+                                   company-dir)))))
+
+(ert-deftest company-files-candidates-normal-root ()
+  (let (company-files--completion-cache)
+    (should (member "/bin/"
+                    (company-files 'candidates "/")))))
+
+(ert-deftest company-files-candidates-excluding-dir ()
+  (let ((company-files-exclusions '("test/"))
+        company-files--completion-cache)
+    (should-not (member (expand-file-name "test/" company-dir)
+                        (company-files 'candidates
+                                       company-dir)))))
+
+(ert-deftest company-files-candidates-excluding-files ()
+  (let ((company-files-exclusions '(".el"))
+        company-files--completion-cache)
+    (should-not (member (expand-file-name "company.el" company-dir)
+                        (company-files 'candidates
+                                       company-dir)))))
diff --git a/packages/company/test/frontends-tests.el 
b/packages/company/test/frontends-tests.el
index 7b8ee61..9592bed 100644
--- a/packages/company/test/frontends-tests.el
+++ b/packages/company/test/frontends-tests.el
@@ -256,18 +256,18 @@
     (should (ert-equal-including-properties
              (company-fill-propertize "barfoo" nil 6 t nil nil)
              #("barfoo"
-               0 3 (face (company-tooltip) mouse-face (company-tooltip-mouse))
-               3 6 (face (company-tooltip-search company-tooltip) mouse-face 
(company-tooltip-mouse)))))
+               0 3 (face (company-tooltip-selection company-tooltip) 
mouse-face (company-tooltip-mouse))
+               3 6 (face (company-tooltip-search-selection 
company-tooltip-selection company-tooltip) mouse-face 
(company-tooltip-mouse)))))
     (should (ert-equal-including-properties
              (company-fill-propertize "barfoo" nil 5 t "" " ")
              #("barfo "
-               0 3 (face (company-tooltip) mouse-face (company-tooltip-mouse))
-               3 5 (face (company-tooltip-search company-tooltip) mouse-face 
(company-tooltip-mouse))
-               5 6 (face (company-tooltip) mouse-face 
(company-tooltip-mouse)))))
+               0 3 (face (company-tooltip-selection company-tooltip) 
mouse-face (company-tooltip-mouse))
+               3 5 (face (company-tooltip-search-selection 
company-tooltip-selection company-tooltip) mouse-face (company-tooltip-mouse))
+               5 6 (face (company-tooltip-selection company-tooltip) 
mouse-face (company-tooltip-mouse)))))
     (should (ert-equal-including-properties
              (company-fill-propertize "barfoo" nil 3 t " " " ")
              #(" bar "
-               0 5 (face (company-tooltip) mouse-face 
(company-tooltip-mouse)))))))
+               0 5 (face (company-tooltip-selection company-tooltip) 
mouse-face (company-tooltip-mouse)))))))
 
 (ert-deftest company-fill-propertize-overrides-face-property ()
   (let ((company-backend #'ignore)
diff --git a/packages/debbugs/Debbugs.wsdl b/packages/debbugs/Debbugs.wsdl
index f9657db..5ca86ee 100644
--- a/packages/debbugs/Debbugs.wsdl
+++ b/packages/debbugs/Debbugs.wsdl
@@ -331,10 +331,10 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>. -->
 
   <wsdl:service name="Debbugs/SOAP/SERVICE">
     <wsdl:port binding="tns:Debbugs/SOAP/BINDING" name="gnu.org">
-      <wsdlsoap:address location="http://debbugs.gnu.org/cgi/soap.cgi"/>
+      <wsdlsoap:address location="https://debbugs.gnu.org/cgi/soap.cgi"/>
     </wsdl:port>
     <wsdl:port binding="tns:Debbugs/SOAP/BINDING" name="debian.org">
-      <wsdlsoap:address location="http://bugs.debian.org/cgi-bin/soap.cgi"/>
+      <wsdlsoap:address location="https://bugs.debian.org/cgi-bin/soap.cgi"/>
     </wsdl:port>
   </wsdl:service>
 </wsdl:definitions>
diff --git a/packages/debbugs/README b/packages/debbugs/README
index 74f8db8..7e29420 100644
--- a/packages/debbugs/README
+++ b/packages/debbugs/README
@@ -2,12 +2,14 @@ This package lets you access the GNU Bug Tracker from within 
Emacs.
 
 It defines the command `M-x debbugs-gnu' for listing bugs, and the
 command `M-x debbugs-gnu-search' for bug searching.  The command
-`M-x debbugs-gnu-usertags' shows existing user tags on bugs.  In order
-to show bugs with known numbers, `M-x debbugs-gnu-bugs' could be used.
+`M-x debbugs-gnu-usertags' shows existing user tags on bugs, whilst
+the command `M-x debbugs-gnu-patches' lists bugs containing a patch.
+In order to show bugs with known numbers, `M-x debbugs-gnu-bugs' could
+be used.
 
 If you prefer the listing of bugs as TODO items of `org-mode', you
-could use the commands `M-x debbugs-org', `M-x debbugs-org-search' and
-`M-x debbugs-org-bugs' instead.
+could use the commands `M-x debbugs-org', `M-x debbugs-org-search',
+`M-x debbugs-org-patches' and `M-x debbugs-org-bugs' instead.
 
 A minor mode `debbugs-browse-mode' let you browse URLs to the GNU Bug
 Tracker as well as bug identifiers prepared for `bug-reference-mode'.
diff --git a/packages/debbugs/debbugs-browse.el 
b/packages/debbugs/debbugs-browse.el
index b4e87c7..2a98b7d 100644
--- a/packages/debbugs/debbugs-browse.el
+++ b/packages/debbugs/debbugs-browse.el
@@ -41,7 +41,7 @@ This can be either `debbugs-gnu-bugs' or `debbugs-org-bugs'."
             (string-match
              (format
               "^%s\\(%s\\)?\\([[:digit:]]+\\)$"
-              (regexp-quote "http://debbugs.gnu.org/";)
+              "https?://debbugs\\.gnu\\.org/"
               (regexp-quote "cgi/bugreport.cgi?bug="))
              url))
     (funcall debbugs-browse-function (string-to-number (match-string 2 url)))
diff --git a/packages/debbugs/debbugs-gnu.el b/packages/debbugs/debbugs-gnu.el
index 4a69f2b..42f2cb0 100644
--- a/packages/debbugs/debbugs-gnu.el
+++ b/packages/debbugs/debbugs-gnu.el
@@ -35,6 +35,7 @@
 ;;   (autoload 'debbugs-gnu "debbugs-gnu" "" 'interactive)
 ;;   (autoload 'debbugs-gnu-search "debbugs-gnu" "" 'interactive)
 ;;   (autoload 'debbugs-gnu-usertags "debbugs-gnu" "" 'interactive)
+;;   (autoload 'debbugs-gnu-patches "debbugs-gnu" "" 'interactive)
 ;;   (autoload 'debbugs-gnu-bugs "debbugs-gnu" "" 'interactive)
 
 ;; The bug tracker is called interactively by
@@ -127,14 +128,26 @@
 
 ;; Unfortunately, it is not possible with the SOAP interface to show
 ;; all users who have tagged bugs.  This list can be retrieved via
-;; <http://debbugs.gnu.org/cgi/pkgindex.cgi?indexon=users>.
+;; <https://debbugs.gnu.org/cgi/pkgindex.cgi?indexon=users>.
+
+;; A special command to show bugs containing patches is
+;;
+;;   M-x debbugs-gnu-patches
+
+;; This command shows all unarchived bugs of the packages declared in
+;; `debbugs-gnu-default-packages', and tagged with "patch".  This is
+;; useful for bug triages.
 
 ;; Finally, if you simply want to list some bugs with known bug
 ;; numbers, call the command
 ;;
 ;;   M-x debbugs-gnu-bugs
 
-;; The bug numbers to be shown shall be entered as comma separated list.
+;; The bug numbers to be shown shall be entered as comma separated
+;; list.  A bug number can also be a range of bugs like "123-456" or
+;; "-10".  In the former case, all bugs from 123 until 456 are
+;; presented, and in the latter case the last 10 bugs are shown,
+;; counting from the highest bug number in the repository.
 
 ;;; Code:
 
@@ -189,7 +202,7 @@
 (defcustom debbugs-gnu-default-severities '("serious" "important" "normal")
   "The list severities bugs are searched for.
 \"tagged\" is not a severity but marks locally tagged bugs."
-  ;; <http://debbugs.gnu.org/Developer.html#severities>
+  ;; <https://debbugs.gnu.org/Developer.html#severities>
   ;; /ssh:debbugs:/etc/debbugs/config @gSeverityList
   ;; We don't use "critical" and "grave".
   :group 'debbugs-gnu
@@ -227,8 +240,8 @@ If nil, the value of `send-mail-function' is used instead."
 
 (defcustom debbugs-gnu-default-packages '("emacs")
   "The list of packages to be searched for."
-  ;; <http://debbugs.gnu.org/Packages.html>
-  ;; <http://debbugs.gnu.org/cgi/pkgindex.cgi>
+  ;; <https://debbugs.gnu.org/Packages.html>
+  ;; <https://debbugs.gnu.org/cgi/pkgindex.cgi>
   :group 'debbugs-gnu
   :type `(set (const "adns")
              (const "auctex")
@@ -345,13 +358,15 @@ The specification which bugs shall be suppressed is taken 
from
   :group 'debbugs-gnu
   :type '(choice (const "24.5")
                 (const "25.1")
-                (const "25.2"))
-  :version "25.1")
+                (const "25.2")
+                (const "26.1"))
+  :version "25.2")
 
 (defconst debbugs-gnu-emacs-blocking-reports
   '(("24.5" . 19758)
     ("25.1" . 19759)
-    ("25.2" . 21966))
+    ("25.2" . 21966)
+    ("26.1" . 24655))
   "The IDs of the Emacs report used to track blocking bug reports.
 It is a list of cons cells, each one containing the Emacs
 version (a string) and the bug report number (a number).")
@@ -1421,7 +1436,7 @@ MERGED is the list of bugs merged with this one."
   "Dynamic completion table for reading bug numbers.")
 
 (defun debbugs-gnu-expand-bug-number-list (bug-number-list)
-  "Expand BUG-NUMBER-LIST to a list of singe bug numbers.
+  "Expand BUG-NUMBER-LIST to a list of single bug numbers.
 BUG-NUMBER-LIST is a list of bug numbers or bug number ranges, as
 returned by `debbugs-gnu-bugs'."
   (let (result)
@@ -1657,22 +1672,28 @@ The following commands are available:
   (let ((args (get-text-property (line-beginning-position) 
'tabulated-list-id)))
     (when args (apply 'debbugs-gnu args))))
 
-(defcustom debbugs-gnu-default-bug-number-list "-10"
+(defcustom debbugs-gnu-default-bug-number-list
+  (propertize "-10" 'help-echo "The 10 most recent bugs.")
   "The default value used in interactive call of `debbugs-gnu-bugs'.
-It must be a string, containing a comma separated list of bugs or bug ranges."
+It must be a string, containing a comma separated list of bugs or bug ranges.
+A negative value, -N, means the newest N bugs."
   :group 'debbugs-gnu
   :type 'string
   :version "25.2")
 
 ;;;###autoload
 (defun debbugs-gnu-bugs (&rest bugs)
-  "List all BUGS, a list of bug numbers."
+  "List all BUGS, a list of bug numbers.
+In interactive calls, prompt for a comma separated list of bugs
+or bug ranges, with default to `debbugs-gnu-default-bug-number-list'."
   (interactive
    (mapcar
     'string-to-number
     (debbugs-gnu-expand-bug-number-list
      (or
-      (completing-read-multiple "Bug numbers: " debbugs-gnu-completion-table)
+      (completing-read-multiple
+       (format "Bug numbers (default %s): " 
debbugs-gnu-default-bug-number-list)
+       debbugs-gnu-completion-table)
       (split-string debbugs-gnu-default-bug-number-list "," t)))))
   (dolist (elt bugs)
     (unless (natnump elt) (signal 'wrong-type-argument (list 'natnump elt))))
diff --git a/packages/debbugs/debbugs-org.el b/packages/debbugs/debbugs-org.el
index c413d11..6c7f82f 100644
--- a/packages/debbugs/debbugs-org.el
+++ b/packages/debbugs/debbugs-org.el
@@ -32,6 +32,7 @@
 ;;
 ;;   (autoload 'debbugs-org "debbugs-org" "" 'interactive)
 ;;   (autoload 'debbugs-org-search "debbugs-org" "" 'interactive)
+;;   (autoload 'debbugs-org-patches "debbugs-org" "" 'interactive)
 ;;   (autoload 'debbugs-org-bugs "debbugs-org" "" 'interactive)
 
 ;; The bug tracker is called interactively by
@@ -89,12 +90,24 @@
 ;; opened presenting all related messages for this bug.  Here you
 ;; could also send debbugs control messages by keystroke "C".
 
+;; A special command to show bugs containing patches is
+;;
+;;   M-x debbugs-org-patches
+
+;; This command shows all unarchived bugs of the packages declared in
+;; `debbugs-gnu-default-packages', and tagged with "patch".  This is
+;; useful for bug triages.
+
 ;; Finally, if you simply want to list some bugs with known bug
 ;; numbers, call the command
 ;;
 ;;   M-x debbugs-org-bugs
 
-;; The bug numbers to be shown shall be entered as comma separated list.
+;; The bug numbers to be shown shall be entered as comma separated
+;; list.  A bug number can also be a range of bugs like "123-456" or
+;; "-10".  In the former case, all bugs from 123 until 456 are
+;; presented, and in the latter case the last 10 bugs are shown,
+;; counting from the highest bug number in the repository.
 
 ;;; Code:
 
@@ -315,7 +328,9 @@ the corresponding buffer (e.g. by closing Emacs)."
 
 ;;;###autoload
 (defun debbugs-org-bugs ()
-  "List all BUGS, a list of bug numbers."
+  "List all BUGS, a list of bug numbers.
+In interactive calls, prompt for a comma separated list of bugs
+or bug ranges, with default to `debbugs-gnu-default-bug-number-list'."
   (interactive)
   (cl-letf (((symbol-function 'debbugs-gnu-show-reports)
             #'debbugs-org-show-reports))
diff --git a/packages/debbugs/debbugs-ug.info b/packages/debbugs/debbugs-ug.info
index 0d4ad7d..0cd822c 100644
--- a/packages/debbugs/debbugs-ug.info
+++ b/packages/debbugs/debbugs-ug.info
@@ -427,7 +427,7 @@ File: debbugs-ug.info,  Node: Control Messages,  Next: 
Applying Patches,  Prev:
 
 Debbugs control messages are sent by email to the GNU Debbugs control
 server.  Their format is described in
-<http://debbugs.gnu.org/server-control.html>.
+<https://debbugs.gnu.org/server-control.html>.
 
    A control message can be initiated in the tabulated list of bugs,
 in the list of org TODO items, or in the GNUS ephemeral group or Rmail
@@ -587,7 +587,7 @@ option 'debbugs-browse-function' controls, whether 
'debbugs-gnu-bugs'
 or 'debbugs-org-bugs' is called.
 
    This minor mode is applicable for all URLs, not only bug
-references.  Any URL with the format <http://debbugs.gnu.org/12345>
+references.  Any URL with the format <https://debbugs.gnu.org/12345>
 will be shown in a bug report buffer, when 'debbugs-browse-mode' is
 enabled.
 
@@ -675,10 +675,10 @@ Node: Presenting Bugs11360
 Node: Tabulated Lists11936
 Node: TODO Items15611
 Node: Control Messages16667
-Node: Applying Patches19709
-Node: Minor Mode21075
-Node: Command Index22019
-Node: Variable Index22808
-Node: Key Index23882
+Node: Applying Patches19710
+Node: Minor Mode21076
+Node: Command Index22021
+Node: Variable Index22810
+Node: Key Index23884
 
 End Tag Table
diff --git a/packages/debbugs/debbugs-ug.texi b/packages/debbugs/debbugs-ug.texi
index e63923a..7d5e429 100644
--- a/packages/debbugs/debbugs-ug.texi
+++ b/packages/debbugs/debbugs-ug.texi
@@ -491,7 +491,7 @@ When the bug attributes are shown by @code{org-cycle}, 
there is a link
 
 Debbugs control messages are sent by email to the GNU Debbugs control
 server.  Their format is described in
address@hidden://debbugs.gnu.org/server-control.html}.
address@hidden://debbugs.gnu.org/server-control.html}.
 
 A control message can be initiated in the tabulated list of bugs, in
 the list of org TODO items, or in the GNUS ephemeral group or Rmail
@@ -657,7 +657,7 @@ user option @code{debbugs-browse-function} controls, whether
 @code{debbugs-gnu-bugs} or @code{debbugs-org-bugs} is called.
 
 This minor mode is applicable for all URLs, not only bug references.
-Any URL with the format @uref{http://debbugs.gnu.org/12345} will be
+Any URL with the format @uref{https://debbugs.gnu.org/12345} will be
 shown in a bug report buffer, when @code{debbugs-browse-mode} is
 enabled.
 
@@ -679,7 +679,7 @@ enabled.
 @bye
 
 @c Local Variables:
address@hidden bug-reference-url-format: "http://debbugs.gnu.org/%s";
address@hidden bug-reference-url-format: "https://debbugs.gnu.org/%s";
 @c eval: (bug-reference-mode)
 @c eval: (debbugs-browse-mode)
 @c End:
diff --git a/packages/debbugs/debbugs.el b/packages/debbugs/debbugs.el
index cf1e643..ff85c35 100644
--- a/packages/debbugs/debbugs.el
+++ b/packages/debbugs/debbugs.el
@@ -5,7 +5,7 @@
 ;; Author: Michael Albinus <address@hidden>
 ;; Keywords: comm, hypermedia
 ;; Package: debbugs
-;; Version: 0.10
+;; Version: 0.12
 ;; Package-Requires: ((soap-client "3.1.1") (cl-lib "0.5"))
 
 ;; This file is not part of GNU Emacs.
@@ -29,7 +29,7 @@
 ;; server (see <http://wiki.debian.org/DebbugsSoapInterface>).
 
 ;; The function "get_versions" is not implemented (yet).  "search_est"
-;; is an extension on <http://debbugs.gnu.org>.
+;; is an extension on <https://debbugs.gnu.org>.
 
 ;;; Code:
 
@@ -43,11 +43,11 @@
 
 (defcustom debbugs-servers
   '(("gnu.org"
-     :wsdl "http://debbugs.gnu.org/cgi/soap.cgi?WSDL";
-     :bugreport-url "http://debbugs.gnu.org/cgi/bugreport.cgi";)
+     :wsdl "https://debbugs.gnu.org/cgi/soap.cgi?WSDL";
+     :bugreport-url "https://debbugs.gnu.org/cgi/bugreport.cgi";)
     ("debian.org"
-     :wsdl "http://bugs.debian.org/cgi-bin/soap.cgi?WSDL";
-     :bugreport-url "http://bugs.debian.org/cgi-bin/bugreport.cgi";))
+     :wsdl "https://bugs.debian.org/cgi-bin/soap.cgi?WSDL";
+     :bugreport-url "https://bugs.debian.org/cgi-bin/bugreport.cgi";))
   "*List of Debbugs server specifiers.
 Each entry is a list that contains a string identifying the port
 name and the server parameters in keyword-value form. Allowed
diff --git a/packages/debbugs/debbugs.info b/packages/debbugs/debbugs.info
index d401541..a77fd24 100644
--- a/packages/debbugs/debbugs.info
+++ b/packages/debbugs/debbugs.info
@@ -110,8 +110,8 @@ File: debbugs.info,  Node: Configuration,  Next: Requesting 
bug numbers,  Prev:
 ***************
 
 'debbugs' is already configured to work with two main ports of Debbugs
-BTS: <http://bugs.debian.org> and <http://debbugs.gnu.org>.  So if you
-intend to use one of these ports, you don't need to configure
+BTS: <https://bugs.debian.org> and <https://debbugs.gnu.org>.  So if
+you intend to use one of these ports, you don't need to configure
 'debbugs'.  If you want to interact with a Debbugs port other than
 those listed, you have to configure 'debbugs' by adding a new server
 specifier to the 'debbugs-servers' variable.  The actual port can be
@@ -142,8 +142,8 @@ selected by the 'debbugs-port' variable.
           (add-to-list
            'debbugs-servers
            '("foobars.net"
-             :wsdl "http://bugs.foobars.net/cgi/soap.cgi?WSDL";
-             :bugreport-url "http://bugs.foobars.net/cgi/bugreport.cgi";))
+             :wsdl "https://bugs.foobars.net/cgi/soap.cgi?WSDL";
+             :bugreport-url "https://bugs.foobars.net/cgi/bugreport.cgi";))
 
  -- Variable: debbugs-port
      This variable holds the name of the currently used port.  The
@@ -225,7 +225,7 @@ Debbugs server the list of bug numbers that match a user's 
query.
           GNU port: '"fixed"', '"notabug"', '"wontfix"',
           '"unreproducible"', '"moreinfo"', '"patch"', '"pending"',
           '"help"', '"security"', '"confirmed"', '"easy"'.  See
-          <http://debbugs.gnu.org/Developer.html#tags> for the actual
+          <https://debbugs.gnu.org/Developer.html#tags> for the actual
           list of tags.
 
      ':owner'
@@ -725,10 +725,10 @@ Tag Table:
 Node: Top1094
 Node: Installation3235
 Node: Configuration4334
-Node: Requesting bug numbers6685
-Node: Requesting bugs statuses12065
-Node: Searching bugs16357
-Node: Requesting messages23163
-Node: Requesting user tags26169
+Node: Requesting bug numbers6689
+Node: Requesting bugs statuses12070
+Node: Searching bugs16362
+Node: Requesting messages23168
+Node: Requesting user tags26174
 
 End Tag Table
diff --git a/packages/debbugs/debbugs.texi b/packages/debbugs/debbugs.texi
index 6671bf2..e15410b 100644
--- a/packages/debbugs/debbugs.texi
+++ b/packages/debbugs/debbugs.texi
@@ -116,8 +116,8 @@ libraries than needed for installation on Emacs 22/23.
 @chapter Configuration
 
 @code{debbugs} is already configured to work with two main ports of
-Debbugs BTS: @uref{http://bugs.debian.org} and
address@hidden://debbugs.gnu.org}.  So if you intend to use one of these
+Debbugs BTS: @uref{https://bugs.debian.org} and
address@hidden://debbugs.gnu.org}.  So if you intend to use one of these
 ports, you don't need to configure @code{debbugs}.  If you want to
 interact with a Debbugs port other than those listed, you have to
 configure @code{debbugs} by adding a new server specifier to the
@@ -150,8 +150,8 @@ Example.  Add a new Debbugs port with name "foobars.net":
 (add-to-list
  'debbugs-servers
  '("foobars.net"
-   :wsdl "http://bugs.foobars.net/cgi/soap.cgi?WSDL";
-   :bugreport-url "http://bugs.foobars.net/cgi/bugreport.cgi";))
+   :wsdl "https://bugs.foobars.net/cgi/soap.cgi?WSDL";
+   :bugreport-url "https://bugs.foobars.net/cgi/bugreport.cgi";))
 @end example
 @end defvar
 
@@ -236,7 +236,7 @@ GNU port: @code{"fixed"}, @code{"notabug"}, 
@code{"wontfix"},
 @code{"unreproducible"}, @code{"moreinfo"}, @code{"patch"},
 @code{"pending"}, @code{"help"}, @code{"security"},
 @code{"confirmed"}, @code{"easy"}.  See
address@hidden://debbugs.gnu.org/Developer.html#tags} for the actual list
address@hidden://debbugs.gnu.org/Developer.html#tags} for the actual list
 of tags.
 
 @item :owner
diff --git a/packages/el-search/el-search-x.el 
b/packages/el-search/el-search-x.el
index 7c050cf..9a98c87 100644
--- a/packages/el-search/el-search-x.el
+++ b/packages/el-search/el-search-x.el
@@ -33,15 +33,152 @@
 
 ;;; Code:
 
+(eval-when-compile (require 'subr-x))
 (require 'el-search)
 
 
+;;;; `append and `l'
+
+(defun el-search--split (matcher1 matcher2 list)
+  "Helper for the \"append\" pattern type.
+
+When a splitting of LIST into two lists L1, L2 exist so that Li
+is matched by MATCHERi, return (L1 L2) for such Li, else return
+nil."
+  (let ((try-match (lambda (list1 list2)
+                     (when (and (el-search--match-p matcher1 list1)
+                                (el-search--match-p matcher2 list2))
+                       (list list1 list2))))
+        (list1 list) (list2 '()) (match nil))
+    ;; don't use recursion, this could hit `max-lisp-eval-depth'
+    (while (and (not (setq match (funcall try-match list1 list2)))
+                (consp list1))
+      (let ((last-list1 (last list1)))
+        (if-let ((cdr-last-list1 (cdr last-list1)))
+            ;; list1 is a dotted list.  Then list2 must be empty.
+            (progn (setcdr last-list1 nil)
+                   (setq list2 cdr-last-list1))
+          (setq list1 (butlast list1 1)
+                list2 (cons (car last-list1) list2)))))
+    match))
+
+(el-search-defpattern append (&rest patterns)
+  "Matches any list factorable into lists matched by PATTERNS in order.
+
+PATTERNS is a list of patterns P1..Pn.  Match any list L for that
+lists L1..Ln exist that are matched by P1..Pn in order and L is
+equal to the concatenation of L1..Ln.  Ln is allowed to be no
+list.
+
+When different ways of matching are possible, it is unspecified
+which one is chosen.
+
+Example: the pattern
+
+   (append '(1 2 3) x (app car-safe 7))
+
+matches the list (1 2 3 4 5 6 7 8 9) and binds `x' to (4 5 6)."
+  (if (null patterns)
+      '(pred null)
+    (pcase-let ((`(,pattern . ,more-patterns) patterns))
+      (cond
+       ((null more-patterns)  pattern)
+       ((null (cdr more-patterns))
+        `(and (pred listp)
+              (app ,(apply-partially #'el-search--split
+                                     (el-search--matcher pattern)
+                                     (el-search--matcher (car more-patterns)))
+                   `(,,pattern ,,(car more-patterns)))))
+       (t `(append ,pattern (append ,@more-patterns)))))))
+
+(defun el-search--transform-nontrivial-lpat (expr)
+  (pcase expr
+    ((and (pred symbolp) (let symbol-name (symbol-name expr)))
+     `(or (symbol ,symbol-name)
+          `',(symbol  ,symbol-name)
+          `#',(symbol ,symbol-name)))
+    ((pred stringp) `(string ,expr))
+    (_ expr)))
+
+(el-search-defpattern l (&rest lpats)
+  "Alternative pattern type for matching lists.
+Match any list with subsequent elements matched by all LPATS in
+order.
+
+The idea is to be able to search for pieces of code (i.e. lists)
+with very brief input by using a specialized syntax.
+
+An LPAT can take the following forms:
+
+SYMBOL  Matches any symbol S matched by SYMBOL's name interpreted
+        as a regexp.  Matches also 'S and #'S for any such S.
+STRING  Matches any string matched by STRING interpreted as a
+        regexp
+_       Matches any list element
+__      Matches any number of list elements (including zero)
+^       Matches zero elements, but only at the beginning of a list
+$       Matches zero elements, but only at the end of a list
+PAT     Anything else is interpreted as a normal pcase pattern, and
+        matches one list element matched by it
+
+^ is only valid as the first, $ as the last of the LPATS.
+
+Example: To match defuns that contain \"hl\" in their name and
+have at least one mandatory, but also optional arguments, you
+could use this pattern:
+
+    (l ^ 'defun hl (l _ &optional))"
+  (declare
+   (heuristic-matcher
+    (lambda (&rest lpats)
+      (lambda (atoms)
+        (cl-every
+         (lambda (lpat)
+           (pcase lpat
+             ((or '__ '_ '_? '^ '$) t)
+             ((pred symbolp)
+              (funcall (el-search-heuristic-matcher `(symbol ,(symbol-name 
lpat))) atoms))
+             (_ (funcall (el-search-heuristic-matcher 
(el-search--transform-nontrivial-lpat lpat))
+                         atoms))))
+         lpats)))))
+  (let ((match-start nil) (match-end nil))
+    (when (eq (car-safe lpats) '^)
+      (setq match-start t)
+      (cl-callf cdr lpats))
+    (when (eq (car-safe (last lpats)) '$)
+      (setq match-end t)
+      (cl-callf butlast lpats 1))
+    `(append ,@(if match-start '() '(_))
+             ,@(mapcar
+                (lambda (elt)
+                  (pcase elt
+                    ('__ '_)
+                    ('_ '`(,_))
+                    ('_? '(or '() `(,_))) ;FIXME: useful - document? or should 
we provide a (? PAT)
+                                          ;thing?
+                    (_ ``(,,(el-search--transform-nontrivial-lpat elt)))))
+                lpats)
+             ,@(if match-end '() '(_)))))
+
+
 ;;;; `change', `changed'
 
 (defvar diff-hl-reference-revision)
 (declare-function diff-hl-changes "diff-hl")
+(declare-function vc-git-command "vc-git")
 (defvar-local el-search--cached-changes nil)
 
+
+(defcustom el-search-change-revision-transformer-function nil
+  "Transformer function for the REVISION argument of `change' and `changed'.
+
+When specified, this function is called on the REVISION argument
+of `change' and `changed' before passing it to git.  The default
+value is nil."
+  :group 'el-search
+  :type '(choice (const :tag "No transformer" nil)
+                 (function :tag "User specified function")))
+
 (defun el-search--changes-from-diff-hl (revision)
   "Return a list of changed regions (as conses of positions) since REVISION.
 Use variable `el-search--cached-changes' for caching."
@@ -51,25 +188,35 @@ Use variable `el-search--cached-changes' for caching."
       (cdr el-search--cached-changes)
     (when (buffer-modified-p)
       (error "Buffer is modified - please save"))
+    (require 'vc)
     (require 'diff-hl)
     ;; `diff-hl-changes' returns line numbers.  We must convert them into 
positions.
     (save-restriction
       (widen)
       (save-excursion
-        (let ((diff-hl-reference-revision revision)
+        (let ((diff-hl-reference-revision
+               (funcall (or el-search-change-revision-transformer-function 
#'identity) revision))
               (current-line-nbr 1) change-beg)
           (goto-char 1)
           (cdr (setq el-search--cached-changes
                      (cons (list revision (visited-file-modtime))
-                           (delq nil (mapcar (pcase-lambda (`(,start-line 
,nbr-lines ,kind))
-                                               (if (eq kind 'delete) nil
-                                                 (forward-line (- start-line 
current-line-nbr))
-                                                 (setq change-beg (point))
-                                                 (forward-line (1- nbr-lines))
-                                                 (setq current-line-nbr (+ 
start-line nbr-lines -1))
-                                                 (cons (copy-marker change-beg)
-                                                       (copy-marker 
(line-end-position)))))
-                                             (diff-hl-changes)))))))))))
+                           (and
+                            (let ((file-name buffer-file-name))
+                              (with-temp-buffer
+                                (vc-git-command
+                                 (current-buffer) 128 file-name
+                                 "log" "--ignore-missing" "-1"
+                                 diff-hl-reference-revision "--" file-name)
+                                (> (point-max) 1)))
+                            (delq nil (mapcar (pcase-lambda (`(,start-line 
,nbr-lines ,kind))
+                                                (if (eq kind 'delete) nil
+                                                  (forward-line (- start-line 
current-line-nbr))
+                                                  (setq change-beg (point))
+                                                  (forward-line (1- nbr-lines))
+                                                  (setq current-line-nbr (+ 
start-line nbr-lines -1))
+                                                  (cons (copy-marker 
change-beg)
+                                                        (copy-marker 
(line-end-position)))))
+                                              (ignore-errors 
(diff-hl-changes)))))))))))))
 
 (defun el-search--change-p (posn &optional revision)
   ;; Non-nil when sexp after POSN is part of a change
@@ -98,15 +245,133 @@ Use variable `el-search--cached-changes' for caching."
   "Matches the object if its text is part of a file change.
 
 Requires library \"diff-hl\".  REVISION defaults to the file's
-repository's HEAD commit."
-  `(guard (el-search--change-p (point) ,revision)))
+repository's HEAD commit and is a git revision string.  Customize
+`el-search-change-revision-transformer-function' to control how
+REVISION is interpreted."
+  `(guard (el-search--change-p (point) ,(or revision "HEAD"))))
 
 (el-search-defpattern changed (&optional revision)
   "Matches the object if its text contains a file change.
 
 Requires library \"diff-hl\".  REVISION defaults to the file's
-repository's HEAD commit."
-  `(guard (el-search--changed-p (point) ,revision)))
+repository's HEAD commit and is a git revision string.  Customize
+`el-search-change-revision-transformer-function' to control how
+REVISION is interpreted."
+  `(guard (el-search--changed-p (point) ,(or revision "HEAD"))))
+
+
+;;;; `keys'
+
+(defun el-search--match-key-sequence (keys expr)
+  (when-let ((expr-keys (pcase expr
+                          ((or (pred stringp) (pred vectorp))  expr)
+                          (`(kbd ,(and (pred stringp) string)) (ignore-errors 
(kbd string))))))
+    (apply #'equal
+           (mapcar (lambda (keys) (ignore-errors (key-description keys)))
+                   (list keys expr-keys)))))
+
+(el-search-defpattern keys (key-sequence)
+  "Matches descriptions of the KEY-SEQUENCE.
+KEY-SEQUENCE is a string or vector representing a key sequence,
+or an expression of the form (kbd STRING).
+
+Match any description of the same key sequence in any of these
+formats.
+
+Example: the pattern
+
+    (keys (kbd \"C-s\"))
+
+matches any of these expressions:
+
+    \"\\C-s\"
+    \"\C-s\"
+    (kbd \"C-s\")
+    [(control ?s)]"
+  (when (eq (car-safe key-sequence) 'kbd)
+    (setq key-sequence (kbd (cadr key-sequence))))
+  (el-search-defpattern--check-args
+   "keys" (list key-sequence) (lambda (x) (or (stringp x) (vectorp x))) 
"argument not a string or vector")
+  `(pred (el-search--match-key-sequence ,key-sequence)))
+
+
+;;;; `but-not-parent' and `top-level'
+
+(el-search-defpattern but-not-parent (pattern &optional not-pattern)
+    "Matches when PATTERN matches but the parent sexp does not.
+For toplevel expressions, this is equivalent to PATTERN.
+
+Optional NOT-PATTERN defaults to PATTERN; when given, match when
+PATTERN matches but the parent sexp is not matched by
+NOT-PATTERN.
+
+
+This pattern is useful to match only the outermost expression
+when subexpressions would match recursively.  For
+example, (but-not-parent _) matches only top-level expressions.
+Another example: For the `change' pattern, any subexpression of a
+match is typically also an according change.  Wrapping the
+`change' pattern into `but-not-parent' prevents el-search from
+descending into any found expression - only the outermost
+expression matching the `change' pattern will be matched."
+    `(and ,pattern
+          (not (guard (save-excursion
+                        (condition-case nil
+                            (progn
+                              (backward-up-list)
+                              (el-search--match-p
+                               ',(el-search--matcher (or not-pattern pattern))
+                               (save-excursion (read (current-buffer)))))
+                          (scan-error)))))))
+
+(el-search-defpattern top-level ()
+  "Matches any toplevel expression."
+  '(but-not-parent _))
+
+
+;;; Patterns for stylistic rewriting
+
+;;;; Iffy `if's
+
+(defun el-search--nested-if-1 (expr)
+  ;; EXPR is a (potentially nested) `if' expression.  Return a list L so
+  ;; that (cond . L) is semantically equivalent to EXPR.  For example,
+  ;; when EXPR == (if x 1 (if y 2 3)), return ((x 1) (y 2) (t 3))
+  (pcase-exhaustive expr
+    (`(if ,condition ,then ,(and `(if . ,_) inner-if))
+     `((,condition ,then)  ,@(el-search--nested-if-1 inner-if)))
+    (`(if ,condition ,then)
+     `((,condition ,then)))
+    (`(if ,condition ,then . ,else)
+     `((,condition ,then)
+       (t . ,else)))))
+
+(el-search-defpattern -nested-if (&optional var)
+  (let ((test-pattern '`(if ,_ ,_ (if ,_ ,_ ,_ . ,_))))
+    (if (not var)  test-pattern
+      (let ((cases (make-symbol "cases")))
+        `(and ,test-pattern
+              (app el-search--nested-if-1 ,cases)
+              (let ,var `(cond . ,,cases)))))))
+
+(el-search-defpattern iffy-if (&optional var)
+  "Matches `if'-clauses that could be replaced with a more suitable form.
+
+Match `if' clauses that would fit better into either `cond',
+`when' or `unless'.  With symbol VAR given, bind that to such a
+semantically equivalent expression suitable to replace the
+current match."
+  (cl-callf or var '_)
+  (let ((condition (make-symbol "condition"))
+        (then      (make-symbol "then"))
+        (clauses   (make-symbol "clauses")))
+    `(or (-nested-if ,var)
+         (and `(if (not ,,condition) ,,then)
+              (let ,var `(unless ,,condition ,,then)))
+         (and `(if ,,condition ,,then)
+              (let ,var `(when   ,,condition ,,then)))
+         (and `(if ,,condition ,,then (cond . ,,clauses))
+              (let ,var `(cond (,,condition ,,then) . ,,clauses))))))
 
 
 (provide 'el-search-x)
diff --git a/packages/el-search/el-search.el b/packages/el-search/el-search.el
index c10a284..2dbd022 100644
--- a/packages/el-search/el-search.el
+++ b/packages/el-search/el-search.el
@@ -1,4 +1,4 @@
-;;; el-search.el --- Expression based incremental search for emacs-lisp-mode 
-*- lexical-binding: t -*-
+;;; el-search.el --- Expression based interactive search for emacs-lisp-mode 
-*- lexical-binding: t -*-
 
 ;; Copyright (C) 2015, 2016 Free Software Foundation, Inc
 
@@ -7,8 +7,8 @@
 ;; Created: 29 Jul 2015
 ;; Keywords: lisp
 ;; Compatibility: GNU Emacs 25
-;; Version: 0.2.3
-;; Package-Requires: ((emacs "25"))
+;; Version: 1.1.2
+;; Package-Requires: ((emacs "25") (stream "2.2.3"))
 
 
 ;; This file is not part of GNU Emacs.
@@ -29,10 +29,41 @@
 
 ;;; Commentary:
 
+;; Suggested key bindings
+;; ======================
+;;
+;; You can eval the following key definitions to try things out while
+;; reading this introduction.  These are the bindings I use
+;; personally:
+;;
+;;   (define-key emacs-lisp-mode-map [(control ?S)] #'el-search-pattern)
+;;   (define-key emacs-lisp-mode-map [(control ?%)] #'el-search-query-replace)
+;;   (define-key global-map          [(control ?J)] 
#'el-search-jump-to-search-head)
+;;   (define-key global-map          [(control ?N)] 
#'el-search-continue-in-next-buffer)
+;;
+;;   (define-key el-search-read-expression-map [(control ?S)] 
#'exit-minibuffer)
+;;
+;;   (define-key isearch-mode-map [(control ?S)] 
#'el-search-search-from-isearch)
+;;
+;;   (with-eval-after-load 'dired
+;;     (define-key dired-mode-map [(control ?S)] 
#'el-search-dired-marked-files))
+;;
+;; These bindings may not work in a console (if you have an idea for
+;; official bindings that fit better into the Emacs ecosystem, please
+;; mail me).
+;;
+;; The binding in `isearch-mode-map' lets you switch to "el-search"
+;; from isearch reusing already the given input.  The binding in
+;; `el-search-read-expression-map' allows you to hit C-S twice to
+;; start a search using the last search pattern, similar to isearch.
+;;
+;; Don't be afraid of the long introduction, it's only verbose (sorry)
+;; but not complicated.
+;;
+;;
 ;; Introduction
 ;; ============
 ;;
-;;
 ;; The main user entry point is `el-search-pattern'.  This command
 ;; prompts for a `pcase' pattern and searches the current buffer for
 ;; matching expressions by iteratively `read'ing buffer contents.  For
@@ -45,9 +76,9 @@
 ;; pattern types and to combine them with other patterns in a natural
 ;; and transparent way out of the box.
 ;;
-;; It doesn't matter how the code is actually formatted.  Comments are
-;; ignored, and strings are treated as atomic objects, their contents
-;; are not being searched.
+;; When searching, it doesn't matter how code is actually formatted.
+;; Comments are ignored, and strings are treated as atomic objects,
+;; their contents are not being searched.
 ;;
 ;;
 ;; Example 1: if you enter
@@ -66,15 +97,12 @@
 ;;
 ;; you search for all defvar forms that don't specify an init value.
 ;;
-;; The following will search for defvar forms with a docstring whose
-;; first line is longer than 70 characters:
+;; The following pattern will search for defvar forms with a docstring
+;; whose first line is longer than 70 characters:
 ;;
 ;;   `(defvar ,_ ,_
-;;      ,(and s (guard (< 70 (length (car (split-string s "\n")))))))
-;;
-;;
-;; When a search pattern is processed, the searched buffer is current
-;; with point at the beginning of the currently tested expression.
+;;      ,(and (pred stringp) s
+;;            (guard (< 70 (length (car (split-string s "\n")))))))
 ;;
 ;;
 ;; Convenience
@@ -89,8 +117,8 @@
 ;;
 ;; Example 3:
 ;;
-;; If you want to search a buffer for symbols that are defined in
-;; "cl-lib", you can use this pattern
+;; If you wanted to search a buffer for symbols that are defined in
+;; "cl-lib", you could use this pattern
 ;;
 ;;   (guard (and (symbolp exp)
 ;;               (when-let ((file (symbol-file exp)))
@@ -109,13 +137,14 @@
 ;;
 ;; It's cumbersome to write out the same complicated pattern
 ;; constructs in the minibuffer again and again.  You can define your
-;; own pcase pattern types for the purpose of el-search with
+;; own `pcase' pattern types for the purpose of el-searching with
 ;; `el-search-defpattern'.  It is just like `pcase-defmacro', but the
-;; effect is limited to this package.  See C-h f `el-search-pattern'
-;; for a list of predefined additional pattern forms.
+;; effect is limited to this package (i.e. it uses a separate name
+;; space).  See C-h f `el-search-pattern' for a list of predefined
+;; pattern forms.
 ;;
 ;; Some additional pattern definitions can be found in the file
-;; "el-search-x.el".
+;; "el-search-x" which is part of this package.
 ;;
 ;;
 ;; Replacing
@@ -125,7 +154,7 @@
 ;; You are queried for a (pcase) pattern and a replacement expression.
 ;; For each match of the pattern, the replacement expression is
 ;; evaluated with the bindings created by the pcase matching in
-;; effect, and printed to produce the replacement string.
+;; effect, and printed to a string to produce the replacement.
 ;;
 ;; Example: In some buffer you want to swap the two expressions at the
 ;; places of the first two arguments in all calls of function `foo',
@@ -156,29 +185,129 @@
 ;; in a `el-search-query-replace' session.
 ;;
 ;;
-;; Suggested key bindings
-;; ======================
+;; Multi Searching
+;; ===============
 ;;
-;;    (define-key emacs-lisp-mode-map [(control ?S)] #'el-search-pattern)
-;;    (define-key emacs-lisp-mode-map [(control ?%)] #'el-search-query-replace)
+;; "el-search" is capable of performing "multi searches" - searches
+;; spanning multiple files or buffers.  When no more matches can be
+;; found in the current buffer, the search automatically switches to
+;; the next buffer.  Examples for search commands starting a multi
+;; search are `el-search-buffers' (search all living elisp mode
+;; buffers), `el-search-directory' (search all elisp files in a
+;; specified directory), `el-search-emacs-elisp-sources' (search all
+;; Emacs elisp sources) and `el-search-dired-marked-files'.  Actually,
+;; every search is internally a multi search.
 ;;
-;;    (define-key isearch-mode-map [(control ?S)] 
#'el-search-search-from-isearch)
-;;    (define-key isearch-mode-map [(control ?%)] 
#'el-search-replace-from-isearch)
+;; You can pause any (multi) search by just doing something different,
+;; the state of the search is automatically saved. You can continue
+;; searching by calling `el-search-jump-to-search-head': this command
+;; jumps to the last match and re-activates the search.
+
+;; `el-search-continue-in-next-buffer' skips all remaining matches in
+;; the current buffer and continues searching in the next buffer.
 ;;
-;;    (define-key el-search-read-expression-map [(control ?S)] 
#'exit-minibuffer)
+;; Matches found in the current buffer are recorded; use
+;; `el-search-previous-match' to revisit them in reverse order (this
+;; is actually the poor-man's version of a backward search, since a
+;; real backward el-search would be slow).
+;;
+;; There is no multi query-replace currently implemented; I don't know
+;; if it would be that useful as a separate command anyway.  If you
+;; want to query-replace in multiple buffers or files, call an
+;; appropriate multi-search command, and every time a first match is
+;; found in any buffer, start an ordinary `el-search-query-replace';
+;; after finishing, check that everything is ok, save etc, and resume
+;; the multi search with one of the above commands.
+;;
+;; There is currently nothing like `occur' for el-search.  However,
+;; you can get a list of matches in the form
+;; (file-name-or-buffer . match-position) with
+;;
+;;  (el-search-all-matches (el-search-make-search pattern stream))
+;;
+;; where PATTERN is the search pattern and STREAM is a stream of
+;; buffers or files (typical ways to construct such a STREAM are to
+;; call the `stream' function on a list of buffers, or to use
+;; `el-search-stream-of-directory-files').
+;;
+;; For example,
+;;
+;;   (el-search-all-matches
+;;    (el-search-make-search
+;;     ''require
+;;     (seq-filter
+;;      (lambda (buffer)
+;;         (with-current-buffer buffer (derived-mode-p 'emacs-lisp-mode)))
+;;      (stream (buffer-list)))))
+;;
+;; would return a list of matches for the symbol require in all elisp
+;; mode buffers.
+;;
+;;
+;; Multiple multi searches
+;; =======================
+;;
+;; Every search is collected in a history.  You can resume older
+;; searches from the position of the last match by calling
+;; `el-search-jump-to-search-head' with a prefix argument.  That let's
+;; you select an older search to resume and switches to the buffer and
+;; position where this search had been suspended.
+;;
+;; There is no special command to restart a prior search from the
+;; beginning.  I suggest to use `repeat-complex-command'.
+;;
+;;
+;; Writing replacement rules for semi-automatic code rewriting
+;; ===========================================================
+;;
+;; When you want to rewrite larger code parts programmatically, it is
+;; often useful to define dedicated patterns for performing the
+;; replacement.  Here is an example:
+;;
+;; You heard that in many situations, `dolist' is faster than an
+;; equivalent `mapc'.  You use `mapc' quite often in your code and
+;; want to query-replace many occurrences in your stuff.  Instead of
+;; using an ad hoc replacing rule, it's cleaner to define a dedicated
+;; named pattern using `el-search-defpattern'.  Make this pattern
+;; accept an argument and use this argument to bind the replacement
+;; expression to a variable you specify.  In our case, the pattern
+;; could look like this:
+;;
+;;   (el-search-defpattern el-search-mapc->dolist (new)
+;;     (let ((var  (make-symbol "var"))
+;;           (body (make-symbol "body"))
+;;           (list (make-symbol "list")))
+;;       `(and `(mapc (lambda (,,var) . ,,body) ,,list)
+;;             (let ,new `(dolist (,,var ,,list) . ,,body)))))
+;;
+;; The first condition in the `and' performs the matching and binds
+;; the essential parts of the `mapc' form to variables.  The second,
+;; the `let' part, binds the pattern specified argument NEW (as said,
+;; typically just a variable to receive the rewritten code) to the
+;; rewritten expression - in our case, a `dolist' form is constructed
+;; with the remembered code parts filled in.
+;;
+;; Now, in `el-search-query-replace', you just specify the following
+;; rule:
+;;
+;;   (el-search-mapc->dolist replacement) -> replacement
+;;
+;; And when you want to replace in multiple buffers or files, call an
+;; appropriate multi el-search command, e.g. `el-search-directory',
+;; and specify
+;;
+;;   (el-search-mapc->dolist replacement)
+;;
+;; as search pattern.
 ;;
-;; The bindings in `isearch-mode-map' let you conveniently switch to
-;; "el-search" searching from isearch.  The binding in
-;; `el-search-read-expression-map' allows you to hit C-S twice to
-;; start a search for the last search pattern.
 ;;
 ;;
 ;; Bugs, Known Limitations
 ;; =======================
 ;;
-;; - Replacing: in some cases the reader syntax of forms
-;; is changing due to reading+printing.  "Some" because we can treat
-;; that problem in most cases.
+;; - Replacing: in some cases the reader syntax of forms is changing
+;; due to reading+printing.  "Some" because we can handle this problem
+;; in most cases.
 ;;
 ;; - Similarly: Comments are normally preserved (where it makes
 ;; sense).  But when replacing like `(foo ,a ,b) -> `(foo ,b ,a)
@@ -187,13 +316,11 @@
 ;;
 ;;   (foo
 ;;     a
-;;     ;;a comment
+;;     ;; comment
 ;;     b)
 ;;
 ;; the comment will be lost.
 ;;
-;; FIXME: when we have resumable sessions, pause and warn about this case.
-;;
 ;;
 ;;  Acknowledgments
 ;;  ===============
@@ -201,35 +328,53 @@
 ;; Thanks to Stefan Monnier for corrections and advice.
 ;;
 ;;
+;;  Notes for developers
+;;  ====================
+;;
+;; We use the following model for multi buffer/file searches: a search
+;; (object) is represented by a struct "el-search-object" that
+;; contains a stream of matches M and a search head object H that
+;; contains a compiled matcher according to the given search pattern,
+;; the buffer and buffer position where to continue searching, and the
+;; stream of buffers or files yet to search.
+;;
+;; When elements are requested from M, H is updated accordingly.  H
+;; can be manipulated directly to influence how M will find further
+;; elements when requested (useful for skipping buffers on the fly).
+;;
+;;
 ;; TODO:
 ;;
-;; - implement backward searching
+;; - The default keys are not available in the terminal
+;;
+;; - Handle buffers killed/files closed when resuming a search
+;;
+;; - Make el-search-previous-match behave correctly when a buffer has
+;;   been modified and data is outdated
 ;;
-;; - Make `el-search-pattern' accept an &optional limit, at least for
-;;   the non-interactive use case?
+;; - Make the non-command `el-search-forward' accept an &optional
+;;   LIMIT argument
 ;;
-;; - improve docstrings
+;; - Make searching work in comments, too? (->
+;;   `parse-sexp-ignore-comments').  Related: should the pattern
+;;   `symbol' also match strings that contain matches for a symbol so
+;;   that it's possible to replace also occurrences of a symbol in
+;;   docstrings?
 ;;
-;; - Make it work in comments, too? (-> `parse-sexp-ignore-comments').
-;;   Related: should the pattern `symbol' also match strings that
-;;   contain matches for a symbol so that it's possible to replace
-;;   also occurrences of a symbol in docstrings?
+;; - Implement an occur like interface?
 ;;
-;; - handle more reader syntaxes, e.g. #n, #n#
+;; - Port this to non Emacs Lisp modes?  How?  Would it already
+;;   work using only syntax tables, sexp scanning and font-lock?
 ;;
-;; - Implement sessions; add multi-file support based on iterators.  A
-;;   file list is read in (or the user can specify an iterator as a
-;;   variable).  The state in the current buffer is just (buffer
-;;   . marker).  Or should this be abstracted into an own lib?  Could
-;;   be named "files-session" or so.
+;; - For query-replace, maybe we should save the original buffer
+;;   string in a buffer-local variable, and make that ediff'able
+;;   against the new version.  Or should we even save multiple
+;;   versions when appropriate?
 ;;
-;; - Make `el-search--format-replacement' work non-heuristically.
-;;   Idea: When replacing, for every variable V bound by the search
-;;   pattern that directly corresponds to some text T, provide some
-;;   "match data" V -> T.  Use this when formatting the replacement.
-;;   Maybe use a special marker to "paste" in expressions, like (paste
-;;   V), whereby the `paste' flag lands in the replacement and can be
-;;   replaced textually afterwards.
+;; - Replace: pause and warn when replacement might be wrong
+;;   (ambiguous reader syntaxes; lost comments, comments that can't
+;;   non-ambiguously be assigned to rewritten code)
+
 
 
 
@@ -243,7 +388,9 @@
 (require 'cl-lib)
 (require 'elisp-mode)
 (require 'thingatpt)
+(require 'stream)
 (require 'help-fns) ;el-search--make-docstring
+(require 'ring)     ;el-search-history
 
 
 ;;;; Configuration stuff
@@ -254,65 +401,57 @@
 
 (defcustom el-search-this-expression-identifier 'exp
   "Identifier ID referring to the current expression in pattern input.
-When entering a PATTERN in an interactive \"el-search\" command,
-the pattern actually used will be (and ID PATTERN).
-The default value is `exp'."
+When entering a pattern in an interactive \"el-search\" command,
+the pattern actually used will be (and ID PATTERN).  The default
+value is `exp'."
   :type 'symbol)
 
-(defface el-search-match '((((background dark)) (:background "#0000A0"))
-                          (t                   (:background "DarkSlateGray3")))
-  "Face for highlighting the current match.")
-
-(defface el-search-other-match '((((background dark)) (:background "#202060"))
-                                 (t                   (:background 
"DarkSlateGray1")))
-  "Face for highlighting the other matches.")
-
-(defcustom el-search-smart-case-fold-search t
-  "Whether to use smart case folding in pattern matching.
-When an \"el-search\" pattern involves regexp matching (like for
-\"string\" or \"source\") and this option is non-nil,
-case-fold-search will be temporarily bound to t if the according
-regexp contains any upper case letter, and nil else.  This is
-done independently for every single matching operation.
-
-If nil, the value of `case-fold-search' is decisive."
-  :type 'boolean)
-
-(defcustom el-search-use-sloppy-strings nil
-  "Whether to allow the usage of \"sloppy strings\".
-When this option is turned on, for faster typing you are allowed
-to specify symbols instead of strings as arguments to an
-\"el-search\" pattern type that would otherwise accept only
-strings, and their names will be used as input (with other words,
-this spares you to type the string delimiters in many cases).
-
-For example,
-
-  \(source ^cl\)
+(defvar el-search-optimized-search t
+  "Whether to use optimized searching.
+When turned on, use a fast pre-processing algorithm to sort out
+buffers that can be proved to not contain a match.
 
-is then equivalent to
+Setting this to nil should not have any effect apart from making
+multi-buffer searching slower in most cases.")
 
-  \(source \"^cl\"\)
-
-When this option is off, the first form would just signal an
-error."
-  :type 'boolean)
-
-
-;;;; Helpers
+(defface el-search-match '((((background dark))
+                            ;; (:background "#0000A0")
+                            (:background "#600000"))
+                          (t (:background "DarkSlateGray3")))
+  "Face for highlighting the current match.")
 
-(defun el-search--smart-string-match-p (regexp string)
-  "`string-match-p' taking `el-search-smart-case-fold-search' into account."
-  (let ((case-fold-search (if el-search-smart-case-fold-search
-                              (not (let ((case-fold-search nil))
-                                     (string-match-p "[[:upper:]]" regexp)))
-                            case-fold-search)))
-    (string-match-p regexp string)))
+(defface el-search-other-match '((((background dark))
+                                  ;; (:background "#202060")
+                                  (:background "#603030"))
+                                 (t (:background "DarkSlateGray1")))
+  "Face for highlighting the other matches.")
 
-(defun el-search--pp-to-string (expr)
-  (let ((print-length nil)
-        (print-level nil))
-    (pp-to-string expr)))
+(defvar el-search-display-buffer-action
+  '((display-buffer-reuse-window display-buffer-pop-up-frame)
+    (reusable-frames . visible))
+  "The `display-buffer' action used by `el-search-jump-to-search-head'.")
+
+(defcustom el-search-ignored-directory-regexps
+  (mapcar
+   (lambda (name) (format "\\`%s\\'" (regexp-quote name)))
+   ;; this is just the default value of `grep-find-ignored-directories':
+   '("SCCS" "RCS" "CVS" "MCVS" ".src" ".svn" ".git" ".hg" ".bzr" "_MTN" 
"_darcs" "{arch}"))
+  "List of regexps defining directories that el-search should ignore.
+
+The value influences the behavior of the commands that perform
+directory searches like `el-search-directory' or
+`el-search-dired-marked-files'.  It is consulted by all streams
+`el-search-stream-of-directory-files' returns."
+  :type '(choice (repeat :tag "Ignored directories" regexp)
+                (const  :tag "No ignored directories" nil)))
+
+(defvar el-search-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map [(control ?D)] #'el-search-skip-directory)
+    (define-key map [(control ?N)] #'el-search-continue-in-next-buffer)
+    (define-key map [(control ?R)] #'el-search-previous-match)
+    map)
+  "Used by search commands as transient-map.")
 
 (defvar el-search-read-expression-map
   (let ((map (make-sparse-keymap)))
@@ -324,6 +463,62 @@ error."
     map)
   "Map for reading input with `el-search-read-expression'.")
 
+
+;;;; Helpers and Definitions
+
+(defvar el-search--current-pattern nil
+  "Current search pattern or nil when no search in progress.")
+
+(defvar el-search--current-search nil
+  "The currently active search, an `el-search-object'.")
+
+(defvar el-search--current-matcher nil
+  "The matcher according to `el-search--current-pattern'.")
+
+(defvar-local el-search--temp-buffer-flag nil
+  "Non-nil tags (file) buffers as temporarily opened for searching.")
+
+(defvar el-search--success nil
+  "Non-nil when last search command was successful.")
+
+(defvar-local el-search--this-buffer-matches (stream-empty)
+  "Stream of the matches that were found in current buffer."
+  ;; Internally, simply the substream of the matches of the current
+  ;; search with all matches before current buffer cut off
+  )
+
+(defun el-search-true (&rest _ignore)
+  "Ignore the arguments and return t."
+  t)
+
+(defun el-search--message-no-log (format-string &rest args)
+  "Like `message' but with `message-log-max' bound to nil."
+  (let ((message-log-max nil))
+    (apply #'message format-string args)))
+
+(defun el-search--string-match-p (eregexp string)
+  "Non-nil when extended regexp EREGEXP matches the STRING."
+  (let ((match-bindings ()) regexp)
+    (pcase eregexp
+      ((pred stringp) (setq regexp eregexp))
+      (`(,binds ,real-regexp)
+       (setq regexp real-regexp)
+       (setq match-bindings binds)))
+    (setq match-bindings
+          (mapcar (lambda (binding)
+                    (pcase binding
+                      ((pred symbolp)                  (list binding nil))
+                      (`(,(and (pred symbolp) symbol)) (list symbol nil))
+                      (_                               binding)))
+                  match-bindings))
+    (cl-progv (mapcar #'car match-bindings) (mapcar #'cadr match-bindings)
+      (string-match-p regexp string))))
+
+(defun el-search--pp-to-string (expr)
+  (let ((print-length nil)
+        (print-level nil))
+    (pp-to-string expr)))
+
 (defun el-search--setup-minibuffer ()
   (let ((inhibit-read-only t))
     (put-text-property 1 (minibuffer-prompt-end) 'font-lock-face 
'minibuffer-prompt))
@@ -343,22 +538,28 @@ error."
                             (append minibuffer-default more-defaults)
                           (cons minibuffer-default more-defaults)))))))
 
-;; $$$$$FIXME: this should be in Emacs!  There is only a helper 
`read--expression'.
 (defun el-search-read-expression (prompt &optional initial-contents hist 
default read)
-  "Read expression for `my-eval-expression'."
+  "Conveniently read an expression from the minibuffer."
   (minibuffer-with-setup-hook #'el-search--setup-minibuffer
     (read-from-minibuffer prompt initial-contents 
el-search-read-expression-map read
                           (or hist 'read-expression-history) default)))
 
-(defvar el-search-history '()
-  "List of search input strings.")
+(defvar el-search-pattern-history ()
+  "List of search pattern input strings.")
+
+(defvar el-search-history (make-ring 10) ;$$$$FIXME: Make `10' customizable?
+  "History of previous searches."
+  ;; Elements have the form (search-object pattern)
+  )
 
-(defvar el-search-query-replace-history '()
+(defvar el-search-query-replace-history ()
   "List of input strings from `el-search-query-replace'.")
 
 (defvar el-search--initial-mb-contents nil)
 
 (defun el-search--pushnew-to-history (input histvar)
+  ;; Push INPUT to history in HISTVAR unless it's already "the same" as
+  ;; the history's head element
   (let ((hist-head (car (symbol-value histvar))))
     (unless (or (string-match-p "\\`\\'" input)
                 (and (stringp hist-head)
@@ -373,23 +574,64 @@ error."
               input)
             (symbol-value histvar)))))
 
+(defun el-search--maybe-warn-about-unquoted-symbol (pattern)
+  (when (and (symbolp pattern)
+             (not (eq pattern '_))
+             (or (not (boundp pattern))
+                 (not (eq (symbol-value pattern) pattern))))
+    (error "Unbound symbol: %S" pattern)))
+
 (defun el-search--read-pattern (prompt &optional default histvar)
-  (cl-callf or histvar 'el-search-history)
-  (let ((input (el-search-read-expression
-                prompt el-search--initial-mb-contents histvar default)))
+  (cl-callf or histvar 'el-search-pattern-history)
+  (let ((input (el-search-read-expression prompt 
el-search--initial-mb-contents histvar default)))
     (el-search--pushnew-to-history input histvar)
     (if (not (string= input "")) input (car (symbol-value histvar)))))
 
+(defun el-search--read-pattern-for-interactive ()
+  (let* ((input (el-search--read-pattern "Find pcase pattern: " (car 
el-search-pattern-history)))
+         (pattern (read input)))
+    ;; A very common mistake: input "foo" instead of "'foo"
+    (el-search--maybe-warn-about-unquoted-symbol pattern)
+    (setq this-command 'el-search-pattern) ;in case we come from isearch
+    ;; Make input available also in query-replace history
+    (el-search--pushnew-to-history input 'el-search-query-replace-history)
+    pattern))
+
+
 (defun el-search--end-of-sexp ()
-  ;;Point must be at sexp beginning
+  ;; Assumes point is at sexp beginning
   (or (scan-sexps (point) 1) (point-max)))
 
+(defun el-search--skip-expression (expression &optional read)
+  ;; Move forward at least one character.  Don't move into a string or
+  ;; comment.  Don't move further than the beginning of the next sexp.
+  ;; Try to move as far as possible under these conditions.  Point must
+  ;; be at the beginning of an expression.  If there are positions where
+  ;; `read' would succeed, but that do not represent a valid sexp start,
+  ;; move past them (e.g. when before "#'" move past both characters).
+  ;;
+  ;; EXPRESSION must equal the (read) expression at point, but with READ
+  ;; non-nil, ignore the first argument and use the read expression at
+  ;; point instead.
+  (when read (setq expression (save-excursion (read (current-buffer)))))
+  (cond
+   ((eq '@ expression) ;bug#24542
+    (forward-char))
+   ((or (null expression)
+        (equal [] expression)
+        (not (or (listp expression) (vectorp expression))))
+    (goto-char (el-search--end-of-sexp)))
+   ((looking-at (rx (or ",@" "," "#'" "'")))
+    (goto-char (match-end 0)))
+   (t (forward-char))))
+
 (defun el-search--ensure-sexp-start ()
   "Move point to the next sexp beginning position.
-Don't move if already at beginning of a sexp.  Point must not be
-inside a string or comment.  `read' the expression at that point
-and return it."
-  ;; This doesn't catch end-of-buffer to keep the return value non-ambiguous
+Do nothing if already at beginning of a sexp.  `read' the
+expression at that point and return it.  Point must not be inside
+a string or comment."
+  ;; We donn't catch end-of-buffer to keep the return value
+  ;; non-ambiguous
   (let ((not-done t) res)
     (while not-done
       (let ((stop-here nil)
@@ -420,13 +662,14 @@ and return it."
         (error (forward-char))))
     res))
 
+
 (defvar el-search--pcase-macros '()
   "List of additional \"el-search\" pcase macros.")
 
 (defun el-search--make-docstring (name)
   ;; code mainly from `pcase--make-docstring'
   (let* ((main (documentation (symbol-function name) 'raw))
-         (ud (help-split-fundoc main 'pcase)))
+         (ud (help-split-fundoc main name)))
     (with-temp-buffer
       (insert (or (cdr ud) main))
       (mapc
@@ -440,27 +683,68 @@ and return it."
       (let ((combined-doc (buffer-string)))
         (if ud (help-add-fundoc-usage combined-doc (car ud)) combined-doc)))))
 
-(put 'el-search-pattern 'function-documentation '(el-search--make-docstring 
'el-search-pattern))
+(defvar el-search--heuristic-matchers ()
+  "Alist of heuristic matchers.
+Keys are pattern names (i.e. symbols), and values the associated
+heuristic matcher functions.")
 
 (defmacro el-search-defpattern (name args &rest body)
-  "Like `pcase-defmacro', but limited to el-search patterns.
-The semantics is exactly that of `pcase-defmacro', but the scope
-of the definitions is limited to \"el-search\".
+  "Like `pcase-defmacro', but for defining el-search patterns.
 
-\(fn NAME ARGLIST &optional DOCSTRING &rest BODY)"
+The semantics is exactly that of `pcase-defmacro', but the scope
+of the definitions is limited to \"el-search\", using a separate
+name space.  The expansion is allowed to use any defined `pcase'
+pattern as well as any defined el-search pattern.
+
+The docstring may be followed by a `defun' style declaration list
+DECL.  There is only one respected specification, it has the form
+
+  \(heuristic-matcher MATCHER-FUNCTION\)
+
+and specifies the heuristic MATCHER-FUNCTION to be associated
+with the defined pattern NAME.
+
+The purpose of a heuristic matcher function is to speed up multi
+buffer searching.  When specified, the MATCHER-FUNCTION should be
+a function accepting the same arguments as the defined pattern.
+When called with the ARGS, this function should return a function
+that accepts a list of atoms, which is the complete list of atoms
+found in the buffer to search, and that returns non-nil when this
+buffer could contain a match for the pattern (NAME . ARGS), and
+nil when we can be sure that it contains no match (whereby an
+atom here is anything whose parts aren't searched by
+el-searching, like integers or strings, but unlike arrays).  When
+in doubt, this function must return non-nil.  When el-searching
+is started with a certain PATTERN, a heuristic matcher function
+is constructed by recursively destructuring PATTERN and combining
+the heuristic matchers of the subpatterns.  The resulting
+function is then used to dismiss any buffer for that can be
+proved that it can not contain any match.
+
+\(fn NAME ARGLIST &optional DOCSTRING DECL &rest BODY)"
   (declare (indent 2) (debug defun))
-  `(setf (alist-get ',name el-search--pcase-macros)
-         (lambda ,args ,@body)))
+  (let ((doc nil) (set-heuristic-matcher ()))
+    (when (stringp (car body))
+      (setq doc       (car body)
+            body (cdr body)))
+    (pcase (car body)
+      (`(declare (heuristic-matcher ,heuristic-matcher))
+       (setq set-heuristic-matcher
+             `((setf (alist-get ',name el-search--heuristic-matchers) 
,heuristic-matcher)))
+       (setq body (cdr body))))
+    `(progn
+       ,@set-heuristic-matcher
+       (setf (alist-get ',name el-search--pcase-macros)
+             (lambda ,args ,doc ,@body)))))
 
 (defmacro el-search--with-additional-pcase-macros (&rest body)
-  `(cl-letf ,(mapcar (pcase-lambda (`(,symbol . ,fun))
-                       `((get ',symbol 'pcase-macroexpander) #',fun))
+  `(cl-letf ,(mapcar (pcase-lambda (`(,symbol . ,fun)) `((get ',symbol 
'pcase-macroexpander) #',fun))
                      el-search--pcase-macros)
      ,@body))
 
 (defun el-search--macroexpand-1 (pattern)
   "Expand \"el-search\" PATTERN.
-This is like `pcase--macroexpand', but expands only patterns
+This is like `pcase--macroexpand' but expands only patterns
 defined with `el-search-defpattern' and performs only one
 expansion step.
 
@@ -492,261 +776,376 @@ Return PATTERN if this pattern type was not defined with
 (defun el-search--wrap-pattern (pattern)
   `(and ,el-search-this-expression-identifier ,pattern))
 
-(defun el-search--skip-expression (expression &optional read)
-  ;; Move forward at least one character.  Don't move into a string or
-  ;; comment.  Don't move further than the beginning of the next sexp.
-  ;; Try to move as far as possible.  Point must be at the beginning
-  ;; of an expression.
-  ;; If there are positions where `read' would succeed, but that do
-  ;; not represent a valid sexp start, move past them (e.g. when
-  ;; before "#'" move past both characters).
-  ;;
-  ;; EXPRESSION must be the (read) expression at point, but when READ
-  ;; is non-nil, ignore the first argument and read the expression at
-  ;; point instead.
-  (when read (setq expression (save-excursion (read (current-buffer)))))
-  (cond
-   ((or (null expression)
-        (equal [] expression)
-        (not (or (listp expression) (vectorp expression))))
-    (goto-char (el-search--end-of-sexp)))
-   ((looking-at (rx (or ",@" "," "#'" "'")))
-    (goto-char (match-end 0)))
-   (t (forward-char))))
 
 (defun el-search--search-pattern-1 (matcher &optional noerror)
-  (let ((match-beg nil) (opoint (point)) current-expr)
-
-    ;; when inside a string or comment, move past it
-    (let ((syntax-here (syntax-ppss)))
-      (when (nth 3 syntax-here) ;inside a string
-        (goto-char (nth 8 syntax-here))
-        (forward-sexp))
-      (when (nth 4 syntax-here) ;inside a comment
-        (forward-line 1)
-        (while (and (not (eobp)) (looking-at (rx (and (* space) ";"))))
-          (forward-line 1))))
-
-    (if (catch 'no-match
-          (while (not match-beg)
-            (condition-case nil
-                (setq current-expr (el-search--ensure-sexp-start))
-              (end-of-buffer
-               (goto-char opoint)
-               (throw 'no-match t)))
-            (if (el-search--match-p matcher current-expr)
-                (setq match-beg (point)
-                      opoint (point))
-              (el-search--skip-expression current-expr))))
-        (if noerror nil (signal 'end-of-buffer nil)))
-    match-beg))
-
-(defun el-search--search-pattern (pattern &optional noerror)
-  "Search for el-search PATTERN in current buffer.
-Set point to the beginning of the occurrence found and return
-point.  Optional second argument, if non-nil, means if fail just
-return nil (no error)."
+  (if (not (derived-mode-p 'emacs-lisp-mode))
+      (if noerror nil (error "Buffer not in emacs-lisp-mode: %s" 
(buffer-name)))
+    (let ((match-beg nil) (opoint (point)) current-expr)
+
+      ;; when inside a string or comment, move past it
+      (let ((syntax-here (syntax-ppss)))
+        (when (nth 3 syntax-here) ;inside a string
+          (goto-char (nth 8 syntax-here))
+          (forward-sexp))
+        (when (nth 4 syntax-here) ;inside a comment
+          (forward-line 1)
+          (while (and (not (eobp)) (looking-at (rx (and (* space) ";"))))
+            (forward-line 1))))
+
+      (if (catch 'no-match
+            (while (not match-beg)
+              (condition-case nil
+                  (setq current-expr (el-search--ensure-sexp-start))
+                (end-of-buffer
+                 (goto-char opoint)
+                 (throw 'no-match t)))
+              (if (el-search--match-p matcher current-expr)
+                  (setq match-beg (point)
+                        opoint (point))
+                (el-search--skip-expression current-expr))))
+          (if noerror nil (signal 'end-of-buffer nil))
+        match-beg))))
+
+(defun el-search-forward (pattern &optional noerror)
+  "Search for el-search PATTERN in current buffer from point.
+Set point to the beginning of the occurrence found and return the
+new value of point.  Optional second argument, if non-nil, means
+if fail just return nil (no error)."
   (el-search--search-pattern-1 (el-search--matcher pattern) noerror))
 
-(defun el-search--replace-hunk (region to-insert)
-  "Replace the text in REGION in current buffer with string TO-INSERT.
-Add line breaks before and after TO-INSERT when appropriate and
-reindent."
-  (atomic-change-group
-    (let* ((inhibit-message t)
-           (opoint (point))
-           (original-text (prog1 (apply #'buffer-substring-no-properties 
region)
-                            (goto-char (car region))
-                            (apply #'delete-region region)))
-           ;; care about other sexps in this line
-           (sexp-before-us (not (looking-back "\(\\|^\\s-*" 
(line-beginning-position))))
-           (sexp-after-us  (not (looking-at "\\s-*[;\)]\\|$")))
-           (insert-newline-before
-            (or
-             (and (string-match-p "\n" to-insert)
-                  (not (string-match-p "\n" original-text))
-                  (or (and sexp-before-us sexp-after-us)
-                      (looking-back
-                       (rx (or (syntax word) (syntax symbol))
-                           (+ blank)
-                           (or (syntax word) (syntax symbol))
-                           (* any))
-                       (line-beginning-position))))
-             ;; (and sexp-before-us
-             ;;      (> (+ (apply #'max (mapcar #'length (split-string 
to-insert "\n")))
-             ;;            (- (point) (line-beginning-position)))
-             ;;         fill-column))
-             ))
-           (insert-newline-after (and insert-newline-before sexp-after-us)))
-      (when insert-newline-before
-        (when (looking-back "\\s-+" (line-beginning-position))
-          (delete-region (match-beginning 0) (match-end 0)))
-        (insert "\n"))
-      (insert to-insert)
-      (when insert-newline-after
-        (insert "\n"))
-      (indent-region opoint (1+ (point))))))
 
-(defun el-search--format-replacement (replacement original replace-expr-input 
splice)
-  ;; Return a printed representation of REPLACEMENT.  Try to reuse the
-  ;; layout of subexpressions shared with the original (replaced)
-  ;; expression and the replace expression.
-  (if (and splice (not (listp replacement)))
-      (error "Expression to splice in is an atom")
-    (let ((orig-buffer (generate-new-buffer "orig-expr")))
-      (with-current-buffer orig-buffer
-        (emacs-lisp-mode)
-        (insert original)
-        (when replace-expr-input (insert "\n\n" replace-expr-input)))
-      (unwind-protect
-          (with-temp-buffer
-            (emacs-lisp-mode)
-            (insert (if splice
-                        (mapconcat #'el-search--pp-to-string replacement " ")
-                      (el-search--pp-to-string replacement)))
-            (goto-char 1)
-            (let (start this-sexp end orig-match-start orig-match-end done)
-              (while (and (< (point) (point-max))
-                          (condition-case nil
-                              (progn
-                                (setq start (point)
-                                      this-sexp (read (current-buffer))
-                                      end   (point))
-                                t)
-                            (end-of-buffer nil)))
-                (setq done nil orig-match-start nil)
-                (with-current-buffer orig-buffer
-                  (goto-char 1)
-                  (if (el-search--search-pattern `',this-sexp t)
-                      (setq orig-match-start (point)
-                            orig-match-end (progn (forward-sexp) (point)))
-                    (setq done t)))
-                ;; find out whether we have a sequence of equal expressions
-                (while (and (not done)
-                            (condition-case nil
-                                (progn (setq this-sexp (read 
(current-buffer))) t)
-                              ((invalid-read-syntax end-of-buffer end-of-file) 
nil)))
-                  (if (with-current-buffer orig-buffer
-                        (condition-case nil
-                            (if (not (equal this-sexp (read (current-buffer))))
-                                nil
-                              (setq orig-match-end (point))
-                              t)
-                          ((invalid-read-syntax end-of-buffer end-of-file) 
nil)))
-                      (setq end (point))
-                    (setq done t)))
-                ;; FIXME: there could be another occurrence of THIS-SEXP in 
ORIG-BUFFER with more
-                ;; subsequent equal expressions after it
-                (if orig-match-start
-                    (el-search--replace-hunk
-                     (list start end)
-                     (with-current-buffer orig-buffer
-                       (buffer-substring-no-properties orig-match-start 
orig-match-end)))
-                  (goto-char start)
-                  (el-search--skip-expression nil t))
-                (condition-case nil
-                    (el-search--ensure-sexp-start)
-                  (end-of-buffer (goto-char (point-max))))))
-            (goto-char 1)
-            (forward-sexp (if splice (length replacement) 1))
-            (let ((result (buffer-substring 1 (point))))
-              (if (equal replacement (read (if splice (format "(%s)" result) 
result)))
-                  result
-                (error "Error in `el-search--format-replacement' - please make 
a bug report"))))
-        (kill-buffer orig-buffer)))))
-
-(defun el-search--check-pattern-args (type args predicate &optional message)
+(defun el-search-defpattern--check-args (type args predicate &optional message)
   "Check whether all ARGS fulfill PREDICATE.
 Raise an error if not.  The string arguments TYPE and optional
 MESSAGE are used to construct the error message."
-  (mapc (lambda (arg)
-          (unless (funcall predicate arg)
-            (error (concat "Pattern `%s': "
-                           (or message (format "argument doesn't fulfill %S" 
predicate))
-                           ": %S")
-                   type arg)))
-        args))
-
-(defvar el-search-current-pattern nil)
-
-(defvar el-search-success nil)
+  (dolist (arg args)
+    (unless (funcall predicate arg)
+      (error (concat "Pattern `%s': "
+                     (or message (format "argument doesn't fulfill %S" 
predicate))
+                     ": %S")
+             type arg))))
+
+(defun el-search--elisp-file-name-p (file)
+  (and (string-match-p "\\.el\\'" file)
+       (file-exists-p file)
+       (not (file-directory-p file))))
+
+(cl-defstruct el-search-object
+  head       ;an `el-search-head' instance, modified ("moved") while searching
+  matches    ;the stream of matches in the form (buffer position file)
+  last-match ;position of last match found
+  )
+
+(cl-defstruct el-search-head
+  matcher                  ;for the search pattern
+  heuristic-buffer-matcher ;for the search pattern
+  buffer                   ;currently searched buffer, or nil meaning 
"continue in next buffer"
+  file                     ;name of currently searched file, or nil
+  position                 ;where to continue search in this buffer
+  buffers                  ;stream of buffers and/or files yet to search
+  )
+
+(defun el-search-kill-left-over-search-buffers (&optional not-current-buffer)
+  "Kill all buffers that were opened for searching."
+  (interactive)
+  (dolist (buffer (buffer-list))
+    (when (with-current-buffer buffer el-search--temp-buffer-flag)
+      (unless (or (buffer-modified-p buffer)
+                  (and not-current-buffer (eq buffer (current-buffer))))
+        (kill-buffer buffer)))))
+
+(defun el-search-heuristic-matcher (pattern)
+  "Return a heuristic matcher for PATTERN.
+This is a predicate accepting a list of a file's or buffer's
+atoms and returns nil when we can be sure that this file or
+buffer can't contain a match for PATTERN, and non-nil else."
+  (pcase pattern
+    ((pred symbolp) #'el-search-true)
+    ((pred pcase--self-quoting-p) (apply-partially #'member pattern))
+    (`',tree
+     (pcase (el-search--flatten-tree tree)
+       (`(,tree)  (apply-partially #'member tree))
+       (flattened (let ((matchers (mapcar (lambda (atom) 
(el-search-heuristic-matcher `',atom))
+                                          flattened)))
+                    (lambda (atoms) (cl-every (lambda (matcher) (funcall 
matcher atoms)) matchers))))))
+    (``,qpat
+     (cond
+      ((eq (car-safe qpat) '\,) (el-search-heuristic-matcher (cadr qpat)))
+      ((vectorp qpat)
+       (let ((matchers (mapcar (lambda (inner-qpat) 
(el-search-heuristic-matcher (list '\` inner-qpat)))
+                               qpat)))
+         (lambda (atoms) (cl-every (lambda (matcher) (funcall matcher atoms)) 
matchers))))
+      ((consp qpat)
+       (el-search-heuristic-matcher
+        `(and
+          ,(list '\` (car qpat))
+          ,(if (cdr qpat) (list '\` (cdr qpat)) '_))))
+      ((or (stringp qpat) (integerp qpat) (symbolp qpat)) (apply-partially 
#'member qpat))
+      (t #'el-search-true)))
+    (`(and . ,patterns)
+     (let ((matchers (mapcar #'el-search-heuristic-matcher patterns)))
+       (lambda (atoms) (cl-every (lambda (matcher) (funcall matcher atoms)) 
matchers))))
+    (`(or . ,patterns)
+     (let ((matchers (mapcar #'el-search-heuristic-matcher patterns)))
+       (lambda (atoms) (cl-some (lambda (matcher) (funcall matcher atoms)) 
matchers))))
+    (`(,(or 'app 'let 'pred 'guard) . ,_) #'el-search-true)
+    ((and `(,name . ,args)
+          (let matcher (alist-get name el-search--heuristic-matchers)) (guard 
matcher))
+     (ignore name) ;quite byte compiler
+     (apply matcher args))
+    ((and (app el-search--macroexpand-1 expanded)
+          (guard (not (eq expanded pattern))))
+     (el-search-heuristic-matcher expanded))
+    (_ #'el-search-true)))
+
+(defun el-search-atom-list (buffer)
+  (with-current-buffer buffer
+    (apply #'append
+           (mapcar #'el-search--flatten-tree
+                   (save-excursion
+                     (goto-char (point-min))
+                     (let ((forms ()))
+                       (condition-case err
+                           (while t (push (read (current-buffer)) forms))
+                         (end-of-file forms)
+                         (error "Unexpected error whilst reading %s position 
%s: %s"
+                                buffer (point) err))))))))
+
+(defun el-search--flatten-tree (tree)
+  (let ((elements ()))
+    (cl-labels ((walker (object)
+                        (if (or (not (sequencep object)) (stringp object) 
(null object)
+                                (char-table-p object) (bool-vector-p object))
+                            (push object elements)
+                          (if (consp object)
+                              (progn
+                                (while (consp object)
+                                  (walker (car object))
+                                  (setq object (cdr object)))
+                                (when object ;dotted list
+                                  (walker object)))
+                            (cl-loop for elt being the elements of object do 
(walker elt))))))
+      (walker tree)
+      elements)))
+
+(defun el-search-heuristic-buffer-matcher (pattern)
+  (let ((heuristic-matcher (el-search-heuristic-matcher pattern)))
+    (lambda (file-name-or-buffer)
+      (el-search--message-no-log "Searching in %s"
+                                 (if (stringp file-name-or-buffer)
+                                     file-name-or-buffer
+                                   (buffer-name file-name-or-buffer)))
+      (if (bufferp file-name-or-buffer)
+          (and (buffer-live-p file-name-or-buffer)
+               (funcall heuristic-matcher (el-search-atom-list 
(current-buffer))))
+        (with-temp-buffer
+          (insert-file-contents file-name-or-buffer)
+          (funcall heuristic-matcher (el-search-atom-list 
(current-buffer))))))))
+
+(defvar warning-minimum-level)
+(defun el-search--next-buffer (search &optional predicate)
+  ;; Prepare to continue SEARCH in the next buffer in line.  Move
+  ;; SEARCH's head accordingly.  When specified, PREDICATE should accept
+  ;; a file name or a buffer, and we skip all buffers and files not
+  ;; fulfilling it.  Return the new buffer to search in or nil if done.
+  (el-search-hl-remove)
+  (el-search-kill-left-over-search-buffers t)
+  (let ((original-predicate (or predicate #'el-search-true))
+        (heuristic-buffer-matcher
+         (el-search-head-heuristic-buffer-matcher (el-search-object-head 
search))))
+    (setq predicate
+          (lambda (file-name-or-buffer)
+            (and (funcall original-predicate file-name-or-buffer)
+                 (or (not el-search-optimized-search)
+                     (funcall heuristic-buffer-matcher 
file-name-or-buffer))))))
+  (let ((head (el-search-object-head search)))
+    (let ((buffer-stream (el-search-head-buffers head))
+          (buffer-list-before (buffer-list))
+          (done nil)  next  buffer)
+      (while (and (not done) (not (stream-empty-p buffer-stream)))
+        (setq next          (stream-first buffer-stream)
+              buffer-stream (stream-rest buffer-stream)
+              done          (or (not predicate) (funcall predicate next))))
+      (if (not done)
+          (progn
+            (setf (el-search-head-buffer   head) nil
+                  (el-search-head-buffers  head) buffer-stream) ;i.e. the 
empty stream
+            nil)
+        (setf (el-search-head-buffers  head) buffer-stream
+              (el-search-head-position head) 1)
+        (if (bufferp next)
+            (setq buffer next)
+          (setf (el-search-head-file head) next)
+          (setq buffer (let ((warning-minimum-level :error)) 
(find-file-noselect next))))
+        (unless (memq buffer buffer-list-before)
+          (with-current-buffer buffer
+            (setq-local el-search--temp-buffer-flag t)))
+        (setf (el-search-head-buffer head) buffer)
+        (when (bufferp buffer)
+          (with-current-buffer buffer
+            (setq-local el-search--this-buffer-matches
+                        (el-search-object-matches search))
+            (when (and (buffer-narrowed-p)
+                       (y-or-n-p (format "Widen buffer \"%s\"? "
+                                         (buffer-name))))
+              ;;FIXME: Is this always appropriate?
+              (widen))))
+        buffer))))
+
+(defun el-search--skip-to-next-buffer (&optional predicate)
+  ;; Find next buffer fulfilling the PREDICATE and continue search there
+  (el-search--next-buffer el-search--current-search predicate)
+  (el-search-continue-search))
+
+(defun el-search-make-search (pattern stream)
+  "Create and return a new `el-search-object' instance.
+MATCHER is the result of calling `el-search--matcher' on the
+pattern to search.  STREAM is a stream of buffers and/or files to
+search."
+  (let* ((matcher (el-search--matcher pattern))
+         (head (make-el-search-head
+                :matcher matcher
+                :buffers stream
+                :heuristic-buffer-matcher (el-search-heuristic-buffer-matcher 
pattern))))
+    (letrec ((search
+              (make-el-search-object
+               :head head
+               :matches
+               (seq-filter
+                #'identity ;we use `nil' as a "skip" tag
+                (funcall
+                 (letrec ((get-stream
+                           (lambda ()
+                             (stream-make
+                              (if-let ((buffer (or (el-search-head-buffer head)
+                                                   (el-search--next-buffer 
search))))
+                                  (with-current-buffer buffer
+                                    (save-excursion
+                                      ;; Widening already happens in 
`el-search-continue-search'
+                                      (goto-char (el-search-head-position 
head))
+                                      (el-search--message-no-log "Searching in 
%s"
+                                                                 (or 
(el-search-head-file head)
+                                                                     
(el-search-head-buffer head)))
+                                      (if-let ((match 
(el-search--search-pattern-1
+                                                       (el-search-head-matcher 
head) t)))
+                                          (progn
+                                            (setf (el-search-object-last-match 
search)
+                                                  (copy-marker (point)))
+                                            (el-search--skip-expression nil t)
+                                            (setf (el-search-head-position 
head)
+                                                  (copy-marker (point)))
+                                            (cons
+                                             (list (el-search-head-buffer head)
+                                                   match
+                                                   (el-search-head-file head))
+                                             (funcall get-stream)))
+                                        (setf (el-search-head-buffer head) nil
+                                              (el-search-head-file   head) nil)
+                                        (el-search--next-buffer search)
+                                        ;; retry with the next buffer
+                                        (cons nil (funcall get-stream)))))
+                                ;; end of stream (no buffers left to search in)
+                                nil)))))
+                   get-stream))))))
+      search)))
+
+(defun el-search-setup-search (pattern stream &optional from-here)
+  "Create and start a new search.
+PATTERN is the search pattern.  STREAM is a stream of buffers
+and/or files (i.e. file names) to search in.
+
+With optional FROM-HERE non-nil, the first buffer in STREAM
+should be the current buffer, and searching will start at the
+current buffer's point instead of its beginning."
+  (setq el-search--success nil)
+  (setq el-search--current-search (el-search-make-search 
(el-search--wrap-pattern pattern) stream))
+  (setq el-search--current-matcher
+        (el-search-head-matcher (el-search-object-head 
el-search--current-search)))
+  (setq el-search--current-pattern pattern)
+  (ring-insert el-search-history (list el-search--current-search pattern))
+  (when from-here (setq el-search--temp-buffer-flag nil))
+  (el-search-continue-search from-here))
+
+(defun el-search-stream-of-directory-files (&optional directory recurse)
+  "Return a stream of emacs-lisp files in DIRECTORY.
+DIRECTORY defaults to `default-directory'.  The returned stream
+will recurse into DIRECTORY's subdirectories when RECURSE is
+non-nil unless their name is matched by one of the
+`el-search-ignored-directory-regexps'."
+  (stream-of-directory-files
+   (or directory default-directory)
+   t nil
+   (and recurse
+        (lambda (dir-name)
+          (not (cl-some (lambda (regexp) (string-match-p regexp dir-name))
+                        el-search-ignored-directory-regexps))))
+   t #'el-search--elisp-file-name-p))
 
 
 ;;;; Additional pattern type definitions
 
-(defun el-search--split (matcher1 matcher2 list)
-  "Helper for the append pattern type.
-
-When a splitting of LIST into two lists L1, L2 exist so that Li
-is matched by MATCHERi, return (L1 L2) for such Li, else return
-nil."
-  (let ((try-match (lambda (list1 list2)
-                     (when (and (el-search--match-p matcher1 list1)
-                                (el-search--match-p matcher2 list2))
-                       (list list1 list2))))
-        (list1 list) (list2 '()) (match nil))
-    ;; don't use recursion, this could hit `max-lisp-eval-depth'
-    (while (and (not (setq match (funcall try-match list1 list2)))
-                (consp list1))
-      (let ((last-list1 (last list1)))
-        (if-let ((cdr-last-list1 (cdr last-list1)))
-            ;; list1 is a dotted list.  Then list2 must be empty.
-            (progn (setcdr last-list1 nil)
-                   (setq list2 cdr-last-list1))
-          (setq list1 (butlast list1 1)
-                list2 (cons (car last-list1) list2)))))
-    match))
-
-(el-search-defpattern append (&rest patterns)
-  "Matches any list factorable into lists matched by PATTERNS in order.
-
-PATTERNS is a list of patterns P1..Pn.  Match any list L for that
-lists L1..Ln exist that are matched by P1..Pn in order and L is
-equal to the concatenation of L1..Ln.  Ln is allowed to be no
-list.
-
-When different ways of matching are possible, it is unspecified
-which one is chosen.
-
-Example: the pattern
-
-   (append '(1 2 3) x (app car-safe 7))
-
-matches the list (1 2 3 4 5 6 7 8 9) and binds `x' to (4 5 6)."
-  (if (null patterns)
-      '(pred null)
-    (pcase-let ((`(,pattern . ,more-patterns) patterns))
-      (cond
-       ((null more-patterns)  pattern)
-       ((null (cdr more-patterns))
-        `(and (pred listp)
-              (app ,(apply-partially #'el-search--split
-                                     (el-search--matcher pattern)
-                                     (el-search--matcher (car more-patterns)))
-                   `(,,pattern ,,(car more-patterns)))))
-       (t `(append ,pattern (append ,@more-patterns)))))))
-
-(defun el-search--stringish-p (thing)
-  (or (stringp thing) (and el-search-use-sloppy-strings (symbolp thing))))
+(defun el-search--eregexp-p (thing)
+  ;; Return non-nil when THING is an "extended regexp" in the sense of
+  ;; the "string" pattern type
+  (pcase thing
+    ((pred stringp) t)
+    (`(,(and (pred listp) bindings)
+       ,(pred stringp))
+     (cl-every
+      (lambda (binding) (pcase binding ((or (pred symbolp) `(,(pred symbolp)) 
`(,(pred symbolp) ,_)) t)))
+      bindings))))
 
 (el-search-defpattern string (&rest regexps)
-  "Matches any string that is matched by all REGEXPS."
-  (el-search--check-pattern-args "string" regexps #'el-search--stringish-p
-                                 "Argument not a string")
+  "Matches any string that is matched by all REGEXPS.
+
+Any of the REGEXPS can also be an \"extended\" regexp of the form
+
+  \(bindings regexp\)
+
+where REGEXP is the actual regexp to match and BINDINGS is a
+let-style list of variable bindings.
+
+Example: (((case-fold-search nil)) \"foo\") is an extended regexp
+matching \"foo\", but not \"Foo\" even when `case-fold-search' is
+currently enabled."
+  (declare (heuristic-matcher
+            (lambda (&rest eregexps)
+              (let ((matchers
+                     (mapcar (lambda (eregexp) (apply-partially 
#'el-search--string-match-p eregexp))
+                             eregexps)))
+                (lambda (atoms)
+                  (cl-some
+                   (lambda (atom)
+                     (and (stringp atom)
+                          (cl-every (lambda (matcher) (funcall matcher atom)) 
matchers)))
+                   atoms))))))
+  (el-search-defpattern--check-args "string" regexps #'el-search--eregexp-p
+                                    "argument not a regexp")
   `(and (pred stringp)
-        ,@(mapcar (lambda (thing) `(pred (el-search--smart-string-match-p
-                                     ,(if (symbolp thing) (symbol-name thing) 
thing))))
+        ,@(mapcar (lambda (thing) `(pred (el-search--string-match-p ',thing)))
                   regexps)))
 
 (el-search-defpattern symbol (&rest regexps)
-  "Matches any symbol whose name is matched by all REGEXPS."
-  (el-search--check-pattern-args "symbol" regexps #'el-search--stringish-p
-                                 "Argument not a string")
-  `(and (pred symbolp)
-        (app symbol-name (string ,@regexps))))
+  "Matches any symbol whose name is matched by all REGEXPS.
+Any of the REGEXPS can be an extended regexp of the form
+\(bindings regexp\) like in the \"string\" pattern."
+  (declare (heuristic-matcher
+            (lambda (&rest eregexps)
+              (let ((matchers
+                     (mapcar (lambda (eregexp) (apply-partially 
#'el-search--string-match-p eregexp))
+                             eregexps)))
+                (lambda (atoms)
+                  (cl-some
+                   (lambda (atom)
+                     (when-let ((symbol-name (and (symbolp atom) (symbol-name 
atom))))
+                       (cl-every (lambda (matcher) (funcall matcher 
symbol-name)) matchers)))
+                   atoms))))))
+  (el-search-defpattern--check-args "symbol" regexps #'el-search--eregexp-p
+                                    "argument not a regexp")
+  `(and (pred symbolp) (app symbol-name (string ,@regexps))))
 
 (defun el-search--contains-p (matcher exp)
-  "Return non-nil when tree EXP contains a match for MATCHER.
+  "Return non-nil when expression tree EXP contains a match for MATCHER.
 Recurse on all types of sequences.  In the positive case the
 return value is (t elt), where ELT is a matching element found in
 EXP."
@@ -760,11 +1159,22 @@ EXP."
              (cl-some try-match exp))))))
 
 (el-search-defpattern contains (&rest patterns)
-  "Matches trees that contain a match for all PATTERNs.
-Searches any tree of sequences recursively for matches.  Objects
-of any kind matched by all PATTERNs are also matched.
+  "Matches expressions that contain a match for all PATTERNs.
+
+Example:
+
+  \(contains (string \"H\") 17)
 
-  Example: (contains (string \"H\") 17) matches ((\"Hallo\") x (5 [1 17]))"
+matches
+
+  \((\"Hallo\") x (5 [1 17])).
+
+The expression itself is included, so for example `1' is matched
+by \(contains 1\)."
+  (declare (heuristic-matcher
+            (lambda (&rest patterns)
+              (let ((matchers (mapcar #'el-search-heuristic-matcher patterns)))
+                (lambda (atoms) (cl-every (lambda (matcher) (funcall matcher 
atoms)) matchers))))))
   (cond
    ((null patterns) '_)
    ((null (cdr patterns))
@@ -775,120 +1185,29 @@ of any kind matched by all PATTERNs are also matched.
 
 (el-search-defpattern not (pattern)
   "Matches any object that is not matched by PATTERN."
+  (declare (heuristic-matcher ;We can't just negate the hm of the PATTERN!
+            (lambda (_pattern) #'el-search-true)))
   `(app ,(apply-partially #'el-search--match-p (el-search--matcher pattern))
         (pred not)))
 
-(defun el-search--match-symbol-file (regexp symbol)
-  (when-let ((symbol-file (and (symbolp symbol)
-                               (symbol-file symbol))))
-    (el-search--smart-string-match-p
-     (if (symbolp regexp) (concat "\\`" (symbol-name regexp) "\\'") regexp)
+(defun el-search--match-symbol-file (eregexp symbol)
+  (when-let ((symbol-file (and (symbolp symbol) (symbol-file symbol))))
+    (el-search--string-match-p
+     eregexp
      (file-name-sans-extension (file-name-nondirectory symbol-file)))))
 
-(el-search-defpattern source (regexp)
+(el-search-defpattern symbol-file (regexp)
   "Matches any symbol whose `symbol-file' is matched by REGEXP.
 
 This pattern matches when the object is a symbol for that
-`symbol-file' returns a (non-nil) FILE-NAME that fulfills
-  (string-match-p REGEXP (file-name-sans-extension
-                           (file-name-nondirectory FILENAME)))
-
-REGEXP can also be a symbol, in which case
-
-  (concat \"^\" (symbol-name regexp) \"$\")
-
-is used as regular expression."
-  (el-search--check-pattern-args "source" (list regexp) 
#'el-search--stringish-p
-                                 "Argument not a string")
-  `(pred (el-search--match-symbol-file ,(if (symbolp regexp) (symbol-name 
regexp) regexp))))
-
-(defun el-search--match-key-sequence (keys expr)
-  (when-let ((expr-keys (pcase expr
-                          ((or (pred stringp) (pred vectorp))  expr)
-                          (`(kbd ,(and (pred stringp) string)) (ignore-errors 
(kbd string))))))
-    (apply #'equal
-           (mapcar (lambda (keys) (ignore-errors (key-description keys)))
-                   (list keys expr-keys)))))
-
-(el-search-defpattern keys (key-sequence)
-  "Matches descriptions of the KEY-SEQUENCE.
-KEY-SEQUENCE is a string or vector representing a key sequence,
-or an expression of the form (kbd STRING).
-
-Match any description of the same key sequence in any of these
-formats.
-
-Example: the pattern
-
-    (keys (kbd \"C-s\"))
-
-matches any of these expressions:
-
-    \"\\C-s\"
-    \"\C-s\"
-    (kbd \"C-s\")
-    [(control ?s)]"
-  (when (eq (car-safe key-sequence) 'kbd)
-    (setq key-sequence (kbd (cadr key-sequence))))
-  (el-search--check-pattern-args "keys" (list key-sequence) (lambda (x) (or 
(stringp x) (vectorp x)))
-                                 "argument not a string or vector")
-  `(pred (el-search--match-key-sequence ,key-sequence)))
-
-(defun el-search--transform-nontrivial-lpat (expr)
-  (pcase expr
-    ((and (pred symbolp) (let symbol-name (symbol-name expr)))
-     `(or (symbol ,symbol-name)
-          `',(symbol  ,symbol-name)
-          `#',(symbol ,symbol-name)))
-    ((pred stringp) `(string ,expr))
-    (_ expr)))
-
-(el-search-defpattern l (&rest lpats)
-  "Alternative pattern type for matching lists.
-Match any list with subsequent elements matched by all LPATS in
-order.
-
-The idea is to be able to search for pieces of code (i.e. lists)
-with very brief input by using a specialized syntax.
-
-An LPAT can take the following forms:
-
-SYMBOL  Matches any symbol S matched by SYMBOL's name interpreted
-        as a regexp.  Matches also 'S and #'S for any such S.
-STRING  Matches any string matched by STRING interpreted as a
-        regexp
-_       Matches any list element
-__      Matches any number of list elements (including zero)
-^       Matches zero elements, but only at the beginning of a list
-$       Matches zero elements, but only at the end of a list
-PAT     Anything else is interpreted as a normal pcase pattern, and
-        matches one list element matched by it
-
-^ is only valid as the first, $ as the last of the LPATS.
-
-Example: To match defuns that contain \"hl\" in their name and
-have at least one mandatory, but also optional arguments, you
-could use this pattern:
-
-    (l ^ 'defun hl (l _ &optional))"
-  (let ((match-start nil) (match-end nil))
-    (when (eq (car-safe lpats) '^)
-      (setq match-start t)
-      (cl-callf cdr lpats))
-    (when (eq (car-safe (last lpats)) '$)
-      (setq match-end t)
-      (cl-callf butlast lpats 1))
-    `(append ,@(if match-start '() '(_))
-             ,@(mapcar
-                (lambda (elt)
-                  (pcase elt
-                    ('__ '_)
-                    ('_ '`(,_))
-                    ('_? '(or '() `(,_))) ;FIXME: useful - document? or should 
we provide a (? PAT)
-                                          ;thing?
-                    (_ ``(,,(el-search--transform-nontrivial-lpat elt)))))
-                lpats)
-             ,@(if match-end '() '(_)))))
+`symbol-file' returns a (non-nil) FILE-NAME so that
+
+   (file-name-sans-extension (file-name-nondirectory FILENAME)))
+
+is matched by the REGEXP."
+  (el-search-defpattern--check-args "symbol-file" (list regexp) 
#'el-search--eregexp-p
+                                    "argument not a regexp")
+  `(pred (el-search--match-symbol-file ',regexp)))
 
 (el-search-defpattern char-prop (property)
   "Matches the object if completely covered with PROPERTY.
@@ -896,9 +1215,9 @@ This pattern matches the object if its representation in 
the
 search buffer is completely covered with the character property
 PROPERTY.
 
-This pattern always tests the complete expression in the search
-buffer, it is not possible to test subexpressions calculated in
-the search pattern."
+This pattern should only be used to match against the current
+object (so it can't be used inside an `app' pattern for
+example)."
   `(guard (and (get-char-property (point) ',property)
                ,(macroexp-let2 nil limit '(scan-sexps (point) 1)
                   `(= (next-single-char-property-change
@@ -911,9 +1230,9 @@ This pattern matches the object if its representation in 
the
 search buffer is partly covered with the character property
 PROPERTY.
 
-This pattern always tests the complete expression in the search
-buffer, it is not possible to test subexpressions calculated in
-the search pattern."
+This pattern should only be used to match against the current
+object (so it can't be used inside an `app' pattern for
+example)."
   `(guard (or (get-char-property (point) ',property)
               ,(macroexp-let2 nil limit '(scan-sexps (point) 1)
                  `(not (= (next-single-char-property-change
@@ -927,24 +1246,55 @@ the search pattern."
 
 (defvar-local el-search-hl-other-overlays '())
 
-(defvar el-search-keep-hl nil)
+(defvar el-search-keep-hl nil
+  "Non-nil indicates we should not remove any highlighting.")
 
 (defun el-search-hl-sexp (&optional bounds)
-  (let ((bounds (or bounds
-                    (list (point) (el-search--end-of-sexp)))))
+  (let ((bounds (or bounds (list (point) (el-search--end-of-sexp)))))
     (if (overlayp el-search-hl-overlay)
         (apply #'move-overlay el-search-hl-overlay bounds)
       (overlay-put (setq el-search-hl-overlay (apply #'make-overlay bounds))
                    'face 'el-search-match))
-    (overlay-put el-search-hl-overlay 'priority 1002))
+    (overlay-put el-search-hl-overlay 'priority 1002)
+
+    ;; Vertically scroll the current sexp into view when appropriate -- we
+    ;; must redisplay to get updated window bounds.  The selected frame
+    ;; must apparently be displayed for this to work.
+    (while (not (eq t (frame-visible-p (selected-frame))))
+      (sleep-for .1))
+    (redisplay)
+    (let ((wheight (window-height)))
+      ;; FIXME: make the following integer constants customizable,
+      ;; presumably, named in analogy to the scroll- options?
+      (unless (pos-visible-in-window-p
+               (save-excursion (goto-char (cadr bounds))
+                               (line-end-position (max +3 (/ wheight 25)))))
+        (scroll-up (min
+                    (max
+                     ;; make at least sexp end + a small margin visible
+                     (- (line-number-at-pos (cadr bounds))
+                        (line-number-at-pos (window-end))
+                        (- (max 2 (/ wheight 4))))
+                     ;; also try to center current sexp
+                     (- (/ ( + (line-number-at-pos (car bounds))
+                               (line-number-at-pos (cadr bounds)))
+                           2)
+                        (/ (+ (line-number-at-pos (window-start))
+                              (line-number-at-pos (window-end)))
+                           2)))
+                    ;; but also ensure at least a small margin is left between 
point and window start
+                    (- (line-number-at-pos (car  bounds))
+                       (line-number-at-pos (window-start))
+                       3))))))
+
   (add-hook 'post-command-hook #'el-search-hl-post-command-fun t t))
 
-(defun el-search--hl-other-matches-1 (pattern from to)
+(defun el-search--hl-other-matches-1 (matcher from to)
+  ;; Highlight all matches between FROM and TO with face
+  ;; `el-search-other-match'.
   (mapc #'delete-overlay el-search-hl-other-overlays)
   (setq el-search-hl-other-overlays '())
-  (let ((matcher (el-search--matcher pattern))
-        this-match-beg this-match-end
-        (done nil))
+  (let (this-match-beg this-match-end (done nil))
     (save-excursion
       (goto-char from)
       (while (not done)
@@ -960,9 +1310,13 @@ the search pattern."
             (goto-char this-match-end)
             (when (>= (point) to) (setq done t))))))))
 
-(defun el-search-hl-other-matches (pattern)
-  "Highlight all matches visible in the selected window."
-  (el-search--hl-other-matches-1 pattern
+(defun el-search-hl-other-matches (matcher)
+  "Highlight all visible matches.
+
+Highlight all matches visible in the selected window with face
+`el-search-other-match' and add `el-search--after-scroll' to the
+local binding of `window-scroll-functions'."
+  (el-search--hl-other-matches-1 matcher
                                  (save-excursion
                                    (goto-char (window-start))
                                    (beginning-of-defun-raw)
@@ -971,7 +1325,7 @@ the search pattern."
   (add-hook 'window-scroll-functions #'el-search--after-scroll t t))
 
 (defun el-search--after-scroll (_win start)
-  (el-search--hl-other-matches-1 el-search-current-pattern
+  (el-search--hl-other-matches-1 el-search--current-matcher
                                  (save-excursion
                                    (goto-char start)
                                    (beginning-of-defun-raw)
@@ -990,24 +1344,158 @@ the search pattern."
               (eq this-command 'el-search-query-replace)
               (eq this-command 'el-search-pattern))
     (el-search-hl-remove)
-    (remove-hook 'post-command-hook 'el-search-hl-post-command-fun t)))
+    (remove-hook 'post-command-hook 'el-search-hl-post-command-fun t)
+    (setq el-search--temp-buffer-flag nil)))
 
 
 ;;;; Core functions
 
+(defun el-search-continue-in-next-buffer ()
+  "Skip current search buffer and continue with the next."
+  (interactive)
+  (el-search--skip-to-next-buffer
+   (lambda (buffer-or-file)
+     (not (if (bufferp buffer-or-file)
+              (eq buffer-or-file (current-buffer))
+            (file-equal-p buffer-or-file buffer-file-name))))))
+
+(defun el-search-all-matches (search)
+  "Perform SEARCH non-interactively and return a list of all matches.
+
+SEARCH is an `el-search-object'.  Execute SEARCH
+non-interactively until finished and return a list of matches in
+the form \(file-name-or-buffer . match-position)."
+  (mapcar
+   (pcase-lambda (`(,buffer ,position ,file))
+     (cons (if (buffer-live-p buffer) buffer file) position))
+   (seq-into-sequence (el-search-object-matches search))))
+
+(defun el-search-jump-to-search-head (&optional previous-search)
+  (interactive "P")
+  "Switch to current search buffer and go to the last match.
+With prefix arg, prompt for a prior search to resume, and make
+that the current search."
+  (when previous-search
+    (let ((entry (ring-ref
+                  el-search-history
+                  (string-to-number
+                   (let ((completion-extra-properties
+                          `(:annotation-function
+                            ,(lambda (elt)
+                               (format "  Search in %S for %S"
+                                       (el-search-head-buffer
+                                        (el-search-object-head
+                                         (car (ring-ref el-search-history 
(string-to-number elt)))))
+                                       (cadr (ring-ref el-search-history 
(string-to-number elt))))))))
+                     (completing-read
+                      "Resume previous search: "
+                      (mapcar #'prin1-to-string
+                              (number-sequence 0 (1- (ring-length 
el-search-history))))))))))
+      (setq el-search--current-search  (car entry))
+      (setq el-search--current-pattern (cadr entry)))
+    (setq el-search--current-matcher
+          (el-search-head-matcher (el-search-object-head 
el-search--current-search)))
+    (el-search--pushnew-to-history
+     (el-search--pp-to-string el-search--current-pattern)
+     'el-search-pattern-history))
+  (if-let ((search el-search--current-search)
+           (current-head (el-search-object-head search))
+           (current-search-buffer (el-search-head-buffer current-head)))
+      (progn
+        (setq this-command 'el-search-pattern)
+        (let ((win (display-buffer current-search-buffer 
el-search-display-buffer-action)))
+          (select-frame-set-input-focus (window-frame win))
+          (select-window win))
+        (let ((last-match (el-search-object-last-match search)))
+          (if (not (and last-match
+                        (eq (marker-buffer last-match) (current-buffer))))
+              ;; this should only happen for bad search patterns
+              (goto-char (el-search-head-position current-head))
+            (goto-char last-match)
+            (el-search-hl-sexp)
+            (el-search-hl-other-matches el-search--current-matcher)
+            (set-transient-map el-search-map))))
+    (error "Last search finished")))
+
+(defun el-search-continue-search (&optional from-here)
+  "Continue or resume the current search.
+
+With prefix arg FROM-HERE given, the current search buffer should
+be the current buffer, and the search will be resumed from point
+instead of the position where the search would normally be
+continued."
+  (interactive "P")
+  (setq this-command 'el-search-pattern)
+  (setq el-search--current-matcher
+        (el-search-head-matcher (el-search-object-head 
el-search--current-search)))
+  (let ((old-current-buffer (current-buffer)))
+    (when from-here
+      (let* ((head (el-search-object-head el-search--current-search))
+             (current-search-buffer
+              (or (el-search-head-buffer head)
+                  (el-search--next-buffer el-search--current-search))))
+        (cond
+         ((eq (current-buffer) current-search-buffer)
+          (setf (el-search-head-position head) (copy-marker (point))))
+         ((and current-search-buffer (buffer-live-p current-search-buffer))
+          (error "Please resume from buffer %s" (buffer-name 
current-search-buffer)))
+         (current-search-buffer
+          (error "Invalid search head: buffer killed")))))
+    (unwind-protect
+        (let ((stream-of-matches (el-search-object-matches 
el-search--current-search)))
+          (if (not (stream-empty-p stream-of-matches))
+              (let ((match (stream-first stream-of-matches)))
+                (switch-to-buffer (car match))
+                (goto-char (cadr match))
+                (cl-callf stream-rest (el-search-object-matches 
el-search--current-search))
+                (el-search-hl-sexp)
+                (unless (and (eq this-command last-command)
+                             el-search--success
+                             (eq (current-buffer) old-current-buffer))
+                  (el-search-hl-other-matches el-search--current-matcher))
+                (set-transient-map el-search-map)
+                (setq el-search--success t))
+            (setq el-search--success nil)
+            (set-transient-map nil)
+            (el-search-kill-left-over-search-buffers)
+            (message "Done!")))
+      (unless el-search--success (setq el-search--current-pattern nil)))))
+
+(defun el-search-skip-directory (directory)
+  "Skip all subsequent matches in files located under DIRECTORY."
+  (interactive
+   (list (expand-file-name
+          (read-directory-name "Skip all files under directory: " nil
+                               (if-let ((search el-search--current-search)
+                                        (current-head (el-search-object-head 
search))
+                                        (current-file (el-search-head-file 
current-head)))
+                                   (file-name-directory current-file)
+                                 default-directory)
+                               t))))
+  (el-search--skip-to-next-buffer
+   (lambda (buffer-or-file-name)
+     (or (bufferp buffer-or-file-name)
+         ;; `file-in-directory-p' would be perfect here, but it calls
+         ;; file-truename on both args what we don't want, so we use this:
+         (string-match-p "\\`\\.\\." (file-relative-name buffer-or-file-name 
directory))))))
+
 ;;;###autoload
-(defun el-search-pattern (pattern &optional no-error)
-  "Start new or resume last elisp search.
+(defun el-search-pattern (pattern)
+  "Start new or resume last elisp buffer search.
 
 Search current buffer for expressions that are matched by `pcase'
 PATTERN.  Use `read' to transform buffer contents into
 expressions.
 
-Use `emacs-lisp-mode' for reading input.  Some keys in the
-minibuffer have a special binding: to make it possible to edit
-multi line input, C-j inserts a newline, and up and down move the
-cursor vertically - see `el-search-read-expression-map' for more
-details.
+When called from the current search's current search buffer,
+continue that search from point.  Otherwise or when a new PATTERN
+is given, start a new single-buffer search from point.
+
+Use `emacs-lisp-mode' for reading the input pattern.  Some keys
+in the minibuffer have a special binding: to make it possible to
+edit multi line input, C-j inserts a newline, and up and down
+move the cursor vertically - see `el-search-read-expression-map'
+for details.
 
 
 Additional `pcase' pattern types to be used with this command can
@@ -1015,40 +1503,228 @@ be defined with `el-search-defpattern'.
 
 The following additional pattern types are currently defined:"
   (interactive (list (if (and (eq this-command last-command)
-                              el-search-success)
-                         el-search-current-pattern
-                       (let* ((input (el-search--read-pattern "Find pcase 
pattern: "
-                                                              (car 
el-search-history)))
-                              (pattern (read input)))
-                         ;; A very common mistake: input "foo" instead of 
"'foo"
-                         (when (and (symbolp pattern)
-                                    (not (eq pattern '_))
-                                    (or (not (boundp pattern))
-                                        (not (eq (symbol-value pattern) 
pattern))))
-                           (error "Please don't forget the quote when 
searching for a symbol"))
-                         ;; Make input available also in query-replace history
-                         (el-search--pushnew-to-history input 
'el-search-query-replace-history)
-                         ;; and wrap the PATTERN
-                         (el-search--wrap-pattern pattern)))))
-  (if (not (called-interactively-p 'any))
-      (el-search--search-pattern pattern no-error)
-    (setq this-command 'el-search-pattern) ;in case we come from isearch
-    (setq el-search-current-pattern pattern)
-    (let ((opoint (point)))
-      (when (and (eq this-command last-command) el-search-success)
-        (el-search--skip-expression nil t))
-      (setq el-search-success nil)
-      (when (condition-case nil
-                (el-search--search-pattern pattern)
-              (end-of-buffer (message "No match")
-                             (goto-char opoint)
-                             (el-search-hl-remove)
-                             (ding)
-                             nil))
-        (setq el-search-success t)
-        (el-search-hl-sexp)
-        (unless (eq this-command last-command)
-          (el-search-hl-other-matches pattern))))))
+                              el-search--success)
+                         el-search--current-pattern
+                       (el-search--read-pattern-for-interactive))))
+  (cond
+   ((and (eq this-command last-command)
+         (eq pattern el-search--current-pattern))
+    (progn
+      (el-search--skip-expression nil t)
+      (el-search-continue-search 'from-here)))
+   ((and (equal pattern el-search--current-pattern)
+         (eq (current-buffer)
+             (el-search-head-buffer (el-search-object-head 
el-search--current-search))))
+    (el-search-continue-search 'from-here))
+   (t ;; create a new search single-buffer search
+    (el-search-setup-search pattern (stream (list (current-buffer))) 
'from-here))))
+
+(put 'el-search-pattern 'function-documentation '(el-search--make-docstring 
'el-search-pattern))
+
+(defun el-search-previous-match ()
+  "Revisit found matches in the current buffer in reverse order."
+  ;; Implementing backward el-searching is very hard (or very slow,
+  ;; alternatively), so let's use this for now...
+  (interactive)
+  (if (not (el-search-head-buffer (el-search-object-head 
el-search--current-search)))
+      ;; FIXME: This case is tricky; the user would expect that when he hits
+      ;; C-S afterwards, the search is restored with the old matches
+      ;; "merged".  So for now, we raise this:
+      (error "Last search completed, please start a new search")
+    (setq this-command 'el-search-pattern)
+    (let ((last-match-beg (el-search-object-last-match 
el-search--current-search)))
+      (if (< last-match-beg (point))
+          (el-search-jump-to-search-head)
+        (let ((go-there nil) (matches el-search--this-buffer-matches))
+          (catch 'done
+            (while (and (not (stream-empty-p matches))
+                        (< (cadr (stream-first matches)) (point)))
+              (setq go-there (cadr (stream-first matches)))
+              (stream-pop matches)))
+          (if (not go-there)
+              (el-search--message-no-log "[Beginning of this buffer's recorded 
matches]")
+            (goto-char go-there)
+            (el-search-hl-sexp)
+            (set-transient-map el-search-map)))))))
+
+;;;###autoload
+(defun el-search-buffers (pattern)
+  "Search all live elisp buffers for PATTERN."
+  (interactive (list (el-search--read-pattern-for-interactive)))
+  (el-search-setup-search
+   pattern
+   (seq-filter
+    (lambda (buffer) (with-current-buffer buffer (derived-mode-p 
'emacs-lisp-mode)))
+    (stream (buffer-list)))))
+
+;;;###autoload
+(defun el-search-directory (pattern directory &optional recursively)
+  "Search all elisp files in DIRECTORY for PATTERN.
+With prefix arg RECURSIVELY non-nil, search subdirectories recursively."
+  (interactive (list (el-search--read-pattern-for-interactive)
+                     (expand-file-name
+                      (read-directory-name (format "el-search directory%s: "
+                                                   (if current-prefix-arg " 
recursively" ""))
+                                           nil default-directory t))
+                     current-prefix-arg))
+  (el-search-setup-search
+   pattern
+   (el-search-stream-of-directory-files directory recursively)))
+
+;;;###autoload
+(defun el-search-emacs-elisp-sources (pattern)
+  "Search Emacs elisp sources for PATTERN.
+This command recursively searches all elisp files under
+\(expand-file-name \"lisp/\" source-directory\)."
+  (interactive (list (el-search--read-pattern-for-interactive)))
+  (el-search-setup-search
+   pattern
+   (el-search-stream-of-directory-files
+    (expand-file-name "lisp/" source-directory)
+    t)))
+
+;;;###autoload
+(defun el-search-load-path (pattern)
+  "Search PATTERN in the elisp files in all directories of `load-path'.
+nil elements in `load-path' (standing for `default-directory')
+are ignored."
+  (interactive (list (el-search--read-pattern-for-interactive)))
+  (el-search-setup-search
+   pattern
+   (stream-concatenate
+    (seq-map (lambda (path) (el-search-stream-of-directory-files path nil))
+             (stream (delq nil load-path))))))
+
+(declare-function dired-get-marked-files "dired")
+
+;;;###autoload
+(defun el-search-dired-marked-files (pattern &optional recursively)
+  "el-search marked files and directories in dired.
+With RECURSIVELY given (the prefix arg in an interactive call),
+search directories recursively."
+  (interactive (list (el-search--read-pattern-for-interactive) 
current-prefix-arg))
+  (el-search-setup-search
+   pattern
+   (stream-concatenate
+    (seq-map
+     (lambda (file)
+       (if (file-directory-p file)
+           (el-search-stream-of-directory-files file recursively)
+         (stream (list file))))
+     (stream (dired-get-marked-files))))))
+
+
+;;;; Query-replace
+
+(defun el-search--replace-hunk (region to-insert)
+  "Replace the text in REGION in current buffer with string TO-INSERT.
+Add line breaks before and after TO-INSERT when appropriate and
+reindent."
+  (atomic-change-group
+    (let* ((inhibit-message t)
+           (opoint (point))
+           (original-text (prog1 (apply #'buffer-substring-no-properties 
region)
+                            (goto-char (car region))
+                            (apply #'delete-region region)))
+           ;; care about other sexps in this line
+           (sexp-before-us (not (looking-back "\(\\|^\\s-*" 
(line-beginning-position))))
+           (sexp-after-us  (not (looking-at "\\s-*[;\)]\\|$")))
+           (insert-newline-before
+            (or
+             (and (string-match-p "\n" to-insert)
+                  (not (string-match-p "\n" original-text))
+                  (or (and sexp-before-us sexp-after-us)
+                      (looking-back
+                       (rx (or (syntax word) (syntax symbol))
+                           (+ blank)
+                           (or (syntax word) (syntax symbol))
+                           (* any))
+                       (line-beginning-position))))
+             ;; (and sexp-before-us
+             ;;      (> (+ (apply #'max (mapcar #'length (split-string 
to-insert "\n")))
+             ;;            (- (point) (line-beginning-position)))
+             ;;         fill-column))
+             ))
+           (insert-newline-after (and insert-newline-before sexp-after-us)))
+      (when insert-newline-before
+        (when (looking-back "\\s-+" (line-beginning-position))
+          (delete-region (match-beginning 0) (match-end 0)))
+        (insert "\n"))
+      (insert to-insert)
+      (when insert-newline-after
+        (insert "\n"))
+      (save-excursion
+        ;; the whole enclosing sexp might need re-indenting
+        (condition-case nil (up-list)  (scan-error))
+        (indent-region opoint (1+ (point)))))))
+
+(defun el-search--format-replacement (replacement original replace-expr-input 
splice)
+  ;; Return a printed representation of REPLACEMENT.  Try to reuse the
+  ;; layout of subexpressions shared with the original (replaced)
+  ;; expression and the replace expression.
+  (if (and splice (not (listp replacement)))
+      (error "Expression to splice in is an atom")
+    (let ((orig-buffer (generate-new-buffer "orig-expr")))
+      (with-current-buffer orig-buffer
+        (emacs-lisp-mode)
+        (insert original)
+        (when replace-expr-input (insert "\n\n" replace-expr-input)))
+      (unwind-protect
+          (with-temp-buffer
+            (emacs-lisp-mode)
+            (insert (if splice
+                        (mapconcat #'el-search--pp-to-string replacement " ")
+                      (el-search--pp-to-string replacement)))
+            (goto-char 1)
+            (let (start this-sexp end orig-match-start orig-match-end done)
+              (while (and (< (point) (point-max))
+                          (condition-case nil
+                              (progn
+                                (setq start (point)
+                                      this-sexp (read (current-buffer))
+                                      end   (point))
+                                t)
+                            (end-of-buffer nil)))
+                (setq done nil orig-match-start nil)
+                (with-current-buffer orig-buffer
+                  (goto-char 1)
+                  (if (el-search-forward `',this-sexp t)
+                      (setq orig-match-start (point)
+                            orig-match-end (progn (forward-sexp) (point)))
+                    (setq done t)))
+                ;; find out whether we have a sequence of equal expressions
+                (while (and (not done)
+                            (condition-case nil
+                                (progn (setq this-sexp (read 
(current-buffer))) t)
+                              ((invalid-read-syntax end-of-buffer end-of-file) 
nil)))
+                  (if (with-current-buffer orig-buffer
+                        (condition-case nil
+                            (if (not (equal this-sexp (read (current-buffer))))
+                                nil
+                              (setq orig-match-end (point))
+                              t)
+                          ((invalid-read-syntax end-of-buffer end-of-file) 
nil)))
+                      (setq end (point))
+                    (setq done t)))
+                ;; FIXME: there could be another occurrence of THIS-SEXP in 
ORIG-BUFFER with more
+                ;; subsequent equal expressions after it
+                (if orig-match-start
+                    (el-search--replace-hunk
+                     (list start end)
+                     (with-current-buffer orig-buffer
+                       (buffer-substring-no-properties orig-match-start 
orig-match-end)))
+                  (goto-char start)
+                  (el-search--skip-expression nil t))
+                (condition-case nil
+                    (el-search--ensure-sexp-start)
+                  (end-of-buffer (goto-char (point-max))))))
+            (goto-char 1)
+            (forward-sexp (if splice (length replacement) 1))
+            (let ((result (buffer-substring 1 (point))))
+              (if (equal replacement (read (if splice (format "(%s)" result) 
result)))
+                  result
+                (error "Error in `el-search--format-replacement' - please make 
a bug report"))))
+        (kill-buffer orig-buffer)))))
 
 (defvar el-search-search-and-replace-help-string
   "\
@@ -1070,95 +1746,105 @@ Hit any key to proceed."
   (let ((replace-all nil) (nbr-replaced 0) (nbr-skipped 0) (done nil)
         (el-search-keep-hl t) (opoint (point))
         (get-replacement (el-search--matcher pattern replacement))
-        (skip-matches-in-replacement 'ask))
+        (skip-matches-in-replacement 'ask)
+        (matcher (setq el-search--current-matcher
+                       (el-search--matcher (el-search--wrap-pattern 
pattern)))))
     (unwind-protect
-        (while (and (not done) (el-search--search-pattern pattern t))
-          (setq opoint (point))
-          (unless replace-all
-            (el-search-hl-sexp)
-            (unless (eq this-command last-command)
-              (el-search-hl-other-matches pattern)))
-          (let* ((region (list (point) (el-search--end-of-sexp)))
-                 (original-text (apply #'buffer-substring-no-properties 
region))
-                 (expr      (read original-text))
-                 (replaced-this nil)
-                 (new-expr  (funcall get-replacement expr))
-                 (get-replacement-string
-                  (lambda () (el-search--format-replacement new-expr 
original-text to-input-string splice)))
-                 (to-insert (funcall get-replacement-string))
-                 (replacement-contains-another-match
-                  (with-temp-buffer
-                    (emacs-lisp-mode)
-                    (insert to-insert)
-                    (goto-char 1)
-                    (el-search--skip-expression new-expr)
-                    (condition-case nil
-                        (progn (el-search--ensure-sexp-start)
-                               (el-search--search-pattern pattern t))
-                      (end-of-buffer nil))))
-                 (do-replace
-                  (lambda ()
-                    (save-excursion
-                      (save-restriction
-                        (widen)
-                        (el-search--replace-hunk (list (point) 
(el-search--end-of-sexp)) to-insert)))
-                    (el-search--ensure-sexp-start) ;skip potentially newly 
added whitespace
-                    (el-search-hl-sexp (list opoint (point)))
-                    (cl-incf nbr-replaced)
-                    (setq replaced-this t))))
-            (if replace-all
-                (funcall do-replace)
-              (while (not (pcase (if replaced-this
-                                     (read-char-choice "[SPC ! q]  (? for 
help)"
-                                                       '(?\ ?! ?q ?\C-g ?n ??))
-                                   (read-char-choice
-                                    (concat "Replace this occurrence"
-                                            (if (or (string-match-p "\n" 
to-insert)
-                                                    (< 40 (length to-insert)))
-                                                "" (format " with `%s'" 
to-insert))
-                                            "? "
-                                            (if splice "{splice} " "")
-                                            "[y SPC r ! s q]  (? for help)" )
-                                    '(?y ?n ?r ?\ ?! ?q ?\C-g ?s ??)))
-                            (?r (funcall do-replace)
-                                nil)
-                            (?y (funcall do-replace)
-                                t)
-                            ((or ?\ ?n)
-                             (unless replaced-this (cl-incf nbr-skipped))
-                             t)
-                            (?! (unless replaced-this
-                                  (funcall do-replace))
-                                (setq replace-all t)
-                                t)
-                            (?s (cl-callf not splice)
-                                (setq to-insert (funcall 
get-replacement-string))
-                                nil)
-                            ((or ?q ?\C-g)
-                             (setq done t)
-                             t)
-                            (?? (ignore (read-char 
el-search-search-and-replace-help-string))
-                                nil)))))
-            (unless (or done (eobp))
-              (cond
-               ((not (and replaced-this replacement-contains-another-match))
-                (el-search--skip-expression nil t))
-               ((eq skip-matches-in-replacement 'ask)
-                (if (setq skip-matches-in-replacement
-                          (yes-or-no-p "Match in replacement - always skip? "))
-                    (forward-sexp)
+        (progn
+
+          ;; Try to avoid to call time consuming `el-search-hl-other-matches' 
in the loop
+          (el-search-hl-other-matches matcher)
+          (add-hook 'window-scroll-functions #'el-search--after-scroll t t)
+
+          (while (and (not done) (el-search--search-pattern-1 matcher t))
+            (setq opoint (point))
+            (unless replace-all
+              (el-search-hl-sexp))
+            (let* ((region (list (point) (el-search--end-of-sexp)))
+                   (original-text (apply #'buffer-substring-no-properties 
region))
+                   (expr      (read original-text))
+                   (replaced-this nil)
+                   (new-expr  (funcall get-replacement expr))
+                   (get-replacement-string
+                    (lambda () (el-search--format-replacement
+                           new-expr original-text to-input-string splice)))
+                   (to-insert (funcall get-replacement-string))
+                   (replacement-contains-another-match
+                    (with-temp-buffer
+                      (emacs-lisp-mode)
+                      (insert to-insert)
+                      (goto-char 1)
+                      (el-search--skip-expression new-expr)
+                      (condition-case nil
+                          (progn (el-search--ensure-sexp-start)
+                                 (el-search-forward pattern t))
+                        (end-of-buffer nil))))
+                   (do-replace
+                    (lambda ()
+                      (save-excursion
+                        (save-restriction
+                          (widen)
+                          (el-search--replace-hunk (list (point) 
(el-search--end-of-sexp)) to-insert)))
+                      (el-search--ensure-sexp-start) ;skip potentially newly 
added whitespace
+                      (unless replace-all (el-search-hl-sexp (list opoint 
(point))))
+                      (cl-incf nbr-replaced)
+                      (setq replaced-this t))))
+              (if replace-all
+                  (funcall do-replace)
+                (redisplay) ;FIXME: why is this necessary?  Without this, 
read-char-choice recenters!?!
+                (while (not (pcase (if replaced-this
+                                       (read-char-choice "[SPC ! q]  (? for 
help)"
+                                                         '(?\ ?! ?q ?\C-g ?n 
??))
+                                     (read-char-choice
+                                      (concat "Replace this occurrence"
+                                              (if (or (string-match-p "\n" 
to-insert)
+                                                      (< 40 (length 
to-insert)))
+                                                  "" (format " with `%s'" 
to-insert))
+                                              "? "
+                                              (if splice "{splice} " "")
+                                              "[y SPC r ! s q]  (? for help)" )
+                                      '(?y ?n ?r ?\ ?! ?q ?\C-g ?s ??)))
+                              (?r (funcall do-replace)
+                                  nil)
+                              (?y (funcall do-replace)
+                                  t)
+                              ((or ?\ ?n)
+                               (unless replaced-this (cl-incf nbr-skipped))
+                               t)
+                              (?! (unless replaced-this
+                                    (funcall do-replace))
+                                  (setq replace-all t)
+                                  t)
+                              (?s (cl-callf not splice)
+                                  (setq to-insert (funcall 
get-replacement-string))
+                                  nil)
+                              ((or ?q ?\C-g)
+                               (setq done t)
+                               t)
+                              (?? (ignore (read-char 
el-search-search-and-replace-help-string))
+                                  nil)))))
+              (when replacement-contains-another-match
+                (el-search-hl-other-matches matcher))
+              (unless (or done (eobp))
+                (cond
+                 ((not (and replaced-this replacement-contains-another-match))
+                  (el-search--skip-expression nil t))
+                 ((eq skip-matches-in-replacement 'ask)
+                  (if (setq skip-matches-in-replacement
+                            (yes-or-no-p "Match in replacement - always skip? 
"))
+                      (forward-sexp)
+                    (el-search--skip-expression nil t)
+                    (when replace-all
+                      (setq replace-all nil)
+                      (message "Falling back to interactive mode")
+                      (sit-for 3.))))
+                 (skip-matches-in-replacement (forward-sexp))
+                 (t
                   (el-search--skip-expression nil t)
-                  (when replace-all
-                    (setq replace-all nil)
-                    (message "Falling back to interactive mode")
-                    (sit-for 3.))))
-               (skip-matches-in-replacement (forward-sexp))
-               (t
-                (el-search--skip-expression nil t)
-                (message "Replacement contains another match%s"
-                         (if replace-all " - falling back to interactive mode" 
""))
-                (setq replace-all nil)
-                (sit-for 2.)))))))
+                  (message "Replacement contains another match%s"
+                           (if replace-all " - falling back to interactive 
mode" ""))
+                  (setq replace-all nil)
+                  (sit-for 2.))))))))
     (el-search-hl-remove)
     (goto-char opoint)
     (message "Replaced %d matches%s"
@@ -1171,10 +1857,13 @@ Hit any key to proceed."
   (let ((from-input (let ((el-search--initial-mb-contents
                            (or el-search--initial-mb-contents
                                (and (eq last-command 'el-search-pattern)
-                                    (car el-search-history)))))
+                                    (if (equal (read (car 
el-search-pattern-history))
+                                               (read (car 
el-search-query-replace-history)))
+                                        (car el-search-query-replace-history)
+                                      (car el-search-pattern-history))))))
                       (el-search--read-pattern "Query replace pattern: " nil
                                                
'el-search-query-replace-history)))
-        from to)
+        from to read-from read-to)
     (with-temp-buffer
       (emacs-lisp-mode)
       (insert from-input)
@@ -1182,11 +1871,11 @@ Hit any key to proceed."
       (forward-sexp)
       (skip-chars-forward " \t\n")
       ;; FIXME: maybe more sanity tests here...
-      (if (not (looking-at "->"))
+      (if (not (looking-at "->\\|=>\\|>"))
           (setq from from-input
                 to (let ((el-search--initial-mb-contents nil))
                      (el-search--read-pattern "Replace with result of 
evaluation of: " from)))
-        (delete-char 2)
+        (delete-region (point) (match-end 0))
         (goto-char 1)
         (forward-sexp)
         (setq from (buffer-substring 1 (point)))
@@ -1208,8 +1897,14 @@ Hit any key to proceed."
               (indent-region 1 (point-max))
               (buffer-string))
             el-search-query-replace-history))
-    (el-search--pushnew-to-history from 'el-search-history)
-    (list (el-search--wrap-pattern (read from)) (read to) to)))
+    (el-search--pushnew-to-history from 'el-search-pattern-history)
+    (setq read-from (read from))
+    (setq read-to   (read to))
+    (el-search--maybe-warn-about-unquoted-symbol read-from)
+    (when (and (symbolp read-to)
+               (not (el-search--contains-p (el-search--matcher `',read-to) 
read-from)))
+      (el-search--maybe-warn-about-unquoted-symbol read-to))
+    (list read-from read-to to)))
 
 ;;;###autoload
 (defun el-search-query-replace (from-pattern to-expr &optional textual-to)
@@ -1228,11 +1923,12 @@ you can also give an input of the form
 
    FROM-PATTERN -> TO-EXPR
 
-to the first prompt and specify both expressions at once.  This
-format is also used for history entries."
+\(\">\" and \"=>\" are also allowed as a separator) to the first
+prompt and specify both expressions at once.  This format is also
+used for history entries."
   (interactive (el-search-query-replace--read-args))
   (setq this-command 'el-search-query-replace) ;in case we come from isearch
-  (setq el-search-current-pattern from-pattern)
+  (setq el-search--current-pattern from-pattern)
   (barf-if-buffer-read-only)
   (el-search--search-and-replace-pattern from-pattern to-expr nil textual-to))
 
@@ -1244,22 +1940,24 @@ format is also used for history entries."
       (goto-char other-end))
     input))
 
+
+;;;; Invoking from Isearch
+
 ;;;###autoload
 (defun el-search-search-from-isearch ()
-  ;; FIXME: an interesting alternative would be to really integrate it
-  ;; with Isearch, using `isearch-search-fun-function'.
-  ;; Alas, this is not trivial if we want to transfer our optimizations.
+  "Switch to an el-search session from isearch.
+Reuse already given input."
   (interactive)
   (let ((el-search--initial-mb-contents (concat "'" 
(el-search--take-over-from-isearch))))
     ;; use `call-interactively' so we get recorded in 
`extended-command-history'
     (call-interactively #'el-search-pattern)))
 
-;;;###autoload
-(defun el-search-replace-from-isearch ()
-  (interactive)
-  (let ((el-search--initial-mb-contents (concat "'" 
(el-search--take-over-from-isearch t))))
-    (call-interactively #'el-search-query-replace)))
-
+;; Is this useful at all?
+;; ;;;###autoload
+;; (defun el-search-replace-from-isearch ()
+;;   (interactive)
+;;   (let ((el-search--initial-mb-contents (concat "'" 
(el-search--take-over-from-isearch t))))
+;;     (call-interactively #'el-search-query-replace)))
 
 
 (provide 'el-search)
diff --git a/packages/excorporate/NEWS b/packages/excorporate/NEWS
index 4bb3a9c..d7d449d 100644
--- a/packages/excorporate/NEWS
+++ b/packages/excorporate/NEWS
@@ -1,5 +1,11 @@
 GNU Emacs Excorporate NEWS -- history of user-visible changes.
 
+* Excorporate 0.7.6
+
+Released 2016-10-05
+
+** Require some NTLM compatibility fixes via updated dependencies
+
 * Excorporate 0.7.5
 
 Released 2016-06-16
diff --git a/packages/excorporate/excorporate.el 
b/packages/excorporate/excorporate.el
index 9f9f504..071da2b 100644
--- a/packages/excorporate/excorporate.el
+++ b/packages/excorporate/excorporate.el
@@ -5,10 +5,10 @@
 ;; Author: Thomas Fitzsimmons <address@hidden>
 ;; Maintainer: Thomas Fitzsimmons <address@hidden>
 ;; Created: 2014-09-19
-;; Version: 0.7.5
+;; Version: 0.7.6
 ;; Keywords: calendar
 ;; Homepage: https://www.fitzsim.org/blog/
-;; Package-Requires: ((emacs "24.1") (fsm "0.2") (soap-client "3.1.1") 
(url-http-ntlm "2.0.2"))
+;; Package-Requires: ((emacs "24.1") (fsm "0.2") (soap-client "3.1.1") 
(url-http-ntlm "2.0.3"))
 
 ;; This program is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
@@ -99,6 +99,9 @@
 ;; Erik Hetzner <address@hidden> tested on Office 365 and helped debug
 ;; Office 365 support.
 
+;; Fabio Leimgruber <address@hidden> tested NTLM
+;; authentication against a challenging server configuration.
+
 ;;; Code:
 
 ;; Implementation-visible functions and variables.
diff --git a/packages/excorporate/excorporate.texi 
b/packages/excorporate/excorporate.texi
index 99cb9d1..00bd77f 100644
--- a/packages/excorporate/excorporate.texi
+++ b/packages/excorporate/excorporate.texi
@@ -43,10 +43,10 @@ and modified without restriction.
 Excorporate provides Exchange Web Services (EWS) support for Emacs.
 
 If the Exchange server you access is configured to provide EWS
-support, then there's a 76% chance that Excorporate will enable you to
-retrieve your calendar entries from the comfort of Emacs.
+support, then there's an 83% chance that Excorporate will enable you
+to retrieve your calendar entries from the comfort of Emacs.
 
-The 24% failure rate is because accessing -- in particular,
+The 17% failure rate is because accessing -- in particular,
 authenticating against -- an Exchange server can be challenging.
 
 Known to fail are Kerberos/GSSAPI authentication and accessing the
diff --git a/packages/ggtags/README.rst b/packages/ggtags/README.rst
index eda0427..2f5d982 100644
--- a/packages/ggtags/README.rst
+++ b/packages/ggtags/README.rst
@@ -8,9 +8,8 @@ list-packages``) and is also available on `MELPA
 
 The goal is to make working with GNU Global in Emacs as effortlessly
 and intuitively as possible and to integrate tightly with standard
-emacs packages. ``ggtags.el`` is tested in emacs 24.1, 24.2, 24.3,
-24.4 and trunk. Patches, feature requests and bug reports are welcome.
-Thanks.
+emacs packages. ``ggtags.el`` is tested in Emacs 24 and 25. Patches,
+feature requests and bug reports are welcome. Thanks.
 
 Features
 ~~~~~~~~
@@ -30,7 +29,8 @@ Features
 #. Highlight (definition) tag at point.
 #. Abbreviated display of file names.
 #. Support all Global search backends: ``grep``, ``idutils`` etc.
-#. Support `exuberant ctags <http://ctags.sourceforge.net/>`_ backend.
+#. Support `exuberant ctags <http://ctags.sourceforge.net/>`_ and
+   ``pygments`` backend.
 #. Support all Global's output formats: ``grep``, ``ctags-x``,
    ``cscope`` etc.
 #. Support projects on remote hosts (e.g. via ``tramp``).
@@ -114,8 +114,8 @@ directory. The mode line will display the directory name 
next to the
 buffer name. If point is at a valid definition tag, it is underlined.
 
 ``ggtags`` is similar to the standard ``etags`` package. For example
-these keys ``M-.``, ``M-,``, ``M-*`` and ``C-M-.`` should work as
-expected in ``ggtags-mode``.
+these keys ``M-.``, ``M-,`` and ``C-M-.`` should work as expected in
+``ggtags-mode``.
 
 The following search commands are available:
 
@@ -213,10 +213,10 @@ turned on to facilitate locating the right match.
 
 ``RET``
 
-   Found the right match so exit navigation mode. Resumable by ``M-,``
-   (``tags-loop-continue``).
+   Found the right match so exit navigation mode. Resumable by
+   ``M-x tags-loop-continue``.
 
-``M-*``
+``M-,`` (``M-*`` if Emacs < 25)
 
    Abort and go back to the location where the search was started.
 
@@ -227,8 +227,9 @@ Commands are available from the ``Ggtags`` menu in 
``ggtags-mode``.
 
 ggtags-prev-mark
 
-   Move to the previously (older) visited location. Unlike ``M-*``
-   this doesn't delete the location from the tag ring.
+   Move to the previously (older) visited location. Unlike ``M-,``
+   (``M-*`` if Emacs < 25) this doesn't delete the location from the
+   tag ring.
 
 ggtags-next-mark
 
@@ -313,6 +314,17 @@ Integration with other packages
 NEWS
 ~~~~
 
+[2016-10-02 Sun] 0.8.12
++++++++++++++++++++++++
+
+#. Work with Emacs 25.
+#. ``ggtags-navigation-mode`` is more discreet in displaying lighter
+   when ``ggtags-enable-navigation-keys`` is set to nil.
+#. ``ggtags-make-project`` tries harder to find TAG files respecting
+   ``GTAGSDBPATH``.
+#. Fix error "Selecting deleted buffer"
+   (`#89 <https://github.com/leoliu/ggtags/issues/89>`_).
+   
 [2015-12-15 Tue] 0.8.11
 +++++++++++++++++++++++
 
@@ -378,7 +390,7 @@ NEWS
 [2014-04-12 Sat] 0.8.3
 ++++++++++++++++++++++
 
-#. Tweak mode-line ligter in ``ggtags-navigation-mode``.
+#. Tweak mode-line lighter in ``ggtags-navigation-mode``.
 
 [2014-04-05 Sat] 0.8.2
 ++++++++++++++++++++++
diff --git a/packages/ggtags/ggtags.el b/packages/ggtags/ggtags.el
index aefe3af..b3172fb 100644
--- a/packages/ggtags/ggtags.el
+++ b/packages/ggtags/ggtags.el
@@ -1,9 +1,9 @@
 ;;; ggtags.el --- emacs frontend to GNU Global source code tagging system  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2013-2015  Free Software Foundation, Inc.
+;; Copyright (C) 2013-2016  Free Software Foundation, Inc.
 
 ;; Author: Leo Liu <address@hidden>
-;; Version: 0.8.11
+;; Version: 0.8.12
 ;; Keywords: tools, convenience
 ;; Created: 2013-01-29
 ;; URL: https://github.com/leoliu/ggtags
@@ -30,17 +30,21 @@
 ;; Usage:
 ;;
 ;; `ggtags' is similar to the standard `etags' package. These keys
-;; `M-.', `M-,', `M-*' and `C-M-.' should work as expected in
-;; `ggtags-mode'. See the README in https://github.com/leoliu/ggtags
-;; for more details.
+;; `M-.', `M-,' and `C-M-.' should work as expected in `ggtags-mode'.
+;; See the README in https://github.com/leoliu/ggtags for more
+;; details.
 ;;
 ;; All commands are available from the `Ggtags' menu in `ggtags-mode'.
 
-;;; NEWS 0.8.11 (2015-12-15):
+;;; NEWS 0.8.12 (2016-10-02):
 
-;; - `ggtags-highlight-tag-delay' is renamed to `ggtags-highlight-tag'
-;; - Tag highlighting can be disabled by setting
-;;   `ggtags-highlight-tag' to nil.
+;; - Work with Emacs 25
+;; - `ggtags-navigation-mode' is more discreet in displaying lighter
+;;   when `ggtags-enable-navigation-keys' is set to nil
+;; - `ggtags-make-project' tries harder to find TAG files respecting
+;;   `GTAGSDBPATH'
+;; - Fix error "Selecting deleted buffer"
+;;   https://github.com/leoliu/ggtags/issues/89
 ;;
 ;; See full NEWS on https://github.com/leoliu/ggtags#news
 
@@ -91,7 +95,14 @@
   (or (fboundp 'read-only-mode)         ;24.3
       (defalias 'read-only-mode 'toggle-read-only))
   (or (fboundp 'register-read-with-preview) ;24.4
-      (defalias 'register-read-with-preview 'read-char)))
+      (defalias 'register-read-with-preview 'read-char))
+  (or (boundp 'xref--marker-ring)       ;25.1
+      (defvaralias 'xref--marker-ring 'find-tag-marker-ring))
+  (or (fboundp 'xref-push-marker-stack) ;25.1
+      (defun xref-push-marker-stack (&optional m)
+        (ring-insert xref--marker-ring (or m (point-marker)))))
+  (or (fboundp 'xref-pop-marker-stack)
+      (defalias 'xref-pop-marker-stack 'pop-tag-mark)))
 
 (defgroup ggtags nil
   "GNU Global source code tagging system."
@@ -465,32 +476,36 @@ Set to nil to disable tag highlighting."
 
 (defun ggtags-make-project (root)
   (cl-check-type root string)
-  (pcase (nthcdr 5 (file-attributes (expand-file-name "GTAGS" root)))
-    (`(,mtime ,_ ,tag-size . ,_)
-     (let* ((default-directory (file-name-as-directory root))
-            (rtags-size (nth 7 (file-attributes "GRTAGS")))
-            (has-refs
-             (when rtags-size
-               (and (or (> rtags-size (* 32 1024))
-                        (with-demoted-errors "ggtags-make-project: %S"
-                          (not (equal "" (ggtags-process-string "global" 
"-crs")))))
-                    'has-refs)))
-            ;; http://thread.gmane.org/gmane.comp.gnu.global.bugs/1518
-            (has-path-style
-             (and (ggtags-process-succeed-p "global" "--path-style" "shorter" 
"--help")
-                  'has-path-style))
-            ;; http://thread.gmane.org/gmane.comp.gnu.global.bugs/1542
-            (has-color (and (ggtags-process-succeed-p "global" "--color" 
"--help")
-                            'has-color)))
-       (puthash default-directory
-                (ggtags-project--make :root default-directory
-                                      :tag-size tag-size
-                                      :has-refs has-refs
-                                      :has-path-style has-path-style
-                                      :has-color has-color
-                                      :mtime (float-time mtime)
-                                      :timestamp (float-time))
-                ggtags-projects)))))
+  (let* ((default-directory (file-name-as-directory root))
+         ;; NOTE: use of GTAGSDBPATH is not recommended. -- GLOBAL(1)
+         ;; ROOT and DB can be different directories due to GTAGSDBPATH.
+         (dbdir (concat (file-remote-p root)
+                        (ggtags-process-string "global" "-p"))))
+    (pcase (nthcdr 5 (file-attributes (expand-file-name "GTAGS" dbdir)))
+      (`(,mtime ,_ ,tag-size . ,_)
+       (let* ((rtags-size (nth 7 (file-attributes (expand-file-name "GRTAGS" 
dbdir))))
+              (has-refs
+               (when rtags-size
+                 (and (or (> rtags-size (* 32 1024))
+                          (with-demoted-errors "ggtags-make-project: %S"
+                            (not (equal "" (ggtags-process-string "global" 
"-crs")))))
+                      'has-refs)))
+              ;; http://thread.gmane.org/gmane.comp.gnu.global.bugs/1518
+              (has-path-style
+               (and (ggtags-process-succeed-p "global" "--path-style" 
"shorter" "--help")
+                    'has-path-style))
+              ;; http://thread.gmane.org/gmane.comp.gnu.global.bugs/1542
+              (has-color (and (ggtags-process-succeed-p "global" "--color" 
"--help")
+                              'has-color)))
+         (puthash default-directory
+                  (ggtags-project--make :root default-directory
+                                        :tag-size tag-size
+                                        :has-refs has-refs
+                                        :has-path-style has-path-style
+                                        :has-color has-color
+                                        :mtime (float-time mtime)
+                                        :timestamp (float-time))
+                  ggtags-projects))))))
 
 (defun ggtags-project-expired-p (project)
   (or (< (ggtags-project-timestamp project) 0)
@@ -924,7 +939,7 @@ blocking emacs."
 (defun ggtags-global-save-start-marker ()
   (when (markerp ggtags-global-start-marker)
     (setq ggtags-tag-ring-index nil)
-    (ring-insert find-tag-marker-ring ggtags-global-start-marker)
+    (xref-push-marker-stack ggtags-global-start-marker)
     (setq ggtags-global-start-marker t)))
 
 (defun ggtags-global-start (command &optional directory)
@@ -1362,17 +1377,16 @@ Use \\[jump-to-register] to restore the search session."
 (defun ggtags-next-mark (&optional arg)
   "Move to the next (newer) mark in the tag marker ring."
   (interactive)
-  (and (ring-empty-p find-tag-marker-ring) (user-error "Tag ring empty"))
+  (and (ring-empty-p xref--marker-ring) (user-error "Tag ring empty"))
   (setq ggtags-tag-ring-index
         ;; Note `ring-minus1' gets newer item.
         (funcall (if arg #'ring-plus1 #'ring-minus1)
                  (or ggtags-tag-ring-index
-                     (progn
-                       (ring-insert find-tag-marker-ring (point-marker))
-                       0))
-                 (ring-length find-tag-marker-ring)))
-  (let ((m (ring-ref find-tag-marker-ring ggtags-tag-ring-index))
-        (i (- (ring-length find-tag-marker-ring) ggtags-tag-ring-index)))
+                     (progn (xref-push-marker-stack)
+                            0))
+                 (ring-length xref--marker-ring)))
+  (let ((m (ring-ref xref--marker-ring ggtags-tag-ring-index))
+        (i (- (ring-length xref--marker-ring) ggtags-tag-ring-index)))
     (ggtags-echo "%d%s marker%s" i (pcase (mod i 10)
                                      ;; ` required for 24.1 and 24.2
                                      (`1 "st")
@@ -1407,7 +1421,7 @@ commands `next-error' and `previous-error'.
 
 \\{ggtags-view-tag-history-mode-map}"
   (interactive)
-  (and (ring-empty-p find-tag-marker-ring)
+  (and (ring-empty-p xref--marker-ring)
        (user-error "Tag ring empty"))
   (let ((split-window-preferred-function ggtags-split-window-function)
         (inhibit-read-only t))
@@ -1419,8 +1433,8 @@ commands `next-error' and `previous-error'.
     (setq tabulated-list-entries
           ;; Use a function so that revert can work properly.
           (lambda ()
-            (let ((counter (ring-length find-tag-marker-ring))
-                  (elements (or (ring-elements find-tag-marker-ring)
+            (let ((counter (ring-length xref--marker-ring))
+                  (elements (or (ring-elements xref--marker-ring)
                                 (user-error "Tag ring empty")))
                   (action (lambda (_button) (next-error 0)))
                   (get-line (lambda (m)
@@ -1677,11 +1691,18 @@ ggtags: history match invalid, jump to first match 
instead")
             'compilation-message)))
         ;; There are multiple matches so pop up the buffer.
         (and ggtags-navigation-mode (ggtags-global--display-buffer))
-      ;; For the `compilation-auto-jump' in idle timer to run.
-      ;; See also: http://debbugs.gnu.org/13829
-      (sit-for 0)
+      ;; Manually run the `compilation-auto-jump' timer. Hackish but
+      ;; everything else seems unreliable. See:
+      ;;
+      ;; - http://debbugs.gnu.org/13829
+      ;; - http://debbugs.gnu.org/23987
+      ;; - https://github.com/leoliu/ggtags/issues/89
+      ;;
+      (pcase (cl-find 'compilation-auto-jump timer-list :key #'timer--function)
+        (`nil )
+        (timer (timer-event-handler timer)))
       (ggtags-navigation-mode -1)
-      (ggtags-navigation-mode-cleanup buf 0)))))
+      (ggtags-navigation-mode-cleanup buf t)))))
 
 (defvar ggtags-global-mode-font-lock-keywords
   '(("^Global \\(exited 
abnormally\\|interrupt\\|killed\\|terminated\\)\\(?:.*with code 
\\([0-9]+\\)\\)?.*"
@@ -1749,7 +1770,8 @@ ggtags: history match invalid, jump to first match 
instead")
     (define-key map "\M-o" 'ggtags-navigation-visible-mode)
     (define-key map [return] 'ggtags-navigation-mode-done)
     (define-key map "\r" 'ggtags-navigation-mode-done)
-    (define-key map [remap pop-tag-mark] 'ggtags-navigation-mode-abort)
+    (define-key map [remap pop-tag-mark] 'ggtags-navigation-mode-abort) ;Emacs 
24
+    (define-key map [remap xref-pop-marker-stack] 
'ggtags-navigation-mode-abort)
     map))
 
 (defvar ggtags-mode-map-alist
@@ -1804,7 +1826,7 @@ ggtags: history match invalid, jump to first match 
instead")
             (goto-char (match-beginning 0))
           (goto-char orig))))))
 
-(defun ggtags-navigation-mode-cleanup (&optional buf time)
+(defun ggtags-navigation-mode-cleanup (&optional buf kill)
   (let ((buf (or buf ggtags-global-last-buffer)))
     (and (buffer-live-p buf)
          (with-current-buffer buf
@@ -1813,7 +1835,7 @@ ggtags: history match invalid, jump to first match 
instead")
            (when (and (derived-mode-p 'ggtags-global-mode)
                       (get-buffer-window))
              (quit-windows-on (current-buffer)))
-           (and time (run-with-idle-timer time nil #'kill-buffer buf))))))
+           (and kill (kill-buffer buf))))))
 
 (defun ggtags-navigation-mode-done ()
   (interactive)
@@ -1826,13 +1848,13 @@ ggtags: history match invalid, jump to first match 
instead")
   "Abort navigation and return to where the search was started."
   (interactive)
   (ggtags-navigation-mode -1)
-  (ggtags-navigation-mode-cleanup nil 0)
+  (ggtags-navigation-mode-cleanup nil t)
   ;; Run after (ggtags-navigation-mode -1) or
   ;; ggtags-global-start-marker might not have been saved.
   (when (and ggtags-global-start-marker
              (not (markerp ggtags-global-start-marker)))
     (setq ggtags-global-start-marker nil)
-    (pop-tag-mark)))
+    (xref-pop-marker-stack)))
 
 (defun ggtags-navigation-next-file (n)
   (interactive "p")
@@ -1941,7 +1963,12 @@ ggtags: history match invalid, jump to first match 
instead")
   "Ligher for `ggtags-navigation-mode'; set to nil to disable it.")
 
 (define-minor-mode ggtags-navigation-mode nil
-  :lighter ggtags-navigation-mode-lighter
+  ;; If `ggtags-enable-navigation-keys' is set to nil only display the
+  ;; lighter in `ggtags-mode' buffers.
+  ;; See https://github.com/leoliu/ggtags/issues/124
+  :lighter (:eval (and (or ggtags-enable-navigation-keys
+                           ggtags-mode)
+                       ggtags-navigation-mode-lighter))
   :global t
   (if ggtags-navigation-mode
       (progn
@@ -2136,7 +2163,7 @@ When finished invoke CALLBACK in BUFFER with process exit 
status."
     (define-key menu [view-tag]
       '(menu-item "View tag history" ggtags-view-tag-history))
     (define-key menu [pop-mark]
-      '(menu-item "Pop mark" pop-tag-mark
+      '(menu-item "Pop mark" xref-pop-marker-stack
                   :help "Pop to previous mark and destroy it"))
     (define-key menu [next-mark]
       '(menu-item "Next mark" ggtags-next-mark))
@@ -2168,6 +2195,8 @@ When finished invoke CALLBACK in BUFFER with process exit 
status."
       '(menu-item "Show definition" ggtags-show-definition))
     (define-key menu [find-reference]
       '(menu-item "Find reference" ggtags-find-reference))
+    ;; TODO: bind `find-tag-continue' to `M-*' after dropping support
+    ;; for emacs < 25.
     (define-key menu [find-tag-continue]
       '(menu-item "Continue find tag" tags-loop-continue))
     (define-key menu [find-tag]
diff --git a/packages/highlight-escape-sequences/README.md 
b/packages/highlight-escape-sequences/README.md
new file mode 100644
index 0000000..cd91176
--- /dev/null
+++ b/packages/highlight-escape-sequences/README.md
@@ -0,0 +1,15 @@
+Highlight Escape Sequences
+----
+
+![screenie](highlight-escape-sequences.png)
+
+Look inside for instructions.
+
+The theme on the screenshot is
+[espresso](https://github.com/dgutov/espresso-theme), with the
+following addition:
+
+```
+(put 'hes-escape-backslash-face 'face-alias 'font-lock-builtin-face)
+(put 'hes-escape-sequence-face 'face-alias 'font-lock-builtin-face)
+```
diff --git a/packages/highlight-escape-sequences/highlight-escape-sequences.el 
b/packages/highlight-escape-sequences/highlight-escape-sequences.el
new file mode 100644
index 0000000..e829ab3
--- /dev/null
+++ b/packages/highlight-escape-sequences/highlight-escape-sequences.el
@@ -0,0 +1,250 @@
+;;; highlight-escape-sequences.el --- Highlight escape sequences -*- 
lexical-binding: t -*-
+
+;; Copyright (C) 2013, 2015, 2016  Free Software Foundation, Inc.
+
+;; Author:   Dmitry Gutov <address@hidden>
+;;     Pavel Matcula <address@hidden>
+;; URL:      https://github.com/dgutov/highlight-escape-sequences
+;; Keywords: convenience
+;; Version:  0.3
+
+;; This file is part of GNU Emacs.
+
+;; This file is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This file is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This global minor mode highlights escape sequences in strings and
+;; other kinds of literals with `hes-escape-sequence-face' and with
+;; `hes-escape-backslash-face'. They inherit from faces
+;; `font-lock-regexp-grouping-construct' and
+;; `font-lock-regexp-grouping-backslash' by default, respectively.
+
+;; It currently supports `ruby-mode', `emacs-lisp-mode', JS escape
+;; sequences in both popular modes, C escapes is `c-mode', `c++-mode'
+;; and `objc-mode', and Java escapes in `java-mode' and `clojure-mode'.
+
+;; To enable it elsewhere, customize `hes-mode-alist'.
+
+;; Put this in the init file:
+;;
+;; (hes-mode)
+
+;;; Code:
+
+(defgroup hes-mode nil
+  "Highlight escape sequences."
+  :group 'convenience)
+
+(defface hes-escape-backslash-face
+  '((default :inherit font-lock-regexp-grouping-backslash))
+  "Face to highlight an escape backslash.")
+
+(defface hes-escape-sequence-face
+  '((default :inherit font-lock-regexp-grouping-construct))
+  "Face to highlight an escape sequence.")
+
+(defconst hes-common-escape-sequence-re
+  (rx (submatch
+       (and ?\\ (submatch
+                 (or (repeat 1 3 (in "0-7"))
+                     (and ?x (repeat 2 xdigit))
+                     (and ?u (repeat 4 xdigit))
+                     (any "\"\'\\bfnrtv"))))))
+  "Regexp to match the most common escape sequences.
+
+Currently handles:
+- octals (\\0 to \\777),
+- hexadecimals (\\x00 to \\xFF),
+- unicodes (\\u0000 to \\uFFFF),
+- and backslash followed by one of \"\'\\bfnrtv.")
+
+(defconst hes-c/c++/objc-escape-sequence-re
+  (rx (submatch
+       (and ?\\ (submatch
+                 (or (repeat 1 3 (in "0-7"))
+                     (and ?x (1+ xdigit))
+                     (and ?u (repeat 4 xdigit))
+                     (and ?U (repeat 8 xdigit))
+                     (any "\"\'\?\\abfnrtv"))))))
+  "Regexp to match C/C++/ObjC escape sequences.
+
+Currently handles:
+- octals (\\0 to \\777),
+- hexadecimals (\\x0 to \\xF..),
+- unicodes (\\u0000 to \\uFFFF, \\U00000000 to \\UFFFFFFFF),
+- and backslash followed by one of \"\'\?\\abfnrtv.")
+
+(defconst hes-java-escape-sequence-re
+  (rx (submatch
+       (and ?\\ (submatch
+                 (or (repeat 1 3 (in "0-7"))
+                     (and ?u (repeat 4 xdigit))
+                     (any "\"\'\\bfnrt"))))))
+  "Regexp to match Java escape sequences.
+
+Currently handles:
+- octals (\\0 to \\777),
+- unicodes (\\u0000 to \\uFFFF),
+- and backslash followed by one of \"\'\\bfnrt.")
+
+(defconst hes-js-escape-sequence-re
+  (rx (submatch
+       (and ?\\ (submatch
+                 (or (repeat 1 3 (in "0-7"))
+                     (and ?x (repeat 2 xdigit))
+                     (and ?u (repeat 4 xdigit))
+                     ;; (any "\"\'\\bfnrtv")
+                     not-newline))))) ;; deprecated
+  "Regexp to match JavaScript escape sequences.
+
+Currently handles:
+- octals (\\0 to \\777),
+- hexadecimals (\\x00 to \\xFF),
+- unicodes (\\u0000 to \\uFFFF),
+- and backslash followed by anything else.")
+
+(defconst hes-ruby-escape-sequence-re
+  (rx (submatch
+       (and ?\\ (submatch
+                 (or (repeat 1 3 (in "0-7"))
+                     (and ?x (repeat 1 2 xdigit))
+                     (and ?u
+                          (or (repeat 4 xdigit)
+                              (and ?{
+                                   (repeat 1 6 xdigit)
+                                   (0+ (1+ space)
+                                       (repeat 1 6 xdigit))
+                                   ?})))
+                     not-newline)))))
+  "Regexp to match Ruby escape sequences.
+
+Currently handles:
+- octals (\\0 to \\777),
+- hexadecimals (\\x0 to \\xFF),
+- unicodes (\\u0000 to \\uFFFF),
+- unicodes in the \\u{} form,
+- and backslash followed by anything else.
+
+Currently doesn't handle \\C-, \\M-, etc.")
+
+(defconst hes-ruby-escape-sequence-keywords
+  `((,hes-ruby-escape-sequence-re
+     (0 (let* ((state (syntax-ppss))
+               (term (nth 3 state)))
+          (when (or (and (eq term ?')
+                         (member (match-string 2) '("\\" "'")))
+                    (if (fboundp 'ruby-syntax-expansion-allowed-p)
+                        (ruby-syntax-expansion-allowed-p state)
+                      (memq term '(?\" ?/ ?\n ?` t))))
+            ;; TODO: Switch to `add-face-text-property' when we're
+            ;; fine with only supporting Emacs 24.4 and up.
+            (font-lock-prepend-text-property (match-beginning 1) (match-end 1)
+                                             'face 'hes-escape-backslash-face)
+            (font-lock-prepend-text-property (match-beginning 2) (match-end 2)
+                                             'face 'hes-escape-sequence-face)
+            nil))
+        prepend))))
+
+(defconst hes-elisp-escape-sequence-re
+  (rx (submatch
+       (and ?\\ (submatch
+                 (or
+                  (and ?u (repeat 4 xdigit))
+                  (and ?U ?0 ?0 (repeat 6 xdigit))
+                  (and ?x (+ xdigit)) ;; variable number hex digits
+                  (+ (in "0-7"))      ;; variable number octal digits
+                  not-newline)))))
+
+  "Regexp to match Emacs Lisp escape sequences.
+
+Currently handles:
+- unicodes (\\uNNNN and \\U00NNNNNN)
+- hexadecimal (\\x...) and octal (\\0-7), variable number of digits
+- backslash followed by anything else.")
+
+(defun hes-make-simple-escape-sequence-keywords(re)
+  `((,re
+     (1 (when (nth 3 (syntax-ppss))
+          'hes-escape-backslash-face)
+        prepend)
+     (2 (when (nth 3 (syntax-ppss))
+          'hes-escape-sequence-face)
+        prepend))))
+
+(defcustom hes-mode-alist
+  `((c-mode          . ,hes-c/c++/objc-escape-sequence-re)
+    (c++-mode        . ,hes-c/c++/objc-escape-sequence-re)
+    (objc-mode       . ,hes-c/c++/objc-escape-sequence-re)
+    (java-mode       . ,hes-java-escape-sequence-re)
+    (clojure-mode    . ,hes-java-escape-sequence-re)
+    (js-mode         . ,hes-js-escape-sequence-re)
+    (js2-mode        . ,hes-js-escape-sequence-re)
+    (ruby-mode       . ,hes-ruby-escape-sequence-keywords)
+    (emacs-lisp-mode . ,hes-elisp-escape-sequence-re))
+  "Alist of regexps or `font-lock-keywords' elements for major modes."
+  :type '(repeat function)
+  :set (lambda (symbol value)
+         (if (bound-and-true-p hes-mode)
+             (progn
+               (hes-mode -1)
+               (set-default symbol value)
+               (hes-mode 1))
+           (set-default symbol value))))
+
+;;;###autoload
+(defun turn-on-hes-mode()
+  "Turn on highlighting of escape sequences."
+  (interactive)
+  (dolist (mode hes-mode-alist)
+    (if (atom mode)
+        (font-lock-add-keywords
+         mode
+         (hes-make-simple-escape-sequence-keywords 
hes-common-escape-sequence-re)
+         'append)
+      (when (stringp (cdr mode))
+        (font-lock-add-keywords
+         (car mode)
+         (hes-make-simple-escape-sequence-keywords (cdr mode))
+         'append))
+      (when (listp (cdr mode))
+        (font-lock-add-keywords (car mode) (cdr mode) 'append)))))
+
+;;;###autoload
+(defun turn-off-hes-mode()
+  "Turn off highlighting of escape sequences"
+  (interactive)
+  (dolist (mode hes-mode-alist)
+    (if (atom mode)
+        (font-lock-remove-keywords
+         mode
+         (hes-make-simple-escape-sequence-keywords 
hes-common-escape-sequence-re))
+      (when (stringp (cdr mode))
+        (font-lock-remove-keywords
+         (car mode)
+         (hes-make-simple-escape-sequence-keywords (cdr mode))))
+      (when (listp (cdr mode))
+        (font-lock-remove-keywords (car mode) (cdr mode))))))
+
+;;;###autoload
+(define-minor-mode hes-mode
+  "Toggle highlighting of escape sequences."
+  :lighter "" :global t
+  (if hes-mode
+      (turn-on-hes-mode)
+    (turn-off-hes-mode)))
+
+(provide 'highlight-escape-sequences)
+
+;;; highlight-escape-sequences.el ends here
diff --git a/packages/highlight-escape-sequences/highlight-escape-sequences.png 
b/packages/highlight-escape-sequences/highlight-escape-sequences.png
new file mode 100644
index 0000000..6f0f1de
Binary files /dev/null and 
b/packages/highlight-escape-sequences/highlight-escape-sequences.png differ
diff --git a/packages/metar/metar.el b/packages/metar/metar.el
index b6989ea..570e6b1 100644
--- a/packages/metar/metar.el
+++ b/packages/metar/metar.el
@@ -83,7 +83,7 @@
                             (const :tag "Degree Kelvin" degK)
                             (const :tag "Degree Fahrenheit" degF)))))
 
-(defcustom metar-stations-info-url "http://weather.noaa.gov/data/nsd_bbsss.txt";
+(defcustom metar-stations-info-url 
"http://tgftp.nws.noaa.gov/data/nsd_cccc.txt";
   "URL to use for retrieving station meta information."
   :group 'metar
   :type 'string)
@@ -117,23 +117,21 @@ If this variable is nil, the information is retrieved 
from the Internet."
                              (split-string entry ";"))
                            (split-string (buffer-string) "\n")))))
        (setq metar-stations nil)
-       (while data
-         (when (and (nth 7 (car data)) (nth 8 (car data))
-                    (not (string= (nth 2 (car data)) "----")))
+       (dolist (entry data)
+         (when (and (nth 7 entry) (nth 8 entry)
+                    (not (string= (nth 0 entry) "----")))
            (setq metar-stations
                  (append
-                  (let ((item (car data)))
-                    (list
-                     (list (cons 'code (nth 2 item))
-                           (cons 'name (nth 3 item))
-                           (cons 'country (nth 5 item))
-                           (cons 'latitude
-                                 (metar-station-convert-dms-to-deg (nth 7 
item)))
-                           (cons 'longitude
-                                 (metar-station-convert-dms-to-deg (nth 8 
item)))
-                           (cons 'altitude (string-to-number (nth 12 item))))))
-                  metar-stations)))
-         (setq data (cdr data)))
+                  (list
+                    (list (cons 'code (nth 0 entry))
+                          (cons 'name (nth 3 entry))
+                          (cons 'country (nth 5 entry))
+                          (cons 'latitude
+                                (metar-station-convert-dms-to-deg (nth 7 
entry)))
+                          (cons 'longitude
+                                (metar-station-convert-dms-to-deg (nth 8 
entry)))
+                          (cons 'altitude (string-to-number (nth 11 entry)))))
+                  metar-stations))))
        ;; (unless metar-timer
        ;;   (setq metar-timer
        ;;      (run-with-timer 600 nil (lambda () (setq metar-stations nil)))))
@@ -281,7 +279,7 @@ It must have the signature of `math-convert-units', which 
is the default."
                                                  pure))))
 
 (defcustom metar-url
-  "http://weather.noaa.gov/pub/data/observations/metar/stations/%s.TXT";
+  "http://tgftp.nws.noaa.gov/data/observations/metar/stations/%s.TXT";
   "URL used to fetch station specific information.
 %s is replaced with the 4 letter station code."
   :group 'metar
diff --git a/packages/nameless/nameless.el b/packages/nameless/nameless.el
index 3f21756..eede973 100644
--- a/packages/nameless/nameless.el
+++ b/packages/nameless/nameless.el
@@ -5,7 +5,7 @@
 ;; Author: Artur Malabarba <address@hidden>
 ;; URL: https://github.com/Malabarba/nameless
 ;; Keywords: convenience, lisp
-;; Version: 1.0.1
+;; Version: 1.0.2
 ;; Package-Requires: ((emacs "24.4"))
 
 ;; This program is free software; you can redistribute it and/or modify
@@ -229,7 +229,9 @@ configured, or if `nameless-current-name' is nil."
         (user-error "No name for current buffer, see 
`nameless-current-name'")))))
 
 (defun nameless-insert-name-or-self-insert (&optional self-insert)
-  "Insert the name of current package, with a hyphen."
+  "Insert the name of current package, with a hyphen.
+If point is in an argument list, or if we're typing an escaped
+character, insert the current character literally instead."
   (interactive "P")
   (let ((l (point)))
     (call-interactively #'self-insert-command)
diff --git a/packages/parsec/.gitignore b/packages/parsec/.gitignore
new file mode 100644
index 0000000..4206e73
--- /dev/null
+++ b/packages/parsec/.gitignore
@@ -0,0 +1,3 @@
+*.hs
+*.hi
+*.o
diff --git a/packages/parsec/README.org b/packages/parsec/README.org
new file mode 100644
index 0000000..53d08db
--- /dev/null
+++ b/packages/parsec/README.org
@@ -0,0 +1,378 @@
+#+TITLE: parsec.el
+
+A parser combinator library for Emacs Lisp similar to Haskell's Parsec library.
+
+* Overview
+
+This work is based on [[https://github.com/jwiegley/][John Wiegley]]'s 
[[https://github.com/jwiegley/emacs-pl][emacs-pl]]. The original 
[[https://github.com/jwiegley/emacs-pl][emacs-pl]] is awesome,
+but I found following problems when I tried to use it:
+
+- It only contains a very limited set of combinators
+- Some of its functions (combinators) have different behaviors than their
+  Haskell counterparts
+- It can't show error messages when parsing fails
+
+So I decided to make a new library on top of it. This library, however, 
contains
+most of the parser combinators in =Text.Parsec.Combinator=, which should be
+enough in most use cases. Of course more combinators can be added if necessary!
+Most of the parser combinators have the same behavior as their Haskell
+counterparts. =parsec.el= also comes with a simple error handling mechanism so
+that it can display an error message showing how the parser fails.
+
+So we can
+
+- use these parser combinators to write parsers easily from scratch in Emacs
+  Lisp like what we can do in Haskell
+- port existing Haskell program using Parsec to its equivalent Emacs Lisp
+  program easily
+
+* Parsing Functions & Parser Combinators
+
+  We compare the functions and macros defined in this library with their 
Haskell
+  counterparts, assuming you're already familiar with Haskell's Parsec. If you
+  don't have any experience with parser combinators, look at the docstrings of
+  these functions and macros and try them to see the results! They are really
+  easy to learn and use!
+
+  The *Usage* column for each function/combinator in the following tables is
+  much simplified. Check the docstring of the function/combinator to see the
+  full description.
+
+** Basic Parsing Functions
+   These parsing functions are used as the basic building block for a parser. 
By
+   default, their return value is a *string*.
+
+  | parsec.el              | Haskell's Parsec | Usage                          
                       |
+  
|------------------------+------------------+-------------------------------------------------------|
+  | parsec-ch              | char             | parse a character              
                       |
+  | parsec-any-ch          | anyChar          | parse an arbitrary character   
                       |
+  | parsec-satisfy         | satisfy          | parse a character satisfying a 
predicate              |
+  | parsec-newline         | newline          | parse '\n'                     
                       |
+  | parsec-crlf            | crlf             | parse '\r\n'                   
                       |
+  | parsec-eol             | eol              | parse newline or CRLF          
                       |
+  | parsec-eof, parsec-eob | eof              | parse end of file              
                       |
+  | parsec-eol-or-eof      | *N/A*            | parse EOL or EOL               
                       |
+  | parsec-re              | *N/A*            | parse using a regular 
expression                      |
+  | parsec-one-of          | oneOf            | parse one of the characters    
                       |
+  | parsec-none-of         | noneOf           | parse any character other than 
the supplied ones      |
+  | parsec-str             | *N/A*            | parse a string but consume 
input only when successful |
+  | parsec-string          | string           | parse a string and consume 
input for partial matches  |
+  | parsec-num             | *N/A*            | parse a number                 
                       |
+  | parsec-letter          | letter           | parse a letter                 
                       |
+  | parsec-digit           | digit            | parse a digit                  
                       |
+
+  Note:
+  - =parsec-str= and =parsec-string= are different. =parsec-string= behaves the
+    same as =string= in Haskell, and =parsec-str= is more like combining
+    =string= and =try= in Haskell. Personally I found =parsec-str= easier to 
use
+    because =parsec-str= is "atomic", which is similar to =parsec-ch=.
+  - Use the power of regular expressions provided by =parsec-re= and simplify 
the parser!
+
+** Parser Combinators
+   These combinators can be used to combine different parsers.
+
+  | parsec.el                 | Haskell's Parsec | Usage                       
                                 |
+  
|---------------------------+------------------+--------------------------------------------------------------|
+  | parsec-or                 | choice           | try the parsers until one 
succeeds                           |
+  | parsec-try                | try              | try parser and consume no 
input when an error occurs         |
+  | parsec-lookahead          | lookahead        | try parser and consume no 
input when successful              |
+  | parsec-peek               | try && lookahead | try parser without 
comsuming any input                       |
+  | parsec-peek-p             | try && lookahead | same as parsec-peek except 
the return value for failure      |
+  | parsec-with-error-message | <?> (similar)    | use the new error message 
when an error occurs               |
+  | parsec-many               | many             | apply the parser zero or 
more times                          |
+  | parsec-many1              | many1            | apply the parser one or 
more times                           |
+  | parsec-many-till          | manyTill         | apply parser zero or more 
times until end succeeds           |
+  | parsec-until              | *N/A*            | parse until end succeeds    
                                 |
+  | parsec-not-followed-by    | notFollowedBy    | succeed when the parser 
fails                                |
+  | parsec-endby              | endby            | apply parser zero or more 
times, separated and ended by end  |
+  | parsec-sepby              | sepby            | apply parser zero or more 
times, separated by sep            |
+  | parsec-between            | between          | apply parser between open 
and close                          |
+  | parsec-count              | count            | apply parser n times        
                                 |
+  | parsec-option             | option           | apply parser, if it fails, 
return opt                        |
+  | parsec-optional           | *N/A*            | apply parser zero or one 
time and return the result          |
+  | parsec-optional*          | optional         | apply parser zero or one 
time and discard the result         |
+  | parsec-optional-maybe     | optionMaybe      | apply parser zero or one 
time and return the result in Maybe |
+
+  Note:
+  - =parsec-or= can also be used to replace =<|>=.
+  - =parsec-with-error-message= is slightly different from =<?>=. It will
+    replace the error message even when the input is consumed.
+  - By default, =parsec-many-till= behaves as Haskell's =manyTill=. However,
+    =parsec-many-till= and =parsec-until= can accept an optional argument to
+    specify which part(s) to be returned. You can use =:both= or =:end= as the
+    optional argument to change the default behavior. See the docstrings for
+    more information.
+
+** Parser Utilities
+   These utilities can be used together with parser combinators to build a
+   parser and ease the translation process if you're trying to port an existing
+   Haskell program.
+
+  | parsec.el                        | Haskell's Parsec | Usage                
                                   |
+  
|----------------------------------+------------------+---------------------------------------------------------|
+  | parsec-and                       | do block         | try all parsers and 
return the last result              |
+  | parsec-return                    | do block         | try all parsers and 
return the first result             |
+  | parsec-ensure                    | *N/A*            | quit the parsing 
when an error occurs                   |
+  | parsec-ensure-with-error-message | *N/A*            | quit the parsing 
when an error occurs with new message  |
+  | parsec-collect                   | sequence         | try all parsers and 
collect the results into a list     |
+  | parsec-collect*                  | *N/A*            | try all parsers and 
collect non-nil results into a list |
+  | parsec-start                     | parse            | entry point          
                                   |
+  | parsec-parse                     | parse            | entry point (same as 
parsec-start)                      |
+  | parsec-with-input                | parse            | perform parsers on 
input                                |
+  | parsec-from-maybe                | fromMaybe        | retrieve value from 
Maybe                               |
+  | parsec-maybe-p                   | *N/A*            | is a Maybe value or 
not                                 |
+  | parsec-query                     | *N/A*            | change the parser's 
return value                        |
+
+** Variants that Return a String
+
+   By default, the macros/functions that return multiple values will put the
+   values into a list. These macros/functions are:
+   - =parsec-many=
+   - =parsec-many1=
+   - =parsec-many-till=
+   - =parsec-until=
+   - =parsec-count=
+   - =parsec-collect= and =parsec-collect*=
+
+   They all have a variant that returns a string by concatenating the results 
in
+   the list:
+   - =parsec-many-as-string= or =parsec-many-s=
+   - =parsec-many1-as-string= or =parsec-many1-s=
+   - =parsec-many-till-as-string= or =parsec-many-till-s=
+   - =parsec-until-as-string= or =parsec-until-s=
+   - =parsec-collect-as-string= or =parsec-collect-s=
+   - =parsec-count-as-string= or =parsec-count-s=
+
+   The =*-s= and =*-as-string= variants are the same, except the =*-s= variants
+   have a shorter name. Using these =*-s= functions are recommended if you're
+   dealing with strings very frequently in your code. These variants accept the
+   same arguments and have the same behavior as their original counterpart that
+   returns a list. The only difference is the return value.
+* Code Examples
+  Some very simple examples are given here. You can see many code examples in
+  the test files in this GitHub repo.
+
+  The following code extract the "hello" from the comment:
+  #+BEGIN_SRC elisp
+  (parsec-with-input "/* hello */"
+    (parsec-string "/*")
+    (parsec-many-till-as-string (parsec-any-ch)
+                                (parsec-try
+                                 (parsec-string "*/"))))
+  #+END_SRC
+
+  The following Haskell program does a similar thing:
+  #+BEGIN_SRC haskell
+  import           Text.Parsec
+
+  main :: IO ()
+  main = print $ parse p "" "/* hello */"
+    where
+      p = do string "/*"
+             manyTill anyChar (try (string "*/"))
+  #+END_SRC
+
+  The following code returns the "aeiou" before "end":
+  #+BEGIN_SRC elisp
+  (parsec-with-input "if aeiou end"
+    (parsec-str "if ")
+    (parsec-return
+        (parsec-many-as-string (parsec-one-of ?a ?e ?i ?o ?u))
+      (parsec-str " end")))
+  #+END_SRC
+
+* Write a Parser: a Simple CSV Parser
+  You can find the code in =examples/simple-csv-parser.el=. The code is based
+  on the Haskell code in 
[[http://book.realworldhaskell.org/read/using-parsec.html][Using Parsec]].
+
+  An end-of-line should be a string =\n=. We use =(parsec-str "\n")= to parse 
it
+  (Note that since =\n= is also one character, =(parsec-ch ?\n)= also works).
+  Some files may not contain a newline at the end, but we can view end-of-file
+  as the end-of-line for the last line, and use =parsec-eof= (or =parsec-eob=)
+  to parse the end-of-file. We use =parsec-or= to combine these two 
combinators:
+  #+BEGIN_SRC elisp
+  (defun s-csv-eol ()
+    (parsec-or (parsec-str "\n")
+               (parsec-eof)))
+  #+END_SRC
+
+  A CSV file contains many lines and ends with an end-of-file. Use
+  =parsec-return= to return the result of the first parser as the result.
+  #+BEGIN_SRC elisp
+  (defun s-csv-file ()
+    (parsec-return (parsec-many (s-csv-line))
+      (parsec-eof)))
+  #+END_SRC
+
+  A CSV line contains many CSV cells and ends with an end-of-line, and we
+  should return the cells as the results:
+  #+BEGIN_SRC elisp
+  (defun s-csv-line ()
+    (parsec-return (s-csv-cells)
+      (s-csv-eol)))
+  #+END_SRC
+
+  CSV cells is a list, containing the first cell and the remaining cells:
+  #+BEGIN_SRC elisp
+  (defun s-csv-cells ()
+    (cons (s-csv-cell-content) (s-csv-remaining-cells)))
+  #+END_SRC
+
+  A CSV cell consists any character that is not =,= or =\n=, and we use the
+  =parsec-many-as-string= variant to return the whole content as a string
+  instead of a list of single-character strings:
+  #+BEGIN_SRC elisp
+  (defun s-csv-cell-content ()
+    (parsec-many-as-string (parsec-none-of ?, ?\n)))
+  #+END_SRC
+
+  For the remaining cells: if followed by a comma =,=, we try to parse more csv
+  cells. Otherwise, we should return the =nil=:
+  #+BEGIN_SRC elisp
+  (defun s-csv-remaining-cells ()
+    (parsec-or (parsec-and (parsec-ch ?,) (s-csv-cells)) nil))
+  #+END_SRC
+
+  OK. Our parser is almost done. To begin parsing the content in buffer =foo=,
+  you need to wrap the parser inside =parsec-start= (or =parsec-parse=):
+  #+BEGIN_SRC elisp
+  (with-current-buffer "foo"
+    (goto-char (point-min))
+    (parsec-parse
+     (s-csv-file)))
+  #+END_SRC
+
+  If you want to parse a string instead, we provide a simple wrapper macro
+  =parsec-with-input=, and you feed a string as the input and put arbitraty
+  parsers inside the macro body. =parsec-start= or =parsec-parse= is not 
needed.
+  #+BEGIN_SRC elisp
+  (parsec-with-input "a1,b1,c1\na2,b2,c2"
+    (s-csv-file))
+  #+END_SRC
+
+  The above code returns:
+  #+BEGIN_SRC elisp
+  (("a1" "b1" "c1") ("a2" "b2" "c2"))
+  #+END_SRC
+
+  Note that if we replace =parsec-many-as-string= with =parsec-many= in
+  =s-csv-cell-content=:
+  #+BEGIN_SRC elisp
+  (defun s-csv-cell-content ()
+    (parsec-many (parsec-none-of ?, ?\n)))
+  #+END_SRC
+
+  The result would be:
+  #+BEGIN_SRC elisp
+  ((("a" "1") ("b" "1") ("c" "1")) (("a" "2") ("b" "2") ("c" "2")))
+  #+END_SRC
+
+* More Parser Examples
+  I translate some Haskell Parsec examples into Emacs Lisp using =parsec.el=.
+  You can see from these examples that it is very easy to write parsers using
+  =parsec.el=, and if you know haskell, you can see that basically I just
+  translate the Haskell into Emacs Lisp one by one because most of them are 
just
+  the same!
+
+  You can find five examples under the =examples/= directory.
+
+  Three of the examples are taken from the chapter 
[[http://book.realworldhaskell.org/read/using-parsec.html][Using Parsec]] in 
the book of
+  [[http://book.realworldhaskell.org/read/][Real World Haskell]]:
+  - =simple-csv-parser.el=: a simple csv parser with no support for quoted
+    cells, as explained in previous section.
+  - =full-csv-parser.el=: a full csv parser
+  - =url-str-parser.el=: parser parameters in URL
+
+  =pjson.el= is a translation of Haskell's 
[[https://hackage.haskell.org/package/json-0.9.1/docs/src/Text-JSON-Parsec.html][json
 library using Parsec]].
+
+  =scheme.el= is a much simplified Scheme parser based on 
[[https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/][Write 
Yourself a
+  Scheme in 48 Hours]].
+
+  They're really simple but you can see how this library works!
+
+* Change the Return Values using =parsec-query=
+  Parsing has side-effects such as forwarding the current point. In the 
original
+  [[https://github.com/jwiegley/emacs-pl][emacs-pl]], you can specify some 
optional arguments to some parsing functions
+  (=pl-ch=, =pl-re= etc.) to change the return values. In =parsec.el=, these
+  functions don't have such a behavior. Instead, we provide a unified interface
+  =parsec-query=, which accepts any parser, and changes the return value of the
+  parser.
+
+  You can speicify following arguments:
+  #+BEGIN_EXAMPLE
+  :beg      --> return the point before applying the PARSER
+  :end      --> return the point after applying the PARSER
+  :nil      --> return nil
+  :groups N --> return Nth group for `parsec-re'."
+  #+END_EXAMPLE
+
+  So instead of returning "b" as the result, the following code returns 2:
+  #+BEGIN_SRC elisp
+  (parsec-with-input "ab"
+    (parsec-ch ?a)
+    (parsec-query (parsec-ch ?b) :beg))
+  #+END_SRC
+
+  Returning a point means that you can also incorporate =parsec.el= with Emacs
+  Lisp functions that can operate on points/regions, such as =goto-char= and
+  =kill-region=.
+
+  =:group= can be specified when using =parsec-re=:
+  #+BEGIN_SRC elisp
+  (parsec-with-input "ab"
+    (parsec-query (parsec-re "\\(a\\)\\(b\\)") :group 2))
+  #+END_SRC
+
+  The above code will return "b" instead of "ab".
+* Error Messages
+
+  =parsec.el= implements a simple error handling mechanism. When an error
+  happens, it will show how the parser fails.
+
+  For example, the following code fails:
+  #+BEGIN_SRC elisp
+  (parsec-with-input "aac"
+    (parsec-count 2 (parsec-ch ?a))
+    (parsec-ch ?b))
+  #+END_SRC
+
+  The return value is:
+  #+BEGIN_SRC elisp
+  (parsec-error . "Found \"c\" -> Expected \"b\"")
+  #+END_SRC
+
+  This also works when parser combinators fail:
+  #+BEGIN_SRC elisp
+  (parsec-with-input "a"
+    (parsec-or (parsec-ch ?b)
+               (parsec-ch ?c)))
+  #+END_SRC
+
+  The return value is:
+  #+BEGIN_SRC elisp
+  (parsec-error . "None of the parsers succeeds:
+       Found \"a\" -> Expected \"c\"
+       Found \"a\" -> Expected \"b\"")
+  #+END_SRC
+
+  If an error occurs, the return value is a cons cell that contains the error
+  message in its =cdr=. Compared to Haskell's Parsec, it's really simple, but 
at
+  least the error message could tell us some information. Yeah, not perfect but
+  usable.
+
+  To test whether a parser returns an error, use =parsec-error-p=. If it 
returns
+  an error, you can use =parsec-error-str= to retrieve the error message as a
+  string.
+
+  You can decide what to do based on the return value of a parser:
+  #+BEGIN_SRC elisp
+  (let ((res (parsec-with-input "hello"
+               (parsec-str "world"))))
+    (if (parsec-error-p res)
+        (message "Parser failed:\n%s" (parsec-error-str res))
+      (message "Parser succeeded by returning %s" res)))
+  #+END_SRC
+
+* Acknowledgement
+  - Daan Leijen for Haskell's Parsec
+  - [[https://github.com/jwiegley/][John Wiegley]] for 
[[https://github.com/jwiegley/emacs-pl][emacs-pl]]
diff --git a/packages/parsec/examples/.nosearch 
b/packages/parsec/examples/.nosearch
new file mode 100644
index 0000000..e69de29
diff --git a/packages/parsec/examples/full-csv-parser-tests.el 
b/packages/parsec/examples/full-csv-parser-tests.el
new file mode 100644
index 0000000..fdf4c5e
--- /dev/null
+++ b/packages/parsec/examples/full-csv-parser-tests.el
@@ -0,0 +1,51 @@
+;;; full-csv-parser-tests.el --- Tests for full-csv-parser  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords:
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'full-csv-parser)
+
+(ert-deftest test-full-csv ()
+  (should
+   (equal
+    (parse-csv "\"a,1,s\",b,\r\nd,e,f")
+    '(("a,1,s" "b" "")
+      ("d" "e" "f"))))
+  (should
+   (equal
+    (parse-csv "\"e\"\",f")
+    (parsec-error-new-2 "\"" "`EOF'")))
+  (should
+   (equal
+    (parse-csv "\"a,1,\r\n")
+    (parsec-error-new-2 "\"" "`EOF'")))
+  (should
+   (equal
+    (parse-csv "\"a,1,\",b,\r\nd,,f")
+    '(("a,1," "b" "")
+      ("d" "" "f")))))
+
+(provide 'full-csv-parser-tests)
+;;; full-csv-parser-tests.el ends here
diff --git a/packages/parsec/examples/full-csv-parser.el 
b/packages/parsec/examples/full-csv-parser.el
new file mode 100644
index 0000000..156fbd9
--- /dev/null
+++ b/packages/parsec/examples/full-csv-parser.el
@@ -0,0 +1,61 @@
+;;; full-csv-parser.el --- Sample csv parser using parsec.el  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords: extensions
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Ref: http://book.realworldhaskell.org/read/using-parsec.html
+
+;;; Code:
+
+(defun csv-file ()
+  (parsec-start
+   (parsec-return (parsec-endby (csv-line) (csv-eol))
+     (parsec-eob))))
+
+(defun csv-line ()
+  (parsec-sepby (csv-cell) (parsec-ch ?,)))
+
+(defun csv-cell ()
+  (parsec-or (csv-quoted-cell) (parsec-many-as-string
+                                (parsec-none-of ?, ?\r ?\n))))
+
+(defun csv-quoted-cell ()
+  (parsec-and (parsec-ch ?\")
+              (parsec-return (parsec-many-as-string (csv-quoted-char))
+                (parsec-ch ?\"))))
+
+(defun csv-quoted-char ()
+  (parsec-or (parsec-re "[^\"]")
+             (parsec-and (parsec-str "\"\"")
+                         "\"")))
+
+(defun csv-eol ()
+  (parsec-or (parsec-str "\n\r")
+             (parsec-str "\r\n")
+             (parsec-str "\n")
+             (parsec-str "\r")
+             (parsec-eob)))
+
+(defun parse-csv (input)
+  (parsec-with-input input
+    (csv-file)))
+
+(provide 'full-csv-parser)
+;;; full-csv-parser.el ends here
diff --git a/packages/parsec/examples/pjson-tests.el 
b/packages/parsec/examples/pjson-tests.el
new file mode 100644
index 0000000..7c7f6ed
--- /dev/null
+++ b/packages/parsec/examples/pjson-tests.el
@@ -0,0 +1,102 @@
+;;; pjson-tests.el --- Test for parsec json parser   -*- lexical-binding: t; 
-*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords:
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'pjson)
+
+(ert-deftest test-pjson-number ()
+  (should
+   (equal
+    (parsec-with-input "123"
+      (pjson-number))
+    123)))
+
+(ert-deftest test-pjson-boolean ()
+  (should
+   (equal
+    (parsec-with-input "false"
+      (pjson-boolean))
+    nil)))
+
+(ert-deftest test-pjson-null ()
+  (should
+   (equal
+    (parsec-with-input "null"
+      (pjson-null))
+    nil)))
+
+(ert-deftest test-pjson-array ()
+  (should
+   (equal
+    (parsec-with-input "[1,true,1,\"abc\",[1],null)"
+      (pjson-array))
+    (parsec-error-new-2 "]" ")")))
+  (should
+   (equal
+    (parsec-with-input "[1,true,1,\"abc\",[1],null]"
+      (pjson-array))
+    (vector 1 t 1 "abc"
+            (vector 1)
+            nil))))
+(ert-deftest test-pjson-string ()
+  (should
+   (equal
+    (parsec-with-input "\"asdf\""
+      (pjson-string))
+    "asdf")))
+
+(ert-deftest test-pjson-object ()
+  (should
+   (equal
+    (parsec-with-input "{\"a\" :1, \"b\":2, \"c\":[1,true] }"
+      (pjson-object))
+    '(("a" . 1)
+      ("b" . 2)
+      ("c" .
+       [1 t])))))
+
+(ert-deftest test-pjson-jvalue ()
+  (should
+   (equal
+    (parsec-with-input "[false]" (pjson-jvalue))
+    (vector nil))))
+
+(ert-deftest test-pjson-parse ()
+  (should
+   (equal
+    (pjson-parse "{\"a\" :1, \"b\":2, \"c\":[1,{\"d\":null}]}")
+    '(("a" . 1)
+      ("b" . 2)
+      ("c" .
+       [1
+        (("d"))]))))
+  (should
+   (equal
+    (pjson-parse  "{\"a\" :1, \"b\":2, [{ \"c\":[1,true] }]}")
+    (parsec-error-new-2 "\"" "["))))
+
+(provide 'pjson-tests)
+;;; pjson-tests.el ends here
diff --git a/packages/parsec/examples/pjson.el 
b/packages/parsec/examples/pjson.el
new file mode 100644
index 0000000..f34f4d9
--- /dev/null
+++ b/packages/parsec/examples/pjson.el
@@ -0,0 +1,124 @@
+;;; pjson.el --- JSON parser using parsec.el         -*- lexical-binding: t; 
-*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords: extensions
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Ref: 
https://hackage.haskell.org/package/json-0.9.1/docs/src/Text-JSON-Parsec.html
+
+;;; Code:
+
+(defvar pjson-special-chars
+  '((?\" . ?\")
+    (?\\ . ?\\)
+    (?/ . ?/)
+    (?b . ?\b)
+    (?f . ?\f)
+    (?n . ?\n)
+    (?r . ?\r)
+    (?t . ?\t))
+  "Characters which are escaped in JSON, with their elisp counterparts.")
+
+(defsubst pjson-spaces ()
+  (parsec-many-as-string
+   (parsec-re "[[:space:]\r\n]")))
+
+(defmacro pjson-tok (parser)
+  `(parsec-return ,parser
+     (pjson-spaces)))
+
+(defun pjson-value ()
+  (parsec-and
+    (pjson-spaces)
+    (pjson-jvaule)))
+
+(defun pjson-jvalue ()
+  (parsec-or (pjson-null)
+             (pjson-boolean)
+             (pjson-number)
+             (pjson-string)
+             (pjson-array)
+             (pjson-object)))
+
+(defsubst pjson-null ()
+  (parsec-and
+    (pjson-tok (parsec-str "null"))
+    nil))
+
+(defsubst pjson-boolean ()
+  (parsec-or (parsec-and
+               (pjson-tok (parsec-str "true"))
+               t)
+             (parsec-and
+               (pjson-tok (parsec-str "false"))
+               nil)))
+
+(defsubst pjson-array ()
+  (apply #'vector
+         (parsec-between (pjson-tok (parsec-ch ?\[))
+                         (pjson-tok (parsec-ch ?\]))
+                         (parsec-sepby
+                          (pjson-jvalue)
+                          (pjson-tok (parsec-ch ?,))))))
+
+(defun pjson-char ()
+  (parsec-or
+   (parsec-and (parsec-ch ?\\) (pjson-esc))
+   (parsec-none-of ?\" ?\\)))
+
+(defun pjson-esc ()
+  (parsec-or
+   (assoc-default
+    (parsec-satisfy (lambda (x) (assq x pjson-special-chars)))
+    pjson-special-chars)
+   (parsec-and (parsec-ch ?u)
+               (pjson-uni))))
+
+(defun pjson-uni ()
+  (format "%c" (string-to-number
+                (parsec-re "[0-9a-zA-z]\\{4\\}")
+                16)))
+
+(defsubst pjson-string ()
+  (parsec-between (pjson-tok (parsec-ch ?\"))
+                  (pjson-tok (parsec-ch ?\"))
+                  (parsec-many-as-string (pjson-char))))
+
+(defun pjson-field ()
+  (cons (parsec-return (pjson-string)
+          (pjson-tok (parsec-ch ?:)))
+        (pjson-jvalue)))
+
+(defun pjson-object ()
+  (parsec-between (pjson-tok (parsec-ch ?\{))
+                  (pjson-tok (parsec-ch ?\}))
+                  (parsec-sepby
+                   (pjson-field)
+                   (pjson-tok (parsec-ch ?,)))))
+
+(defun pjson-number ()
+  (pjson-tok (string-to-number
+              (parsec-re 
"\\+?\\([0-9]+\\)\\(\\.[0-9]+\\)?\\([Ee][+-]?[0-9]+\\)?"))))
+
+(defun pjson-parse (input)
+  (parsec-with-input input
+    (pjson-object)))
+
+(provide 'pjson)
+;;; pjson.el ends here
diff --git a/packages/parsec/examples/scheme-tests.el 
b/packages/parsec/examples/scheme-tests.el
new file mode 100644
index 0000000..9b30ff2
--- /dev/null
+++ b/packages/parsec/examples/scheme-tests.el
@@ -0,0 +1,88 @@
+;;; scheme-tests.el --- Tests for scheme parser      -*- lexical-binding: t; 
-*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords:
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'scheme)
+
+(ert-deftest test-scheme-number ()
+  (should
+   (equal (scheme-read "25")
+          (scheme-number 25))))
+
+(ert-deftest test-scheme-string ()
+  (should
+   (equal
+    (scheme-read "\"This is a string\"")
+    "This is a string")))
+
+(ert-deftest test-scheme-list ()
+  (should
+   (equal
+    (scheme-read "(symbol)")
+    '(List
+      (Atom . "symbol"))))
+  (should
+   (equal
+    (scheme-read "(a test)")
+    '(List
+      (Atom . "a")
+      (Atom . "test")))))
+
+(ert-deftest test-scheme-dotted-list ()
+  (should
+   (equal
+    (scheme-read "(a . test)")
+    '(DottedList
+      ((Atom . "a"))
+      Atom . "test"))))
+
+(ert-deftest test-scheme-nested ()
+  (should
+   (equal
+    (scheme-read "(a (nested) test)")
+    '(List
+      (Atom . "a")
+      (List
+       (Atom . "nested"))
+      (Atom . "test")))))
+
+(ert-deftest test-scheme-quoted ()
+  (should
+   (equal
+    (scheme-read "(a '(quoted (dotted . list)) test)")
+    '(List
+      (Atom . "a")
+      (List
+       (Atom . "quote")
+       (List
+        (Atom . "quoted")
+        (DottedList
+         ((Atom . "dotted"))
+         Atom . "list")))
+      (Atom . "test")))))
+
+(provide 'scheme-tests)
+;;; scheme-tests.el ends here
diff --git a/packages/parsec/examples/scheme.el 
b/packages/parsec/examples/scheme.el
new file mode 100644
index 0000000..7d33953
--- /dev/null
+++ b/packages/parsec/examples/scheme.el
@@ -0,0 +1,108 @@
+;;; scheme.el --- Scheme parser using parsec.el      -*- lexical-binding: t; 
-*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords: extensions
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Ref: https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/
+
+;;; Code:
+
+(defsubst scheme-bool (value)
+  (cons 'Bool value))
+
+(defsubst scheme-true ()
+  (scheme-bool 'True))
+
+(defsubst scheme-false ()
+  (scheme-bool 'False))
+
+(defsubst scheme-atom (atom)
+  (cons 'Atom atom))
+
+(defsubst scheme-number (number)
+  (cons 'Number number))
+
+(defsubst scheme-list (&rest values)
+  (cons 'List values))
+
+(defsubst scheme-dotted-list (head tail)
+  (cons 'DottedList (cons head tail)))
+
+(defsubst scheme-symbol ()
+  (parsec-re "[$!#%&|*+/:<=>address@hidden"))
+
+(defsubst scheme-spaces ()
+  (parsec-many (parsec-ch ? )))
+
+(defun scheme-parse-string ()
+  (parsec-and (parsec-ch ?\")
+              (parsec-return (parsec-many-as-string (parsec-none-of ?\"))
+                (parsec-ch ?\"))))
+
+(defun scheme-parse-atom ()
+  (let (first rest atom)
+    (parsec-and (setq first (parsec-or (parsec-letter) (scheme-symbol)))
+                (setq rest (parsec-many (parsec-or (parsec-letter)
+                                                   (parsec-digit)
+                                                   (scheme-symbol)))))
+    (setq atom (parsec-list-to-string (cons first rest)))
+    (cond
+     ((string= atom "#t") (scheme-true))
+     ((string= atom "#f") (scheme-false))
+     (t (scheme-atom atom)))))
+
+(defun scheme-parse-number ()
+  (scheme-number
+   (string-to-number (parsec-many1-as-string (parsec-digit)))))
+
+(defun scheme-parse-list ()
+  (apply #'scheme-list (parsec-sepby (scheme-parse-expr) (scheme-spaces))))
+
+(defun scheme-parse-dotted-list ()
+  (scheme-dotted-list (parsec-endby (scheme-parse-expr) (scheme-spaces))
+                      (parsec-and
+                        (parsec-ch ?.)
+                        (scheme-spaces)
+                        (scheme-parse-expr))))
+
+(defun scheme-parse-quoted ()
+  (parsec-and
+    (parsec-ch ?\')
+    (scheme-list (scheme-atom "quote") (scheme-parse-expr))))
+
+(defun scheme-parse-expr ()
+  (parsec-or (scheme-parse-atom)
+             (scheme-parse-string)
+             (scheme-parse-number)
+             (scheme-parse-quoted)
+             (parsec-between
+              (parsec-ch ?\()
+              (parsec-ch ?\))
+              (parsec-or
+               (parsec-try
+                (scheme-parse-list))
+               (scheme-parse-dotted-list)))))
+
+(defun scheme-read (expr)
+  (parsec-with-input expr
+    (scheme-parse-expr)))
+
+(provide 'scheme)
+;;; scheme.el ends here
diff --git a/packages/parsec/examples/simple-csv-parser-tests.el 
b/packages/parsec/examples/simple-csv-parser-tests.el
new file mode 100644
index 0000000..9ae5063
--- /dev/null
+++ b/packages/parsec/examples/simple-csv-parser-tests.el
@@ -0,0 +1,39 @@
+;;; simple-csv-parser-tests.el --- Tests for simple csv parser  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords:
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'simple-csv-parser)
+
+(ert-deftest test-simple-csv ()
+  (should
+   (equal
+    (s-parse-csv "a1s,b,d,e,f\na,,c,d,\n")
+    '(("a1s" "b" "d" "e" "f")
+      ("a" "" "c" "d" "")))))
+
+
+(provide 'simple-csv-parser-tests)
+;;; simple-csv-parser-tests.el ends here
diff --git a/packages/parsec/examples/simple-csv-parser.el 
b/packages/parsec/examples/simple-csv-parser.el
new file mode 100644
index 0000000..af9d286
--- /dev/null
+++ b/packages/parsec/examples/simple-csv-parser.el
@@ -0,0 +1,55 @@
+;;; simple-csv-parser.el --- Simple CSV parser using parsec.el  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords: extensions
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Ref: http://book.realworldhaskell.org/read/using-parsec.html
+
+;;; Code:
+
+(require 'parsec)
+
+(defun s-csv-file ()
+  (parsec-return (parsec-many (s-csv-line))
+    (parsec-eof)))
+
+(defun s-csv-line ()
+  (parsec-return (s-csv-cells)
+    (s-csv-eol)))
+
+(defun s-csv-eol ()
+  (parsec-or (parsec-str "\n")
+             (parsec-eof)))
+
+(defun s-csv-cells ()
+  (cons (s-csv-cell-content) (s-csv-remaining-cells)))
+
+(defun s-csv-cell-content ()
+  (parsec-many-as-string (parsec-none-of ?, ?\n)))
+
+(defun s-csv-remaining-cells ()
+  (parsec-or (parsec-and (parsec-ch ?,) (s-csv-cells)) nil))
+
+(defun s-parse-csv (input)
+  (parsec-with-input input
+    (s-csv-file)))
+
+(provide 'simple-csv-parser)
+;;; simple-csv-parser.el ends here
diff --git a/packages/parsec/examples/url-str-parser-tests.el 
b/packages/parsec/examples/url-str-parser-tests.el
new file mode 100644
index 0000000..2444c8c
--- /dev/null
+++ b/packages/parsec/examples/url-str-parser-tests.el
@@ -0,0 +1,48 @@
+;;; url-str-parser-tests.el --- Tests for url-str-parser  -*- lexical-binding: 
t; -*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords:
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'url-str-parser)
+
+(ert-deftest test-url-str ()
+  (should
+   (equal
+    (url-str-parse "foo=bar&a%21=b+c")
+    '(("foo" Just . "bar")
+      ("a!" Just . "b c"))))
+  (should
+   (equal
+    (url-str-parse "foo=&a%21=b+c")
+    '(("foo" Just . "")
+      ("a!" Just . "b c"))))
+  (should
+   (equal
+    (url-str-parse "foo&a%21=b+c")
+    '(("foo" . Nothing)
+      ("a!" Just . "b c")))))
+
+(provide 'url-str-parser-tests)
+;;; url-str-parser-tests.el ends here
diff --git a/packages/parsec/examples/url-str-parser.el 
b/packages/parsec/examples/url-str-parser.el
new file mode 100644
index 0000000..9c39c3f
--- /dev/null
+++ b/packages/parsec/examples/url-str-parser.el
@@ -0,0 +1,56 @@
+;;; url-str-parser.el --- URL-encoded query string parser using parsec.el  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords: extensions
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Ref: http://book.realworldhaskell.org/read/using-parsec.html
+
+;;; Code:
+
+
+(defun url-str-query ()
+  (parsec-sepby (url-str-pair) (parsec-ch ?&)))
+
+(defun url-str-pair ()
+  (cons
+   (parsec-many1-as-string (url-str-char))
+   (parsec-optional-maybe
+    (parsec-and (parsec-ch ?=) (parsec-many-as-string (url-str-char))))))
+
+(defun url-str-char ()
+  (parsec-or (parsec-re "[a-zA-z0-9$_.!*'(),-]")
+             (parsec-and (parsec-ch ?+) " ")
+             (url-str-hex)))
+
+(defun url-str-hex ()
+  (parsec-and
+   (parsec-ch ?%)
+   (format "%c"
+           (string-to-number (format "%s%s"
+                                     (parsec-re "[0-9a-zA-z]")
+                                     (parsec-re "[0-9a-zA-z]"))
+                             16))))
+
+(defun url-str-parse (input)
+  (parsec-with-input input
+    (url-str-query)))
+
+(provide 'url-str-parser)
+;;; url-str-parser.el ends here
diff --git a/packages/parsec/parsec-tests.el b/packages/parsec/parsec-tests.el
new file mode 100644
index 0000000..359fcb7
--- /dev/null
+++ b/packages/parsec/parsec-tests.el
@@ -0,0 +1,481 @@
+;;; parsec-tests.el --- Tests for parsec.el          -*- lexical-binding: t; 
-*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords:
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'parsec)
+
+(ert-deftest test-parsec-ch ()
+  (should
+   (equal
+    (parsec-with-input "ab"
+      (parsec-ch ?a)
+      (parsec-ch ?b))
+    "b"))
+  (should
+   (equal
+    (parsec-with-input "ab"
+      (parsec-query (parsec-ch ?a) :beg))
+    1)))
+
+(ert-deftest test-parsec-satisfy ()
+  (should
+   (equal
+    (parsec-with-input "ab"
+      (parsec-ch ?a)
+      (parsec-satisfy (lambda (c) (char-equal c ?b))))
+    "b"))
+  (should
+   (equal
+    (parsec-with-input "ab"
+      (parsec-ch ?a)
+      (parsec-query (parsec-satisfy (lambda (c) (char-equal c ?b))) :end))
+    3)))
+
+(ert-deftest test-parsec-eol ()
+  (should
+   (equal
+    (parsec-with-input "\na"
+      (parsec-newline)
+      (parsec-ch ?a))
+    "a"))
+  (should
+   (equal
+    (parsec-with-input "\r\na"
+      (parsec-crlf)
+      (parsec-ch ?a))
+    "a"))
+  (should
+   (equal
+    (parsec-with-input "\r\na"
+      (parsec-eol)
+      (parsec-ch ?a))
+    "a"))
+  (should
+   (equal
+    (parsec-with-input "\na"
+      (parsec-eol)
+      (parsec-ch ?a))
+    "a"))
+  (should
+   (equal
+    (parsec-with-input "\ra"
+      (parsec-eol)
+      (parsech-ch ?a))
+    (parsec-error-new-2 "\n" "a"))))
+
+(ert-deftest test-parsec-eof ()
+  (should
+   (equal
+    (parsec-with-input "\r\na"
+      (parsec-eol)
+      (parsec-ch ?a)
+      (parsec-eof))
+    nil)))
+
+(ert-deftest test-parsec-re ()
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-query
+       (parsec-re "\\(a\\)\\(bc\\)")
+       :group 2))
+    "bc")))
+
+(ert-deftest test-parsec-make-alternatives ()
+  (should
+   (equal
+    (parsec-make-alternatives '(?-))
+    "-"))
+  (should
+   (equal
+    (parsec-make-alternatives '(?- ?\] ?a ?^))
+    "]a^-"))
+  (should
+   (equal
+    (parsec-make-alternatives '(?- ?^))
+    "-^"))
+  (should
+   (equal
+    (parsec-make-alternatives '(?^ ?\"))
+    "\"^")))
+
+(ert-deftest test-parsec-one-of ()
+  (should
+   (equal
+    (parsec-with-input "^]-"
+      (parsec-many-as-string (parsec-one-of ?^ ?\] ?-)))
+    "^]-"))
+  (should
+   (equal
+    (parsec-with-input "^-"
+      (parsec-many-as-string (parsec-one-of ?^ ?-)))
+    "^-")))
+
+(ert-deftest test-parsec-none-of ()
+  (should
+   (equal
+    (parsec-with-input "-[]"
+      (parsec-none-of ?\] ?^)
+      (parsec-one-of ?\[ ?\])
+      (parsec-none-of ?- ?^))
+    "]")))
+
+(ert-deftest test-parsec-str ()
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-str "abc"))
+    "abc"))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-or (parsec-str "ac")
+                 (parsec-ch ?a)))
+    "a")))
+
+(ert-deftest test-parsec-string ()
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-string "abc"))
+    "abc"))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-or (parsec-string "ac")
+                 (parsec-ch ?a)))
+    (parsec-error-new-2 "c" "b")))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-or (parsec-try (parsec-string "ac"))
+                 (parsec-ch ?a)))
+    "a")))
+
+(ert-deftest test-parsec-or ()
+  (should
+   (equal
+    (parsec-with-input "1"
+      (parsec-or (parsec-letter)
+                 (parsec-digit)))
+    "1"))
+  (should
+   (equal
+    (parsec-with-input "124"
+      (parsec-or (parsec-string "13")
+                 (parsec-ch ?1)))
+    (parsec-error-new-2 "3" "2")))
+  (should
+   (equal
+    (parsec-with-input "124"
+      (parsec-or (parsec-str "13")
+                 (parsec-ch ?1)))
+    "1")))
+
+(ert-deftest test-parsec-collect-optional ()
+  (should
+   (equal
+    (parsec-with-input "abc-def"
+      (parsec-collect-as-string
+       (parsec-and
+         (parsec-ch ?a)
+         (parsec-str "bc"))
+       (parsec-optional (parsec-ch ?-))
+       (parsec-and
+         (parsec-return (parsec-str "de")
+           (parsec-ch ?f)))))
+    "bc-de"))
+  (should
+   (equal
+    (parsec-with-input "abcdef"
+      (parsec-collect-as-string
+       (parsec-and
+         (parsec-ch ?a)
+         (parsec-str "bc"))
+       (parsec-optional (parsec-ch ?-))
+       (parsec-and
+         (parsec-return (parsec-str "de")
+           (parsec-ch ?f)))))
+    "bcde")))
+
+(ert-deftest test-parsec-try ()
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-or (parsec-try (parsec-string "abd"))
+                 (parsec-str "abc")))
+    "abc")))
+
+(ert-deftest test-parsec-lookahead ()
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-lookahead (parsec-str "abc"))
+      (point))
+    (point-min)))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-start
+       (parsec-lookahead
+        (parsec-and
+          (parsec-ch ?a)
+          (parsec-ch ?c))))
+      (point))
+    (1+ (point-min))))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-start
+       (parsec-try
+        (parsec-lookahead
+         (parsec-and
+           (parsec-ch ?a)
+           (parsec-ch ?c)))))
+      (point))
+    (point-min))))
+
+(ert-deftest test-parsec-error-handles ()
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-with-error-message "foo"
+        (parsec-str "abd")))
+    (parsec-error-new "foo")))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-with-error-message "foo"
+        (parsec-str "abc")))
+    "abc"))
+  (should
+   (equal
+    (condition-case err
+        (parsec-with-input "abc"
+          (parsec-ensure-with-error-message "foo"
+            (parsec-str "abd")))
+      (error (cdr err)))
+    '("foo")))
+  (should
+   (equal
+    (condition-case err
+        (parsec-with-input "abc"
+          (parsec-ensure-with-error-message "foo"
+            (parsec-str "abc")))
+      (error (cdr err)))
+    "abc")))
+
+(ert-deftest test-parsec-many ()
+  (should
+   (equal
+    (parsec-with-input "aaaaab"
+      (parsec-collect-as-string
+       (parsec-many-as-string (parsec-ch ?a))
+       (parsec-many-as-string (parsec-ch ?c))
+       (parsec-many1-as-string (parsec-ch ?b))))
+    "aaaaab"))
+  (should
+   (equal
+    (parsec-with-input "aaaaab"
+      (parsec-collect-as-string
+       (parsec-many-as-string (parsec-ch ?a))
+       (parsec-many-as-string (parsec-ch ?c))
+       (parsec-many1-as-string (parsec-ch ?b))
+       (parsec-many1-as-string (parsec-ch ?c))))
+    (parsec-error-new-2 "c" "`EOF'")))
+  (should
+   (equal
+    (parsec-with-input "abababaa"
+      (parsec-many1-as-string (parsec-string "ab")))
+    (parsec-error-new-2 "b" "a")))
+  (should
+   (equal
+    (parsec-with-input "abababaa"
+      (parsec-many1-as-string (parsec-try (parsec-string "ab")))
+      (parsec-str "aa"))
+    "aa"))
+  (should
+   (equal
+    (parsec-with-input "abababaa"
+      (parsec-many1-as-string (parsec-str "ab"))
+      (parsec-str "aa"))
+    "aa")))
+
+
+(ert-deftest test-parsec-till ()
+  (should
+   (equal
+    (parsec-with-input "abcd"
+      (parsec-many-till-as-string (parsec-any-ch) (parsec-ch ?d)))
+    "abc"))
+  (should
+   (equal
+    (parsec-with-input "abcd"
+      (parsec-many-till-as-string (parsec-any-ch) (parsec-ch ?d) :both))
+    '("abc" . "d")))
+  (should
+   (equal
+    (parsec-with-input "abcd"
+      (parsec-many-till-as-string (parsec-any-ch) (parsec-ch ?d) :end))
+    "d"))
+  (should
+   (equal
+    (parsec-with-input "abcd"
+      (parsec-with-error-message "eof"
+        (parsec-many-till-as-string (parsec-any-ch) (parsec-ch ?e))))
+    (parsec-error-new "eof")))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-until-as-string (parsec-ch ?c)))
+    "ab"))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-until-as-string (parsec-ch ?c) :end))
+    "c"))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-query (parsec-until-as-string (parsec-ch ?c)) :beg))
+    1)))
+
+(ert-deftest test-parsec-not-followed-by ()
+  (should
+   (equal
+    (parsec-with-input "abd"
+      (parsec-collect*
+       (parsec-str "ab")
+       (parsec-not-followed-by (parsec-ch ?c))
+       (parsec-ch ?d)))
+    '("ab" "d")))
+  (should
+   (equal
+    (parsec-with-input "abd"
+      (parsec-collect*
+       (parsec-str "ab")
+       (parsec-or (parsec-not-followed-by (parsec-ch ?d))
+                  (parsec-not-followed-by (parsec-ch ?c)))
+       (parsec-ch ?d)))
+    '("ab" "d"))))
+
+(ert-deftest test-parsec-endby ()
+  (should
+   (equal
+    (parsec-with-input "abc\ndef"
+      (parsec-endby (parsec-many-as-string (parsec-letter))
+                    (parsec-eol-or-eof)))
+    '("abc" "def"))))
+
+(ert-deftest test-parsec-sepby ()
+  (should
+   (equal
+    (parsec-with-input "ab,cd,ef"
+      (parsec-sepby (parsec-many-as-string (parsec-re "[^,]"))
+                    (parsec-ch ?,)))
+    '("ab" "cd" "ef"))))
+
+(ert-deftest test-parsec-between ()
+  (should
+   (equal
+    (parsec-with-input "{abc}"
+      (parsec-between
+       (parsec-ch ?\{) (parsec-ch ?\})
+       (parsec-or
+        (parsec-str "ac")
+        (parsec-many-as-string (parsec-letter)))))
+    "abc"))
+  (should
+   (equal
+    (parsec-with-input "{abc}"
+      (parsec-between
+       (parsec-ch ?\{) (parsec-ch ?\})
+       (parsec-or
+        (parsec-string "ac")
+        (parsec-many-as-string (parsec-letter)))))
+    (parsec-error-new-2 "c" "b"))))
+
+(ert-deftest test-parsec-count ()
+  (should
+   (equal
+    (parsec-with-input "aaaab"
+      (parsec-return (parsec-count-as-string 3 (parsec-ch ?a))
+        (parsec-many1 (parsec-one-of ?a ?b))))
+    "aaa")))
+
+(ert-deftest test-parsec-option ()
+  (should
+   (equal
+    (parsec-with-input "ab"
+      (parsec-option "opt" (parsec-string "ac")))
+    (parsec-error-new-2 "c" "b")))
+  (should
+   (equal
+    (parsec-with-input "ab"
+      (parsec-option "opt" (parsec-str "ac")))
+    "opt"))
+  (should
+   (equal
+    (parsec-with-input "ab"
+      (parsec-option "opt" (parsec-string "ab")))
+    "ab")))
+
+(ert-deftest test-parsec-optional ()
+  (should
+   (equal
+    (parsec-with-input "abcdef"
+      (parsec-collect-as-string
+       (parsec-str "abc")
+       (parsec-optional (parsec-ch ?-))
+       (parsec-str "def")))
+    "abcdef"))
+  (should
+   (equal
+    (parsec-with-input "abc-def"
+      (parsec-collect-as-string
+       (parsec-str "abc")
+       (parsec-optional (parsec-ch ?-))
+       (parsec-str "def")))
+    "abc-def"))
+  (should
+   (equal
+    (parsec-with-input "abcdef"
+      (parsec-collect-as-string
+       (parsec-str "abc")
+       (parsec-from-maybe (parsec-optional-maybe (parsec-ch ?-)))
+       (parsec-str "def")))
+    "abcdef"))
+  (should
+   (equal
+    (parsec-with-input "abc-def"
+      (parsec-collect-as-string
+       (parsec-str "abc")
+       (parsec-from-maybe (parsec-optional-maybe (parsec-ch ?-)))
+       (parsec-str "def")))
+    "abc-def")))
+
+(provide 'parsec-tests)
+;;; parsec-tests.el ends here
diff --git a/packages/parsec/parsec.el b/packages/parsec/parsec.el
new file mode 100644
index 0000000..3432e3d
--- /dev/null
+++ b/packages/parsec/parsec.el
@@ -0,0 +1,1042 @@
+;;; parsec.el --- Parser combinator library  -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Maintainer: Junpeng Qiu <address@hidden>
+;; URL: https://github.com/cute-jumper/parsec.el
+;; Version: 0.1.3
+;; Package-Requires: ((emacs "24") (cl-lib "0.5"))
+;; Keywords: extensions
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;                              _____________
+
+;;                                PARSEC.EL
+
+;;                               Junpeng Qiu
+;;                              _____________
+
+
+;; Table of Contents
+;; _________________
+
+;; 1 Overview
+;; 2 Parsing Functions & Parser Combinators
+;; .. 2.1 Basic Parsing Functions
+;; .. 2.2 Parser Combinators
+;; .. 2.3 Parser Utilities
+;; .. 2.4 Variants that Return a String
+;; 3 Code Examples
+;; 4 Write a Parser: a Simple CSV Parser
+;; 5 More Parser Examples
+;; 6 Change the Return Values using `parsec-query'
+;; 7 Error Messages
+;; 8 Acknowledgement
+
+
+;; A parser combinator library for Emacs Lisp similar to Haskell's Parsec
+;; library.
+
+
+;; 1 Overview
+;; ==========
+
+;;   This work is based on [John Wiegley]'s [emacs-pl]. The original
+;;   [emacs-pl] is awesome, but I found following problems when I tried to
+;;   use it:
+
+;;   - It only contains a very limited set of combinators
+;;   - Some of its functions (combinators) have different behaviors than
+;;     their Haskell counterparts
+;;   - It can't show error messages when parsing fails
+
+;;   So I decided to make a new library on top of it. This library,
+;;   however, contains most of the parser combinators in
+;;   `Text.Parsec.Combinator', which should be enough in most use cases. Of
+;;   course more combinators can be added if necessary! Most of the parser
+;;   combinators have the same behavior as their Haskell counterparts.
+;;   `parsec.el' also comes with a simple error handling mechanism so that
+;;   it can display an error message showing how the parser fails.
+
+;;   So we can
+
+;;   - use these parser combinators to write parsers easily from scratch in
+;;     Emacs Lisp like what we can do in Haskell
+;;   - port existing Haskell program using Parsec to its equivalent Emacs
+;;     Lisp program easily
+
+
+;; [John Wiegley] https://github.com/jwiegley/
+
+;; [emacs-pl] https://github.com/jwiegley/emacs-pl
+
+
+;; 2 Parsing Functions & Parser Combinators
+;; ========================================
+
+;;   We compare the functions and macros defined in this library with their
+;;   Haskell counterparts, assuming you're already familiar with Haskell's
+;;   Parsec. If you don't have any experience with parser combinators, look
+;;   at the docstrings of these functions and macros and try them to see
+;;   the results! They are really easy to learn and use!
+
+;;   The *Usage* column for each function/combinator in the following
+;;   tables is much simplified. Check the docstring of the
+;;   function/combinator to see the full description.
+
+
+;; 2.1 Basic Parsing Functions
+;; ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+;;   These parsing functions are used as the basic building block for a
+;;   parser. By default, their return value is a *string*.
+
+;;    parsec.el               Haskell's Parsec  Usage
+;;   
-------------------------------------------------------------------------------------------------
+;;    parsec-ch               char              parse a character
+;;    parsec-any-ch           anyChar           parse an arbitrary character
+;;    parsec-satisfy          satisfy           parse a character satisfying a 
predicate
+;;    parsec-newline          newline           parse '\n'
+;;    parsec-crlf             crlf              parse '\r\n'
+;;    parsec-eol              eol               parse newline or CRLF
+;;    parsec-eof, parsec-eob  eof               parse end of file
+;;    parsec-eol-or-eof       *N/A*             parse EOL or EOL
+;;    parsec-re               *N/A*             parse using a regular 
expression
+;;    parsec-one-of           oneOf             parse one of the characters
+;;    parsec-none-of          noneOf            parse any character other than 
the supplied ones
+;;    parsec-str              *N/A*             parse a string but consume 
input only when successful
+;;    parsec-string           string            parse a string and consume 
input for partial matches
+;;    parsec-num              *N/A*             parse a number
+;;    parsec-letter           letter            parse a letter
+;;    parsec-digit            digit             parse a digit
+
+;;   Note:
+;;   - `parsec-str' and `parsec-string' are different. `parsec-string'
+;;     behaves the same as `string' in Haskell, and `parsec-str' is more
+;;     like combining `string' and `try' in Haskell. Personally I found
+;;     `parsec-str' easier to use because `parsec-str' is "atomic", which
+;;     is similar to `parsec-ch'.
+;;   - Use the power of regular expressions provided by `parsec-re' and
+;;     simplify the parser!
+
+
+;; 2.2 Parser Combinators
+;; ~~~~~~~~~~~~~~~~~~~~~~
+
+;;   These combinators can be used to combine different parsers.
+
+;;    parsec.el                  Haskell's Parsec  Usage
+;;   
-----------------------------------------------------------------------------------------------------------
+;;    parsec-or                  choice            try the parsers until one 
succeeds
+;;    parsec-try                 try               try parser and consume no 
input when an error occurs
+;;    parsec-lookahead           lookahead         try parser and consume no 
input when successful
+;;    parsec-peek                try && lookahead  try parser without 
comsuming any input
+;;    parsec-peek-p              try && lookahead  same as parsec-peek except 
the return value for failure
+;;    parsec-with-error-message  <?> (similar)     use the new error message 
when an error occurs
+;;    parsec-many                many              apply the parser zero or 
more times
+;;    parsec-many1               many1             apply the parser one or 
more times
+;;    parsec-many-till           manyTill          apply parser zero or more 
times until end succeeds
+;;    parsec-until               *N/A*             parse until end succeeds
+;;    parsec-not-followed-by     notFollowedBy     succeed when the parser 
fails
+;;    parsec-endby               endby             apply parser zero or more 
times, separated and ended by end
+;;    parsec-sepby               sepby             apply parser zero or more 
times, separated by sep
+;;    parsec-between             between           apply parser between open 
and close
+;;    parsec-count               count             apply parser n times
+;;    parsec-option              option            apply parser, if it fails, 
return opt
+;;    parsec-optional            *N/A*             apply parser zero or one 
time and return the result
+;;    parsec-optional*           optional          apply parser zero or one 
time and discard the result
+;;    parsec-optional-maybe      optionMaybe       apply parser zero or one 
time and return the result in Maybe
+
+;;   Note:
+;;   - `parsec-or' can also be used to replace `<|>'.
+;;   - `parsec-with-error-message' is slightly different from `<?>'. It
+;;     will replace the error message even when the input is consumed.
+;;   - By default, `parsec-many-till' behaves as Haskell's `manyTill'.
+;;     However, `parsec-many-till' and `parsec-until' can accept an
+;;     optional argument to specify which part(s) to be returned. You can
+;;     use `:both' or `:end' as the optional argument to change the default
+;;     behavior. See the docstrings for more information.
+
+
+;; 2.3 Parser Utilities
+;; ~~~~~~~~~~~~~~~~~~~~
+
+;;   These utilities can be used together with parser combinators to build
+;;   a parser and ease the translation process if you're trying to port an
+;;   existing Haskell program.
+
+;;    parsec.el                         Haskell's Parsec  Usage
+;;   
-------------------------------------------------------------------------------------------------------------
+;;    parsec-and                        do block          try all parsers and 
return the last result
+;;    parsec-return                     do block          try all parsers and 
return the first result
+;;    parsec-ensure                     *N/A*             quit the parsing 
when an error occurs
+;;    parsec-ensure-with-error-message  *N/A*             quit the parsing 
when an error occurs with new message
+;;    parsec-collect                    sequence          try all parsers and 
collect the results into a list
+;;    parsec-collect*                   *N/A*             try all parsers and 
collect non-nil results into a list
+;;    parsec-start                      parse             entry point
+;;    parsec-parse                      parse             entry point (same as 
parsec-start)
+;;    parsec-with-input                 parse             perform parsers on 
input
+;;    parsec-from-maybe                 fromMaybe         retrieve value from 
Maybe
+;;    parsec-maybe-p                    *N/A*             is a Maybe value or 
not
+;;    parsec-query                      *N/A*             change the parser's 
return value
+
+
+;; 2.4 Variants that Return a String
+;; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+;;   By default, the macros/functions that return multiple values will put
+;;   the values into a list. These macros/functions are:
+;;   - `parsec-many'
+;;   - `parsec-many1'
+;;   - `parsec-many-till'
+;;   - `parsec-until'
+;;   - `parsec-count'
+;;   - `parsec-collect' and `parsec-collect*'
+
+;;   They all have a variant that returns a string by concatenating the
+;;   results in the list:
+;;   - `parsec-many-as-string' or `parsec-many-s'
+;;   - `parsec-many1-as-string' or `parsec-many1-s'
+;;   - `parsec-many-till-as-string' or `parsec-many-till-s'
+;;   - `parsec-until-as-string' or `parsec-until-s'
+;;   - `parsec-collect-as-string' or `parsec-collect-s'
+;;   - `parsec-count-as-string' or `parsec-count-s'
+
+;;   The `*-s' and `*-as-string' variants are the same, except the `*-s'
+;;   variants have a shorter name. Using these `*-s' functions are
+;;   recommended if you're dealing with strings very frequently in your
+;;   code. These variants accept the same arguments and have the same
+;;   behavior as their original counterpart that returns a list. The only
+;;   difference is the return value.
+
+
+;; 3 Code Examples
+;; ===============
+
+;;   Some very simple examples are given here. You can see many code
+;;   examples in the test files in this GitHub repo.
+
+;;   The following code extract the "hello" from the comment:
+;;   ,----
+;;   | (parsec-with-input "/* hello */"
+;;   |   (parsec-string "/*")
+;;   |   (parsec-many-till-as-string (parsec-any-ch)
+;;   |                               (parsec-try
+;;   |                                (parsec-string "*/"))))
+;;   `----
+
+;;   The following Haskell program does a similar thing:
+;;   ,----
+;;   | import           Text.Parsec
+;;   |
+;;   | main :: IO ()
+;;   | main = print $ parse p "" "/* hello */"
+;;   |   where
+;;   |     p = do string "/*"
+;;   |            manyTill anyChar (try (string "*/"))
+;;   `----
+
+;;   The following code returns the "aeiou" before "end":
+;;   ,----
+;;   | (parsec-with-input "if aeiou end"
+;;   |   (parsec-str "if ")
+;;   |   (parsec-return
+;;   |       (parsec-many-as-string (parsec-one-of ?a ?e ?i ?o ?u))
+;;   |     (parsec-str " end")))
+;;   `----
+
+
+;; 4 Write a Parser: a Simple CSV Parser
+;; =====================================
+
+;;   You can find the code in `examples/simple-csv-parser.el'. The code is
+;;   based on the Haskell code in [Using Parsec].
+
+;;   An end-of-line should be a string `\n'. We use `(parsec-str "\n")' to
+;;   parse it (Note that since `\n' is also one character, `(parsec-ch
+;;   ?\n)' also works). Some files may not contain a newline at the end,
+;;   but we can view end-of-file as the end-of-line for the last line, and
+;;   use `parsec-eof' (or `parsec-eob') to parse the end-of-file. We use
+;;   `parsec-or' to combine these two combinators:
+;;   ,----
+;;   | (defun s-csv-eol ()
+;;   |   (parsec-or (parsec-str "\n")
+;;   |              (parsec-eof)))
+;;   `----
+
+;;   A CSV file contains many lines and ends with an end-of-file. Use
+;;   `parsec-return' to return the result of the first parser as the
+;;   result.
+;;   ,----
+;;   | (defun s-csv-file ()
+;;   |   (parsec-return (parsec-many (s-csv-line))
+;;   |     (parsec-eof)))
+;;   `----
+
+;;   A CSV line contains many CSV cells and ends with an end-of-line, and
+;;   we should return the cells as the results:
+;;   ,----
+;;   | (defun s-csv-line ()
+;;   |   (parsec-return (s-csv-cells)
+;;   |     (s-csv-eol)))
+;;   `----
+
+;;   CSV cells is a list, containing the first cell and the remaining
+;;   cells:
+;;   ,----
+;;   | (defun s-csv-cells ()
+;;   |   (cons (s-csv-cell-content) (s-csv-remaining-cells)))
+;;   `----
+
+;;   A CSV cell consists any character that is not =,= or `\n', and we use
+;;   the `parsec-many-as-string' variant to return the whole content as a
+;;   string instead of a list of single-character strings:
+;;   ,----
+;;   | (defun s-csv-cell-content ()
+;;   |   (parsec-many-as-string (parsec-none-of ?, ?\n)))
+;;   `----
+
+;;   For the remaining cells: if followed by a comma =,=, we try to parse
+;;   more csv cells. Otherwise, we should return the `nil':
+;;   ,----
+;;   | (defun s-csv-remaining-cells ()
+;;   |   (parsec-or (parsec-and (parsec-ch ?,) (s-csv-cells)) nil))
+;;   `----
+
+;;   OK. Our parser is almost done. To begin parsing the content in buffer
+;;   `foo', you need to wrap the parser inside `parsec-start' (or
+;;   `parsec-parse'):
+;;   ,----
+;;   | (with-current-buffer "foo"
+;;   |   (goto-char (point-min))
+;;   |   (parsec-parse
+;;   |    (s-csv-file)))
+;;   `----
+
+;;   If you want to parse a string instead, we provide a simple wrapper
+;;   macro `parsec-with-input', and you feed a string as the input and put
+;;   arbitraty parsers inside the macro body. `parsec-start' or
+;;   `parsec-parse' is not needed.
+;;   ,----
+;;   | (parsec-with-input "a1,b1,c1\na2,b2,c2"
+;;   |   (s-csv-file))
+;;   `----
+
+;;   The above code returns:
+;;   ,----
+;;   | (("a1" "b1" "c1") ("a2" "b2" "c2"))
+;;   `----
+
+;;   Note that if we replace `parsec-many-as-string' with `parsec-many' in
+;;   `s-csv-cell-content':
+;;   ,----
+;;   | (defun s-csv-cell-content ()
+;;   |   (parsec-many (parsec-none-of ?, ?\n)))
+;;   `----
+
+;;   The result would be:
+;;   ,----
+;;   | ((("a" "1") ("b" "1") ("c" "1")) (("a" "2") ("b" "2") ("c" "2")))
+;;   `----
+
+
+;; [Using Parsec] http://book.realworldhaskell.org/read/using-parsec.html
+
+
+;; 5 More Parser Examples
+;; ======================
+
+;;   I translate some Haskell Parsec examples into Emacs Lisp using
+;;   `parsec.el'. You can see from these examples that it is very easy to
+;;   write parsers using `parsec.el', and if you know haskell, you can see
+;;   that basically I just translate the Haskell into Emacs Lisp one by one
+;;   because most of them are just the same!
+
+;;   You can find five examples under the `examples/' directory.
+
+;;   Three of the examples are taken from the chapter [Using Parsec] in the
+;;   book of [Real World Haskell]:
+;;   - `simple-csv-parser.el': a simple csv parser with no support for
+;;     quoted cells, as explained in previous section.
+;;   - `full-csv-parser.el': a full csv parser
+;;   - `url-str-parser.el': parser parameters in URL
+
+;;   `pjson.el' is a translation of Haskell's [json library using Parsec].
+
+;;   `scheme.el' is a much simplified Scheme parser based on [Write
+;;   Yourself a Scheme in 48 Hours].
+
+;;   They're really simple but you can see how this library works!
+
+
+;; [Using Parsec] http://book.realworldhaskell.org/read/using-parsec.html
+
+;; [Real World Haskell] http://book.realworldhaskell.org/read/
+
+;; [json library using Parsec]
+;; 
https://hackage.haskell.org/package/json-0.9.1/docs/src/Text-JSON-Parsec.html
+
+;; [Write Yourself a Scheme in 48 Hours]
+;; https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/
+
+
+;; 6 Change the Return Values using `parsec-query'
+;; ===============================================
+
+;;   Parsing has side-effects such as forwarding the current point. In the
+;;   original [emacs-pl], you can specify some optional arguments to some
+;;   parsing functions (`pl-ch', `pl-re' etc.) to change the return values.
+;;   In `parsec.el', these functions don't have such a behavior. Instead,
+;;   we provide a unified interface `parsec-query', which accepts any
+;;   parser, and changes the return value of the parser.
+
+;;   You can speicify following arguments:
+;;   ,----
+;;   | :beg      --> return the point before applying the PARSER
+;;   | :end      --> return the point after applying the PARSER
+;;   | :nil      --> return nil
+;;   | :groups N --> return Nth group for `parsec-re'."
+;;   `----
+
+;;   So instead of returning "b" as the result, the following code returns
+;;   2:
+;;   ,----
+;;   | (parsec-with-input "ab"
+;;   |   (parsec-ch ?a)
+;;   |   (parsec-query (parsec-ch ?b) :beg))
+;;   `----
+
+;;   Returning a point means that you can also incorporate `parsec.el' with
+;;   Emacs Lisp functions that can operate on points/regions, such as
+;;   `goto-char' and `kill-region'.
+
+;;   `:group' can be specified when using `parsec-re':
+;;   ,----
+;;   | (parsec-with-input "ab"
+;;   |   (parsec-query (parsec-re "\\(a\\)\\(b\\)") :group 2))
+;;   `----
+
+;;   The above code will return "b" instead of "ab".
+
+
+;; [emacs-pl] https://github.com/jwiegley/emacs-pl
+
+
+;; 7 Error Messages
+;; ================
+
+;;   `parsec.el' implements a simple error handling mechanism. When an
+;;   error happens, it will show how the parser fails.
+
+;;   For example, the following code fails:
+;;   ,----
+;;   | (parsec-with-input "aac"
+;;   |   (parsec-count 2 (parsec-ch ?a))
+;;   |   (parsec-ch ?b))
+;;   `----
+
+;;   The return value is:
+;;   ,----
+;;   | (parsec-error . "Found \"c\" -> Expected \"b\"")
+;;   `----
+
+;;   This also works when parser combinators fail:
+;;   ,----
+;;   | (parsec-with-input "a"
+;;   |   (parsec-or (parsec-ch ?b)
+;;   |              (parsec-ch ?c)))
+;;   `----
+
+;;   The return value is:
+;;   ,----
+;;   | (parsec-error . "None of the parsers succeeds:
+;;   |       Found \"a\" -> Expected \"c\"
+;;   |       Found \"a\" -> Expected \"b\"")
+;;   `----
+
+;;   If an error occurs, the return value is a cons cell that contains the
+;;   error message in its `cdr'. Compared to Haskell's Parsec, it's really
+;;   simple, but at least the error message could tell us some information.
+;;   Yeah, not perfect but usable.
+
+;;   To test whether a parser returns an error, use `parsec-error-p'. If it
+;;   returns an error, you can use `parsec-error-str' to retrieve the error
+;;   message as a string.
+
+;;   You can decide what to do based on the return value of a parser:
+;;   ,----
+;;   | (let ((res (parsec-with-input "hello"
+;;   |              (parsec-str "world"))))
+;;   |   (if (parsec-error-p res)
+;;   |       (message "Parser failed:\n%s" (parsec-error-str res))
+;;   |     (message "Parser succeeded by returning %s" res)))
+;;   `----
+
+
+;; 8 Acknowledgement
+;; =================
+
+;;   - Daan Leijen for Haskell's Parsec
+;;   - [John Wiegley] for [emacs-pl]
+
+
+;; [John Wiegley] https://github.com/jwiegley/
+
+;; [emacs-pl] https://github.com/jwiegley/emacs-pl
+
+;;; Code:
+
+(require 'cl-lib)
+
+(defgroup parsec nil
+  "Parser combinators for Emacs Lisp"
+  :group 'development)
+
+(defvar parsec-last-error-message nil)
+
+(defun parsec-eof-or-char-as-string ()
+  (let ((c (char-after)))
+    (if c
+        (char-to-string c)
+      "`EOF'")))
+
+(defun parsec-error-new (msg)
+  (cons 'parsec-error msg))
+
+(defun parsec-error-new-2 (expected found)
+  (parsec-error-new (format "Found \"%s\" -> Expected \"%s\""
+                            found expected)))
+
+(defun parsec-error-p (obj)
+  (and (consp obj)
+       (eq (car obj) 'parsec-error)))
+
+(defalias 'parsec-error-str 'cdr)
+
+(defsubst parsec-throw (msg)
+  (throw 'parsec-failed msg))
+
+(defun parsec-stop (&rest args)
+  (parsec-throw
+   (setq parsec-last-error-message
+         (let ((msg (plist-get args :message))
+               (expected (plist-get args :expected))
+               (found (plist-get args :found)))
+           (when (or (stringp msg)
+                     (and (stringp expected)
+                          (stringp found)))
+             (if (stringp msg)
+                 (parsec-error-new msg)
+               (parsec-error-new-2 expected found)))))))
+
+(defun parsec-ch (ch)
+  "Parse a character CH."
+  (let ((next-char (char-after)))
+    (if (and (not (eobp))
+             (char-equal next-char ch))
+        (progn (forward-char 1)
+               (char-to-string ch))
+      (parsec-stop :expected (char-to-string ch)
+                   :found (parsec-eof-or-char-as-string)))))
+
+(defun parsec-any-ch ()
+  "Parse any character."
+  (if (not (eobp))
+      (prog1 (char-to-string (char-after))
+        (forward-char))
+    (parsec-stop :expected "any char"
+                 :found (parsec-eof-or-char-as-string))))
+
+(defun parsec-satisfy (pred)
+  "Parse any character that satisfies the predicate PRED."
+  (let ((next-char (char-after)))
+    (if (and (not (eobp))
+             (funcall pred next-char))
+        (progn (forward-char 1)
+               (char-to-string next-char))
+      (parsec-stop :expected (format "%s" pred)
+                   :found (parsec-eof-or-char-as-string)))))
+
+(defun parsec-re (regexp)
+  "Parse the input matching the regular expression REGEXP."
+  (if (looking-at regexp)
+      (progn (goto-char (match-end 0))
+             (match-string 0))
+    (parsec-stop :expected regexp
+                 :found (parsec-eof-or-char-as-string))))
+
+(defun parsec-make-alternatives (chars)
+  (let ((regex-head "")
+        (regex-str "")
+        (regex-end "")
+        contains-caret-p)
+    (dolist (c chars)
+      (cond
+       ((char-equal c ?\]) (setq regex-head "]"))
+       ((char-equal c ?-) (setq regex-end "-"))
+       ((char-equal c ?^) (setq contains-caret-p t))
+       (t (setq regex-str (concat regex-str (char-to-string c))))))
+    (when contains-caret-p
+      (if (and
+           (string-equal regex-end "-")
+           (string-equal regex-head "")
+           (string-equal regex-str ""))
+          (setq regex-end "-^")
+        (setq regex-str (concat regex-str "^"))))
+    (concat regex-head regex-str regex-end)))
+
+(defun parsec-one-of (&rest chars)
+  "Succeed if the current character is in the supplied list of CHARS.
+Return the parsed character.
+
+>  (parsec-one-of ?a ?e ?i ?o ?u)
+
+Note this function is just a wrapper of `parsec-re'.  For complicated use 
cases,
+consider using `parsec-re' instead."
+  (parsec-re (format "[%s]" (parsec-make-alternatives chars))))
+
+(defun parsec-none-of (&rest chars)
+  "Succeed if the current character not in the supplied list of CHARS.
+Return the parsed character.
+
+>  (parsec-none-of ?a ?e ?i ?o ?u)
+
+Note this function is just a wrapper of `parsec-re'.  For complicated use 
cases,
+consider using `parsec-re' instead."
+  (parsec-re (format "[^%s]" (parsec-make-alternatives chars))))
+
+(defsubst parsec-str (str)
+  "Parse STR and only consume the input for an exact match.
+Return the parsed string.
+
+Note this function's behavior is different from the `string'
+function of Haskll's Parsec.  Use `parsec-string' if you want the
+same behavior as in Haskell."
+  (parsec-re (regexp-quote str)))
+
+(defsubst parsec-string (str)
+  "Parse STR and consume the input even for a partial match.
+Return the parsed string.
+
+It is equivalent to calling `parsec-ch' multiples times so the
+input will be consumed if the parser fails in the middle of the
+STR.  This function has the same behavior as the `string' function
+of Haskell's Parsec.  See also `parsec-str'."
+  (mapc (lambda (c) (parsec-ch c)) str))
+
+(defsubst parsec-num (num)
+  "Parse the number NUM and return the parsed number as a string."
+  (parsec-re (regexp-quote (number-to-string num))))
+
+(defsubst parsec-letter ()
+  "Parse any English letter."
+  (parsec-re "[a-zA-Z]"))
+
+(defsubst parsec-digit ()
+  "Parse any digit."
+  (parsec-re "[0-9]"))
+
+(defmacro parsec-or (&rest parsers)
+  "Try the PARSERS one by one.
+If the current parser succeeds, return its results.  If the
+current parser fails without consuming any input, try the next
+parser if available.  This combinator fails if the current parser
+fails after consuming some input or there is no more parsers."
+  (let ((parser-sym (make-symbol "parser"))
+        (error-sym (make-symbol "err"))
+        (error-str-list-sym (make-symbol "err-list")))
+    `(let (,error-str-list-sym ,parser-sym ,error-sym)
+       (catch 'parsec-failed-or
+         ,@(mapcar
+            (lambda (parser)
+              `(parsec-protect-atom parsec-or
+                 (parsec-start
+                  (throw 'parsec-failed-or
+                         (parsec-eavesdrop-error ,error-sym
+                             (parsec-make-atom parsec-or ,parser)
+                           (push (parsec-error-str ,error-sym) 
,error-str-list-sym))))))
+            parsers)
+         (parsec-stop
+          :message
+          (replace-regexp-in-string
+           "\n" "\n\t"
+           (concat "None of the parsers succeeds:\n"
+                   (mapconcat #'identity ,error-str-list-sym "\n"))))))))
+
+(defalias 'parsec-and 'progn
+  "Eval BODY sequentially and return the result of the last parser.
+This combinator fails if one of the parsers fails.")
+
+(defalias 'parsec-return 'prog1
+  "Eval FIRST and BODY sequentially and return the results of the first parser.
+This combinator fails if one of the parsers fails.")
+
+(defalias 'parsec-collect 'list
+  "Collect the results of all the parsers OBJECTS into a list.")
+
+(defun parsec-collect* (&rest args)
+  "Collect the non-nil results of all the parsers ARGS into a list."
+  (delq nil (apply #'parsec-collect args)))
+
+(defmacro parsec-collect-as-string (&rest forms)
+  "Collect the results of all the parsers FORMS as a string."
+  `(parsec-list-to-string (parsec-collect ,@forms)))
+
+(defalias 'parsec-collect-s 'parsec-collect-as-string)
+
+(defmacro parsec-start (&rest forms)
+  "Eval the parsers FORMS and return the results or a `parsec-error'.
+This combinator should be used at the top level as the entry
+point of your parsing program."
+  `(catch 'parsec-failed ,@forms))
+
+(defalias 'parsec-parse 'parsec-start)
+
+(defmacro parsec-try (parser)
+  "Try PARSER, and pretend that no input is consumed when an error occurs."
+  (let ((orig-pt-sym (make-symbol "orig-pt"))
+        (error-sym (make-symbol "err")))
+    `(let ((,orig-pt-sym (point)))
+       (parsec-eavesdrop-error ,error-sym
+           (parsec-and ,parser)
+         (goto-char ,orig-pt-sym)))))
+
+(defmacro parsec-lookahead (parser)
+  "Try PARSER, and pretend that no input is consumed when it succeeds."
+  (let ((orig-pt-sym (make-symbol "orig-pt")))
+    `(let ((,orig-pt-sym (point)))
+       (parsec-return ,parser
+         (goto-char ,orig-pt-sym)))))
+
+(defsubst parsec--atom-tag (name)
+  (intern (format "parsec-failed-at-half-%s" name)))
+
+(defmacro parsec-protect-atom (name parser)
+  "This must be used together with `parsec-make-atom'."
+  (declare (indent 1))
+  (let ((tag (parsec--atom-tag name)))
+    `(catch 'parsec-failed-protect-atom
+       (parsec-throw (catch ',tag
+                       (throw 'parsec-failed-protect-atom ,parser))))))
+
+(defmacro parsec-make-atom (name parser)
+  (let ((orig-pt-sym (make-symbol "orig-pt"))
+        (error-sym (make-symbol "err"))
+        (tag (parsec--atom-tag name)))
+    `(let ((,orig-pt-sym (point)))
+       (parsec-eavesdrop-error ,error-sym
+           ,parser
+         (unless (= (point) ,orig-pt-sym)
+           (throw ',tag ,error-sym))))))
+
+(defmacro parsec-eavesdrop-error (error-sym parser &rest handler)
+  (declare (indent 2))
+  `(catch 'parsec-failed-eavesdrop-error
+     (let ((,error-sym (parsec-start
+                        (throw 'parsec-failed-eavesdrop-error ,parser))))
+       ,@handler
+       (parsec-throw ,error-sym))))
+
+(defmacro parsec-with-error-message (msg &rest forms)
+  "Use MSG as the error message if an error occurs when Evaling the FORMS."
+  (declare (indent 1))
+  `(parsec-eavesdrop-error _
+       (parsec-and ,@forms)
+     (parsec-throw (parsec-error-new ,msg))))
+
+(defmacro parsec-ensure (&rest forms)
+  "Exit the program immediately if FORMS fail."
+  (let ((error-sym (make-symbol "err")))
+    `(parsec-eavesdrop-error ,error-sym
+         (parsec-and ,@forms)
+       (error "%s" (parsec-error-str ,error-sym)))))
+
+(defmacro parsec-ensure-with-error-message (msg &rest forms)
+  "Exit the program immediately with MSG if FORMS fail."
+  (declare (indent 1))
+  `(parsec-ensure
+    (parsec-with-error-message ,msg
+      (parsec-and ,@forms))))
+
+(defmacro parsec-many (parser)
+  "Apply the PARSER zero or more times and return a list of the results."
+  (let ((res-sym (make-symbol "results")))
+    `(let (,res-sym)
+       (parsec-protect-atom parsec-many
+         (parsec-start
+          (while (not (eobp))
+            (push (parsec-make-atom parsec-many ,parser) ,res-sym))))
+       (nreverse ,res-sym))))
+
+(defmacro parsec-many1 (parser)
+  "Apply the PARSER one or more times and return a list of the results."
+  `(cons ,parser (parsec-many ,parser)))
+
+(defsubst parsec-list-to-string (l)
+  (if (stringp l)
+      l
+    (mapconcat #'identity l "")))
+
+(defmacro parsec-many-as-string (parser)
+  "Apply the PARSER zero or more times and return the results as a string."
+  `(mapconcat #'identity (parsec-many ,parser) ""))
+
+(defalias 'parsec-many-s 'parsec-many-as-string)
+
+(defmacro parsec-many1-as-string (parser)
+  "Apply the PARSER one or more times and return the results as a string."
+  `(mapconcat #'identity (parsec-many1 ,parser) ""))
+
+(defalias 'parsec-many1-s 'parsec-many1-as-string)
+
+(defmacro parsec-many-till (parser end &optional type)
+  "Apply PARSER zero or more times until END succeeds.
+The return value is determined by TYPE.  If TYPE is `:both', return
+the cons `(many . end)'.  If TYPE is `:end', return the result of END.
+In other cases, return the result of PARSER.
+
+Used to scan comments:
+
+> (parsec-and
+>   (parsec-str \"<--\")
+>   (parsec-many-till (parsec-any-ch) (parsec-str \"-->\")))"
+
+  (let ((res-sym (make-symbol "results"))
+        (end-res-sym (make-symbol "end-result")))
+    `(let ((,res-sym nil) ,end-res-sym)
+       (setq ,end-res-sym
+             (catch 'parsec-failed-many-till
+               (while t
+                 (parsec-or (throw 'parsec-failed-many-till ,end)
+                            (push ,parser ,res-sym)))))
+       (setq ,res-sym (nreverse ,res-sym))
+       ,(cond
+         ((eq type :both) `(cons ,res-sym ,end-res-sym))
+         ((eq type :end) end-res-sym)
+         (t res-sym)))))
+
+(defmacro parsec-many-till-as-string (parser end &optional type)
+  "Apply PARSER zero or more times until END succeeds.
+Return the result of PARSER or END as a string.  TYPE has the same
+meaning as `parsec-many-till'."
+  (let ((res-sym (make-symbol "results")))
+    (cond
+     ((eq type :both)
+      `(let ((,res-sym (parsec-many-till ,parser ,end ,type)))
+         (cons (parsec-list-to-string (car ,res-sym))
+               (parsec-list-to-string (cdr ,res-sym)))))
+     (t
+      `(parsec-list-to-string (parsec-many-till ,parser ,end ,type))))))
+
+(defalias 'parsec-many-till-s 'parsec-many-till-as-string)
+
+(defmacro parsec-until (parser &optional type)
+  "Parse any characters until PARSER succeeds.
+TYPE has the same meaning as `parsec-many-till'."
+  `(parsec-many-till (parsec-any-ch) ,parser ,type))
+
+(defmacro parsec-until-as-string (parser &optional type)
+  "Parse any characters until PARSER succeeds.
+Return the result of either part as a string.  TYPE has the same
+meaning as `parsec-many-till'."
+  `(parsec-many-till-as-string (parsec-any-ch) ,parser ,type))
+
+(defalias 'parsec-until-s 'parsec-until-as-string)
+
+(defmacro parsec-not-followed-by (parser)
+  "Succeed only when PARSER fails.  Consume no input."
+  (let ((res-sym (make-symbol "results")))
+    `(catch 'parsec-failed-not-followed-by-out
+       (parsec-try
+        (let ((,res-sym
+               (catch 'parsec-failed-not-followed-by-in
+                 (throw 'parsec-failed-not-followed-by-out
+                        (parsec-or (throw 'parsec-failed-not-followed-by-in 
(parsec-try ,parser))
+                                   nil)))))
+          (parsec-stop :message (format "Unexpected followed by: %s" 
,res-sym)))))))
+
+(defmacro parsec-endby (parser end)
+  "Parse zero or more occurrences of PARSER, separated and ended by END.
+Return a list of values returned by PARSER."
+  `(parsec-many (parsec-return ,parser
+                  ,end)))
+
+(defmacro parsec-sepby (parser separator)
+  "Parse zero or more occurrences of PARSER, separated by SEPARATOR.
+Return a list of values returned by PARSER."
+  `(parsec-or
+    (cons ,parser (parsec-many (parsec-and ,separator ,parser)))
+    nil))
+
+(defmacro parsec-between (open close parser)
+  "Parse OPEN, followed by PARSER and CLOSE.
+Return the value returned by PARSER."
+  `(parsec-and
+     ,open
+     (parsec-return ,parser
+       ,close)))
+
+(defmacro parsec-count (n parser)
+  "Parse N occurrences of PARSER.
+Return a list of N values returned by PARSER."
+  (let ((res-sym (make-symbol "results")))
+    `(let (,res-sym)
+       (dotimes (_ ,n ,res-sym)
+         (push ,parser ,res-sym)))))
+
+(defmacro parsec-count-as-string (n parser)
+  "Parse N occurrences of PARSER.
+Return the N values returned by PARSER as a string."
+  `(parsec-list-to-string (parsec-count ,n ,parser)))
+
+(defalias 'parsec-count-s 'parsec-count-as-string)
+
+(defmacro parsec-option (opt parser)
+  "Try to apply PARSER and return OPT if PARSER fails without comsuming input."
+  `(parsec-or ,parser ,opt))
+
+(defmacro parsec-optional (parser)
+  "Apply PARSER zero or one time.  Fail if PARSER fails after consuming input.
+Return the result of PARSER or nil.
+
+Note this combinator doesn't discard the result of PARSER so it is
+different from the `optional' function of Haskell's Parsec.  If
+you want the Haskell's behavior, use `parsec-optional*'."
+  `(parsec-or ,parser nil))
+
+(defmacro parsec-optional* (parser)
+  "Apply PARSER zero or one time and discard the result.
+Fail if PARSER fails after consuming input.
+
+This combinator has the same behavior as the `optional' function of
+Haskell's Parsec."
+  `(parsec-and ,parser nil))
+
+(defmacro parsec-peek (parser)
+  "Apply PARSER without consuming any input.
+When PARSER succeeds, the result of the PARSER is returned.
+Otherwise, the return value is an error.  Use `parsec-error-p' on
+the return value to see whether the PARSER fails or not.  Use
+`parsec-peek-p' if you want nil to be returned when PARSER fails.
+
+This is a shortcut of combining `parsec-start', `parsec-try' and
+`parsec-lookahead'.  Since arbitrary parser is allowed, this
+function can be viewed as a more powerful version of `looking-at'
+in Emacs Lisp."
+  `(parsec-start
+    (parsec-try
+     (parsec-lookahead ,parser))))
+
+(defmacro parsec-peek-p (parser)
+  "Same as `parsec-peek' except a nil is returned when the PARSER fails."
+  (let ((res-sym (make-symbol "res")))
+    `(let ((,res-sym (parsec-peek ,parser)))
+       (unless (parsec-error-p ,res-sym)
+         ,res-sym))))
+
+(defmacro parsec-query (parser &rest args)
+  "Get an alternative return value of the PARSER specified by the ARGS.
+
+The args can be in the following forms:
+
+    :beg      --> return the point before applying the PARSER
+    :end      --> return the point after applying the PARSER
+    :nil      --> return nil
+    :groups N --> return Nth group for `parsec-re'."
+  (let ((orig-pt-sym (make-symbol "orig-pt"))
+        (res-sym (make-symbol "results")))
+    `(let ((,orig-pt-sym (point))
+           (,res-sym ,parser))
+       ,(cond
+         ((memq :beg args) orig-pt-sym)
+         ((memq :end args) '(point))
+         ((memq :nil args) nil)
+         ((and (memq :group args)
+               (consp parser)
+               (eq (car parser) 'parsec-re))
+          (let ((group
+                 (cl-loop named outer for arg on args
+                          when (eq (car arg) :group) do
+                          (cl-return-from outer (cadr arg)))))
+            (if (and group (integerp group))
+                `(match-string ,group)
+              (error "Invalid query :group %s" group))))
+         (t res-sym)))))
+
+(defsubst parsec-just (x) (cons 'Just x))
+
+(defconst parsec-nothing 'Nothing)
+
+(defun parsec-maybe-p (x)
+  (or (eq x parsec-nothing)
+      (and
+       (consp x)
+       (eq (car x) 'Just))))
+
+(defun parsec-from-maybe (x)
+  "Retrieve the value from Maybe monad X.
+If X is `(Just . p)', return p. Otherwise return nil."
+  (and (consp x)
+       (eq (car x) 'Just)
+       (cdr x)))
+
+(defmacro parsec-optional-maybe (parser)
+  "Apply PARSER zero or one time and return the value in a Maybe monad.
+If PARSER fails without consuming any input, return `parsec-nothing'.
+Otherwise, return `(Just . p)' where p is the result of PARSER."
+  (let ((res-sym (make-symbol "result")))
+    `(let ((,res-sym (parsec-optional ,parser)))
+       (if ,res-sym
+           (parsec-just ,res-sym)
+         parsec-nothing))))
+
+(defun parsec-newline ()
+  "Parse a newline character \"\\n\"."
+  (parsec-ch ?\n))
+
+(defun parsec-crlf ()
+  "Parse a carriage return (\'\\r\') followed by a newline \"\\n\"."
+  (parsec-and (parsec-ch ?\r) (parsec-ch ?\n)))
+
+(defun parsec-eol ()
+  "Parse a newline or a CRLF and return \"\\n\"."
+  (parsec-or (parsec-newline) (parsec-crlf)))
+
+(defun parsec-eob ()
+  "Indicate the end of file (buffer)."
+  (unless (eobp)
+    (parsec-stop :expected "`EOF'"
+                 :found (parsec-eof-or-char-as-string))))
+
+(defalias 'parsec-eof 'parsec-eob)
+
+(defun parsec-eol-or-eof ()
+  "Indicate either eol or eof."
+  (parsec-or (parsec-eol) (parsec-eof)))
+
+(defmacro parsec-with-input (input &rest parsers)
+  "With INPUT, start parsing by applying PARSERS sequentially."
+  (declare (indent 1))
+  `(with-temp-buffer
+     (insert ,input)
+     (goto-char (point-min))
+     (parsec-start
+      ,@parsers)))
+
+(provide 'parsec)
+;;; parsec.el ends here
diff --git a/packages/seq/seq-24.el b/packages/seq/seq-24.el
index 04688d3..3f9cd88 100644
--- a/packages/seq/seq-24.el
+++ b/packages/seq/seq-24.el
@@ -371,6 +371,13 @@ SEQUENCE must be a sequence of numbers or markers."
 SEQUENCE must be a sequence of numbers or markers."
   (apply #'max (seq-into sequence 'list)))
 
+(defun seq-random-elt (sequence)
+  "Return a random element from SEQUENCE.
+Signal an error if SEQUENCE is empty."
+  (if (seq-empty-p sequence)
+      (error "Sequence cannot be empty")
+    (seq-elt sequence (random (seq-length sequence)))))
+
 (defun seq--drop-list (list n)
   "Return a list from LIST without its first N elements.
 This is an optimization for lists in `seq-drop'."
diff --git a/packages/seq/seq-25.el b/packages/seq/seq-25.el
index a497f70..c2268dd 100644
--- a/packages/seq/seq-25.el
+++ b/packages/seq/seq-25.el
@@ -91,7 +91,7 @@ given, and the match does not fail."
 
 ARGS can also include the `&rest' marker followed by a variable
 name to be bound to the rest of SEQUENCE."
-  (declare (indent 2) (debug t))
+  (declare (indent 2) (debug (sexp form body)))
   `(pcase-let ((,(seq--make-pcase-patterns args) ,sequence))
      ,@body))
 
@@ -494,5 +494,12 @@ SEQUENCE must be a sequence of numbers or markers."
 If no element is found, return nil."
   (ignore-errors (seq-elt sequence n))))
 
+(cl-defgeneric seq-random-elt (sequence)
+  "Return a random element from SEQUENCE.
+Signal an error if SEQUENCE is empty."
+  (if (seq-empty-p sequence)
+      (error "Sequence cannot be empty")
+    (seq-elt sequence (random (seq-length sequence)))))
+
 (provide 'seq-25)
 ;;; seq-25.el ends here
diff --git a/packages/seq/seq.el b/packages/seq/seq.el
index 9f96ec8..6bbb307 100644
--- a/packages/seq/seq.el
+++ b/packages/seq/seq.el
@@ -4,7 +4,7 @@
 
 ;; Author: Nicolas Petton <address@hidden>
 ;; Keywords: sequences
-;; Version: 2.16
+;; Version: 2.19
 ;; Package: seq
 
 ;; Maintainer: address@hidden
diff --git a/packages/seq/tests/seq-tests.el b/packages/seq/tests/seq-tests.el
index cf3da78..5d729b1 100644
--- a/packages/seq/tests/seq-tests.el
+++ b/packages/seq/tests/seq-tests.el
@@ -350,5 +350,20 @@ Evaluate BODY for each created sequence.
     (should (equal (seq-sort-by #'seq-length #'> seq)
                    ["xxx" "xx" "x"]))))
 
+(ert-deftest test-seq-random-elt-take-all ()
+  (let ((seq '(a b c d e))
+        (elts '()))
+    (should (= 0 (length elts)))
+    (dotimes (_ 1000)
+      (let ((random-elt (seq-random-elt seq)))
+        (add-to-list 'elts
+                     random-elt)))
+    (should (= 5 (length elts)))))
+
+(ert-deftest test-seq-random-elt-signal-on-empty ()
+  (should-error (seq-random-elt nil))
+  (should-error (seq-random-elt []))
+  (should-error (seq-random-elt "")))
+
 (provide 'seq-tests)
 ;;; seq-tests.el ends here
diff --git a/packages/sml-mode/sml-mode.el b/packages/sml-mode/sml-mode.el
index f4adf11..dc51c99 100644
--- a/packages/sml-mode/sml-mode.el
+++ b/packages/sml-mode/sml-mode.el
@@ -556,7 +556,6 @@ Regexp match data 0 points to the chars."
     (`(:before . "withtype") 0)
     (`(:before . "d=")
      (cond
-      ((smie-rule-parent-p "fun") 2)
       ((smie-rule-parent-p "datatype") (if (smie-rule-bolp) 2))
       ((smie-rule-parent-p "structure" "signature" "functor") 0)))
     ;; Indent an expression starting with "local" as if it were starting
diff --git a/packages/sml-mode/testcases.sml b/packages/sml-mode/testcases.sml
index 4ed3312..7ed53f7 100644
--- a/packages/sml-mode/testcases.sml
+++ b/packages/sml-mode/testcases.sml
@@ -1,4 +1,4 @@
-(* Copyright 1999,2004,2007,2010-2012,2014 Stefan Monnier <address@hidden> *)
+(* Copyright 1999,2004,2007,2010-2016 Stefan Monnier <address@hidden> *)
 
 (* sml-mode here treats the second `=' as an equal op because it
  * thinks it's seeing something like "... type t = (s.t = ...)".  FIXME!  *)
@@ -71,6 +71,11 @@ type node' = node
 type obj = t
 end
 
+fun test1 None =
+    4
+  | test1 (Some x) =
+    5
+
 datatype exp_node
   = Let of varpat_t list * rhs_t * exp_t
   | Do of simpleexp_t * exp_t
diff --git a/packages/sotlisp/sotlisp.el b/packages/sotlisp/sotlisp.el
index 2ceb382..792fe1d 100644
--- a/packages/sotlisp/sotlisp.el
+++ b/packages/sotlisp/sotlisp.el
@@ -6,7 +6,7 @@
 ;; URL: https://github.com/Malabarba/speed-of-thought-lisp
 ;; Keywords: convenience, lisp
 ;; Package-Requires: ((emacs "24.1"))
-;; Version: 1.5.2
+;; Version: 1.6.2
 
 ;; This program is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
@@ -81,6 +81,7 @@
 ;;   (with-temp-buffer (insert text))
 
 ;;; Code:
+(require 'skeleton)
 
 ;;; Predicates
 (defun sotlisp--auto-paired-p ()
@@ -101,7 +102,7 @@ Specially, avoids matching inside argument lists."
        (not (sotlisp--looking-back 
"(\\(defun\\s-+.*\\|\\(lambda\\|dolist\\|dotimes\\)\\s-+\\)("))
        (save-excursion
          (forward-char -1)
-         (condition-case er
+         (condition-case nil
              (progn
                (backward-up-list)
                (forward-sexp -1)
@@ -203,8 +204,14 @@ See `sotlisp-define-function-abbrev'."
     (skip-chars-backward (rx alnum))
     (let* ((name (buffer-substring (point) r))
            (expansion (gethash name sotlisp--function-table)))
-      (if (not expansion)
-          (progn (goto-char r) nil)
+      (cond
+       ((not expansion) (progn (goto-char r) nil))
+       ((consp expansion)
+        (delete-region (point) r)
+        (let ((skeleton-end-newline nil))
+          (skeleton-insert (cons "" expansion)))
+        t)
+       ((stringp expansion)
         (delete-region (point) r)
         (if (sotlisp--function-quote-p)
             ;; After #' use the simple expansion.
@@ -214,7 +221,7 @@ See `sotlisp-define-function-abbrev'."
           (when (string-match "\\$" expansion)
             (setq sotlisp--needs-moving t)))
         ;; Must be last.
-        (sotlisp--post-expansion-cleanup)))))
+        (sotlisp--post-expansion-cleanup))))))
 
 (put 'sotlisp--expand-function 'no-self-insert t)
 
@@ -295,12 +302,12 @@ The space char is not included.  Any \"$\" are also 
removed."
     ("jos" . "just-one-space")
     ("jr" . "json-read$")
     ("jtr" . "jump-to-register ")
-    ("k" . "kbd \"$\"")
+    ("k" . ("kbd " (format "%S" (key-description (read-key-sequence-vector 
"Key: ")))))
     ("kb" . "kill-buffer")
     ("kn" . "kill-new ")
     ("kp" . "keywordp ")
     ("l" . "lambda ($)")
-    ("la" . "looking-at \"$\"")
+    ("la" . ("looking-at \"" - "\""))
     ("lap" . "looking-at-p \"$\"")
     ("lb" . "looking-back \"$\"")
     ("lbp" . "line-beginning-position")
diff --git a/packages/spinner/spinner.el b/packages/spinner/spinner.el
index 24e9cea..da75a8f 100644
--- a/packages/spinner/spinner.el
+++ b/packages/spinner/spinner.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2015 Free Software Foundation, Inc.
 
 ;; Author: Artur Malabarba <address@hidden>
-;; Version: 1.7.1
+;; Version: 1.7.3
 ;; URL: https://github.com/Malabarba/spinner.el
 ;; Keywords: processes mode-line
 
@@ -183,7 +183,7 @@ own spinner animations."
   (frames (spinner--type-to-frames type))
   (counter 0)
   (fps (or frames-per-second spinner-frames-per-second))
-  (timer (timer-create) :read-only)
+  (timer (timer-create))
   (active-p nil)
   (buffer (when buffer-local
             (if (bufferp buffer-local)
diff --git a/packages/stream/stream.el b/packages/stream/stream.el
index ef19918..afb739f 100644
--- a/packages/stream/stream.el
+++ b/packages/stream/stream.el
@@ -4,7 +4,7 @@
 
 ;; Author: Nicolas Petton <address@hidden>
 ;; Keywords: stream, laziness, sequences
-;; Version: 2.2.2
+;; Version: 2.2.3
 ;; Package-Requires: ((emacs "25"))
 ;; Package: stream
 
@@ -110,7 +110,7 @@ SEQ can be a list, vector or string."
 (cl-defmethod stream ((buffer buffer) &optional pos)
   "Return a stream of the characters of the buffer BUFFER.
 BUFFER may be a buffer or a string (buffer name).
-The sequence starts at POS if non-nil, 1 otherwise."
+The sequence starts at POS if non-nil, `point-min' otherwise."
   (with-current-buffer buffer
     (unless pos (setq pos (point-min)))
     (if (>= pos (point-max))
@@ -166,11 +166,12 @@ range is infinite."
   (list stream--identifier (thunk-delay nil)))
 
 (defun stream-empty-p (stream)
-  "Return non-nil is STREAM is empty, nil otherwise."
+  "Return non-nil if STREAM is empty, nil otherwise."
   (null (thunk-force (cadr stream))))
 
 (defun stream-first (stream)
-  "Return the first element of STREAM."
+  "Return the first element of STREAM.
+Return nil if STREAM is empty."
   (car (thunk-force (cadr stream))))
 
 (defun stream-rest (stream)
@@ -273,12 +274,13 @@ stream will simply be accordingly shorter, or even 
empty)."
 
 (cl-defmethod seq-take ((stream stream) n)
   "Return a stream of the first N elements of STREAM."
-  (if (or (zerop n)
-          (stream-empty-p stream))
-      (stream-empty)
-    (stream-cons
-     (stream-first stream)
-     (seq-take (stream-rest stream) (1- n)))))
+  (stream-make
+   (if (or (zerop n)
+           (stream-empty-p stream))
+       nil
+     (cons
+      (stream-first stream)
+      (seq-take (stream-rest stream) (1- n))))))
 
 (cl-defmethod seq-drop ((stream stream) n)
   "Return a stream of STREAM without its first N elements."
@@ -327,16 +329,14 @@ kind of nonlocal exit."
 
 (cl-defmethod seq-filter (pred (stream stream))
   "Return a stream of the elements for which (PRED element) is non-nil in 
STREAM."
-  (if (stream-empty-p stream)
-      stream
-    (stream-make
-     (while (not (or (stream-empty-p stream)
-                     (funcall pred (stream-first stream))))
-       (setq stream (stream-rest stream)))
-     (if (stream-empty-p stream)
-         nil
-       (cons (stream-first stream)
-             (seq-filter pred (stream-rest stream)))))))
+  (stream-make
+   (while (not (or (stream-empty-p stream)
+                   (funcall pred (stream-first stream))))
+     (setq stream (stream-rest stream)))
+   (if (stream-empty-p stream)
+       nil
+     (cons (stream-first stream)
+           (seq-filter pred (stream-rest stream))))))
 
 (defmacro stream-delay (expr)
   "Return a new stream to be obtained by evaluating EXPR.
diff --git a/packages/url-http-ntlm/url-http-ntlm.el 
b/packages/url-http-ntlm/url-http-ntlm.el
index 58622ad..841dc6c 100644
--- a/packages/url-http-ntlm/url-http-ntlm.el
+++ b/packages/url-http-ntlm/url-http-ntlm.el
@@ -4,10 +4,10 @@
 
 ;; Author: Tom Schutzer-Weissmann <address@hidden>
 ;; Maintainer: Thomas Fitzsimmons <address@hidden>
-;; Version: 2.0.2
+;; Version: 2.0.3
 ;; Keywords: comm, data, processes, hypermedia
 ;; Homepage: https://code.google.com/p/url-http-ntlm/
-;; Package-Requires: ((cl-lib "0.5") (ntlm "2.0.0"))
+;; Package-Requires: ((cl-lib "0.5") (ntlm "2.1.0"))
 
 ;; This program is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
@@ -148,16 +148,9 @@ request to the host in URL's server slot."
 
 (defun url-http-ntlm--get-stage (args)
   "Determine what stage of the NTLM handshake we are at.
-PROMPT and ARGS come from `url-ntlm-auth''s caller,
-`url-get-authentication'.  Their meaning depends on the current
-implementation - this function is well and truly coupled.
-
-`url-get-authentication' calls `url-ntlm-auth' once when checking
-what authentication schemes are supported (PROMPT and ARGS are
-nil), and then twice for every stage of the handshake: the first
-time PROMPT is nil, the second, t; ARGS contains the server
-response's \"WWW-Authenticate\" header, munged by
-`url-parse-args'."
+ARGS comes from `url-ntlm-auth''s caller,
+`url-get-authentication'.  Its meaning depends on the current
+implementation -- this function is well and truly coupled."
   (cl-declare (special url-http-extra-headers))
   (let* ((response-rxp    "^NTLM TlRMTVNTUAADAAA")
         (challenge-rxp    "^TLRMTVNTUAACAAA")
@@ -275,36 +268,47 @@ two-step process, this function expects to be called 
twice, first
 to generate the NTLM type 1 message (request), then to respond to
 the server's type 2 message (challenge) with a suitable response.
 
-PROMPT, OVERWRITE, and REALM are ignored.
+url-get-authentication' calls `url-ntlm-auth' once when checking
+what authentication schemes are supported (PROMPT and ARGS are
+nil), and then twice for every stage of the handshake: the first
+time PROMPT is nil, the second, t; ARGS contains the server
+response's \"WWW-Authenticate\" header, munged by
+`url-parse-args'.
+
+If PROMPT is not t then this function just returns nil.  This is
+to avoid calculating responses twice.
+
+OVERWRITE and REALM are ignored.
 
 ARGS is expected to contain the WWW-Authentication header from
 the server's last response.  These are used by
 `url-http-get-stage' to determine what stage we are at."
-  (url-http-ntlm--ensure-keepalive)
-  (let* ((user-url (url-http-ntlm--ensure-user url))
-        (stage (url-http-ntlm--get-stage args)))
-    (url-debug 'url-http-ntlm "Stage: %s" stage)
-    (cl-case stage
-      ;; NTLM Type 1 message: the request
-      (:request
-       (url-http-ntlm--detect-loop user-url)
-       (cl-destructuring-bind (&optional key hash)
-          (url-http-ntlm--authorization user-url nil realm)
-        (when (cl-third key)
-          (url-http-ntlm--string
-           (ntlm-build-auth-request (cl-second key) (cl-third key))))))
-      ;; NTLM Type 3 message: the response
-      (:response
-       (url-http-ntlm--detect-loop user-url)
-       (let ((challenge (url-http-ntlm--get-challenge)))
-        (cl-destructuring-bind (key hash)
+  (when (eq prompt t)
+    (url-http-ntlm--ensure-keepalive)
+    (let* ((user-url (url-http-ntlm--ensure-user url))
+          (stage (url-http-ntlm--get-stage args)))
+      (url-debug 'url-http-ntlm "Stage: %s" stage)
+      (cl-case stage
+       ;; NTLM Type 1 message: the request
+       (:request
+        (url-http-ntlm--detect-loop user-url)
+        (cl-destructuring-bind (&optional key hash)
             (url-http-ntlm--authorization user-url nil realm)
-          (url-http-ntlm--string
-           (ntlm-build-auth-response challenge
-                                     (cl-second key)
-                                     hash)))))
-      (:error
-       (url-http-ntlm--authorization user-url :clear)))))
+          (when (cl-third key)
+            (url-http-ntlm--string
+           (ntlm-build-auth-request (cl-second key) (cl-third key))))))
+       ;; NTLM Type 3 message: the response
+       (:response
+        (url-http-ntlm--detect-loop user-url)
+        (let ((challenge (url-http-ntlm--get-challenge)))
+          (cl-destructuring-bind (key hash)
+              (url-http-ntlm--authorization user-url nil realm)
+            (url-http-ntlm--string
+             (ntlm-build-auth-response challenge
+                                       (cl-second key)
+                                       hash)))))
+       (:error
+        (url-http-ntlm--authorization user-url :clear))))))
 
 
 ;;; Register `url-ntlm-auth' HTTP authentication method.
diff --git a/packages/validate/validate.el b/packages/validate/validate.el
index 7ca4b0a..f2dcc23 100644
--- a/packages/validate/validate.el
+++ b/packages/validate/validate.el
@@ -4,8 +4,8 @@
 
 ;; Author: Artur Malabarba <address@hidden>
 ;; Keywords: lisp
-;; Package-Requires: ((emacs "24.1") (cl-lib "0.5"))
-;; Version: 0.5
+;; Package-Requires: ((emacs "24.1") (cl-lib "0.5") (seq "2.16"))
+;; Version: 1.0.2
 
 ;;; Commentary:
 ;;
@@ -96,7 +96,7 @@ If they don't match, return an explanation."
                         ((wtype 'list))
                         (t (let ((subschema (car args)))
                              (seq-some (lambda (v) (validate--check v 
subschema)) value)))))
-               ((const function-item variable-item) (unless (eq value (car 
args))
+               ((const function-item variable-item) (unless (equal value (car 
args))
                                                       "not the expected 
value"))
                (file (cond ((wtype 'string))
                            ((file-exists-p value) nil)
@@ -165,7 +165,7 @@ indicate a failure."
   (let ((report (validate--check value schema)))
     (if report
         (unless noerror
-          (user-error report))
+          (user-error "%s" report))
       value)))
 
 ;;;###autoload
diff --git a/packages/wisi/NEWS b/packages/wisi/NEWS
index 4a9f690..06470ae 10