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

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

[elpa] externals/wisitoken-grammar-mode e5d353c 2/2: * run_wisitoken_gra


From: Stephen Leake
Subject: [elpa] externals/wisitoken-grammar-mode e5d353c 2/2: * run_wisitoken_grammar_parse.ads: New file.
Date: Tue, 13 Aug 2019 19:09:45 -0400 (EDT)

branch: externals/wisitoken-grammar-mode
commit e5d353c2255b905f98bc7bbd53c2d7c0d64d228c
Author: Stephen Leake <address@hidden>
Commit: Stephen Leake <address@hidden>

    * run_wisitoken_grammar_parse.ads: New file.
    
    * wisi-wisitoken_grammar.adb: New file.
    
    * wisi-wisitoken_grammar.ads: New file.
    
    * wisitoken-grammar-mmm.el: New file.
    
    * wisitoken-grammar-mode.el: New file.
    
    * wisitoken_grammar.gpr: New file.
    
    * wisitoken_grammar_1.wy: New file.
    
    * wisitoken_grammar_1_process_actions.adb: New file.
    
    * wisitoken_grammar_1_process_actions.ads: New file.
    
    * wisitoken_grammar_1_process_main.adb: New file.
    
    * wisitoken_grammar_1_process_main.ads: New file.
    
    * wisitoken_grammar_1_re2c.c: New file.
    
    * wisitoken_grammar_1_re2c_c.ads: New file.
    
    * wisitoken_grammar_mode_parse.ads: New file.
---
 run_wisitoken_grammar_parse.ads         |   29 +
 wisi-wisitoken_grammar.adb              |   66 +
 wisi-wisitoken_grammar.ads              |   44 +
 wisitoken-grammar-mmm.el                |   29 +
 wisitoken-grammar-mode.el               |  370 +++
 wisitoken_grammar.gpr                   |   74 +
 wisitoken_grammar_1.wy                  |  287 +++
 wisitoken_grammar_1_process_actions.adb |  346 +++
 wisitoken_grammar_1_process_actions.ads |  257 ++
 wisitoken_grammar_1_process_main.adb    | 1706 ++++++++++++
 wisitoken_grammar_1_process_main.ads    |   36 +
 wisitoken_grammar_1_re2c.c              | 4299 +++++++++++++++++++++++++++++++
 wisitoken_grammar_1_re2c_c.ads          |   63 +
 wisitoken_grammar_mode_parse.ads        |   34 +
 14 files changed, 7640 insertions(+)

diff --git a/run_wisitoken_grammar_parse.ads b/run_wisitoken_grammar_parse.ads
new file mode 100644
index 0000000..678cdf0
--- /dev/null
+++ b/run_wisitoken_grammar_parse.ads
@@ -0,0 +1,29 @@
+--  Abstract :
+--
+--  Run the wisitoken-grammar parser standalone. Useful for debugging grammar 
issues.
+--
+--  Copyright (C) 2017 - 2019 Stephen Leake All Rights Reserved.
+--
+--  This program is free software; you can redistribute it and/or
+--  modify it under terms of the GNU General Public License as
+--  published by the Free Software Foundation; either version 3, 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
+--  distributed with this program; see file COPYING. If not, write to
+--  the Free Software Foundation, 51 Franklin Street, Suite 500, Boston,
+--  MA 02110-1335, USA.
+
+pragma License (GPL);
+
+with Wisitoken_Grammar_1_Process_Actions;
+with Wisitoken_Grammar_1_Process_Main;
+with Gen_Run_Wisi_LR_Parse;
+with Wisi.WisiToken_Grammar;
+procedure Run_WisiToken_Grammar_Parse is new Gen_Run_Wisi_LR_Parse
+  (Wisi.WisiToken_Grammar.Parse_Data_Type,
+   Wisitoken_Grammar_1_Process_Actions.Descriptor,
+   null, null, null,
+   Wisitoken_Grammar_1_Process_Main.Create_Parser);
diff --git a/wisi-wisitoken_grammar.adb b/wisi-wisitoken_grammar.adb
new file mode 100644
index 0000000..a45fd78
--- /dev/null
+++ b/wisi-wisitoken_grammar.adb
@@ -0,0 +1,66 @@
+--  Abstract :
+--
+--  See spec.
+--
+--  Copyright (C) 2019 Stephen Leake All Rights Reserved.
+--
+--  This library is free software;  you can redistribute it and/or modify it
+--  under terms of the  GNU General Public License  as published by the Free
+--  Software  Foundation;  either version 3,  or (at your  option) any later
+--  version. This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN-
+--  TABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+--  As a special exception under Section 7 of GPL version 3, you are granted
+--  additional permissions described in the GCC Runtime Library Exception,
+--  version 3.1, as published by the Free Software Foundation.
+
+pragma License (Modified_GPL);
+
+with Wisitoken_Grammar_1_Process_Actions;
+package body Wisi.WisiToken_Grammar is
+
+   Check_Parens_Action_Index : constant String := "0";
+
+   overriding
+   procedure Initialize
+     (Data              : in out Parse_Data_Type;
+      Lexer             : in     WisiToken.Lexer.Handle;
+      Descriptor        : access constant WisiToken.Descriptor;
+      Source_File_Name  : in     String;
+      Post_Parse_Action : in     Post_Parse_Action_Type;
+      Begin_Line        : in     WisiToken.Line_Number_Type;
+      End_Line          : in     WisiToken.Line_Number_Type;
+      Begin_Indent      : in     Integer;
+      Params            : in     String)
+   is
+      pragma Unreferenced (Params);
+      use all type Wisitoken_Grammar_1_Process_Actions.Token_Enum_ID;
+   begin
+      Wisi.Initialize
+        (Wisi.Parse_Data_Type (Data), Lexer, Descriptor, Source_File_Name, 
Post_Parse_Action,
+         Begin_Line, End_Line, Begin_Indent, "");
+
+      Data.First_Comment_ID := +COMMENT_ID;
+   end Initialize;
+
+   procedure Check_Parens
+     (Data        : in out Wisi.Parse_Data_Type'Class;
+      Tree        : in     WisiToken.Syntax_Trees.Tree;
+      Tree_Tokens : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array;
+      Args        : in     Arg_Index_Array)
+   is
+      use WisiToken;
+   begin
+      for Index of Args loop
+         declare
+            Token : Augmented_Token renames Data.Terminals 
(Tree.Min_Terminal_Index (Tree_Tokens (Index)));
+         begin
+            Data.Put_Language_Action
+              (Check_Parens_Action_Index & Buffer_Pos'Image 
(Token.Char_Region.First) &
+                 Buffer_Pos'Image (Token.Char_Region.Last));
+         end;
+      end loop;
+   end Check_Parens;
+
+end Wisi.WisiToken_Grammar;
diff --git a/wisi-wisitoken_grammar.ads b/wisi-wisitoken_grammar.ads
new file mode 100644
index 0000000..d2c3e5d
--- /dev/null
+++ b/wisi-wisitoken_grammar.ads
@@ -0,0 +1,44 @@
+--  Abstract :
+--
+--  Wisitoken_grammar parser language-specific runtime
+--
+--  Copyright (C) 2019 Stephen Leake All Rights Reserved.
+--
+--  This library is free software;  you can redistribute it and/or modify it
+--  under terms of the  GNU General Public License  as published by the Free
+--  Software  Foundation;  either version 3,  or (at your  option) any later
+--  version. This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN-
+--  TABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+--  As a special exception under Section 7 of GPL version 3, you are granted
+--  additional permissions described in the GCC Runtime Library Exception,
+--  version 3.1, as published by the Free Software Foundation.
+
+pragma License (Modified_GPL);
+
+package Wisi.WisiToken_Grammar is
+
+   Language_Protocol_Version : constant String := "1";
+
+   type Parse_Data_Type is new Wisi.Parse_Data_Type with null record;
+
+   overriding
+   procedure Initialize
+     (Data              : in out Parse_Data_Type;
+      Lexer             : in     WisiToken.Lexer.Handle;
+      Descriptor        : access constant WisiToken.Descriptor;
+      Source_File_Name  : in     String;
+      Post_Parse_Action : in     Post_Parse_Action_Type;
+      Begin_Line        : in     WisiToken.Line_Number_Type;
+      End_Line          : in     WisiToken.Line_Number_Type;
+      Begin_Indent      : in     Integer;
+      Params            : in     String);
+
+   procedure Check_Parens
+     (Data        : in out Wisi.Parse_Data_Type'Class;
+      Tree        : in     WisiToken.Syntax_Trees.Tree;
+      Tree_Tokens : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array;
+      Args        : in     Arg_Index_Array);
+
+end Wisi.WisiToken_Grammar;
diff --git a/wisitoken-grammar-mmm.el b/wisitoken-grammar-mmm.el
new file mode 100644
index 0000000..7c76b21
--- /dev/null
+++ b/wisitoken-grammar-mmm.el
@@ -0,0 +1,29 @@
+;;; Define multi-major-mode stuff for wisitoken-grammar mode.  -*- 
lexical-binding:t -*-
+
+(require 'mmm-mode)
+
+(mmm-add-classes
+ '((wisi-action
+    :match-submode wisitoken-grammar-mmm-submode
+    :face mmm-code-submode-face
+    :front "%("
+    :back ")%"
+    :insert ((?a wisi-action nil @ "%(" @ "" _ "" @ ")%")))
+   (wisi-code
+    :match-submode wisi-mmm-submode
+    :face mmm-code-submode-face
+    :front "%{"
+    :back "}%"
+    :insert ((?a wisi-code nil @ "%{" @ "" _ "" @ "}%")))
+   ))
+
+(defvar wisitoken-grammar-action-mode) ;; in wisitoken-grammar-mode.el
+(defun wisitoken-grammar-mmm-submode (_delim)
+  "for :match-submode"
+  wisitoken-grammar-action-mode)
+
+(add-to-list 'mmm-mode-ext-classes-alist '(wisitoken-grammar-mode nil 
wisi-action))
+(add-to-list 'mmm-mode-ext-classes-alist '(wisitoken-grammar-mode nil 
wisi-code))
+
+(provide 'wisitoken-grammar-mmm)
+;;; end of file
diff --git a/wisitoken-grammar-mode.el b/wisitoken-grammar-mode.el
new file mode 100644
index 0000000..aab4ee7
--- /dev/null
+++ b/wisitoken-grammar-mode.el
@@ -0,0 +1,370 @@
+;;; wisitoken-grammar-mode.el --- Major mode for editing WisiToken grammar 
files  -*- lexical-binding:t -*-
+
+;; Copyright (C) 2017 - 2019  Free Software Foundation, Inc.
+
+;; Author: Stephen Leake <address@hidden>
+;; Maintainer: Stephen Leake <address@hidden>
+;; Keywords: languages
+;; Version: 1.0.0
+;; package-requires: ((wisi "2.1.1") (emacs "25.0") (mmm-mode "0.5.7"))
+
+;; (Gnu ELPA requires single digits between dots in versions)
+;; no ’url’; just ELPA
+
+;; This file is part of GNU Emacs.
+
+;; wisitoken-grammar-mode 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, or (at your option)
+;; any later version.
+
+;; wisitoken-grammar-mode 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; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+;;; Commentary:
+
+(require 'cl-lib)
+(require 'xref)
+(require 'wisi)
+(require 'wisitoken_grammar_1-process)
+(require 'wisi-process-parse)
+
+(eval-and-compile
+  (when (locate-library "mmm-mode")
+    (require 'wisitoken-grammar-mmm)))
+
+(defgroup wisitoken-grammar nil
+  "Major mode for editing Wisi grammar files in Emacs."
+  :group 'languages)
+
+(defcustom wisitoken-grammar-process-parse-exec 
"wisitoken_grammar_mode_parse.exe"
+  "Name of executable to use for external process wisitoken-grammar parser,"
+  :type 'string
+  :group 'wisitoken-grammar)
+
+(defvar wisitoken-grammar-mode-syntax-table
+  (let ((table (make-syntax-table)))
+    ;; see wisitoken-grammar-syntax-propertize for comment start
+    (modify-syntax-entry ?\n ">   " table)
+    (modify-syntax-entry ?= ".   " table) ;; default symbol
+    (modify-syntax-entry ?* ".   " table) ;; default symbol
+    table))
+
+(defvar wisitoken-grammar-mode-map
+  (let ((map (make-sparse-keymap)))
+    ;; C-c <letter> are reserved for users
+
+    ;; comment-dwim is in global map on M-;
+    (define-key map "\C-c\C-f" 'wisi-show-parse-error)
+    (define-key map "\C-c\C-m" 'wisitoken-grammar-mmm-parse)
+    (define-key map [S-return] 'wisitoken-grammar-new-line)
+    map
+  )  "Local keymap used for wisitoken-grammar mode.")
+
+(defvar-local wisitoken-grammar-action-mode nil
+  "Emacs major mode used for actions and code, inferred from ’%generate’ 
declaration or file local variable.")
+
+(cl-defstruct (wisitoken-grammar-parser (:include wisi-process--parser))
+  ;; no new slots
+  )
+
+(cl-defmethod wisi-parse-format-language-options ((_parser 
wisitoken-grammar-parser))
+  "")
+
+(defun wisitoken-grammar-check-parens (sexp)
+  "For `wisi-process--parse-Language'"
+  ;; sexp is [Language index token-first token-last]
+
+  ;; Check for missing parens in the action; otherwise only
+  ;; checked at grammar generation time.
+    (let* ((start (aref sexp 2))
+          (stop (1+ (aref sexp 3)))
+          (paren-depth-start (nth 0 (syntax-ppss start)))
+          (paren-depth-stop (nth 0 (syntax-ppss stop))))
+      ;; We could check for paren-depth = 0 at start, but then we'd
+      ;; get errors on every action after that.
+      (unless (= paren-depth-start paren-depth-stop)
+       (push
+        (make-wisi--parse-error
+         :pos (copy-marker start)
+         :message
+         (format "%s:%d: missing paren or bracket in %d %d"
+                 (if (buffer-file-name) (file-name-nondirectory 
(buffer-file-name)) "")
+                 ;; file-name can be nil during vc-resolve-conflict
+                 (line-number-at-pos start)
+                 start stop))
+        (wisi-parser-parse-errors wisi--parser))
+
+       ;; As of mmm version 0.5.7, mmm-parse-region calls
+       ;; font-lock-ensure, which calls us. So we can't do
+       ;; mmm-parse-region here. FIXME: fix mmm to do parse-region in
+       ;; syntax-propertize.
+       )))
+
+(defun wisitoken-grammar-in-action-or-comment ()
+  ;; (info "(elisp) Parser State" "*info syntax-ppss*")
+  (let* ((state (syntax-ppss))
+        (paren-depth (nth 0 state))
+        (done nil)
+        (result nil))
+    (cond
+     ((nth 3 state)
+      ;; in string
+      t)
+
+     ((nth 4 state)
+      ;; in comment
+      t)
+
+     ((> paren-depth 0)
+      ;; check for action delimiters
+      (save-excursion
+       (while (not done)
+         (if (= ?% (char-before (nth 1 state)))
+             ;; in code, regexp, or action
+             (setq done t
+                   result t)
+
+           ;; else go up one level
+           (setq state (syntax-ppss (1- (nth 1 state))))
+           )))
+      result)
+     )))
+
+(defun wisitoken-grammar-find-begin (begin)
+  "Starting at BEGIN, search backward for a parse start point."
+  (goto-char begin)
+  (cond
+   ((wisi-search-backward-skip "^%[^({[]\\|:" 
#'wisitoken-grammar-in-action-or-comment)
+    (when (looking-at ":")
+      ;; Move back to before the nonterminal name
+      (forward-comment (- (line-number-at-pos (point))))
+      (skip-syntax-backward "w_"))
+    (point))
+
+   (t
+    (point-min))
+   ))
+
+(defun wisitoken-grammar-find-end (end)
+  "Starting at END, search forward for a parse end point."
+  (goto-char end)
+  (cond
+   ((wisi-search-forward-skip "^%\\|;$" 
#'wisitoken-grammar-in-action-or-comment)
+    (point))
+
+   (t
+    (point-max))
+   ))
+
+(cl-defmethod wisi-parse-expand-region ((_parser wisitoken-grammar-parser) 
begin end)
+    (save-excursion
+      (let ((begin-cand (wisitoken-grammar-find-begin begin))
+           (end-cand (wisitoken-grammar-find-end end)))
+       (cons begin-cand end-cand)
+       )))
+
+(defun wisitoken-grammar-mmm-parse ()
+  "If in action, call `mmm-parse-region' on it."
+  (interactive)
+  (save-excursion
+    (let* ((begin (search-backward-regexp "%[(}]" nil t))
+          (end   (when begin (search-forward-regexp "[)}]%" nil t))))
+      (when (and begin end)
+       (mmm-parse-region begin end)))
+    ))
+
+(defun wisitoken-grammar-new-line ()
+  "If in comment, insert new comment line.
+If in nonterminal, insert new production right hand side.
+Otherwise insert a plain new line."
+  (interactive)
+  (if (nth 4 (syntax-ppss))
+      ;; in comment
+      (comment-indent-new-line)
+
+    (let ((pos (point))
+         (cache (save-excursion (wisi-goto-statement-start))))
+       (if (and cache
+                (eq (wisi-cache-nonterm cache) 'nonterminal)
+                (wisi-cache-end cache)
+                (> (wisi-cache-end cache) pos))
+           (progn
+             ;; in nonterminal
+             (insert "\n| ")
+             (indent-according-to-mode))
+
+         (newline-and-indent)
+         ))
+    ))
+
+(defun wisitoken-grammar-which-function ()
+  "For `which-func-functions', `add-log-current-defun-function'."
+  (wisi-validate-cache (point-min) (point-max) nil 'navigate)
+  ;; no message on parse fail, since this could be called from which-func-mode
+  (when (wisi-cache-covers-pos 'navigate (point))
+    (save-excursion
+      (wisi-goto-statement-start)
+      (wisi-next-name))))
+
+(defun wisitoken-grammar-add-log-current-function ()
+  "For `add-log-current-defun-function'; return name of current non-terminal 
or declaration."
+  ;; add-log-current-defun is typically called with point at the start
+  ;; of an ediff change section, which is before the start of the
+  ;; declaration of a new item. So go to the end of the current line
+  ;; first
+  (save-excursion
+    (end-of-line 1)
+    (wisitoken-grammar-which-function)))
+
+(defun wisitoken-grammar-syntax-propertize (start end)
+  "Assign `syntax-table' properties in accessible part of buffer."
+  ;; (info "(elisp)Syntax Properties")
+  ;;
+  ;; called from `syntax-propertize', inside save-excursion 
with-silent-modifications
+  ;; syntax-propertize-extend-region-functions is set to
+  ;; syntax-propertize-wholelines by default.
+  (let ((inhibit-read-only t)
+       (inhibit-point-motion-hooks t))
+    (goto-char start)
+    (save-match-data
+      (while (re-search-forward
+             (concat
+              "\\(;;\\)"     ;; comment start
+              "\\|\\(%\\[\\)" ;; regexp begin
+              )
+             end t)
+       (cond
+        ((match-beginning 1)
+         (put-text-property (match-beginning 1) (match-end 1) 'syntax-table 
'(11 . nil)))
+
+        ((match-beginning 2)
+         (let ((begin (match-beginning 2))
+               (end (search-forward "]%")))
+           ;; allow single quotes in regexp to not mess up the rest of the 
buffer
+           (put-text-property begin end 'syntax-table '(11 . nil))
+           ))
+        ))
+      )))
+
+(defun wisitoken-grammar-set-action-mode ()
+  (save-excursion
+    (goto-char (point-min))
+    (if (search-forward-regexp "%generate +\\([A-Za-z_0-9]+\\) 
*\\([A-Za-z_0-9]+\\)?" (point-max) t)
+       (cond
+        ((string-equal (match-string 1) "None")
+         ;; unit test
+         (setq wisitoken-grammar-action-mode 'emacs-lisp-mode))
+
+        ((or
+          (string-equal (match-string 2) "Ada_Emacs")
+          (string-equal (match-string 2) "Elisp")
+          (string-equal (match-string 2) "elisp"))
+         (setq wisitoken-grammar-action-mode 'emacs-lisp-mode))
+
+        ((string-equal (match-string 2) "Ada")
+         (setq wisitoken-grammar-action-mode 'ada-mode))
+
+        (t
+         (error "unrecognized output language %s" (match-string 2)))
+        )
+
+      ;; We can still support the grammar statements, just not the actions.
+      (setq wisitoken-grammar-action-mode 'nil))))
+
+
+;;; xref integration
+(defun wisitoken-grammar--xref-backend ()
+  'wisitoken-grammar)
+
+(cl-defmethod xref-backend-identifier-at-point ((_backend (eql 
wisitoken-grammar)))
+  (wisi-xref-identifier-at-point))
+
+(cl-defmethod xref-backend-identifier-completion-table ((_backend (eql 
wisitoken-grammar)))
+  (wisi-xref-identifier-completion-table))
+
+(cl-defmethod xref-backend-definitions ((_backend (eql wisitoken-grammar)) 
identifier)
+  (unless (and (string-match wisi-xref-ident-regexp identifier)
+              (match-string 2 identifier))
+    ;; Identifier is from identifier-at-point; get line from completion table
+    (setq identifier (try-completion identifier 
(wisi-xref-identifier-completion-table)))
+    (unless (test-completion identifier 
(wisi-xref-identifier-completion-table))
+      (setq identifier (completing-read "decl: " 
(wisi-xref-identifier-completion-table) nil t identifier)))
+    (string-match wisi-xref-ident-regexp identifier))
+
+  (let* ((ident (match-string 1 identifier))
+        (line-str (match-string 2 identifier))
+        (line (when line-str (string-to-number line-str))))
+    (when line
+      (list (xref-make ident (xref-make-file-location (buffer-file-name) line  
0))))
+    ))
+
+;;; debug
+(defun wisitoken-grammar-set-exec (exec-file)
+  "Set EXEC-FILE for current and future wisitoken-grammar parsers."
+  (interactive "f")
+  (setq wisitoken-grammar-process-parse-exec exec-file)
+  (wisi-process-parse-set-exec "wisitoken-grammar" exec-file))
+
+;;;;
+;;;###autoload
+(define-derived-mode wisitoken-grammar-mode prog-mode "Wisi"
+  "A major mode for Wisi grammar files."
+  (set (make-local-variable 'syntax-propertize-function) 
'wisitoken-grammar-syntax-propertize)
+  (syntax-ppss-flush-cache (point-min));; reparse with new function
+  (set (make-local-variable 'parse-sexp-ignore-comments) t)
+  (set (make-local-variable 'parse-sexp-lookup-properties) t)
+
+  (set (make-local-variable 'comment-start) ";;")
+  (set (make-local-variable 'comment-end) "") ;; setting this to \n causes 
errors
+  (set (make-local-variable 'comment-use-syntax) t);; the automatic test for 
this does not use syntax-propertize
+  (set (make-local-variable 'comment-start-skip) ";;*[ \t]*")
+  (set (make-local-variable 'comment-multi-line) nil)
+  (set (make-local-variable 'require-final-newline) t)
+  (set (make-local-variable 'add-log-current-defun-function)
+       #'wisitoken-grammar-add-log-current-function)
+
+  (wisitoken-grammar-set-action-mode)
+
+  (add-hook 'xref-backend-functions #'wisitoken-grammar--xref-backend
+           nil ;; append
+           t)
+  (add-hook 'before-save-hook 'delete-trailing-whitespace nil t)
+  (add-hook 'before-save-hook 'copyright-update nil t)
+
+  (wisi-setup
+   :indent-calculate nil
+   :post-indent-fail nil
+   :parser (wisi-process-parse-get
+           (make-wisitoken-grammar-parser
+            :label "wisitoken-grammar"
+            :language-protocol-version "1"
+            :exec-file wisitoken-grammar-process-parse-exec
+            :face-table wisitoken_grammar_1-process-face-table
+            :token-table wisitoken_grammar_1-process-token-table
+            :language-action-table [wisitoken-grammar-check-parens]
+            ))
+   :lexer nil)
+
+  ;; Our wisi parser does not fontify comments and strings, so tell
+  ;; font-lock to do that.
+  (setq font-lock-defaults
+       '(nil ;; keywords
+         nil ;; keywords-only
+         ))
+  )
+
+;;;###autoload
+(add-to-list 'auto-mode-alist '("\\.wy\\'" . wisitoken-grammar-mode))
+
+(put 'wisitoken-grammar-mode 'custom-mode-group 'wisitoken-grammar)
+
+(provide 'wisitoken-grammar-mode)
+;;; wisitoken-grammar-mode.el ends here
diff --git a/wisitoken_grammar.gpr b/wisitoken_grammar.gpr
new file mode 100644
index 0000000..ce95959
--- /dev/null
+++ b/wisitoken_grammar.gpr
@@ -0,0 +1,74 @@
+--  Abstract :
+--
+--  build executables
+--
+--  Copyright (C) 2017 Stephen Leake All Rights Reserved.
+--
+--  This program is free software; you can redistribute it and/or
+--  modify it under terms of the GNU General Public License as
+--  published by the Free Software Foundation; either version 3, 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
+--  distributed with this program; see file COPYING. If not, write to
+--  the Free Software Foundation, 51 Franklin Street, Suite 500, Boston,
+--  MA 02110-1335, USA.
+
+with "wisi_runtime";
+with "wisitoken";
+with "standard_common";
+project WisiToken_Grammar is
+
+   for Main use
+     ("wisitoken_grammar_mode_parse.ads",
+      "run_wisitoken_grammar_parse.ads"
+     );
+
+   for Source_Dirs use (".");
+
+   case Standard_Common.Profile is
+   when "On" =>
+      for Object_Dir use "obj_pro";
+      for Exec_Dir use "exec_pro";
+
+   when "Off" =>
+      for Object_Dir use "obj";
+      for Exec_Dir use ".";
+   end case;
+
+   for Languages use ("Ada", "C");
+
+   package Compiler is
+
+      case Standard_Common.Build is
+      when "Debug" =>
+         for Default_Switches ("Ada") use
+           Standard_Common.Compiler.Common_Switches &
+           Standard_Common.Compiler.Style_Checks &
+           Standard_Common.Compiler.Debug_Switches;
+
+         for Default_Switches ("C") use 
Standard_Common.Compiler.Debug_Switches_C;
+
+      when "Normal" =>
+         for Default_Switches ("Ada") use
+           Standard_Common.Compiler.Common_Switches &
+           Standard_Common.Compiler.Style_Checks &
+           Standard_Common.Compiler.Release_Switches;
+
+         for Default_Switches ("C") use 
Standard_Common.Compiler.Release_Switches_C;
+      end case;
+
+   end Compiler;
+
+   package Builder is
+      --  We use ".exe" extension even on non-Windows, to simplify the 
makefiles.
+      for Executable_Suffix use ".exe";
+   end Builder;
+
+   package Binder is
+      for default_switches ("Ada") use ("-E"); -- symbolic traceback
+   end Binder;
+
+end WisiToken_Grammar;
diff --git a/wisitoken_grammar_1.wy b/wisitoken_grammar_1.wy
new file mode 100644
index 0000000..784fe48
--- /dev/null
+++ b/wisitoken_grammar_1.wy
@@ -0,0 +1,287 @@
+;;; WisiToken grammar for WisiToken grammar, for Emacs wisitoken-grammar mode.
+;;
+;;  WisiToken uses the same grammar for parsing .wy files, but with
+;;  different actions.
+;;  (ediff "wisitoken_grammar_1.wy" "../org.wisitoken/wisitoken_grammar.wy")
+;;
+;;  The supported syntax is similar to several flavors of Extended
+;;  Backus-Naur form, as defined by
+;;  https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form
+;;
+;;  In particular, we support grammars for popular languages:
+;;
+;;  - the Python grammar file given at
+;;    https://docs.python.org/3.8/reference/grammar.html
+;;
+;;  - the Java grammar file given at
+;;    https://github.com/antlr/grammars-v4/tree/master/java
+;;
+;;  - the Ada grammar given in the Ada Language Reference Manual Annex
+;;    P; see http://ada-auth.org/arm.html
+;;
+;;  This file uses only plain BNF syntax, to simplify working on the
+;;  EBNF syntax.
+
+%code copyright_license %{
+;;  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
+;;
+;;  Author: Stephen Leake <address@hidden>
+;;
+;;  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/>.
+}%
+
+%code actions spec post %{
+   Partial_Parse_Active    : Boolean := False;
+   Partial_Parse_Byte_Goal : WisiToken.Buffer_Pos := WisiToken.Buffer_Pos'Last;
+}%
+
+%meta_syntax EBNF
+
+;; LR1 for better error correction
+%generate LR1 Ada_Emacs re2c Process
+%start compilation_unit_list
+
+%language_runtime "Wisi.WisiToken_Grammar"
+
+%keyword CODE "code"
+%keyword END "end"
+%keyword IF "if"
+%keyword KEYWORD "keyword"
+%keyword NON_GRAMMAR "non_grammar"
+%keyword TOKEN "token"
+
+%token <delimited-text> RAW_CODE "%{" "}%"
+%token <delimited-text> REGEXP "%[" "]%"
+%token <delimited-text> ACTION "%(" ")%"
+
+%token <punctuation> BAR "|"
+%token <punctuation> COLON ":"
+%token <punctuation> COLON_COLON_EQUAL "::="
+%token <punctuation> COMMA ","
+%token <punctuation> EQUAL "="
+%token <punctuation> GREATER ">"
+%token <punctuation> LEFT_BRACE "{"
+%token <punctuation> LEFT_BRACKET "["
+%token <punctuation> LEFT_PAREN "("
+%token <punctuation> LESS "<"
+%token <punctuation> MINUS "-" ;; for {}-
+%token <punctuation> PERCENT "%"
+%token <punctuation> PLUS "+" ;; for ()+
+%token <punctuation> QUESTION "?" ;; for ()? same as []
+%token <punctuation> RIGHT_BRACE "}"
+%token <punctuation> RIGHT_BRACKET "]"
+%token <punctuation> RIGHT_PAREN ")"
+%token <punctuation> SEMICOLON ";"
+%token <punctuation> SLASH "/"
+%token <punctuation> STAR "*" ;; for ()* same as {}
+
+%token <number> NUMERIC_LITERAL %[ [0-9-][0-9_]* ]% "1234567890"
+%token <symbol> IDENTIFIER %[ 
[a-zA-Z\x80-\U0010FFFF][-0-9a-zA-Z_\x80-\U0010FFFF]* ]% "bogus"
+
+;; In re2c regexps, '...' indicates a case-insensitive match.
+;;
+;; In nonterminals, '...' indicates a literal, which we translate to a
+;; token; case-sensitive is then determined by the 'case_insensitive'
+;; declaration.
+;;
+;; 0x22 = "
+;; 0x27 = '
+%token <string-double> STRING_LITERAL_1 %[ 
(["][\x20-\x21\x23-\U0010FFFF]*["])+ ]% '""'
+%token <string-single> STRING_LITERAL_2 %[ 
(['][\x20-\x26\x28-\U0010FFFF]*['])+ ]% "''"
+
+%non_grammar <non-reporting> WHITESPACE %[ [ \t] ]%
+%non_grammar <new-line> NEW_LINE %[ [\x0a]|[\x0d][\x0a] ]%
+%non_grammar <comment> COMMENT %[ ";;"[^\x0a\x04]* ]%
+
+%elisp_face font-lock-constant-face
+%elisp_face font-lock-function-name-face
+%elisp_face font-lock-keyword-face
+%elisp_face font-lock-string-face
+%elisp_face font-lock-type-face
+%elisp_face nil
+
+%elisp_action face wisi-check-parens Check_Parens
+
+%mckenzie_cost_default 2 2 2 2
+%mckenzie_cost_insert SEMICOLON 1
+%mckenzie_enqueue_limit 10_000
+%mckenzie_check_limit 4
+
+%conflict SHIFT/REDUCE in state declaration, declaration  on token IDENTIFIER
+%conflict SHIFT/REDUCE in state declaration_item_list, declaration  on token 
IDENTIFIER
+%conflict SHIFT/REDUCE in state nonterminal, nonterminal  on token IDENTIFIER
+%conflict SHIFT/REDUCE in state rhs_list, nonterminal  on token PERCENT
+%conflict SHIFT/REDUCE in state rhs_item_list, rhs  on token IDENTIFIER
+%conflict SHIFT/REDUCE in state rhs_list, rhs_list  on token IDENTIFIER
+
+;;;; grammar rules, no particular order
+
+declaration
+  : PERCENT token_keyword_non_grammar IDENTIFIER declaration_item_list
+    %((progn
+        (wisi-statement-action [1 statement-start])
+        (wisi-name-action 3)
+        (wisi-face-apply-action
+         [1 nil font-lock-constant-face
+            2 nil font-lock-keyword-face
+            3 nil font-lock-function-name-face])
+        (wisi-indent-action [nil nil nil (wisi-hanging 4 2)])))%
+  | PERCENT CODE identifier_list RAW_CODE
+    %( (wisi-face-apply-action [1 nil font-lock-constant-face 2 nil 
font-lock-keyword-face]) )%
+  | PERCENT IDENTIFIER declaration_item_list
+    %((progn
+        (wisi-face-apply-action [1 nil font-lock-constant-face 2 nil 
font-lock-keyword-face])
+        (wisi-indent-action [nil nil (wisi-hanging 4 2)])))%
+  | PERCENT IDENTIFIER
+    %( (wisi-face-apply-action [1 nil font-lock-constant-face 2 nil 
font-lock-keyword-face]) )%
+  | PERCENT IF IDENTIFIER EQUAL IDENTIFIER
+    %( (wisi-face-apply-action [1 nil font-lock-constant-face 2 nil 
font-lock-keyword-face]) )%
+  | PERCENT END IF
+    %( (wisi-face-apply-action [1 nil font-lock-constant-face 2 nil 
font-lock-keyword-face 3 nil
+        font-lock-keyword-face]) )%
+  ;
+
+token_keyword_non_grammar
+  : KEYWORD
+  | NON_GRAMMAR LESS IDENTIFIER GREATER
+    %( (wisi-face-apply-action [3 nil font-lock-type-face]) )%
+  | TOKEN LESS IDENTIFIER GREATER
+    %( (wisi-face-apply-action [3 nil font-lock-type-face]) )%
+  ;
+
+identifier_list
+  : IDENTIFIER
+  | identifier_list IDENTIFIER
+  ;
+
+declaration_item_list
+  : declaration_item
+  | declaration_item_list declaration_item
+  ;
+
+declaration_item
+  : COMMA
+  | IDENTIFIER
+  | EQUAL
+  | LEFT_PAREN
+  | NUMERIC_LITERAL
+  | REGEXP
+    %((wisi-face-apply-action [1 nil font-lock-string-face]))%
+  | RIGHT_PAREN
+  | SLASH
+  | STRING_LITERAL_1
+  | STRING_LITERAL_2
+  | TOKEN
+  ;; ",", "token", "/", "(", ")" appear in %conflict declarations
+  ;
+
+nonterminal
+  : IDENTIFIER (COLON | COLON_COLON_EQUAL) rhs_list semicolon_opt
+    %( (progn
+         (wisi-statement-action [1 statement-start 4 statement-end])
+         (wisi-name-action 1)
+         (wisi-face-apply-action [1 nil font-lock-function-name-face])
+         (wisi-indent-action [nil 2 2 2])) )%
+  ;
+
+semicolon_opt :
+;; Terminating semicolon optional for Python grammar syntax (see
+;; header comments).
+  SEMICOLON | ;
+
+rhs_list
+  : rhs
+  %((wisi-indent-action [[2 nil]]))%
+  | rhs_list BAR rhs
+  %((wisi-indent-action [nil nil 2]))%
+  | rhs_list PERCENT IF IDENTIFIER EQUAL IDENTIFIER
+  | rhs_list PERCENT END IF
+  ;
+
+rhs
+  : ;; empty
+  | rhs_item_list
+    %((wisi-indent-action [[(wisi-hanging nil 2) nil]]))%
+  | rhs_item_list ACTION
+    %((wisi-check-parens [2]))%
+  | rhs_item_list ACTION ACTION
+    %((wisi-check-parens [2 3]))%
+  ;
+
+rhs_attribute
+  : LESS IDENTIFIER EQUAL IDENTIFIER GREATER
+  ;
+
+rhs_element
+  : rhs_item
+  | IDENTIFIER EQUAL rhs_item
+  ;
+
+rhs_item_list
+  : rhs_element
+  | rhs_item_list rhs_element
+  ;
+
+rhs_item
+  : IDENTIFIER
+  | STRING_LITERAL_2   ;; value of token
+  | rhs_attribute ;; ANTLR attribute
+  | rhs_optional_item
+  | rhs_multiple_item
+  | rhs_group_item
+  ;
+
+rhs_group_item
+  : LEFT_PAREN rhs_alternative_list RIGHT_PAREN
+  ;
+
+rhs_optional_item
+  : LEFT_BRACKET rhs_alternative_list RIGHT_BRACKET
+  | LEFT_PAREN rhs_alternative_list RIGHT_PAREN QUESTION
+  | IDENTIFIER QUESTION
+  | STRING_LITERAL_2 QUESTION
+  ;
+
+rhs_multiple_item
+  : LEFT_BRACE rhs_alternative_list RIGHT_BRACE
+  | LEFT_BRACE rhs_alternative_list RIGHT_BRACE MINUS
+  | LEFT_PAREN rhs_alternative_list RIGHT_PAREN PLUS
+  | LEFT_PAREN rhs_alternative_list RIGHT_PAREN STAR
+  | IDENTIFIER PLUS
+  | IDENTIFIER STAR
+  ;
+
+rhs_alternative_list
+  : rhs_item_list
+  | rhs_alternative_list BAR rhs_item_list
+  ;
+
+;; We don't enforce a complete order, nor require all parts, so
+;; partial files can still be parsed successfully.
+compilation_unit
+  : declaration
+  | nonterminal
+  ;
+
+;; Compute indent for trailing comments.
+compilation_unit_list
+  : compilation_unit
+    %((wisi-indent-action [[0 0]]))%
+  | compilation_unit_list compilation_unit
+    %((wisi-indent-action [0 [0 0]]))%
+  ;
+
+;; end of file
diff --git a/wisitoken_grammar_1_process_actions.adb 
b/wisitoken_grammar_1_process_actions.adb
new file mode 100644
index 0000000..692d9e1
--- /dev/null
+++ b/wisitoken_grammar_1_process_actions.adb
@@ -0,0 +1,346 @@
+--  generated parser support file.
+--  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS wisitoken_grammar_1.wy
+--
+
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
+--
+--  Author: Stephen Leake <address@hidden>
+--
+--  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/>.
+
+with Wisi; use Wisi;
+with Wisi.WisiToken_Grammar; use Wisi.WisiToken_Grammar;
+package body Wisitoken_Grammar_1_Process_Actions is
+
+
+   procedure declaration_0
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         Statement_Action (Parse_Data, Tree, Nonterm, Tokens, (1 => (1, 
Statement_Start)));
+         Name_Action (Parse_Data, Tree, Nonterm, Tokens, 3);
+      when Face =>
+         Face_Apply_Action (Parse_Data, Tree, Nonterm, Tokens, ((1, 5, 0), (2, 
5, 2), (3, 5, 1)));
+      when Indent =>
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Label => None))), (False, (Simple,
+         (Label => None))), (False, (Simple, (Label => None))), (False, 
(Hanging_0, (Int, 4), (Int, 2)))));
+      end case;
+   end declaration_0;
+
+   procedure declaration_1
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         Face_Apply_Action (Parse_Data, Tree, Nonterm, Tokens, ((1, 5, 0), (2, 
5, 2)));
+      when Indent =>
+         null;
+      end case;
+   end declaration_1;
+
+   procedure declaration_2
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         Face_Apply_Action (Parse_Data, Tree, Nonterm, Tokens, ((1, 5, 0), (2, 
5, 2)));
+      when Indent =>
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Label => None))), (False, (Simple,
+         (Label => None))), (False, (Hanging_0, (Int, 4), (Int, 2)))));
+      end case;
+   end declaration_2;
+
+   procedure declaration_3
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         Face_Apply_Action (Parse_Data, Tree, Nonterm, Tokens, ((1, 5, 0), (2, 
5, 2)));
+      when Indent =>
+         null;
+      end case;
+   end declaration_3;
+
+   procedure declaration_4
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         Face_Apply_Action (Parse_Data, Tree, Nonterm, Tokens, ((1, 5, 0), (2, 
5, 2)));
+      when Indent =>
+         null;
+      end case;
+   end declaration_4;
+
+   procedure declaration_5
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         Face_Apply_Action (Parse_Data, Tree, Nonterm, Tokens, ((1, 5, 0), (2, 
5, 2), (3, 5, 2)));
+      when Indent =>
+         null;
+      end case;
+   end declaration_5;
+
+   procedure token_keyword_non_grammar_1
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         Face_Apply_Action (Parse_Data, Tree, Nonterm, Tokens, (1 => (3, 5, 
4)));
+      when Indent =>
+         null;
+      end case;
+   end token_keyword_non_grammar_1;
+
+   procedure token_keyword_non_grammar_2
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         Face_Apply_Action (Parse_Data, Tree, Nonterm, Tokens, (1 => (3, 5, 
4)));
+      when Indent =>
+         null;
+      end case;
+   end token_keyword_non_grammar_2;
+
+   procedure declaration_item_5
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         Face_Apply_Action (Parse_Data, Tree, Nonterm, Tokens, (1 => (1, 5, 
3)));
+      when Indent =>
+         null;
+      end case;
+   end declaration_item_5;
+
+   procedure nonterminal_0
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         Statement_Action (Parse_Data, Tree, Nonterm, Tokens, ((1, 
Statement_Start), (4, Statement_End)));
+         Name_Action (Parse_Data, Tree, Nonterm, Tokens, 1);
+      when Face =>
+         Face_Apply_Action (Parse_Data, Tree, Nonterm, Tokens, (1 => (1, 5, 
1)));
+      when Indent =>
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Label => None))), (False, (Simple,
+         (Int, 2))), (False, (Simple, (Int, 2))), (False, (Simple, (Int, 
2)))));
+      end case;
+   end nonterminal_0;
+
+   procedure rhs_list_0
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         null;
+      when Indent =>
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, (1 => (True, 
(Simple, (Int, 2)), (Simple, (Label =>
+         None)))));
+      end case;
+   end rhs_list_0;
+
+   procedure rhs_list_1
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         null;
+      when Indent =>
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Label => None))), (False, (Simple,
+         (Label => None))), (False, (Simple, (Int, 2)))));
+      end case;
+   end rhs_list_1;
+
+   procedure rhs_1
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         null;
+      when Indent =>
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, (1 => (True, 
(Hanging_0, (Label => None), (Int, 2)),
+         (Simple, (Label => None)))));
+      end case;
+   end rhs_1;
+
+   procedure rhs_2
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+      pragma Unreferenced (Nonterm);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         Check_Parens (Wisi.Parse_Data_Type'Class (User_Data), Tree, Tokens, 
(1 => 2));
+      when Indent =>
+         null;
+      end case;
+   end rhs_2;
+
+   procedure rhs_3
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+      pragma Unreferenced (Nonterm);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         Check_Parens (Wisi.Parse_Data_Type'Class (User_Data), Tree, Tokens, 
(2, 3));
+      when Indent =>
+         null;
+      end case;
+   end rhs_3;
+
+   procedure compilation_unit_list_0
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         null;
+      when Indent =>
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, (1 => (True, 
(Simple, (Int, 0)), (Simple, (Int, 0)))));
+      end case;
+   end compilation_unit_list_0;
+
+   procedure compilation_unit_list_1
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         null;
+      when Indent =>
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (True, (Simple, (Int, 0)),
+         (Simple, (Int, 0)))));
+      end case;
+   end compilation_unit_list_1;
+
+end Wisitoken_Grammar_1_Process_Actions;
diff --git a/wisitoken_grammar_1_process_actions.ads 
b/wisitoken_grammar_1_process_actions.ads
new file mode 100644
index 0000000..fa66e90
--- /dev/null
+++ b/wisitoken_grammar_1_process_actions.ads
@@ -0,0 +1,257 @@
+--  generated parser support file.
+--  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS wisitoken_grammar_1.wy
+--
+
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
+--
+--  Author: Stephen Leake <address@hidden>
+--
+--  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/>.
+
+with WisiToken.Syntax_Trees;
+package Wisitoken_Grammar_1_Process_Actions is
+
+   Descriptor : aliased WisiToken.Descriptor :=
+     (First_Terminal    => 3,
+      Last_Terminal     => 36,
+      First_Nonterminal => 37,
+      Last_Nonterminal  => 57,
+      EOI_ID            => 36,
+      Accept_ID         => 37,
+      Case_Insensitive  => False,
+      New_Line_ID       => 1,
+      String_1_ID       => 35,
+      String_2_ID       => 34,
+      Image             =>
+        (new String'("WHITESPACE"),
+         new String'("NEW_LINE"),
+         new String'("COMMENT"),
+         new String'("CODE"),
+         new String'("END"),
+         new String'("IF"),
+         new String'("KEYWORD"),
+         new String'("NON_GRAMMAR"),
+         new String'("TOKEN"),
+         new String'("RAW_CODE"),
+         new String'("REGEXP"),
+         new String'("ACTION"),
+         new String'("BAR"),
+         new String'("COLON"),
+         new String'("COLON_COLON_EQUAL"),
+         new String'("COMMA"),
+         new String'("EQUAL"),
+         new String'("GREATER"),
+         new String'("LEFT_BRACE"),
+         new String'("LEFT_BRACKET"),
+         new String'("LEFT_PAREN"),
+         new String'("LESS"),
+         new String'("MINUS"),
+         new String'("PERCENT"),
+         new String'("PLUS"),
+         new String'("QUESTION"),
+         new String'("RIGHT_BRACE"),
+         new String'("RIGHT_BRACKET"),
+         new String'("RIGHT_PAREN"),
+         new String'("SEMICOLON"),
+         new String'("SLASH"),
+         new String'("STAR"),
+         new String'("NUMERIC_LITERAL"),
+         new String'("IDENTIFIER"),
+         new String'("STRING_LITERAL_1"),
+         new String'("STRING_LITERAL_2"),
+         new String'("Wisi_EOI"),
+         new String'("wisitoken_accept"),
+         new String'("declaration"),
+         new String'("token_keyword_non_grammar"),
+         new String'("identifier_list"),
+         new String'("declaration_item_list"),
+         new String'("declaration_item"),
+         new String'("nonterminal"),
+         new String'("semicolon_opt"),
+         new String'("rhs_list"),
+         new String'("rhs"),
+         new String'("rhs_attribute"),
+         new String'("rhs_element"),
+         new String'("rhs_item_list"),
+         new String'("rhs_item"),
+         new String'("rhs_group_item"),
+         new String'("rhs_optional_item"),
+         new String'("rhs_multiple_item"),
+         new String'("rhs_alternative_list"),
+         new String'("compilation_unit"),
+         new String'("compilation_unit_list"),
+         new String'("nonterminal_004")),
+      Terminal_Image_Width => 17,
+      Image_Width          => 25,
+      Last_Lookahead       => 36);
+
+   type Token_Enum_ID is
+     (WHITESPACE_ID,
+      NEW_LINE_ID,
+      COMMENT_ID,
+      CODE_ID,
+      END_ID,
+      IF_ID,
+      KEYWORD_ID,
+      NON_GRAMMAR_ID,
+      TOKEN_ID,
+      RAW_CODE_ID,
+      REGEXP_ID,
+      ACTION_ID,
+      BAR_ID,
+      COLON_ID,
+      COLON_COLON_EQUAL_ID,
+      COMMA_ID,
+      EQUAL_ID,
+      GREATER_ID,
+      LEFT_BRACE_ID,
+      LEFT_BRACKET_ID,
+      LEFT_PAREN_ID,
+      LESS_ID,
+      MINUS_ID,
+      PERCENT_ID,
+      PLUS_ID,
+      QUESTION_ID,
+      RIGHT_BRACE_ID,
+      RIGHT_BRACKET_ID,
+      RIGHT_PAREN_ID,
+      SEMICOLON_ID,
+      SLASH_ID,
+      STAR_ID,
+      NUMERIC_LITERAL_ID,
+      IDENTIFIER_ID,
+      STRING_LITERAL_1_ID,
+      STRING_LITERAL_2_ID,
+      Wisi_EOI_ID,
+      wisitoken_accept_ID,
+      declaration_ID,
+      token_keyword_non_grammar_ID,
+      identifier_list_ID,
+      declaration_item_list_ID,
+      declaration_item_ID,
+      nonterminal_ID,
+      semicolon_opt_ID,
+      rhs_list_ID,
+      rhs_ID,
+      rhs_attribute_ID,
+      rhs_element_ID,
+      rhs_item_list_ID,
+      rhs_item_ID,
+      rhs_group_item_ID,
+      rhs_optional_item_ID,
+      rhs_multiple_item_ID,
+      rhs_alternative_list_ID,
+      compilation_unit_ID,
+      compilation_unit_list_ID,
+      nonterminal_004_ID);
+
+   type Token_Enum_ID_Array is array (Positive range <>) of Token_Enum_ID;
+   use all type WisiToken.Token_ID;
+   function "+" (Item : in Token_Enum_ID) return WisiToken.Token_ID
+     is (WisiToken.Token_ID'First + Token_Enum_ID'Pos (Item));
+   function To_Token_Enum (Item : in WisiToken.Token_ID) return Token_Enum_ID
+     is (Token_Enum_ID'Val (Item - WisiToken.Token_ID'First));
+   function "-" (Item : in WisiToken.Token_ID) return Token_Enum_ID renames 
To_Token_Enum;
+
+   procedure declaration_0
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure declaration_1
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure declaration_2
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure declaration_3
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure declaration_4
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure declaration_5
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure token_keyword_non_grammar_1
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure token_keyword_non_grammar_2
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure declaration_item_5
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure nonterminal_0
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure rhs_list_0
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure rhs_list_1
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure rhs_1
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure rhs_2
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure rhs_3
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure compilation_unit_list_0
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure compilation_unit_list_1
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+
+   Partial_Parse_Active    : Boolean := False;
+   Partial_Parse_Byte_Goal : WisiToken.Buffer_Pos := WisiToken.Buffer_Pos'Last;
+end Wisitoken_Grammar_1_Process_Actions;
diff --git a/wisitoken_grammar_1_process_main.adb 
b/wisitoken_grammar_1_process_main.adb
new file mode 100644
index 0000000..b350248
--- /dev/null
+++ b/wisitoken_grammar_1_process_main.adb
@@ -0,0 +1,1706 @@
+--  generated parser support file.
+--  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS wisitoken_grammar_1.wy
+--
+
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
+--
+--  Author: Stephen Leake <address@hidden>
+--
+--  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/>.
+
+with Wisitoken_Grammar_1_Process_Actions; use 
Wisitoken_Grammar_1_Process_Actions;
+with WisiToken.Lexer.re2c;
+with wisitoken_grammar_1_re2c_c;
+package body Wisitoken_Grammar_1_Process_Main is
+
+   package Lexer is new WisiToken.Lexer.re2c
+     (wisitoken_grammar_1_re2c_c.New_Lexer,
+      wisitoken_grammar_1_re2c_c.Free_Lexer,
+      wisitoken_grammar_1_re2c_c.Reset_Lexer,
+      wisitoken_grammar_1_re2c_c.Next_Token);
+
+   procedure Create_Parser
+     (Parser                         :    out WisiToken.Parse.LR.Parser.Parser;
+      Language_Fixes                 : in     
WisiToken.Parse.LR.Parser.Language_Fixes_Access;
+      Language_Matching_Begin_Tokens : in     
WisiToken.Parse.LR.Parser.Language_Matching_Begin_Tokens_Access;
+      Language_String_ID_Set       : in     
WisiToken.Parse.LR.Parser.Language_String_ID_Set_Access;
+      Trace                        : not null access WisiToken.Trace'Class;
+      User_Data                    : in     
WisiToken.Syntax_Trees.User_Data_Access)
+   is
+      use WisiToken.Parse.LR;
+      McKenzie_Param : constant McKenzie_Param_Type :=
+        (First_Terminal    => 3,
+         Last_Terminal     => 36,
+         First_Nonterminal => 37,
+         Last_Nonterminal  => 57,
+         Insert =>
+           (2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2),
+         Delete =>
+           (2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
+         Push_Back =>
+           (2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+            2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
+         Undo_Reduce =>
+           (2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
+         Minimal_Complete_Cost_Delta => -1,
+         Fast_Forward =>  0,
+         Matching_Begin =>  0,
+         Ignore_Check_Fail  => 2,
+         Task_Count  => 0,
+         Check_Limit => 4,
+         Check_Delta_Limit => 2147483647,
+         Enqueue_Limit => 10000);
+
+      Table : constant Parse_Table_Ptr := new Parse_Table
+        (State_First       => 0,
+         State_Last        => 209,
+         First_Terminal    => 3,
+         Last_Terminal     => 36,
+         First_Nonterminal => 37,
+         Last_Nonterminal  => 57);
+   begin
+      Table.McKenzie_Param := McKenzie_Param;
+      declare
+         procedure Subr_1
+         is begin
+            Table.States (0).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (0), 23, 1);
+            Add_Action (Table.States (0), 33, 2);
+            Table.States (0).Goto_List.Set_Capacity (4);
+            Add_Goto (Table.States (0), 38, 3);
+            Add_Goto (Table.States (0), 43, 4);
+            Add_Goto (Table.States (0), 55, 5);
+            Add_Goto (Table.States (0), 56, 6);
+            Table.States (0).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 23, 1)));
+            Table.States (1).Action_List.Set_Capacity (7);
+            Add_Action (Table.States (1), 3, 7);
+            Add_Action (Table.States (1), 4, 8);
+            Add_Action (Table.States (1), 5, 9);
+            Add_Action (Table.States (1), 6, 10);
+            Add_Action (Table.States (1), 7, 11);
+            Add_Action (Table.States (1), 8, 12);
+            Add_Action (Table.States (1), 33, 13);
+            Table.States (1).Goto_List.Set_Capacity (1);
+            Add_Goto (Table.States (1), 39, 14);
+            Table.States (1).Kernel := To_Vector (((38, 23, 3, False), (38, 
23, 3, False), (38, 23, 2, False), (38, 23,
+            1, False), (38, 23, 4, False), (38, 23, 2, False)));
+            Table.States (1).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 13)));
+            Table.States (2).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (2), 13, 15);
+            Add_Action (Table.States (2), 14, 16);
+            Table.States (2).Goto_List.Set_Capacity (1);
+            Add_Goto (Table.States (2), 57, 17);
+            Table.States (2).Kernel := To_Vector ((0 => (43, 33, 1, False)));
+            Table.States (2).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 13, 15)));
+            Table.States (3).Action_List.Set_Capacity (3);
+            Add_Action (Table.States (3), (23, 33, 36), (55, 0), 1, null, 
null);
+            Table.States (3).Kernel := To_Vector ((0 => (55, 38, 0, False)));
+            Table.States (3).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 55, 1)));
+            Table.States (4).Action_List.Set_Capacity (3);
+            Add_Action (Table.States (4), (23, 33, 36), (55, 1), 1, null, 
null);
+            Table.States (4).Kernel := To_Vector ((0 => (55, 43, 0, False)));
+            Table.States (4).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 55, 1)));
+            Table.States (5).Action_List.Set_Capacity (3);
+            Add_Action (Table.States (5), (23, 33, 36), (56, 0), 1, 
compilation_unit_list_0'Access, null);
+            Table.States (5).Kernel := To_Vector ((0 => (56, 55, 0, False)));
+            Table.States (5).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 56, 1)));
+            Table.States (6).Action_List.Set_Capacity (3);
+            Add_Action (Table.States (6), 23, 1);
+            Add_Action (Table.States (6), 33, 2);
+            Add_Action (Table.States (6), 36, Accept_It, (37, 0), 1, null, 
null);
+            Table.States (6).Goto_List.Set_Capacity (3);
+            Add_Goto (Table.States (6), 38, 3);
+            Add_Goto (Table.States (6), 43, 4);
+            Add_Goto (Table.States (6), 55, 18);
+            Table.States (6).Kernel := To_Vector (((37, 56, 1, False), (56, 
56, 2, True)));
+            Table.States (7).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (7), 33, 19);
+            Table.States (7).Goto_List.Set_Capacity (1);
+            Add_Goto (Table.States (7), 40, 20);
+            Table.States (7).Kernel := To_Vector ((0 => (38, 3, 2, False)));
+            Table.States (7).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 19)));
+            Table.States (8).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (8), 5, 21);
+            Table.States (8).Kernel := To_Vector ((0 => (38, 4, 1, False)));
+            Table.States (8).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 5, 21)));
+            Table.States (9).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (9), 33, 22);
+            Table.States (9).Kernel := To_Vector ((0 => (38, 5, 3, False)));
+            Table.States (9).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 22)));
+            Table.States (10).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (10), (1 =>  33), (39, 0), 1, null, null);
+            Table.States (10).Kernel := To_Vector ((0 => (39, 6, 0, False)));
+            Table.States (10).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 39, 1)));
+            Table.States (11).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (11), 21, 23);
+            Table.States (11).Kernel := To_Vector ((0 => (39, 7, 3, False)));
+            Table.States (11).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 21, 23)));
+            Table.States (12).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (12), 21, 24);
+            Table.States (12).Kernel := To_Vector ((0 => (39, 8, 3, False)));
+            Table.States (12).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 21, 24)));
+            Table.States (13).Action_List.Set_Capacity (13);
+            Add_Action (Table.States (13), 8, 25);
+            Add_Action (Table.States (13), 10, 26);
+            Add_Action (Table.States (13), 15, 27);
+            Add_Action (Table.States (13), 16, 28);
+            Add_Action (Table.States (13), 20, 29);
+            Add_Action (Table.States (13), 23, Reduce, (38, 3), 2, 
declaration_3'Access, null);
+            Add_Action (Table.States (13), 28, 30);
+            Add_Action (Table.States (13), 30, 31);
+            Add_Action (Table.States (13), 32, 32);
+            Add_Action (Table.States (13), 33, 33);
+            Add_Conflict (Table.States (13), 33, (38, 3), 2, 
declaration_3'Access, null);
+            Add_Action (Table.States (13), 34, 34);
+            Add_Action (Table.States (13), 35, 35);
+            Add_Action (Table.States (13), 36, Reduce, (38, 3), 2, 
declaration_3'Access, null);
+            Table.States (13).Goto_List.Set_Capacity (2);
+            Add_Goto (Table.States (13), 41, 36);
+            Add_Goto (Table.States (13), 42, 37);
+            Table.States (13).Kernel := To_Vector (((38, 33, 1, False), (38, 
33, 0, False)));
+            Table.States (13).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 38, 2)));
+            Table.States (14).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (14), 33, 38);
+            Table.States (14).Kernel := To_Vector ((0 => (38, 39, 2, False)));
+            Table.States (14).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 38)));
+            Table.States (15).Action_List.Set_Capacity (10);
+            Add_Action (Table.States (15), (12, 18, 19, 20, 21, 23, 29, 33, 
35, 36), (57, 0), 1, null, null);
+            Table.States (15).Kernel := To_Vector ((0 => (57, 13, 0, False)));
+            Table.States (15).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 57, 1)));
+            Table.States (16).Action_List.Set_Capacity (10);
+            Add_Action (Table.States (16), (12, 18, 19, 20, 21, 23, 29, 33, 
35, 36), (57, 1), 1, null, null);
+            Table.States (16).Kernel := To_Vector ((0 => (57, 14, 0, False)));
+            Table.States (16).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 57, 1)));
+            Table.States (17).Action_List.Set_Capacity (10);
+            Add_Action (Table.States (17), 12, Reduce, (46, 0), 0, null, null);
+            Add_Action (Table.States (17), 18, 39);
+            Add_Action (Table.States (17), 19, 40);
+            Add_Action (Table.States (17), 20, 41);
+            Add_Action (Table.States (17), 21, 42);
+            Add_Action (Table.States (17), 23, Reduce, (46, 0), 0, null, null);
+            Add_Action (Table.States (17), 29, Reduce, (46, 0), 0, null, null);
+            Add_Action (Table.States (17), 33, 43);
+            Add_Conflict (Table.States (17), 33, (46, 0), 0, null, null);
+            Add_Action (Table.States (17), 35, 44);
+            Add_Action (Table.States (17), 36, Reduce, (46, 0), 0, null, null);
+            Table.States (17).Goto_List.Set_Capacity (9);
+            Add_Goto (Table.States (17), 45, 45);
+            Add_Goto (Table.States (17), 46, 46);
+            Add_Goto (Table.States (17), 47, 47);
+            Add_Goto (Table.States (17), 48, 48);
+            Add_Goto (Table.States (17), 49, 49);
+            Add_Goto (Table.States (17), 50, 50);
+            Add_Goto (Table.States (17), 51, 51);
+            Add_Goto (Table.States (17), 52, 52);
+            Add_Goto (Table.States (17), 53, 53);
+            Table.States (17).Kernel := To_Vector ((0 => (43, 57, 0, False)));
+            Table.States (17).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 45, 0)));
+            Table.States (18).Action_List.Set_Capacity (3);
+            Add_Action (Table.States (18), (23, 33, 36), (56, 1), 2, 
compilation_unit_list_1'Access, null);
+            Table.States (18).Kernel := To_Vector ((0 => (56, 55, 0, True)));
+            Table.States (18).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 56, 2)));
+            Table.States (18).Minimal_Complete_Actions_Recursive := True;
+            Table.States (19).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (19), (9, 33), (40, 0), 1, null, null);
+            Table.States (19).Kernel := To_Vector ((0 => (40, 33, 0, False)));
+            Table.States (19).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 40, 1)));
+            Table.States (20).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (20), 9, 54);
+            Add_Action (Table.States (20), 33, 55);
+            Table.States (20).Kernel := To_Vector (((38, 40, 1, False), (40, 
40, 1, True)));
+            Table.States (20).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 9, 54)));
+            Table.States (21).Action_List.Set_Capacity (3);
+            Add_Action (Table.States (21), (23, 33, 36), (38, 5), 3, 
declaration_5'Access, null);
+            Table.States (21).Kernel := To_Vector ((0 => (38, 5, 0, False)));
+            Table.States (21).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 38, 3)));
+            Table.States (22).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (22), 16, 56);
+            Table.States (22).Kernel := To_Vector ((0 => (38, 33, 2, False)));
+            Table.States (22).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 16, 56)));
+            Table.States (23).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (23), 33, 57);
+            Table.States (23).Kernel := To_Vector ((0 => (39, 21, 2, False)));
+            Table.States (23).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 57)));
+            Table.States (24).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (24), 33, 58);
+            Table.States (24).Kernel := To_Vector ((0 => (39, 21, 2, False)));
+            Table.States (24).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 58)));
+            Table.States (25).Action_List.Set_Capacity (13);
+            Add_Action (Table.States (25), (8, 10, 15, 16, 20, 23, 28, 30, 32, 
33, 34, 35, 36), (42, 10), 1, null,
+            null);
+            Table.States (25).Kernel := To_Vector ((0 => (42, 8, 0, False)));
+            Table.States (25).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 42, 1)));
+            Table.States (26).Action_List.Set_Capacity (13);
+            Add_Action (Table.States (26), (8, 10, 15, 16, 20, 23, 28, 30, 32, 
33, 34, 35, 36), (42, 5), 1,
+            declaration_item_5'Access, null);
+            Table.States (26).Kernel := To_Vector ((0 => (42, 10, 0, False)));
+            Table.States (26).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 42, 1)));
+            Table.States (27).Action_List.Set_Capacity (13);
+            Add_Action (Table.States (27), (8, 10, 15, 16, 20, 23, 28, 30, 32, 
33, 34, 35, 36), (42, 0), 1, null,
+            null);
+            Table.States (27).Kernel := To_Vector ((0 => (42, 15, 0, False)));
+            Table.States (27).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 42, 1)));
+            Table.States (28).Action_List.Set_Capacity (13);
+            Add_Action (Table.States (28), (8, 10, 15, 16, 20, 23, 28, 30, 32, 
33, 34, 35, 36), (42, 2), 1, null,
+            null);
+            Table.States (28).Kernel := To_Vector ((0 => (42, 16, 0, False)));
+            Table.States (28).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 42, 1)));
+            Table.States (29).Action_List.Set_Capacity (13);
+            Add_Action (Table.States (29), (8, 10, 15, 16, 20, 23, 28, 30, 32, 
33, 34, 35, 36), (42, 3), 1, null,
+            null);
+            Table.States (29).Kernel := To_Vector ((0 => (42, 20, 0, False)));
+            Table.States (29).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 42, 1)));
+            Table.States (30).Action_List.Set_Capacity (13);
+            Add_Action (Table.States (30), (8, 10, 15, 16, 20, 23, 28, 30, 32, 
33, 34, 35, 36), (42, 6), 1, null,
+            null);
+            Table.States (30).Kernel := To_Vector ((0 => (42, 28, 0, False)));
+            Table.States (30).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 42, 1)));
+            Table.States (31).Action_List.Set_Capacity (13);
+            Add_Action (Table.States (31), (8, 10, 15, 16, 20, 23, 28, 30, 32, 
33, 34, 35, 36), (42, 7), 1, null,
+            null);
+            Table.States (31).Kernel := To_Vector ((0 => (42, 30, 0, False)));
+            Table.States (31).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 42, 1)));
+            Table.States (32).Action_List.Set_Capacity (13);
+            Add_Action (Table.States (32), (8, 10, 15, 16, 20, 23, 28, 30, 32, 
33, 34, 35, 36), (42, 4), 1, null,
+            null);
+            Table.States (32).Kernel := To_Vector ((0 => (42, 32, 0, False)));
+            Table.States (32).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 42, 1)));
+            Table.States (33).Action_List.Set_Capacity (13);
+            Add_Action (Table.States (33), (8, 10, 15, 16, 20, 23, 28, 30, 32, 
33, 34, 35, 36), (42, 1), 1, null,
+            null);
+            Table.States (33).Kernel := To_Vector ((0 => (42, 33, 0, False)));
+            Table.States (33).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 42, 1)));
+            Table.States (34).Action_List.Set_Capacity (13);
+            Add_Action (Table.States (34), (8, 10, 15, 16, 20, 23, 28, 30, 32, 
33, 34, 35, 36), (42, 8), 1, null,
+            null);
+            Table.States (34).Kernel := To_Vector ((0 => (42, 34, 0, False)));
+            Table.States (34).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 42, 1)));
+            Table.States (35).Action_List.Set_Capacity (13);
+            Add_Action (Table.States (35), (8, 10, 15, 16, 20, 23, 28, 30, 32, 
33, 34, 35, 36), (42, 9), 1, null,
+            null);
+            Table.States (35).Kernel := To_Vector ((0 => (42, 35, 0, False)));
+            Table.States (35).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 42, 1)));
+            Table.States (36).Action_List.Set_Capacity (13);
+            Add_Action (Table.States (36), 8, 25);
+            Add_Action (Table.States (36), 10, 26);
+            Add_Action (Table.States (36), 15, 27);
+            Add_Action (Table.States (36), 16, 28);
+            Add_Action (Table.States (36), 20, 29);
+            Add_Action (Table.States (36), 23, Reduce, (38, 2), 3, 
declaration_2'Access, null);
+            Add_Action (Table.States (36), 28, 30);
+            Add_Action (Table.States (36), 30, 31);
+            Add_Action (Table.States (36), 32, 32);
+            Add_Action (Table.States (36), 33, 33);
+            Add_Conflict (Table.States (36), 33, (38, 2), 3, 
declaration_2'Access, null);
+            Add_Action (Table.States (36), 34, 34);
+            Add_Action (Table.States (36), 35, 35);
+            Add_Action (Table.States (36), 36, Reduce, (38, 2), 3, 
declaration_2'Access, null);
+            Table.States (36).Goto_List.Set_Capacity (1);
+            Add_Goto (Table.States (36), 42, 59);
+            Table.States (36).Kernel := To_Vector (((38, 41, 0, False), (41, 
41, 1, True)));
+            Table.States (36).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 38, 3)));
+            Table.States (37).Action_List.Set_Capacity (13);
+            Add_Action (Table.States (37), (8, 10, 15, 16, 20, 23, 28, 30, 32, 
33, 34, 35, 36), (41, 0), 1, null,
+            null);
+            Table.States (37).Kernel := To_Vector ((0 => (41, 42, 0, False)));
+            Table.States (37).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 41, 1)));
+            Table.States (38).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (38), 8, 25);
+            Add_Action (Table.States (38), 10, 26);
+            Add_Action (Table.States (38), 15, 27);
+            Add_Action (Table.States (38), 16, 28);
+            Add_Action (Table.States (38), 20, 29);
+            Add_Action (Table.States (38), 28, 30);
+            Add_Action (Table.States (38), 30, 31);
+            Add_Action (Table.States (38), 32, 32);
+            Add_Action (Table.States (38), 33, 33);
+            Add_Action (Table.States (38), 34, 34);
+            Add_Action (Table.States (38), 35, 35);
+            Table.States (38).Goto_List.Set_Capacity (2);
+            Add_Goto (Table.States (38), 41, 60);
+            Add_Goto (Table.States (38), 42, 37);
+            Table.States (38).Kernel := To_Vector ((0 => (38, 33, 1, False)));
+            Table.States (38).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 15, 27)));
+            Table.States (39).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (39), 18, 61);
+            Add_Action (Table.States (39), 19, 62);
+            Add_Action (Table.States (39), 20, 63);
+            Add_Action (Table.States (39), 21, 64);
+            Add_Action (Table.States (39), 33, 65);
+            Add_Action (Table.States (39), 35, 66);
+            Table.States (39).Goto_List.Set_Capacity (8);
+            Add_Goto (Table.States (39), 47, 67);
+            Add_Goto (Table.States (39), 48, 68);
+            Add_Goto (Table.States (39), 49, 69);
+            Add_Goto (Table.States (39), 50, 70);
+            Add_Goto (Table.States (39), 51, 71);
+            Add_Goto (Table.States (39), 52, 72);
+            Add_Goto (Table.States (39), 53, 73);
+            Add_Goto (Table.States (39), 54, 74);
+            Table.States (39).Kernel := To_Vector (((53, 18, 2, False), (53, 
18, 3, False)));
+            Table.States (39).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 65)));
+            Table.States (40).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (40), 18, 75);
+            Add_Action (Table.States (40), 19, 76);
+            Add_Action (Table.States (40), 20, 77);
+            Add_Action (Table.States (40), 21, 78);
+            Add_Action (Table.States (40), 33, 79);
+            Add_Action (Table.States (40), 35, 80);
+            Table.States (40).Goto_List.Set_Capacity (8);
+            Add_Goto (Table.States (40), 47, 81);
+            Add_Goto (Table.States (40), 48, 82);
+            Add_Goto (Table.States (40), 49, 83);
+            Add_Goto (Table.States (40), 50, 84);
+            Add_Goto (Table.States (40), 51, 85);
+            Add_Goto (Table.States (40), 52, 86);
+            Add_Goto (Table.States (40), 53, 87);
+            Add_Goto (Table.States (40), 54, 88);
+            Table.States (40).Kernel := To_Vector ((0 => (52, 19, 2, False)));
+            Table.States (40).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 79)));
+            Table.States (41).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (41), 18, 89);
+            Add_Action (Table.States (41), 19, 90);
+            Add_Action (Table.States (41), 20, 91);
+            Add_Action (Table.States (41), 21, 92);
+            Add_Action (Table.States (41), 33, 93);
+            Add_Action (Table.States (41), 35, 94);
+            Table.States (41).Goto_List.Set_Capacity (8);
+            Add_Goto (Table.States (41), 47, 95);
+            Add_Goto (Table.States (41), 48, 96);
+            Add_Goto (Table.States (41), 49, 97);
+            Add_Goto (Table.States (41), 50, 98);
+            Add_Goto (Table.States (41), 51, 99);
+            Add_Goto (Table.States (41), 52, 100);
+            Add_Goto (Table.States (41), 53, 101);
+            Add_Goto (Table.States (41), 54, 102);
+            Table.States (41).Kernel := To_Vector (((51, 20, 2, False), (52, 
20, 3, False), (53, 20, 3, False), (53,
+            20, 3, False)));
+            Table.States (41).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 93)));
+            Table.States (42).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (42), 33, 103);
+            Table.States (42).Kernel := To_Vector ((0 => (47, 21, 4, False)));
+            Table.States (42).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 103)));
+            Table.States (43).Action_List.Set_Capacity (15);
+            Add_Action (Table.States (43), 11, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (43), 12, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (43), 16, 104);
+            Add_Action (Table.States (43), 18, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (43), 19, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (43), 20, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (43), 21, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (43), 23, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (43), 24, 105);
+            Add_Action (Table.States (43), 25, 106);
+            Add_Action (Table.States (43), 29, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (43), 31, 107);
+            Add_Action (Table.States (43), 33, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (43), 35, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (43), 36, Reduce, (50, 0), 1, null, null);
+            Table.States (43).Kernel := To_Vector (((48, 33, 2, False), (50, 
33, 0, False), (52, 33, 1, False), (53,
+            33, 1, False), (53, 33, 1, False)));
+            Table.States (43).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (44).Action_List.Set_Capacity (12);
+            Add_Action (Table.States (44), 11, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (44), 12, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (44), 18, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (44), 19, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (44), 20, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (44), 21, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (44), 23, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (44), 25, 108);
+            Add_Action (Table.States (44), 29, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (44), 33, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (44), 35, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (44), 36, Reduce, (50, 1), 1, null, null);
+            Table.States (44).Kernel := To_Vector (((50, 35, 0, False), (52, 
35, 1, False)));
+            Table.States (44).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (45).Action_List.Set_Capacity (5);
+            Add_Action (Table.States (45), 12, 109);
+            Add_Action (Table.States (45), 23, 110);
+            Add_Conflict (Table.States (45), 23, (44, 1), 0, null, null);
+            Add_Action (Table.States (45), 29, 111);
+            Add_Action (Table.States (45), 33, Reduce, (44, 1), 0, null, null);
+            Add_Action (Table.States (45), 36, Reduce, (44, 1), 0, null, null);
+            Table.States (45).Goto_List.Set_Capacity (1);
+            Add_Goto (Table.States (45), 44, 112);
+            Table.States (45).Kernel := To_Vector (((43, 45, 0, False), (45, 
45, 1, True), (45, 45, 5, True), (45, 45,
+            3, True)));
+            Table.States (45).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 44, 0)));
+            Table.States (46).Action_List.Set_Capacity (5);
+            Add_Action (Table.States (46), (12, 23, 29, 33, 36), (45, 0), 1, 
rhs_list_0'Access, null);
+            Table.States (46).Kernel := To_Vector ((0 => (45, 46, 0, False)));
+            Table.States (46).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 45, 1)));
+            Table.States (47).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (47), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (50, 2), 1, null, null);
+            Table.States (47).Kernel := To_Vector ((0 => (50, 47, 0, False)));
+            Table.States (47).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (48).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (48), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (49, 0), 1, null, null);
+            Table.States (48).Kernel := To_Vector ((0 => (49, 48, 0, False)));
+            Table.States (48).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 49, 1)));
+            Table.States (49).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (49), 11, 113);
+            Add_Action (Table.States (49), 12, Reduce, (46, 1), 1, 
rhs_1'Access, null);
+            Add_Action (Table.States (49), 18, 39);
+            Add_Action (Table.States (49), 19, 40);
+            Add_Action (Table.States (49), 20, 41);
+            Add_Action (Table.States (49), 21, 42);
+            Add_Action (Table.States (49), 23, Reduce, (46, 1), 1, 
rhs_1'Access, null);
+            Add_Action (Table.States (49), 29, Reduce, (46, 1), 1, 
rhs_1'Access, null);
+            Add_Action (Table.States (49), 33, 43);
+            Add_Conflict (Table.States (49), 33, (46, 1), 1, rhs_1'Access, 
null);
+            Add_Action (Table.States (49), 35, 44);
+            Add_Action (Table.States (49), 36, Reduce, (46, 1), 1, 
rhs_1'Access, null);
+            Table.States (49).Goto_List.Set_Capacity (6);
+            Add_Goto (Table.States (49), 47, 47);
+            Add_Goto (Table.States (49), 48, 114);
+            Add_Goto (Table.States (49), 50, 50);
+            Add_Goto (Table.States (49), 51, 51);
+            Add_Goto (Table.States (49), 52, 52);
+            Add_Goto (Table.States (49), 53, 53);
+            Table.States (49).Kernel := To_Vector (((46, 49, 0, False), (46, 
49, 1, False), (46, 49, 2, False), (49,
+            49, 1, True)));
+            Table.States (49).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 46, 1)));
+            Table.States (50).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (50), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (48, 0), 1, null, null);
+            Table.States (50).Kernel := To_Vector ((0 => (48, 50, 0, False)));
+            Table.States (50).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 48, 1)));
+            Table.States (51).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (51), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (50, 5), 1, null, null);
+            Table.States (51).Kernel := To_Vector ((0 => (50, 51, 0, False)));
+            Table.States (51).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (52).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (52), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (50, 3), 1, null, null);
+            Table.States (52).Kernel := To_Vector ((0 => (50, 52, 0, False)));
+            Table.States (52).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (53).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (53), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (50, 4), 1, null, null);
+            Table.States (53).Kernel := To_Vector ((0 => (50, 53, 0, False)));
+            Table.States (53).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (54).Action_List.Set_Capacity (3);
+            Add_Action (Table.States (54), (23, 33, 36), (38, 1), 4, 
declaration_1'Access, null);
+            Table.States (54).Kernel := To_Vector ((0 => (38, 9, 0, False)));
+            Table.States (54).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 38, 4)));
+            Table.States (55).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (55), (9, 33), (40, 1), 2, null, null);
+            Table.States (55).Kernel := To_Vector ((0 => (40, 33, 0, True)));
+            Table.States (55).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 40, 2)));
+            Table.States (55).Minimal_Complete_Actions_Recursive := True;
+            Table.States (56).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (56), 33, 115);
+            Table.States (56).Kernel := To_Vector ((0 => (38, 16, 1, False)));
+            Table.States (56).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 115)));
+            Table.States (57).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (57), 17, 116);
+            Table.States (57).Kernel := To_Vector ((0 => (39, 33, 1, False)));
+            Table.States (57).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 17, 116)));
+            Table.States (58).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (58), 17, 117);
+            Table.States (58).Kernel := To_Vector ((0 => (39, 33, 1, False)));
+            Table.States (58).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 17, 117)));
+            Table.States (59).Action_List.Set_Capacity (13);
+            Add_Action (Table.States (59), (8, 10, 15, 16, 20, 23, 28, 30, 32, 
33, 34, 35, 36), (41, 1), 2, null,
+            null);
+            Table.States (59).Kernel := To_Vector ((0 => (41, 42, 0, True)));
+            Table.States (59).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 41, 2)));
+            Table.States (59).Minimal_Complete_Actions_Recursive := True;
+            Table.States (60).Action_List.Set_Capacity (13);
+            Add_Action (Table.States (60), 8, 25);
+            Add_Action (Table.States (60), 10, 26);
+            Add_Action (Table.States (60), 15, 27);
+            Add_Action (Table.States (60), 16, 28);
+            Add_Action (Table.States (60), 20, 29);
+            Add_Action (Table.States (60), 23, Reduce, (38, 0), 4, 
declaration_0'Access, null);
+            Add_Action (Table.States (60), 28, 30);
+            Add_Action (Table.States (60), 30, 31);
+            Add_Action (Table.States (60), 32, 32);
+            Add_Action (Table.States (60), 33, 33);
+            Add_Conflict (Table.States (60), 33, (38, 0), 4, 
declaration_0'Access, null);
+            Add_Action (Table.States (60), 34, 34);
+            Add_Action (Table.States (60), 35, 35);
+            Add_Action (Table.States (60), 36, Reduce, (38, 0), 4, 
declaration_0'Access, null);
+            Table.States (60).Goto_List.Set_Capacity (1);
+            Add_Goto (Table.States (60), 42, 59);
+            Table.States (60).Kernel := To_Vector (((38, 41, 0, False), (41, 
41, 1, True)));
+            Table.States (60).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 38, 4)));
+            Table.States (61).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (61), 18, 61);
+            Add_Action (Table.States (61), 19, 62);
+            Add_Action (Table.States (61), 20, 63);
+            Add_Action (Table.States (61), 21, 64);
+            Add_Action (Table.States (61), 33, 65);
+            Add_Action (Table.States (61), 35, 66);
+            Table.States (61).Goto_List.Set_Capacity (8);
+            Add_Goto (Table.States (61), 47, 67);
+            Add_Goto (Table.States (61), 48, 68);
+            Add_Goto (Table.States (61), 49, 69);
+            Add_Goto (Table.States (61), 50, 70);
+            Add_Goto (Table.States (61), 51, 71);
+            Add_Goto (Table.States (61), 52, 72);
+            Add_Goto (Table.States (61), 53, 73);
+            Add_Goto (Table.States (61), 54, 118);
+            Table.States (61).Kernel := To_Vector (((53, 18, 2, False), (53, 
18, 3, False)));
+            Table.States (61).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 65)));
+            Table.States (62).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (62), 18, 75);
+            Add_Action (Table.States (62), 19, 76);
+            Add_Action (Table.States (62), 20, 77);
+            Add_Action (Table.States (62), 21, 78);
+            Add_Action (Table.States (62), 33, 79);
+            Add_Action (Table.States (62), 35, 80);
+            Table.States (62).Goto_List.Set_Capacity (8);
+            Add_Goto (Table.States (62), 47, 81);
+            Add_Goto (Table.States (62), 48, 82);
+            Add_Goto (Table.States (62), 49, 83);
+            Add_Goto (Table.States (62), 50, 84);
+            Add_Goto (Table.States (62), 51, 85);
+            Add_Goto (Table.States (62), 52, 86);
+            Add_Goto (Table.States (62), 53, 87);
+            Add_Goto (Table.States (62), 54, 119);
+            Table.States (62).Kernel := To_Vector ((0 => (52, 19, 2, False)));
+            Table.States (62).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 79)));
+            Table.States (63).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (63), 18, 89);
+            Add_Action (Table.States (63), 19, 90);
+            Add_Action (Table.States (63), 20, 91);
+            Add_Action (Table.States (63), 21, 92);
+            Add_Action (Table.States (63), 33, 93);
+            Add_Action (Table.States (63), 35, 94);
+            Table.States (63).Goto_List.Set_Capacity (8);
+            Add_Goto (Table.States (63), 47, 95);
+            Add_Goto (Table.States (63), 48, 96);
+            Add_Goto (Table.States (63), 49, 97);
+            Add_Goto (Table.States (63), 50, 98);
+            Add_Goto (Table.States (63), 51, 99);
+            Add_Goto (Table.States (63), 52, 100);
+            Add_Goto (Table.States (63), 53, 101);
+            Add_Goto (Table.States (63), 54, 120);
+            Table.States (63).Kernel := To_Vector (((51, 20, 2, False), (52, 
20, 3, False), (53, 20, 3, False), (53,
+            20, 3, False)));
+            Table.States (63).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 93)));
+            Table.States (64).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (64), 33, 121);
+            Table.States (64).Kernel := To_Vector ((0 => (47, 21, 4, False)));
+            Table.States (64).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 121)));
+            Table.States (65).Action_List.Set_Capacity (12);
+            Add_Action (Table.States (65), 12, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (65), 16, 122);
+            Add_Action (Table.States (65), 18, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (65), 19, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (65), 20, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (65), 21, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (65), 24, 123);
+            Add_Action (Table.States (65), 25, 124);
+            Add_Action (Table.States (65), 26, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (65), 31, 125);
+            Add_Action (Table.States (65), 33, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (65), 35, Reduce, (50, 0), 1, null, null);
+            Table.States (65).Kernel := To_Vector (((48, 33, 2, False), (50, 
33, 0, False), (52, 33, 1, False), (53,
+            33, 1, False), (53, 33, 1, False)));
+            Table.States (65).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (66).Action_List.Set_Capacity (9);
+            Add_Action (Table.States (66), 12, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (66), 18, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (66), 19, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (66), 20, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (66), 21, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (66), 25, 126);
+            Add_Action (Table.States (66), 26, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (66), 33, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (66), 35, Reduce, (50, 1), 1, null, null);
+            Table.States (66).Kernel := To_Vector (((50, 35, 0, False), (52, 
35, 1, False)));
+            Table.States (66).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (67).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (67), (12, 18, 19, 20, 21, 26, 33, 35), 
(50, 2), 1, null, null);
+            Table.States (67).Kernel := To_Vector ((0 => (50, 47, 0, False)));
+            Table.States (67).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (68).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (68), (12, 18, 19, 20, 21, 26, 33, 35), 
(49, 0), 1, null, null);
+            Table.States (68).Kernel := To_Vector ((0 => (49, 48, 0, False)));
+            Table.States (68).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 49, 1)));
+            Table.States (69).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (69), 12, Reduce, (54, 0), 1, null, null);
+            Add_Action (Table.States (69), 18, 61);
+            Add_Action (Table.States (69), 19, 62);
+            Add_Action (Table.States (69), 20, 63);
+            Add_Action (Table.States (69), 21, 64);
+            Add_Action (Table.States (69), 26, Reduce, (54, 0), 1, null, null);
+            Add_Action (Table.States (69), 33, 65);
+            Add_Action (Table.States (69), 35, 66);
+            Table.States (69).Goto_List.Set_Capacity (6);
+            Add_Goto (Table.States (69), 47, 67);
+            Add_Goto (Table.States (69), 48, 127);
+            Add_Goto (Table.States (69), 50, 70);
+            Add_Goto (Table.States (69), 51, 71);
+            Add_Goto (Table.States (69), 52, 72);
+            Add_Goto (Table.States (69), 53, 73);
+            Table.States (69).Kernel := To_Vector (((49, 49, 1, True), (54, 
49, 0, False)));
+            Table.States (69).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 54, 1)));
+            Table.States (70).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (70), (12, 18, 19, 20, 21, 26, 33, 35), 
(48, 0), 1, null, null);
+            Table.States (70).Kernel := To_Vector ((0 => (48, 50, 0, False)));
+            Table.States (70).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 48, 1)));
+            Table.States (71).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (71), (12, 18, 19, 20, 21, 26, 33, 35), 
(50, 5), 1, null, null);
+            Table.States (71).Kernel := To_Vector ((0 => (50, 51, 0, False)));
+            Table.States (71).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (72).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (72), (12, 18, 19, 20, 21, 26, 33, 35), 
(50, 3), 1, null, null);
+            Table.States (72).Kernel := To_Vector ((0 => (50, 52, 0, False)));
+            Table.States (72).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (73).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (73), (12, 18, 19, 20, 21, 26, 33, 35), 
(50, 4), 1, null, null);
+            Table.States (73).Kernel := To_Vector ((0 => (50, 53, 0, False)));
+            Table.States (73).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (74).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (74), 12, 128);
+            Add_Action (Table.States (74), 26, 129);
+            Table.States (74).Kernel := To_Vector (((53, 54, 1, False), (53, 
54, 2, False), (54, 54, 2, True)));
+            Table.States (74).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 26, 129)));
+            Table.States (75).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (75), 18, 61);
+            Add_Action (Table.States (75), 19, 62);
+            Add_Action (Table.States (75), 20, 63);
+            Add_Action (Table.States (75), 21, 64);
+            Add_Action (Table.States (75), 33, 65);
+            Add_Action (Table.States (75), 35, 66);
+            Table.States (75).Goto_List.Set_Capacity (8);
+            Add_Goto (Table.States (75), 47, 67);
+            Add_Goto (Table.States (75), 48, 68);
+            Add_Goto (Table.States (75), 49, 69);
+            Add_Goto (Table.States (75), 50, 70);
+            Add_Goto (Table.States (75), 51, 71);
+            Add_Goto (Table.States (75), 52, 72);
+            Add_Goto (Table.States (75), 53, 73);
+            Add_Goto (Table.States (75), 54, 130);
+            Table.States (75).Kernel := To_Vector (((53, 18, 2, False), (53, 
18, 3, False)));
+            Table.States (75).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 65)));
+            Table.States (76).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (76), 18, 75);
+            Add_Action (Table.States (76), 19, 76);
+            Add_Action (Table.States (76), 20, 77);
+            Add_Action (Table.States (76), 21, 78);
+            Add_Action (Table.States (76), 33, 79);
+            Add_Action (Table.States (76), 35, 80);
+            Table.States (76).Goto_List.Set_Capacity (8);
+            Add_Goto (Table.States (76), 47, 81);
+            Add_Goto (Table.States (76), 48, 82);
+            Add_Goto (Table.States (76), 49, 83);
+            Add_Goto (Table.States (76), 50, 84);
+            Add_Goto (Table.States (76), 51, 85);
+            Add_Goto (Table.States (76), 52, 86);
+            Add_Goto (Table.States (76), 53, 87);
+            Add_Goto (Table.States (76), 54, 131);
+            Table.States (76).Kernel := To_Vector ((0 => (52, 19, 2, False)));
+            Table.States (76).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 79)));
+            Table.States (77).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (77), 18, 89);
+            Add_Action (Table.States (77), 19, 90);
+            Add_Action (Table.States (77), 20, 91);
+            Add_Action (Table.States (77), 21, 92);
+            Add_Action (Table.States (77), 33, 93);
+            Add_Action (Table.States (77), 35, 94);
+            Table.States (77).Goto_List.Set_Capacity (8);
+            Add_Goto (Table.States (77), 47, 95);
+            Add_Goto (Table.States (77), 48, 96);
+            Add_Goto (Table.States (77), 49, 97);
+            Add_Goto (Table.States (77), 50, 98);
+            Add_Goto (Table.States (77), 51, 99);
+            Add_Goto (Table.States (77), 52, 100);
+            Add_Goto (Table.States (77), 53, 101);
+            Add_Goto (Table.States (77), 54, 132);
+            Table.States (77).Kernel := To_Vector (((51, 20, 2, False), (52, 
20, 3, False), (53, 20, 3, False), (53,
+            20, 3, False)));
+            Table.States (77).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 93)));
+            Table.States (78).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (78), 33, 133);
+            Table.States (78).Kernel := To_Vector ((0 => (47, 21, 4, False)));
+            Table.States (78).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 133)));
+            Table.States (79).Action_List.Set_Capacity (12);
+            Add_Action (Table.States (79), 12, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (79), 16, 134);
+            Add_Action (Table.States (79), 18, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (79), 19, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (79), 20, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (79), 21, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (79), 24, 135);
+            Add_Action (Table.States (79), 25, 136);
+            Add_Action (Table.States (79), 27, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (79), 31, 137);
+            Add_Action (Table.States (79), 33, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (79), 35, Reduce, (50, 0), 1, null, null);
+            Table.States (79).Kernel := To_Vector (((48, 33, 2, False), (50, 
33, 0, False), (52, 33, 1, False), (53,
+            33, 1, False), (53, 33, 1, False)));
+            Table.States (79).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (80).Action_List.Set_Capacity (9);
+            Add_Action (Table.States (80), 12, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (80), 18, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (80), 19, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (80), 20, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (80), 21, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (80), 25, 138);
+            Add_Action (Table.States (80), 27, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (80), 33, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (80), 35, Reduce, (50, 1), 1, null, null);
+            Table.States (80).Kernel := To_Vector (((50, 35, 0, False), (52, 
35, 1, False)));
+            Table.States (80).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (81).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (81), (12, 18, 19, 20, 21, 27, 33, 35), 
(50, 2), 1, null, null);
+            Table.States (81).Kernel := To_Vector ((0 => (50, 47, 0, False)));
+            Table.States (81).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (82).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (82), (12, 18, 19, 20, 21, 27, 33, 35), 
(49, 0), 1, null, null);
+            Table.States (82).Kernel := To_Vector ((0 => (49, 48, 0, False)));
+            Table.States (82).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 49, 1)));
+            Table.States (83).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (83), 12, Reduce, (54, 0), 1, null, null);
+            Add_Action (Table.States (83), 18, 75);
+            Add_Action (Table.States (83), 19, 76);
+            Add_Action (Table.States (83), 20, 77);
+            Add_Action (Table.States (83), 21, 78);
+            Add_Action (Table.States (83), 27, Reduce, (54, 0), 1, null, null);
+            Add_Action (Table.States (83), 33, 79);
+            Add_Action (Table.States (83), 35, 80);
+            Table.States (83).Goto_List.Set_Capacity (6);
+            Add_Goto (Table.States (83), 47, 81);
+            Add_Goto (Table.States (83), 48, 139);
+            Add_Goto (Table.States (83), 50, 84);
+            Add_Goto (Table.States (83), 51, 85);
+            Add_Goto (Table.States (83), 52, 86);
+            Add_Goto (Table.States (83), 53, 87);
+            Table.States (83).Kernel := To_Vector (((49, 49, 1, True), (54, 
49, 0, False)));
+            Table.States (83).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 54, 1)));
+            Table.States (84).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (84), (12, 18, 19, 20, 21, 27, 33, 35), 
(48, 0), 1, null, null);
+            Table.States (84).Kernel := To_Vector ((0 => (48, 50, 0, False)));
+            Table.States (84).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 48, 1)));
+         end Subr_1;
+         procedure Subr_2
+         is begin
+            Table.States (85).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (85), (12, 18, 19, 20, 21, 27, 33, 35), 
(50, 5), 1, null, null);
+            Table.States (85).Kernel := To_Vector ((0 => (50, 51, 0, False)));
+            Table.States (85).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (86).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (86), (12, 18, 19, 20, 21, 27, 33, 35), 
(50, 3), 1, null, null);
+            Table.States (86).Kernel := To_Vector ((0 => (50, 52, 0, False)));
+            Table.States (86).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (87).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (87), (12, 18, 19, 20, 21, 27, 33, 35), 
(50, 4), 1, null, null);
+            Table.States (87).Kernel := To_Vector ((0 => (50, 53, 0, False)));
+            Table.States (87).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (88).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (88), 12, 140);
+            Add_Action (Table.States (88), 27, 141);
+            Table.States (88).Kernel := To_Vector (((52, 54, 1, False), (54, 
54, 2, True)));
+            Table.States (88).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 27, 141)));
+            Table.States (89).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (89), 18, 61);
+            Add_Action (Table.States (89), 19, 62);
+            Add_Action (Table.States (89), 20, 63);
+            Add_Action (Table.States (89), 21, 64);
+            Add_Action (Table.States (89), 33, 65);
+            Add_Action (Table.States (89), 35, 66);
+            Table.States (89).Goto_List.Set_Capacity (8);
+            Add_Goto (Table.States (89), 47, 67);
+            Add_Goto (Table.States (89), 48, 68);
+            Add_Goto (Table.States (89), 49, 69);
+            Add_Goto (Table.States (89), 50, 70);
+            Add_Goto (Table.States (89), 51, 71);
+            Add_Goto (Table.States (89), 52, 72);
+            Add_Goto (Table.States (89), 53, 73);
+            Add_Goto (Table.States (89), 54, 142);
+            Table.States (89).Kernel := To_Vector (((53, 18, 2, False), (53, 
18, 3, False)));
+            Table.States (89).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 65)));
+            Table.States (90).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (90), 18, 75);
+            Add_Action (Table.States (90), 19, 76);
+            Add_Action (Table.States (90), 20, 77);
+            Add_Action (Table.States (90), 21, 78);
+            Add_Action (Table.States (90), 33, 79);
+            Add_Action (Table.States (90), 35, 80);
+            Table.States (90).Goto_List.Set_Capacity (8);
+            Add_Goto (Table.States (90), 47, 81);
+            Add_Goto (Table.States (90), 48, 82);
+            Add_Goto (Table.States (90), 49, 83);
+            Add_Goto (Table.States (90), 50, 84);
+            Add_Goto (Table.States (90), 51, 85);
+            Add_Goto (Table.States (90), 52, 86);
+            Add_Goto (Table.States (90), 53, 87);
+            Add_Goto (Table.States (90), 54, 143);
+            Table.States (90).Kernel := To_Vector ((0 => (52, 19, 2, False)));
+            Table.States (90).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 79)));
+            Table.States (91).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (91), 18, 89);
+            Add_Action (Table.States (91), 19, 90);
+            Add_Action (Table.States (91), 20, 91);
+            Add_Action (Table.States (91), 21, 92);
+            Add_Action (Table.States (91), 33, 93);
+            Add_Action (Table.States (91), 35, 94);
+            Table.States (91).Goto_List.Set_Capacity (8);
+            Add_Goto (Table.States (91), 47, 95);
+            Add_Goto (Table.States (91), 48, 96);
+            Add_Goto (Table.States (91), 49, 97);
+            Add_Goto (Table.States (91), 50, 98);
+            Add_Goto (Table.States (91), 51, 99);
+            Add_Goto (Table.States (91), 52, 100);
+            Add_Goto (Table.States (91), 53, 101);
+            Add_Goto (Table.States (91), 54, 144);
+            Table.States (91).Kernel := To_Vector (((51, 20, 2, False), (52, 
20, 3, False), (53, 20, 3, False), (53,
+            20, 3, False)));
+            Table.States (91).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 93)));
+            Table.States (92).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (92), 33, 145);
+            Table.States (92).Kernel := To_Vector ((0 => (47, 21, 4, False)));
+            Table.States (92).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 145)));
+            Table.States (93).Action_List.Set_Capacity (12);
+            Add_Action (Table.States (93), 12, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (93), 16, 146);
+            Add_Action (Table.States (93), 18, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (93), 19, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (93), 20, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (93), 21, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (93), 24, 147);
+            Add_Action (Table.States (93), 25, 148);
+            Add_Action (Table.States (93), 28, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (93), 31, 149);
+            Add_Action (Table.States (93), 33, Reduce, (50, 0), 1, null, null);
+            Add_Action (Table.States (93), 35, Reduce, (50, 0), 1, null, null);
+            Table.States (93).Kernel := To_Vector (((48, 33, 2, False), (50, 
33, 0, False), (52, 33, 1, False), (53,
+            33, 1, False), (53, 33, 1, False)));
+            Table.States (93).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (94).Action_List.Set_Capacity (9);
+            Add_Action (Table.States (94), 12, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (94), 18, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (94), 19, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (94), 20, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (94), 21, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (94), 25, 150);
+            Add_Action (Table.States (94), 28, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (94), 33, Reduce, (50, 1), 1, null, null);
+            Add_Action (Table.States (94), 35, Reduce, (50, 1), 1, null, null);
+            Table.States (94).Kernel := To_Vector (((50, 35, 0, False), (52, 
35, 1, False)));
+            Table.States (94).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (95).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (95), (12, 18, 19, 20, 21, 28, 33, 35), 
(50, 2), 1, null, null);
+            Table.States (95).Kernel := To_Vector ((0 => (50, 47, 0, False)));
+            Table.States (95).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (96).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (96), (12, 18, 19, 20, 21, 28, 33, 35), 
(49, 0), 1, null, null);
+            Table.States (96).Kernel := To_Vector ((0 => (49, 48, 0, False)));
+            Table.States (96).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 49, 1)));
+            Table.States (97).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (97), 12, Reduce, (54, 0), 1, null, null);
+            Add_Action (Table.States (97), 18, 89);
+            Add_Action (Table.States (97), 19, 90);
+            Add_Action (Table.States (97), 20, 91);
+            Add_Action (Table.States (97), 21, 92);
+            Add_Action (Table.States (97), 28, Reduce, (54, 0), 1, null, null);
+            Add_Action (Table.States (97), 33, 93);
+            Add_Action (Table.States (97), 35, 94);
+            Table.States (97).Goto_List.Set_Capacity (6);
+            Add_Goto (Table.States (97), 47, 95);
+            Add_Goto (Table.States (97), 48, 151);
+            Add_Goto (Table.States (97), 50, 98);
+            Add_Goto (Table.States (97), 51, 99);
+            Add_Goto (Table.States (97), 52, 100);
+            Add_Goto (Table.States (97), 53, 101);
+            Table.States (97).Kernel := To_Vector (((49, 49, 1, True), (54, 
49, 0, False)));
+            Table.States (97).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 54, 1)));
+            Table.States (98).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (98), (12, 18, 19, 20, 21, 28, 33, 35), 
(48, 0), 1, null, null);
+            Table.States (98).Kernel := To_Vector ((0 => (48, 50, 0, False)));
+            Table.States (98).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 48, 1)));
+            Table.States (99).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (99), (12, 18, 19, 20, 21, 28, 33, 35), 
(50, 5), 1, null, null);
+            Table.States (99).Kernel := To_Vector ((0 => (50, 51, 0, False)));
+            Table.States (99).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (100).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (100), (12, 18, 19, 20, 21, 28, 33, 35), 
(50, 3), 1, null, null);
+            Table.States (100).Kernel := To_Vector ((0 => (50, 52, 0, False)));
+            Table.States (100).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (101).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (101), (12, 18, 19, 20, 21, 28, 33, 35), 
(50, 4), 1, null, null);
+            Table.States (101).Kernel := To_Vector ((0 => (50, 53, 0, False)));
+            Table.States (101).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (102).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (102), 12, 152);
+            Add_Action (Table.States (102), 28, 153);
+            Table.States (102).Kernel := To_Vector (((51, 54, 1, False), (52, 
54, 2, False), (53, 54, 2, False), (53,
+            54, 2, False), (54, 54, 2, True)));
+            Table.States (102).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 28, 153)));
+            Table.States (103).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (103), 16, 154);
+            Table.States (103).Kernel := To_Vector ((0 => (47, 33, 3, False)));
+            Table.States (103).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 16, 154)));
+            Table.States (104).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (104), 18, 39);
+            Add_Action (Table.States (104), 19, 40);
+            Add_Action (Table.States (104), 20, 41);
+            Add_Action (Table.States (104), 21, 42);
+            Add_Action (Table.States (104), 33, 155);
+            Add_Action (Table.States (104), 35, 44);
+            Table.States (104).Goto_List.Set_Capacity (5);
+            Add_Goto (Table.States (104), 47, 47);
+            Add_Goto (Table.States (104), 50, 156);
+            Add_Goto (Table.States (104), 51, 51);
+            Add_Goto (Table.States (104), 52, 52);
+            Add_Goto (Table.States (104), 53, 53);
+            Table.States (104).Kernel := To_Vector ((0 => (48, 16, 1, False)));
+            Table.States (104).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 155)));
+            Table.States (105).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (105), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (53, 4), 2, null, null);
+            Table.States (105).Kernel := To_Vector ((0 => (53, 24, 0, False)));
+            Table.States (105).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 2)));
+            Table.States (106).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (106), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (52, 2), 2, null, null);
+            Table.States (106).Kernel := To_Vector ((0 => (52, 25, 0, False)));
+            Table.States (106).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 52, 2)));
+            Table.States (107).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (107), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (53, 5), 2, null, null);
+            Table.States (107).Kernel := To_Vector ((0 => (53, 31, 0, False)));
+            Table.States (107).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 2)));
+            Table.States (108).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (108), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (52, 3), 2, null, null);
+            Table.States (108).Kernel := To_Vector ((0 => (52, 25, 0, False)));
+            Table.States (108).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 52, 2)));
+            Table.States (109).Action_List.Set_Capacity (10);
+            Add_Action (Table.States (109), 12, Reduce, (46, 0), 0, null, 
null);
+            Add_Action (Table.States (109), 18, 39);
+            Add_Action (Table.States (109), 19, 40);
+            Add_Action (Table.States (109), 20, 41);
+            Add_Action (Table.States (109), 21, 42);
+            Add_Action (Table.States (109), 23, Reduce, (46, 0), 0, null, 
null);
+            Add_Action (Table.States (109), 29, Reduce, (46, 0), 0, null, 
null);
+            Add_Action (Table.States (109), 33, 43);
+            Add_Conflict (Table.States (109), 33, (46, 0), 0, null, null);
+            Add_Action (Table.States (109), 35, 44);
+            Add_Action (Table.States (109), 36, Reduce, (46, 0), 0, null, 
null);
+            Table.States (109).Goto_List.Set_Capacity (8);
+            Add_Goto (Table.States (109), 46, 157);
+            Add_Goto (Table.States (109), 47, 47);
+            Add_Goto (Table.States (109), 48, 48);
+            Add_Goto (Table.States (109), 49, 49);
+            Add_Goto (Table.States (109), 50, 50);
+            Add_Goto (Table.States (109), 51, 51);
+            Add_Goto (Table.States (109), 52, 52);
+            Add_Goto (Table.States (109), 53, 53);
+            Table.States (109).Kernel := To_Vector ((0 => (45, 12, 0, True)));
+            Table.States (109).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 46, 0)));
+            Table.States (109).Minimal_Complete_Actions_Recursive := True;
+            Table.States (110).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (110), 4, 158);
+            Add_Action (Table.States (110), 5, 159);
+            Table.States (110).Kernel := To_Vector (((45, 23, 4, True), (45, 
23, 2, True)));
+            Table.States (110).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 4, 158)));
+            Table.States (110).Minimal_Complete_Actions_Recursive := True;
+            Table.States (111).Action_List.Set_Capacity (3);
+            Add_Action (Table.States (111), (23, 33, 36), (44, 0), 1, null, 
null);
+            Table.States (111).Kernel := To_Vector ((0 => (44, 29, 0, False)));
+            Table.States (111).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 44, 1)));
+            Table.States (112).Action_List.Set_Capacity (3);
+            Add_Action (Table.States (112), (23, 33, 36), (43, 0), 4, 
nonterminal_0'Access, null);
+            Table.States (112).Kernel := To_Vector ((0 => (43, 44, 0, False)));
+            Table.States (112).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 43, 4)));
+            Table.States (113).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (113), 11, 160);
+            Add_Action (Table.States (113), 12, Reduce, (46, 2), 2, 
rhs_2'Access, null);
+            Add_Action (Table.States (113), 23, Reduce, (46, 2), 2, 
rhs_2'Access, null);
+            Add_Action (Table.States (113), 29, Reduce, (46, 2), 2, 
rhs_2'Access, null);
+            Add_Action (Table.States (113), 33, Reduce, (46, 2), 2, 
rhs_2'Access, null);
+            Add_Action (Table.States (113), 36, Reduce, (46, 2), 2, 
rhs_2'Access, null);
+            Table.States (113).Kernel := To_Vector (((46, 11, 0, False), (46, 
11, 1, False)));
+            Table.States (113).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 46, 2)));
+            Table.States (114).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (114), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (49, 1), 2, null, null);
+            Table.States (114).Kernel := To_Vector ((0 => (49, 48, 0, True)));
+            Table.States (114).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 49, 2)));
+            Table.States (114).Minimal_Complete_Actions_Recursive := True;
+            Table.States (115).Action_List.Set_Capacity (3);
+            Add_Action (Table.States (115), (23, 33, 36), (38, 4), 5, 
declaration_4'Access, null);
+            Table.States (115).Kernel := To_Vector ((0 => (38, 33, 0, False)));
+            Table.States (115).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 38, 5)));
+            Table.States (116).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (116), (1 =>  33), (39, 1), 4, 
token_keyword_non_grammar_1'Access, null);
+            Table.States (116).Kernel := To_Vector ((0 => (39, 17, 0, False)));
+            Table.States (116).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 39, 4)));
+            Table.States (117).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (117), (1 =>  33), (39, 2), 4, 
token_keyword_non_grammar_2'Access, null);
+            Table.States (117).Kernel := To_Vector ((0 => (39, 17, 0, False)));
+            Table.States (117).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 39, 4)));
+            Table.States (118).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (118), 12, 128);
+            Add_Action (Table.States (118), 26, 161);
+            Table.States (118).Kernel := To_Vector (((53, 54, 1, False), (53, 
54, 2, False), (54, 54, 2, True)));
+            Table.States (118).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 26, 161)));
+            Table.States (119).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (119), 12, 140);
+            Add_Action (Table.States (119), 27, 162);
+            Table.States (119).Kernel := To_Vector (((52, 54, 1, False), (54, 
54, 2, True)));
+            Table.States (119).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 27, 162)));
+            Table.States (120).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (120), 12, 152);
+            Add_Action (Table.States (120), 28, 163);
+            Table.States (120).Kernel := To_Vector (((51, 54, 1, False), (52, 
54, 2, False), (53, 54, 2, False), (53,
+            54, 2, False), (54, 54, 2, True)));
+            Table.States (120).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 28, 163)));
+            Table.States (121).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (121), 16, 164);
+            Table.States (121).Kernel := To_Vector ((0 => (47, 33, 3, False)));
+            Table.States (121).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 16, 164)));
+            Table.States (122).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (122), 18, 61);
+            Add_Action (Table.States (122), 19, 62);
+            Add_Action (Table.States (122), 20, 63);
+            Add_Action (Table.States (122), 21, 64);
+            Add_Action (Table.States (122), 33, 165);
+            Add_Action (Table.States (122), 35, 66);
+            Table.States (122).Goto_List.Set_Capacity (5);
+            Add_Goto (Table.States (122), 47, 67);
+            Add_Goto (Table.States (122), 50, 166);
+            Add_Goto (Table.States (122), 51, 71);
+            Add_Goto (Table.States (122), 52, 72);
+            Add_Goto (Table.States (122), 53, 73);
+            Table.States (122).Kernel := To_Vector ((0 => (48, 16, 1, False)));
+            Table.States (122).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 165)));
+            Table.States (123).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (123), (12, 18, 19, 20, 21, 26, 33, 35), 
(53, 4), 2, null, null);
+            Table.States (123).Kernel := To_Vector ((0 => (53, 24, 0, False)));
+            Table.States (123).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 2)));
+            Table.States (124).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (124), (12, 18, 19, 20, 21, 26, 33, 35), 
(52, 2), 2, null, null);
+            Table.States (124).Kernel := To_Vector ((0 => (52, 25, 0, False)));
+            Table.States (124).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 52, 2)));
+            Table.States (125).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (125), (12, 18, 19, 20, 21, 26, 33, 35), 
(53, 5), 2, null, null);
+            Table.States (125).Kernel := To_Vector ((0 => (53, 31, 0, False)));
+            Table.States (125).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 2)));
+            Table.States (126).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (126), (12, 18, 19, 20, 21, 26, 33, 35), 
(52, 3), 2, null, null);
+            Table.States (126).Kernel := To_Vector ((0 => (52, 25, 0, False)));
+            Table.States (126).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 52, 2)));
+            Table.States (127).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (127), (12, 18, 19, 20, 21, 26, 33, 35), 
(49, 1), 2, null, null);
+            Table.States (127).Kernel := To_Vector ((0 => (49, 48, 0, True)));
+            Table.States (127).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 49, 2)));
+            Table.States (127).Minimal_Complete_Actions_Recursive := True;
+            Table.States (128).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (128), 18, 61);
+            Add_Action (Table.States (128), 19, 62);
+            Add_Action (Table.States (128), 20, 63);
+            Add_Action (Table.States (128), 21, 64);
+            Add_Action (Table.States (128), 33, 65);
+            Add_Action (Table.States (128), 35, 66);
+            Table.States (128).Goto_List.Set_Capacity (7);
+            Add_Goto (Table.States (128), 47, 67);
+            Add_Goto (Table.States (128), 48, 68);
+            Add_Goto (Table.States (128), 49, 167);
+            Add_Goto (Table.States (128), 50, 70);
+            Add_Goto (Table.States (128), 51, 71);
+            Add_Goto (Table.States (128), 52, 72);
+            Add_Goto (Table.States (128), 53, 73);
+            Table.States (128).Kernel := To_Vector ((0 => (54, 12, 1, True)));
+            Table.States (128).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 65)));
+            Table.States (128).Minimal_Complete_Actions_Recursive := True;
+            Table.States (129).Action_List.Set_Capacity (12);
+            Add_Action (Table.States (129), 11, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (129), 12, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (129), 18, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (129), 19, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (129), 20, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (129), 21, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (129), 22, 168);
+            Add_Action (Table.States (129), 23, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (129), 29, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (129), 33, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (129), 35, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (129), 36, Reduce, (53, 0), 3, null, 
null);
+            Table.States (129).Kernel := To_Vector (((53, 26, 0, False), (53, 
26, 1, False)));
+            Table.States (129).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 3)));
+            Table.States (130).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (130), 12, 128);
+            Add_Action (Table.States (130), 26, 169);
+            Table.States (130).Kernel := To_Vector (((53, 54, 1, False), (53, 
54, 2, False), (54, 54, 2, True)));
+            Table.States (130).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 26, 169)));
+            Table.States (131).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (131), 12, 140);
+            Add_Action (Table.States (131), 27, 170);
+            Table.States (131).Kernel := To_Vector (((52, 54, 1, False), (54, 
54, 2, True)));
+            Table.States (131).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 27, 170)));
+            Table.States (132).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (132), 12, 152);
+            Add_Action (Table.States (132), 28, 171);
+            Table.States (132).Kernel := To_Vector (((51, 54, 1, False), (52, 
54, 2, False), (53, 54, 2, False), (53,
+            54, 2, False), (54, 54, 2, True)));
+            Table.States (132).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 28, 171)));
+            Table.States (133).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (133), 16, 172);
+            Table.States (133).Kernel := To_Vector ((0 => (47, 33, 3, False)));
+            Table.States (133).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 16, 172)));
+            Table.States (134).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (134), 18, 75);
+            Add_Action (Table.States (134), 19, 76);
+            Add_Action (Table.States (134), 20, 77);
+            Add_Action (Table.States (134), 21, 78);
+            Add_Action (Table.States (134), 33, 173);
+            Add_Action (Table.States (134), 35, 80);
+            Table.States (134).Goto_List.Set_Capacity (5);
+            Add_Goto (Table.States (134), 47, 81);
+            Add_Goto (Table.States (134), 50, 174);
+            Add_Goto (Table.States (134), 51, 85);
+            Add_Goto (Table.States (134), 52, 86);
+            Add_Goto (Table.States (134), 53, 87);
+            Table.States (134).Kernel := To_Vector ((0 => (48, 16, 1, False)));
+            Table.States (134).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 173)));
+            Table.States (135).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (135), (12, 18, 19, 20, 21, 27, 33, 35), 
(53, 4), 2, null, null);
+            Table.States (135).Kernel := To_Vector ((0 => (53, 24, 0, False)));
+            Table.States (135).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 2)));
+            Table.States (136).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (136), (12, 18, 19, 20, 21, 27, 33, 35), 
(52, 2), 2, null, null);
+            Table.States (136).Kernel := To_Vector ((0 => (52, 25, 0, False)));
+            Table.States (136).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 52, 2)));
+            Table.States (137).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (137), (12, 18, 19, 20, 21, 27, 33, 35), 
(53, 5), 2, null, null);
+            Table.States (137).Kernel := To_Vector ((0 => (53, 31, 0, False)));
+            Table.States (137).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 2)));
+            Table.States (138).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (138), (12, 18, 19, 20, 21, 27, 33, 35), 
(52, 3), 2, null, null);
+            Table.States (138).Kernel := To_Vector ((0 => (52, 25, 0, False)));
+            Table.States (138).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 52, 2)));
+            Table.States (139).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (139), (12, 18, 19, 20, 21, 27, 33, 35), 
(49, 1), 2, null, null);
+            Table.States (139).Kernel := To_Vector ((0 => (49, 48, 0, True)));
+            Table.States (139).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 49, 2)));
+            Table.States (139).Minimal_Complete_Actions_Recursive := True;
+            Table.States (140).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (140), 18, 75);
+            Add_Action (Table.States (140), 19, 76);
+            Add_Action (Table.States (140), 20, 77);
+            Add_Action (Table.States (140), 21, 78);
+            Add_Action (Table.States (140), 33, 79);
+            Add_Action (Table.States (140), 35, 80);
+            Table.States (140).Goto_List.Set_Capacity (7);
+            Add_Goto (Table.States (140), 47, 81);
+            Add_Goto (Table.States (140), 48, 82);
+            Add_Goto (Table.States (140), 49, 175);
+            Add_Goto (Table.States (140), 50, 84);
+            Add_Goto (Table.States (140), 51, 85);
+            Add_Goto (Table.States (140), 52, 86);
+            Add_Goto (Table.States (140), 53, 87);
+            Table.States (140).Kernel := To_Vector ((0 => (54, 12, 1, True)));
+            Table.States (140).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 79)));
+            Table.States (140).Minimal_Complete_Actions_Recursive := True;
+            Table.States (141).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (141), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (52, 0), 3, null, null);
+            Table.States (141).Kernel := To_Vector ((0 => (52, 27, 0, False)));
+            Table.States (141).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 52, 3)));
+            Table.States (142).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (142), 12, 128);
+            Add_Action (Table.States (142), 26, 176);
+            Table.States (142).Kernel := To_Vector (((53, 54, 1, False), (53, 
54, 2, False), (54, 54, 2, True)));
+            Table.States (142).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 26, 176)));
+            Table.States (143).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (143), 12, 140);
+            Add_Action (Table.States (143), 27, 177);
+            Table.States (143).Kernel := To_Vector (((52, 54, 1, False), (54, 
54, 2, True)));
+            Table.States (143).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 27, 177)));
+            Table.States (144).Action_List.Set_Capacity (2);
+            Add_Action (Table.States (144), 12, 152);
+            Add_Action (Table.States (144), 28, 178);
+            Table.States (144).Kernel := To_Vector (((51, 54, 1, False), (52, 
54, 2, False), (53, 54, 2, False), (53,
+            54, 2, False), (54, 54, 2, True)));
+            Table.States (144).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 28, 178)));
+            Table.States (145).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (145), 16, 179);
+            Table.States (145).Kernel := To_Vector ((0 => (47, 33, 3, False)));
+            Table.States (145).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 16, 179)));
+            Table.States (146).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (146), 18, 89);
+            Add_Action (Table.States (146), 19, 90);
+            Add_Action (Table.States (146), 20, 91);
+            Add_Action (Table.States (146), 21, 92);
+            Add_Action (Table.States (146), 33, 180);
+            Add_Action (Table.States (146), 35, 94);
+            Table.States (146).Goto_List.Set_Capacity (5);
+            Add_Goto (Table.States (146), 47, 95);
+            Add_Goto (Table.States (146), 50, 181);
+            Add_Goto (Table.States (146), 51, 99);
+            Add_Goto (Table.States (146), 52, 100);
+            Add_Goto (Table.States (146), 53, 101);
+            Table.States (146).Kernel := To_Vector ((0 => (48, 16, 1, False)));
+            Table.States (146).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 180)));
+            Table.States (147).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (147), (12, 18, 19, 20, 21, 28, 33, 35), 
(53, 4), 2, null, null);
+            Table.States (147).Kernel := To_Vector ((0 => (53, 24, 0, False)));
+            Table.States (147).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 2)));
+            Table.States (148).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (148), (12, 18, 19, 20, 21, 28, 33, 35), 
(52, 2), 2, null, null);
+            Table.States (148).Kernel := To_Vector ((0 => (52, 25, 0, False)));
+            Table.States (148).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 52, 2)));
+            Table.States (149).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (149), (12, 18, 19, 20, 21, 28, 33, 35), 
(53, 5), 2, null, null);
+            Table.States (149).Kernel := To_Vector ((0 => (53, 31, 0, False)));
+            Table.States (149).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 2)));
+            Table.States (150).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (150), (12, 18, 19, 20, 21, 28, 33, 35), 
(52, 3), 2, null, null);
+            Table.States (150).Kernel := To_Vector ((0 => (52, 25, 0, False)));
+            Table.States (150).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 52, 2)));
+            Table.States (151).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (151), (12, 18, 19, 20, 21, 28, 33, 35), 
(49, 1), 2, null, null);
+            Table.States (151).Kernel := To_Vector ((0 => (49, 48, 0, True)));
+            Table.States (151).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 49, 2)));
+            Table.States (151).Minimal_Complete_Actions_Recursive := True;
+            Table.States (152).Action_List.Set_Capacity (6);
+            Add_Action (Table.States (152), 18, 89);
+            Add_Action (Table.States (152), 19, 90);
+            Add_Action (Table.States (152), 20, 91);
+            Add_Action (Table.States (152), 21, 92);
+            Add_Action (Table.States (152), 33, 93);
+            Add_Action (Table.States (152), 35, 94);
+            Table.States (152).Goto_List.Set_Capacity (7);
+            Add_Goto (Table.States (152), 47, 95);
+            Add_Goto (Table.States (152), 48, 96);
+            Add_Goto (Table.States (152), 49, 182);
+            Add_Goto (Table.States (152), 50, 98);
+            Add_Goto (Table.States (152), 51, 99);
+            Add_Goto (Table.States (152), 52, 100);
+            Add_Goto (Table.States (152), 53, 101);
+            Table.States (152).Kernel := To_Vector ((0 => (54, 12, 1, True)));
+            Table.States (152).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 93)));
+            Table.States (152).Minimal_Complete_Actions_Recursive := True;
+            Table.States (153).Action_List.Set_Capacity (14);
+            Add_Action (Table.States (153), 11, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (153), 12, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (153), 18, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (153), 19, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (153), 20, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (153), 21, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (153), 23, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (153), 24, 183);
+            Add_Action (Table.States (153), 25, 184);
+            Add_Action (Table.States (153), 29, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (153), 31, 185);
+            Add_Action (Table.States (153), 33, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (153), 35, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (153), 36, Reduce, (51, 0), 3, null, 
null);
+            Table.States (153).Kernel := To_Vector (((51, 28, 0, False), (52, 
28, 1, False), (53, 28, 1, False), (53,
+            28, 1, False)));
+            Table.States (153).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 51, 3)));
+            Table.States (154).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (154), 33, 186);
+            Table.States (154).Kernel := To_Vector ((0 => (47, 16, 2, False)));
+            Table.States (154).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 186)));
+            Table.States (155).Action_List.Set_Capacity (14);
+            Add_Action (Table.States (155), 11, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (155), 12, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (155), 18, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (155), 19, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (155), 20, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (155), 21, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (155), 23, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (155), 24, 105);
+            Add_Action (Table.States (155), 25, 106);
+            Add_Action (Table.States (155), 29, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (155), 31, 107);
+            Add_Action (Table.States (155), 33, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (155), 35, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (155), 36, Reduce, (50, 0), 1, null, 
null);
+            Table.States (155).Kernel := To_Vector (((50, 33, 0, False), (52, 
33, 1, False), (53, 33, 1, False), (53,
+            33, 1, False)));
+            Table.States (155).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (156).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (156), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (48, 1), 3, null, null);
+            Table.States (156).Kernel := To_Vector ((0 => (48, 50, 0, False)));
+            Table.States (156).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 48, 3)));
+            Table.States (157).Action_List.Set_Capacity (5);
+            Add_Action (Table.States (157), (12, 23, 29, 33, 36), (45, 1), 3, 
rhs_list_1'Access, null);
+            Table.States (157).Kernel := To_Vector ((0 => (45, 46, 0, True)));
+            Table.States (157).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 45, 3)));
+            Table.States (157).Minimal_Complete_Actions_Recursive := True;
+            Table.States (158).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (158), 5, 187);
+            Table.States (158).Kernel := To_Vector ((0 => (45, 4, 1, True)));
+            Table.States (158).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 5, 187)));
+            Table.States (158).Minimal_Complete_Actions_Recursive := True;
+            Table.States (159).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (159), 33, 188);
+            Table.States (159).Kernel := To_Vector ((0 => (45, 5, 3, True)));
+            Table.States (159).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 188)));
+            Table.States (159).Minimal_Complete_Actions_Recursive := True;
+            Table.States (160).Action_List.Set_Capacity (5);
+            Add_Action (Table.States (160), (12, 23, 29, 33, 36), (46, 3), 3, 
rhs_3'Access, null);
+            Table.States (160).Kernel := To_Vector ((0 => (46, 11, 0, False)));
+            Table.States (160).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 46, 3)));
+            Table.States (161).Action_List.Set_Capacity (9);
+            Add_Action (Table.States (161), 12, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (161), 18, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (161), 19, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (161), 20, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (161), 21, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (161), 22, 189);
+            Add_Action (Table.States (161), 26, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (161), 33, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (161), 35, Reduce, (53, 0), 3, null, 
null);
+            Table.States (161).Kernel := To_Vector (((53, 26, 0, False), (53, 
26, 1, False)));
+            Table.States (161).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 3)));
+            Table.States (162).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (162), (12, 18, 19, 20, 21, 26, 33, 35), 
(52, 0), 3, null, null);
+            Table.States (162).Kernel := To_Vector ((0 => (52, 27, 0, False)));
+            Table.States (162).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 52, 3)));
+            Table.States (163).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (163), 12, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (163), 18, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (163), 19, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (163), 20, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (163), 21, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (163), 24, 190);
+            Add_Action (Table.States (163), 25, 191);
+            Add_Action (Table.States (163), 26, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (163), 31, 192);
+            Add_Action (Table.States (163), 33, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (163), 35, Reduce, (51, 0), 3, null, 
null);
+            Table.States (163).Kernel := To_Vector (((51, 28, 0, False), (52, 
28, 1, False), (53, 28, 1, False), (53,
+            28, 1, False)));
+            Table.States (163).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 51, 3)));
+            Table.States (164).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (164), 33, 193);
+            Table.States (164).Kernel := To_Vector ((0 => (47, 16, 2, False)));
+            Table.States (164).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 193)));
+            Table.States (165).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (165), 12, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (165), 18, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (165), 19, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (165), 20, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (165), 21, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (165), 24, 123);
+            Add_Action (Table.States (165), 25, 124);
+            Add_Action (Table.States (165), 26, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (165), 31, 125);
+            Add_Action (Table.States (165), 33, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (165), 35, Reduce, (50, 0), 1, null, 
null);
+            Table.States (165).Kernel := To_Vector (((50, 33, 0, False), (52, 
33, 1, False), (53, 33, 1, False), (53,
+            33, 1, False)));
+            Table.States (165).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (166).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (166), (12, 18, 19, 20, 21, 26, 33, 35), 
(48, 1), 3, null, null);
+            Table.States (166).Kernel := To_Vector ((0 => (48, 50, 0, False)));
+            Table.States (166).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 48, 3)));
+            Table.States (167).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (167), 12, Reduce, (54, 1), 3, null, 
null);
+            Add_Action (Table.States (167), 18, 61);
+            Add_Action (Table.States (167), 19, 62);
+            Add_Action (Table.States (167), 20, 63);
+            Add_Action (Table.States (167), 21, 64);
+            Add_Action (Table.States (167), 26, Reduce, (54, 1), 3, null, 
null);
+            Add_Action (Table.States (167), 33, 65);
+            Add_Action (Table.States (167), 35, 66);
+            Table.States (167).Goto_List.Set_Capacity (6);
+            Add_Goto (Table.States (167), 47, 67);
+            Add_Goto (Table.States (167), 48, 127);
+            Add_Goto (Table.States (167), 50, 70);
+            Add_Goto (Table.States (167), 51, 71);
+            Add_Goto (Table.States (167), 52, 72);
+            Add_Goto (Table.States (167), 53, 73);
+            Table.States (167).Kernel := To_Vector (((49, 49, 1, True), (54, 
49, 0, True)));
+            Table.States (167).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 54, 3)));
+            Table.States (167).Minimal_Complete_Actions_Recursive := True;
+            Table.States (168).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (168), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (53, 1), 4, null, null);
+            Table.States (168).Kernel := To_Vector ((0 => (53, 22, 0, False)));
+            Table.States (168).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 4)));
+            Table.States (169).Action_List.Set_Capacity (9);
+            Add_Action (Table.States (169), 12, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (169), 18, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (169), 19, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (169), 20, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (169), 21, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (169), 22, 194);
+            Add_Action (Table.States (169), 27, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (169), 33, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (169), 35, Reduce, (53, 0), 3, null, 
null);
+            Table.States (169).Kernel := To_Vector (((53, 26, 0, False), (53, 
26, 1, False)));
+            Table.States (169).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 3)));
+            Table.States (170).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (170), (12, 18, 19, 20, 21, 27, 33, 35), 
(52, 0), 3, null, null);
+            Table.States (170).Kernel := To_Vector ((0 => (52, 27, 0, False)));
+            Table.States (170).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 52, 3)));
+            Table.States (171).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (171), 12, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (171), 18, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (171), 19, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (171), 20, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (171), 21, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (171), 24, 195);
+            Add_Action (Table.States (171), 25, 196);
+            Add_Action (Table.States (171), 27, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (171), 31, 197);
+            Add_Action (Table.States (171), 33, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (171), 35, Reduce, (51, 0), 3, null, 
null);
+            Table.States (171).Kernel := To_Vector (((51, 28, 0, False), (52, 
28, 1, False), (53, 28, 1, False), (53,
+            28, 1, False)));
+            Table.States (171).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 51, 3)));
+            Table.States (172).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (172), 33, 198);
+            Table.States (172).Kernel := To_Vector ((0 => (47, 16, 2, False)));
+            Table.States (172).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 198)));
+            Table.States (173).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (173), 12, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (173), 18, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (173), 19, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (173), 20, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (173), 21, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (173), 24, 135);
+            Add_Action (Table.States (173), 25, 136);
+            Add_Action (Table.States (173), 27, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (173), 31, 137);
+            Add_Action (Table.States (173), 33, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (173), 35, Reduce, (50, 0), 1, null, 
null);
+            Table.States (173).Kernel := To_Vector (((50, 33, 0, False), (52, 
33, 1, False), (53, 33, 1, False), (53,
+            33, 1, False)));
+            Table.States (173).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (174).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (174), (12, 18, 19, 20, 21, 27, 33, 35), 
(48, 1), 3, null, null);
+            Table.States (174).Kernel := To_Vector ((0 => (48, 50, 0, False)));
+            Table.States (174).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 48, 3)));
+            Table.States (175).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (175), 12, Reduce, (54, 1), 3, null, 
null);
+            Add_Action (Table.States (175), 18, 75);
+            Add_Action (Table.States (175), 19, 76);
+            Add_Action (Table.States (175), 20, 77);
+            Add_Action (Table.States (175), 21, 78);
+            Add_Action (Table.States (175), 27, Reduce, (54, 1), 3, null, 
null);
+            Add_Action (Table.States (175), 33, 79);
+            Add_Action (Table.States (175), 35, 80);
+            Table.States (175).Goto_List.Set_Capacity (6);
+            Add_Goto (Table.States (175), 47, 81);
+            Add_Goto (Table.States (175), 48, 139);
+            Add_Goto (Table.States (175), 50, 84);
+            Add_Goto (Table.States (175), 51, 85);
+            Add_Goto (Table.States (175), 52, 86);
+            Add_Goto (Table.States (175), 53, 87);
+            Table.States (175).Kernel := To_Vector (((49, 49, 1, True), (54, 
49, 0, True)));
+            Table.States (175).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 54, 3)));
+            Table.States (175).Minimal_Complete_Actions_Recursive := True;
+         end Subr_2;
+         procedure Subr_3
+         is begin
+            Table.States (176).Action_List.Set_Capacity (9);
+            Add_Action (Table.States (176), 12, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (176), 18, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (176), 19, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (176), 20, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (176), 21, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (176), 22, 199);
+            Add_Action (Table.States (176), 28, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (176), 33, Reduce, (53, 0), 3, null, 
null);
+            Add_Action (Table.States (176), 35, Reduce, (53, 0), 3, null, 
null);
+            Table.States (176).Kernel := To_Vector (((53, 26, 0, False), (53, 
26, 1, False)));
+            Table.States (176).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 3)));
+            Table.States (177).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (177), (12, 18, 19, 20, 21, 28, 33, 35), 
(52, 0), 3, null, null);
+            Table.States (177).Kernel := To_Vector ((0 => (52, 27, 0, False)));
+            Table.States (177).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 52, 3)));
+            Table.States (178).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (178), 12, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (178), 18, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (178), 19, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (178), 20, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (178), 21, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (178), 24, 200);
+            Add_Action (Table.States (178), 25, 201);
+            Add_Action (Table.States (178), 28, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (178), 31, 202);
+            Add_Action (Table.States (178), 33, Reduce, (51, 0), 3, null, 
null);
+            Add_Action (Table.States (178), 35, Reduce, (51, 0), 3, null, 
null);
+            Table.States (178).Kernel := To_Vector (((51, 28, 0, False), (52, 
28, 1, False), (53, 28, 1, False), (53,
+            28, 1, False)));
+            Table.States (178).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 51, 3)));
+            Table.States (179).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (179), 33, 203);
+            Table.States (179).Kernel := To_Vector ((0 => (47, 16, 2, False)));
+            Table.States (179).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 203)));
+            Table.States (180).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (180), 12, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (180), 18, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (180), 19, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (180), 20, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (180), 21, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (180), 24, 147);
+            Add_Action (Table.States (180), 25, 148);
+            Add_Action (Table.States (180), 28, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (180), 31, 149);
+            Add_Action (Table.States (180), 33, Reduce, (50, 0), 1, null, 
null);
+            Add_Action (Table.States (180), 35, Reduce, (50, 0), 1, null, 
null);
+            Table.States (180).Kernel := To_Vector (((50, 33, 0, False), (52, 
33, 1, False), (53, 33, 1, False), (53,
+            33, 1, False)));
+            Table.States (180).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 50, 1)));
+            Table.States (181).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (181), (12, 18, 19, 20, 21, 28, 33, 35), 
(48, 1), 3, null, null);
+            Table.States (181).Kernel := To_Vector ((0 => (48, 50, 0, False)));
+            Table.States (181).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 48, 3)));
+            Table.States (182).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (182), 12, Reduce, (54, 1), 3, null, 
null);
+            Add_Action (Table.States (182), 18, 89);
+            Add_Action (Table.States (182), 19, 90);
+            Add_Action (Table.States (182), 20, 91);
+            Add_Action (Table.States (182), 21, 92);
+            Add_Action (Table.States (182), 28, Reduce, (54, 1), 3, null, 
null);
+            Add_Action (Table.States (182), 33, 93);
+            Add_Action (Table.States (182), 35, 94);
+            Table.States (182).Goto_List.Set_Capacity (6);
+            Add_Goto (Table.States (182), 47, 95);
+            Add_Goto (Table.States (182), 48, 151);
+            Add_Goto (Table.States (182), 50, 98);
+            Add_Goto (Table.States (182), 51, 99);
+            Add_Goto (Table.States (182), 52, 100);
+            Add_Goto (Table.States (182), 53, 101);
+            Table.States (182).Kernel := To_Vector (((49, 49, 1, True), (54, 
49, 0, True)));
+            Table.States (182).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 54, 3)));
+            Table.States (182).Minimal_Complete_Actions_Recursive := True;
+            Table.States (183).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (183), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (53, 2), 4, null, null);
+            Table.States (183).Kernel := To_Vector ((0 => (53, 24, 0, False)));
+            Table.States (183).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 4)));
+            Table.States (184).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (184), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (52, 1), 4, null, null);
+            Table.States (184).Kernel := To_Vector ((0 => (52, 25, 0, False)));
+            Table.States (184).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 52, 4)));
+            Table.States (185).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (185), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (53, 3), 4, null, null);
+            Table.States (185).Kernel := To_Vector ((0 => (53, 31, 0, False)));
+            Table.States (185).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 4)));
+            Table.States (186).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (186), 17, 204);
+            Table.States (186).Kernel := To_Vector ((0 => (47, 33, 1, False)));
+            Table.States (186).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 17, 204)));
+            Table.States (187).Action_List.Set_Capacity (5);
+            Add_Action (Table.States (187), (12, 23, 29, 33, 36), (45, 3), 4, 
null, null);
+            Table.States (187).Kernel := To_Vector ((0 => (45, 5, 0, True)));
+            Table.States (187).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 45, 4)));
+            Table.States (187).Minimal_Complete_Actions_Recursive := True;
+            Table.States (188).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (188), 16, 205);
+            Table.States (188).Kernel := To_Vector ((0 => (45, 33, 2, True)));
+            Table.States (188).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 16, 205)));
+            Table.States (188).Minimal_Complete_Actions_Recursive := True;
+            Table.States (189).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (189), (12, 18, 19, 20, 21, 26, 33, 35), 
(53, 1), 4, null, null);
+            Table.States (189).Kernel := To_Vector ((0 => (53, 22, 0, False)));
+            Table.States (189).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 4)));
+            Table.States (190).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (190), (12, 18, 19, 20, 21, 26, 33, 35), 
(53, 2), 4, null, null);
+            Table.States (190).Kernel := To_Vector ((0 => (53, 24, 0, False)));
+            Table.States (190).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 4)));
+            Table.States (191).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (191), (12, 18, 19, 20, 21, 26, 33, 35), 
(52, 1), 4, null, null);
+            Table.States (191).Kernel := To_Vector ((0 => (52, 25, 0, False)));
+            Table.States (191).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 52, 4)));
+            Table.States (192).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (192), (12, 18, 19, 20, 21, 26, 33, 35), 
(53, 3), 4, null, null);
+            Table.States (192).Kernel := To_Vector ((0 => (53, 31, 0, False)));
+            Table.States (192).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 4)));
+            Table.States (193).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (193), 17, 206);
+            Table.States (193).Kernel := To_Vector ((0 => (47, 33, 1, False)));
+            Table.States (193).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 17, 206)));
+            Table.States (194).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (194), (12, 18, 19, 20, 21, 27, 33, 35), 
(53, 1), 4, null, null);
+            Table.States (194).Kernel := To_Vector ((0 => (53, 22, 0, False)));
+            Table.States (194).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 4)));
+            Table.States (195).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (195), (12, 18, 19, 20, 21, 27, 33, 35), 
(53, 2), 4, null, null);
+            Table.States (195).Kernel := To_Vector ((0 => (53, 24, 0, False)));
+            Table.States (195).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 4)));
+            Table.States (196).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (196), (12, 18, 19, 20, 21, 27, 33, 35), 
(52, 1), 4, null, null);
+            Table.States (196).Kernel := To_Vector ((0 => (52, 25, 0, False)));
+            Table.States (196).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 52, 4)));
+            Table.States (197).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (197), (12, 18, 19, 20, 21, 27, 33, 35), 
(53, 3), 4, null, null);
+            Table.States (197).Kernel := To_Vector ((0 => (53, 31, 0, False)));
+            Table.States (197).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 4)));
+            Table.States (198).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (198), 17, 207);
+            Table.States (198).Kernel := To_Vector ((0 => (47, 33, 1, False)));
+            Table.States (198).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 17, 207)));
+            Table.States (199).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (199), (12, 18, 19, 20, 21, 28, 33, 35), 
(53, 1), 4, null, null);
+            Table.States (199).Kernel := To_Vector ((0 => (53, 22, 0, False)));
+            Table.States (199).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 4)));
+            Table.States (200).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (200), (12, 18, 19, 20, 21, 28, 33, 35), 
(53, 2), 4, null, null);
+            Table.States (200).Kernel := To_Vector ((0 => (53, 24, 0, False)));
+            Table.States (200).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 4)));
+            Table.States (201).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (201), (12, 18, 19, 20, 21, 28, 33, 35), 
(52, 1), 4, null, null);
+            Table.States (201).Kernel := To_Vector ((0 => (52, 25, 0, False)));
+            Table.States (201).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 52, 4)));
+            Table.States (202).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (202), (12, 18, 19, 20, 21, 28, 33, 35), 
(53, 3), 4, null, null);
+            Table.States (202).Kernel := To_Vector ((0 => (53, 31, 0, False)));
+            Table.States (202).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 53, 4)));
+            Table.States (203).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (203), 17, 208);
+            Table.States (203).Kernel := To_Vector ((0 => (47, 33, 1, False)));
+            Table.States (203).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 17, 208)));
+            Table.States (204).Action_List.Set_Capacity (11);
+            Add_Action (Table.States (204), (11, 12, 18, 19, 20, 21, 23, 29, 
33, 35, 36), (47, 0), 5, null, null);
+            Table.States (204).Kernel := To_Vector ((0 => (47, 17, 0, False)));
+            Table.States (204).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 47, 5)));
+            Table.States (205).Action_List.Set_Capacity (1);
+            Add_Action (Table.States (205), 33, 209);
+            Table.States (205).Kernel := To_Vector ((0 => (45, 16, 1, True)));
+            Table.States (205).Minimal_Complete_Actions := To_Vector ((0 => 
(Shift, 33, 209)));
+            Table.States (205).Minimal_Complete_Actions_Recursive := True;
+            Table.States (206).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (206), (12, 18, 19, 20, 21, 26, 33, 35), 
(47, 0), 5, null, null);
+            Table.States (206).Kernel := To_Vector ((0 => (47, 17, 0, False)));
+            Table.States (206).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 47, 5)));
+            Table.States (207).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (207), (12, 18, 19, 20, 21, 27, 33, 35), 
(47, 0), 5, null, null);
+            Table.States (207).Kernel := To_Vector ((0 => (47, 17, 0, False)));
+            Table.States (207).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 47, 5)));
+            Table.States (208).Action_List.Set_Capacity (8);
+            Add_Action (Table.States (208), (12, 18, 19, 20, 21, 28, 33, 35), 
(47, 0), 5, null, null);
+            Table.States (208).Kernel := To_Vector ((0 => (47, 17, 0, False)));
+            Table.States (208).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 47, 5)));
+            Table.States (209).Action_List.Set_Capacity (5);
+            Add_Action (Table.States (209), (12, 23, 29, 33, 36), (45, 2), 6, 
null, null);
+            Table.States (209).Kernel := To_Vector ((0 => (45, 33, 0, True)));
+            Table.States (209).Minimal_Complete_Actions := To_Vector ((0 => 
(Reduce, 45, 6)));
+            Table.States (209).Minimal_Complete_Actions_Recursive := True;
+         end Subr_3;
+      begin
+         Subr_1;
+         Subr_2;
+         Subr_3;
+         Table.Error_Action := new Parse_Action_Node'((Verb => Error), null);
+      end;
+
+      WisiToken.Parse.LR.Parser.New_Parser
+        (Parser,
+         Trace,
+         Lexer.New_Lexer (Trace.Descriptor),
+         Table,
+         Language_Fixes,
+         Language_Matching_Begin_Tokens,
+         Language_String_ID_Set,
+         User_Data,
+         Max_Parallel         => 15,
+         Terminate_Same_State => True);
+   end Create_Parser;
+end Wisitoken_Grammar_1_Process_Main;
diff --git a/wisitoken_grammar_1_process_main.ads 
b/wisitoken_grammar_1_process_main.ads
new file mode 100644
index 0000000..c0bbfa5
--- /dev/null
+++ b/wisitoken_grammar_1_process_main.ads
@@ -0,0 +1,36 @@
+--  generated parser support file.
+--  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS wisitoken_grammar_1.wy
+--
+
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
+--
+--  Author: Stephen Leake <address@hidden>
+--
+--  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/>.
+
+with WisiToken.Syntax_Trees;
+with WisiToken.Parse.LR.Parser;
+package Wisitoken_Grammar_1_Process_Main is
+
+   procedure Create_Parser
+     (Parser                         :    out WisiToken.Parse.LR.Parser.Parser;
+      Language_Fixes                 : in     
WisiToken.Parse.LR.Parser.Language_Fixes_Access;
+      Language_Matching_Begin_Tokens : in     
WisiToken.Parse.LR.Parser.Language_Matching_Begin_Tokens_Access;
+      Language_String_ID_Set         : in     
WisiToken.Parse.LR.Parser.Language_String_ID_Set_Access;
+      Trace                        : not null access WisiToken.Trace'Class;
+      User_Data                    : in     
WisiToken.Syntax_Trees.User_Data_Access);
+
+end Wisitoken_Grammar_1_Process_Main;
diff --git a/wisitoken_grammar_1_re2c.c b/wisitoken_grammar_1_re2c.c
new file mode 100644
index 0000000..9cfbf31
--- /dev/null
+++ b/wisitoken_grammar_1_re2c.c
@@ -0,0 +1,4299 @@
+/* Generated by re2c 1.0.3 */
+#line 1 "wisitoken_grammar_1.re2c"
+//  generated parser support file. -*- mode: C -*-
+//  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS wisitoken_grammar_1.wy
+//
+
+//  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
+//
+//  Author: Stephen Leake <address@hidden>
+//
+//  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/>.
+
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef struct wisi_lexer
+{
+   unsigned char* buffer;           // input text, in utf-8 encoding
+   unsigned char* buffer_last;      // last byte in buffer
+   unsigned char* cursor;           // current byte
+   unsigned char* byte_token_start; // byte position at start of current token
+   size_t         char_pos;         // character position of current character
+   size_t         char_token_start; // character position at start of current 
token
+   int            line;             // 1 indexed
+   int            line_token_start; // line at start of current token
+   unsigned char* marker;           // saved cursor
+   size_t         marker_pos;       // saved character position
+   size_t         marker_line;      // saved line
+   unsigned char* context;          // saved cursor
+   size_t         context_pos;      // saved character position
+   int            context_line;     // saved line
+   int            verbosity;
+
+} wisi_lexer;
+
+#define YYCTYPE unsigned char
+
+#define NO_ERROR 0
+#define ERROR_unrecognized_character 1
+wisi_lexer* wisitoken_grammar_1_new_lexer
+   (unsigned char* input, size_t length, int verbosity)
+{
+   wisi_lexer* result        = malloc (sizeof (wisi_lexer));
+   result->buffer            = input;
+   result->buffer_last       = input + length - 1;
+   result->cursor            = input;
+   result->byte_token_start  = input;
+   result->char_pos          = 1;
+   result->char_token_start  = 1;
+   result->line              = (*result->cursor == 0x0A) ? 2 : 1;
+   result->line_token_start  = result->line;
+   result->verbosity         = verbosity;
+   return result;
+}
+
+void
+wisitoken_grammar_1_free_lexer(wisi_lexer** lexer)
+{
+   free(*lexer);
+   *lexer = 0;
+}
+
+void
+wisitoken_grammar_1_reset_lexer(wisi_lexer* lexer)
+{
+   lexer->cursor   = lexer->buffer;
+   lexer->char_pos = 1;
+   lexer->line     = (*lexer->cursor == 0x0A) ? 2 : 1;
+}
+
+static void debug(wisi_lexer* lexer, int state, unsigned char ch)
+{
+   if (lexer->verbosity > 0)
+      {
+      if (ch < ' ')
+         printf ("lexer: %d, 0x%x\n", state, ch);
+      else
+         printf ("lexer: %d, '%c' 0x%x\n", state, ch, ch);
+      }
+}
+#define YYDEBUG(state, ch) debug(lexer, state, ch)
+#define YYCURSOR lexer->cursor
+
+#define YYPEEK() (lexer->cursor <= lexer->buffer_last) ? *lexer->cursor : 4
+
+#define DO_COUNT ((*lexer->cursor & 0xC0) != 0xC0) && (*lexer->cursor != 0x0D)
+
+static void skip(wisi_lexer* lexer)
+{
+   if (lexer->cursor <= lexer->buffer_last)
+   {
+      ++lexer->cursor;
+      if (DO_COUNT) ++lexer->char_pos;
+      if (lexer->cursor <= lexer->buffer_last)
+         if (*lexer->cursor == 0x0A) ++lexer->line;
+   }
+}
+#define YYSKIP() skip(lexer)
+#define YYBACKUP() lexer->marker = lexer->cursor; lexer->marker_pos = 
lexer->char_pos;lexer->marker_line = lexer->line
+#define YYRESTORE() lexer->cursor = lexer->marker; lexer->char_pos = 
lexer->marker_pos;lexer->line = lexer->marker_line
+#define YYBACKUPCTX() lexer->context = lexer->cursor; lexer->context_pos = 
lexer->char_pos;lexer->context_line = lexer->line
+#define YYRESTORECTX() lexer->cursor = lexer->context; lexer->char_pos = 
lexer->context_pos;lexer->line = lexer->context_line
+
+static void skip_to(wisi_lexer* lexer, char* target)
+{
+  int i;
+
+  while (lexer->cursor <= lexer->buffer_last)
+    {
+      if (*lexer->cursor == target[0])
+      {
+        i = 0;
+        do
+          i++;
+        while (0 != target[i] &&
+               lexer->cursor + i <= lexer->buffer_last &&
+               *(lexer->cursor + i) == target[i]);
+
+        if (0 == target[i])
+          {
+            for (i = 0; 0 != target[i]; i++)
+               skip(lexer);
+            break;
+          }
+      }
+      skip(lexer);
+    };
+}
+
+int wisitoken_grammar_1_next_token
+  (wisi_lexer* lexer,
+   int* id,
+   size_t* byte_position,
+   size_t* byte_length,
+   size_t* char_position,
+   size_t* char_length,
+   int*    line_start)
+{
+   int status = NO_ERROR;
+   *id = -1;
+   if (lexer->cursor > lexer->buffer_last)
+   {
+      *id            = 36;
+      *byte_position = lexer->buffer_last - lexer->buffer + 1;
+      *byte_length   = 0;
+      *char_position = lexer->char_token_start;
+      *char_length   = 0;
+      *line_start    = lexer->line;
+      return status;
+   }
+
+   lexer->byte_token_start = lexer->cursor;
+   lexer->char_token_start = lexer->char_pos;
+   if (*lexer->cursor == 0x0A)
+      lexer->line_token_start = lexer->line-1;
+   else
+      lexer->line_token_start = lexer->line;
+
+   while (*id == -1 && status == 0)
+   {
+
+#line 177 "wisitoken_grammar_1_re2c.c"
+{
+       YYCTYPE yych;
+       unsigned int yyaccept = 0;
+       YYDEBUG(0, *YYCURSOR);
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x04:      goto yy4;
+       case '\t':
+       case ' ':       goto yy6;
+       case '\n':      goto yy8;
+       case '\r':      goto yy10;
+       case '"':       goto yy11;
+       case '%':       goto yy12;
+       case '\'':      goto yy14;
+       case '(':       goto yy15;
+       case ')':       goto yy17;
+       case '*':       goto yy19;
+       case '+':       goto yy21;
+       case ',':       goto yy23;
+       case '-':       goto yy25;
+       case '/':       goto yy27;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy29;
+       case ':':       goto yy32;
+       case ';':       goto yy34;
+       case '<':       goto yy36;
+       case '=':       goto yy38;
+       case '>':       goto yy40;
+       case '?':       goto yy42;
+       case 'A':
+       case 'B':
+       case 'C':
+       case 'D':
+       case 'E':
+       case 'F':
+       case 'G':
+       case 'H':
+       case 'I':
+       case 'J':
+       case 'K':
+       case 'L':
+       case 'M':
+       case 'N':
+       case 'O':
+       case 'P':
+       case 'Q':
+       case 'R':
+       case 'S':
+       case 'T':
+       case 'U':
+       case 'V':
+       case 'W':
+       case 'X':
+       case 'Y':
+       case 'Z':
+       case 'a':
+       case 'b':
+       case 'd':
+       case 'f':
+       case 'g':
+       case 'h':
+       case 'j':
+       case 'l':
+       case 'm':
+       case 'o':
+       case 'p':
+       case 'q':
+       case 'r':
+       case 's':
+       case 'u':
+       case 'v':
+       case 'w':
+       case 'x':
+       case 'y':
+       case 'z':       goto yy44;
+       case '[':       goto yy47;
+       case ']':       goto yy49;
+       case 'c':       goto yy51;
+       case 'e':       goto yy52;
+       case 'i':       goto yy53;
+       case 'k':       goto yy54;
+       case 'n':       goto yy55;
+       case 't':       goto yy56;
+       case '{':       goto yy57;
+       case '|':       goto yy59;
+       case '}':       goto yy61;
+       case 0xC2:
+       case 0xC3:
+       case 0xC4:
+       case 0xC5:
+       case 0xC6:
+       case 0xC7:
+       case 0xC8:
+       case 0xC9:
+       case 0xCA:
+       case 0xCB:
+       case 0xCC:
+       case 0xCD:
+       case 0xCE:
+       case 0xCF:
+       case 0xD0:
+       case 0xD1:
+       case 0xD2:
+       case 0xD3:
+       case 0xD4:
+       case 0xD5:
+       case 0xD6:
+       case 0xD7:
+       case 0xD8:
+       case 0xD9:
+       case 0xDA:
+       case 0xDB:
+       case 0xDC:
+       case 0xDD:
+       case 0xDE:
+       case 0xDF:      goto yy63;
+       case 0xE0:      goto yy64;
+       case 0xE1:
+       case 0xE2:
+       case 0xE3:
+       case 0xE4:
+       case 0xE5:
+       case 0xE6:
+       case 0xE7:
+       case 0xE8:
+       case 0xE9:
+       case 0xEA:
+       case 0xEB:
+       case 0xEC:
+       case 0xED:
+       case 0xEE:
+       case 0xEF:      goto yy65;
+       case 0xF0:      goto yy66;
+       case 0xF1:
+       case 0xF2:
+       case 0xF3:      goto yy67;
+       case 0xF4:      goto yy68;
+       default:        goto yy2;
+       }
+yy2:
+       YYDEBUG(2, YYPEEK ());
+       YYSKIP ();
+yy3:
+       YYDEBUG(3, YYPEEK ());
+#line 255 "wisitoken_grammar_1.re2c"
+       {status = ERROR_unrecognized_character; continue;}
+#line 332 "wisitoken_grammar_1_re2c.c"
+yy4:
+       YYDEBUG(4, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(5, YYPEEK ());
+#line 253 "wisitoken_grammar_1.re2c"
+       {*id =  36; continue;}
+#line 339 "wisitoken_grammar_1_re2c.c"
+yy6:
+       YYDEBUG(6, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(7, YYPEEK ());
+#line 211 "wisitoken_grammar_1.re2c"
+       { lexer->byte_token_start = lexer->cursor;
+          lexer->char_token_start = lexer->char_pos;
+          if (*lexer->cursor == 0x0A)
+             lexer->line_token_start = lexer->line-1;
+          else
+             lexer->line_token_start = lexer->line;
+          continue; }
+#line 352 "wisitoken_grammar_1_re2c.c"
+yy8:
+       YYDEBUG(8, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(9, YYPEEK ());
+#line 218 "wisitoken_grammar_1.re2c"
+       {*id =  1; continue;}
+#line 359 "wisitoken_grammar_1_re2c.c"
+yy10:
+       YYDEBUG(10, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case '\n':      goto yy8;
+       default:        goto yy3;
+       }
+yy11:
+       YYDEBUG(11, YYPEEK ());
+       yyaccept = 0;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case ' ':
+       case '!':
+       case '"':
+       case '#':
+       case '$':
+       case '%':
+       case '&':
+       case '\'':
+       case '(':
+       case ')':
+       case '*':
+       case '+':
+       case ',':
+       case '-':
+       case '.':
+       case '/':
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case ':':
+       case ';':
+       case '<':
+       case '=':
+       case '>':
+       case '?':
+       case '@':
+       case 'A':
+       case 'B':
+       case 'C':
+       case 'D':
+       case 'E':
+       case 'F':
+       case 'G':
+       case 'H':
+       case 'I':
+       case 'J':
+       case 'K':
+       case 'L':
+       case 'M':
+       case 'N':
+       case 'O':
+       case 'P':
+       case 'Q':
+       case 'R':
+       case 'S':
+       case 'T':
+       case 'U':
+       case 'V':
+       case 'W':
+       case 'X':
+       case 'Y':
+       case 'Z':
+       case '[':
+       case '\\':
+       case ']':
+       case '^':
+       case '_':
+       case '`':
+       case 'a':
+       case 'b':
+       case 'c':
+       case 'd':
+       case 'e':
+       case 'f':
+       case 'g':
+       case 'h':
+       case 'i':
+       case 'j':
+       case 'k':
+       case 'l':
+       case 'm':
+       case 'n':
+       case 'o':
+       case 'p':
+       case 'q':
+       case 'r':
+       case 's':
+       case 't':
+       case 'u':
+       case 'v':
+       case 'w':
+       case 'x':
+       case 'y':
+       case 'z':
+       case '{':
+       case '|':
+       case '}':
+       case '~':
+       case 0x7F:
+       case 0xC2:
+       case 0xC3:
+       case 0xC4:
+       case 0xC5:
+       case 0xC6:
+       case 0xC7:
+       case 0xC8:
+       case 0xC9:
+       case 0xCA:
+       case 0xCB:
+       case 0xCC:
+       case 0xCD:
+       case 0xCE:
+       case 0xCF:
+       case 0xD0:
+       case 0xD1:
+       case 0xD2:
+       case 0xD3:
+       case 0xD4:
+       case 0xD5:
+       case 0xD6:
+       case 0xD7:
+       case 0xD8:
+       case 0xD9:
+       case 0xDA:
+       case 0xDB:
+       case 0xDC:
+       case 0xDD:
+       case 0xDE:
+       case 0xDF:
+       case 0xE0:
+       case 0xE1:
+       case 0xE2:
+       case 0xE3:
+       case 0xE4:
+       case 0xE5:
+       case 0xE6:
+       case 0xE7:
+       case 0xE8:
+       case 0xE9:
+       case 0xEA:
+       case 0xEB:
+       case 0xEC:
+       case 0xED:
+       case 0xEE:
+       case 0xEF:
+       case 0xF0:
+       case 0xF1:
+       case 0xF2:
+       case 0xF3:
+       case 0xF4:      goto yy70;
+       default:        goto yy3;
+       }
+yy12:
+       YYDEBUG(12, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case '(':       goto yy80;
+       case '[':       goto yy82;
+       case '{':       goto yy84;
+       default:        goto yy13;
+       }
+yy13:
+       YYDEBUG(13, YYPEEK ());
+#line 240 "wisitoken_grammar_1.re2c"
+       {*id =  23; continue;}
+#line 538 "wisitoken_grammar_1_re2c.c"
+yy14:
+       YYDEBUG(14, YYPEEK ());
+       yyaccept = 0;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case ' ':
+       case '!':
+       case '"':
+       case '#':
+       case '$':
+       case '%':
+       case '&':
+       case '\'':
+       case '(':
+       case ')':
+       case '*':
+       case '+':
+       case ',':
+       case '-':
+       case '.':
+       case '/':
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case ':':
+       case ';':
+       case '<':
+       case '=':
+       case '>':
+       case '?':
+       case '@':
+       case 'A':
+       case 'B':
+       case 'C':
+       case 'D':
+       case 'E':
+       case 'F':
+       case 'G':
+       case 'H':
+       case 'I':
+       case 'J':
+       case 'K':
+       case 'L':
+       case 'M':
+       case 'N':
+       case 'O':
+       case 'P':
+       case 'Q':
+       case 'R':
+       case 'S':
+       case 'T':
+       case 'U':
+       case 'V':
+       case 'W':
+       case 'X':
+       case 'Y':
+       case 'Z':
+       case '[':
+       case '\\':
+       case ']':
+       case '^':
+       case '_':
+       case '`':
+       case 'a':
+       case 'b':
+       case 'c':
+       case 'd':
+       case 'e':
+       case 'f':
+       case 'g':
+       case 'h':
+       case 'i':
+       case 'j':
+       case 'k':
+       case 'l':
+       case 'm':
+       case 'n':
+       case 'o':
+       case 'p':
+       case 'q':
+       case 'r':
+       case 's':
+       case 't':
+       case 'u':
+       case 'v':
+       case 'w':
+       case 'x':
+       case 'y':
+       case 'z':
+       case '{':
+       case '|':
+       case '}':
+       case '~':
+       case 0x7F:
+       case 0xC2:
+       case 0xC3:
+       case 0xC4:
+       case 0xC5:
+       case 0xC6:
+       case 0xC7:
+       case 0xC8:
+       case 0xC9:
+       case 0xCA:
+       case 0xCB:
+       case 0xCC:
+       case 0xCD:
+       case 0xCE:
+       case 0xCF:
+       case 0xD0:
+       case 0xD1:
+       case 0xD2:
+       case 0xD3:
+       case 0xD4:
+       case 0xD5:
+       case 0xD6:
+       case 0xD7:
+       case 0xD8:
+       case 0xD9:
+       case 0xDA:
+       case 0xDB:
+       case 0xDC:
+       case 0xDD:
+       case 0xDE:
+       case 0xDF:
+       case 0xE0:
+       case 0xE1:
+       case 0xE2:
+       case 0xE3:
+       case 0xE4:
+       case 0xE5:
+       case 0xE6:
+       case 0xE7:
+       case 0xE8:
+       case 0xE9:
+       case 0xEA:
+       case 0xEB:
+       case 0xEC:
+       case 0xED:
+       case 0xEE:
+       case 0xEF:
+       case 0xF0:
+       case 0xF1:
+       case 0xF2:
+       case 0xF3:
+       case 0xF4:      goto yy87;
+       default:        goto yy3;
+       }
+yy15:
+       YYDEBUG(15, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(16, YYPEEK ());
+#line 237 "wisitoken_grammar_1.re2c"
+       {*id =  20; continue;}
+#line 701 "wisitoken_grammar_1_re2c.c"
+yy17:
+       YYDEBUG(17, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(18, YYPEEK ());
+#line 245 "wisitoken_grammar_1.re2c"
+       {*id =  28; continue;}
+#line 708 "wisitoken_grammar_1_re2c.c"
+yy19:
+       YYDEBUG(19, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(20, YYPEEK ());
+#line 248 "wisitoken_grammar_1.re2c"
+       {*id =  31; continue;}
+#line 715 "wisitoken_grammar_1_re2c.c"
+yy21:
+       YYDEBUG(21, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(22, YYPEEK ());
+#line 241 "wisitoken_grammar_1.re2c"
+       {*id =  24; continue;}
+#line 722 "wisitoken_grammar_1_re2c.c"
+yy23:
+       YYDEBUG(23, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(24, YYPEEK ());
+#line 232 "wisitoken_grammar_1.re2c"
+       {*id =  15; continue;}
+#line 729 "wisitoken_grammar_1_re2c.c"
+yy25:
+       YYDEBUG(25, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case '_':       goto yy29;
+       default:        goto yy26;
+       }
+yy26:
+       YYDEBUG(26, YYPEEK ());
+#line 239 "wisitoken_grammar_1.re2c"
+       {*id =  22; continue;}
+#line 752 "wisitoken_grammar_1_re2c.c"
+yy27:
+       YYDEBUG(27, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(28, YYPEEK ());
+#line 247 "wisitoken_grammar_1.re2c"
+       {*id =  30; continue;}
+#line 759 "wisitoken_grammar_1_re2c.c"
+yy29:
+       YYDEBUG(29, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       YYDEBUG(30, YYPEEK ());
+       switch (yych) {
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case '_':       goto yy29;
+       default:        goto yy31;
+       }
+yy31:
+       YYDEBUG(31, YYPEEK ());
+#line 249 "wisitoken_grammar_1.re2c"
+       {*id =  32; continue;}
+#line 783 "wisitoken_grammar_1_re2c.c"
+yy32:
+       YYDEBUG(32, YYPEEK ());
+       yyaccept = 1;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case ':':       goto yy96;
+       default:        goto yy33;
+       }
+yy33:
+       YYDEBUG(33, YYPEEK ());
+#line 230 "wisitoken_grammar_1.re2c"
+       {*id =  13; continue;}
+#line 798 "wisitoken_grammar_1_re2c.c"
+yy34:
+       YYDEBUG(34, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case ';':       goto yy97;
+       default:        goto yy35;
+       }
+yy35:
+       YYDEBUG(35, YYPEEK ());
+#line 246 "wisitoken_grammar_1.re2c"
+       {*id =  29; continue;}
+#line 811 "wisitoken_grammar_1_re2c.c"
+yy36:
+       YYDEBUG(36, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(37, YYPEEK ());
+#line 238 "wisitoken_grammar_1.re2c"
+       {*id =  21; continue;}
+#line 818 "wisitoken_grammar_1_re2c.c"
+yy38:
+       YYDEBUG(38, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(39, YYPEEK ());
+#line 233 "wisitoken_grammar_1.re2c"
+       {*id =  16; continue;}
+#line 825 "wisitoken_grammar_1_re2c.c"
+yy40:
+       YYDEBUG(40, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(41, YYPEEK ());
+#line 234 "wisitoken_grammar_1.re2c"
+       {*id =  17; continue;}
+#line 832 "wisitoken_grammar_1_re2c.c"
+yy42:
+       YYDEBUG(42, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(43, YYPEEK ());
+#line 242 "wisitoken_grammar_1.re2c"
+       {*id =  25; continue;}
+#line 839 "wisitoken_grammar_1_re2c.c"
+yy44:
+       YYDEBUG(44, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+yy45:
+       YYDEBUG(45, YYPEEK ());
+       switch (yych) {
+       case '-':
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case 'A':
+       case 'B':
+       case 'C':
+       case 'D':
+       case 'E':
+       case 'F':
+       case 'G':
+       case 'H':
+       case 'I':
+       case 'J':
+       case 'K':
+       case 'L':
+       case 'M':
+       case 'N':
+       case 'O':
+       case 'P':
+       case 'Q':
+       case 'R':
+       case 'S':
+       case 'T':
+       case 'U':
+       case 'V':
+       case 'W':
+       case 'X':
+       case 'Y':
+       case 'Z':
+       case '_':
+       case 'a':
+       case 'b':
+       case 'c':
+       case 'd':
+       case 'e':
+       case 'f':
+       case 'g':
+       case 'h':
+       case 'i':
+       case 'j':
+       case 'k':
+       case 'l':
+       case 'm':
+       case 'n':
+       case 'o':
+       case 'p':
+       case 'q':
+       case 'r':
+       case 's':
+       case 't':
+       case 'u':
+       case 'v':
+       case 'w':
+       case 'x':
+       case 'y':
+       case 'z':       goto yy44;
+       case 0xC2:
+       case 0xC3:
+       case 0xC4:
+       case 0xC5:
+       case 0xC6:
+       case 0xC7:
+       case 0xC8:
+       case 0xC9:
+       case 0xCA:
+       case 0xCB:
+       case 0xCC:
+       case 0xCD:
+       case 0xCE:
+       case 0xCF:
+       case 0xD0:
+       case 0xD1:
+       case 0xD2:
+       case 0xD3:
+       case 0xD4:
+       case 0xD5:
+       case 0xD6:
+       case 0xD7:
+       case 0xD8:
+       case 0xD9:
+       case 0xDA:
+       case 0xDB:
+       case 0xDC:
+       case 0xDD:
+       case 0xDE:
+       case 0xDF:      goto yy100;
+       case 0xE0:      goto yy101;
+       case 0xE1:
+       case 0xE2:
+       case 0xE3:
+       case 0xE4:
+       case 0xE5:
+       case 0xE6:
+       case 0xE7:
+       case 0xE8:
+       case 0xE9:
+       case 0xEA:
+       case 0xEB:
+       case 0xEC:
+       case 0xED:
+       case 0xEE:
+       case 0xEF:      goto yy102;
+       case 0xF0:      goto yy103;
+       case 0xF1:
+       case 0xF2:
+       case 0xF3:      goto yy104;
+       case 0xF4:      goto yy105;
+       default:        goto yy46;
+       }
+yy46:
+       YYDEBUG(46, YYPEEK ());
+#line 250 "wisitoken_grammar_1.re2c"
+       {*id =  33; continue;}
+#line 970 "wisitoken_grammar_1_re2c.c"
+yy47:
+       YYDEBUG(47, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(48, YYPEEK ());
+#line 236 "wisitoken_grammar_1.re2c"
+       {*id =  19; continue;}
+#line 977 "wisitoken_grammar_1_re2c.c"
+yy49:
+       YYDEBUG(49, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(50, YYPEEK ());
+#line 244 "wisitoken_grammar_1.re2c"
+       {*id =  27; continue;}
+#line 984 "wisitoken_grammar_1_re2c.c"
+yy51:
+       YYDEBUG(51, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'o':       goto yy106;
+       default:        goto yy45;
+       }
+yy52:
+       YYDEBUG(52, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'n':       goto yy107;
+       default:        goto yy45;
+       }
+yy53:
+       YYDEBUG(53, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'f':       goto yy108;
+       default:        goto yy45;
+       }
+yy54:
+       YYDEBUG(54, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'e':       goto yy110;
+       default:        goto yy45;
+       }
+yy55:
+       YYDEBUG(55, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'o':       goto yy111;
+       default:        goto yy45;
+       }
+yy56:
+       YYDEBUG(56, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'o':       goto yy112;
+       default:        goto yy45;
+       }
+yy57:
+       YYDEBUG(57, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(58, YYPEEK ());
+#line 235 "wisitoken_grammar_1.re2c"
+       {*id =  18; continue;}
+#line 1051 "wisitoken_grammar_1_re2c.c"
+yy59:
+       YYDEBUG(59, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(60, YYPEEK ());
+#line 229 "wisitoken_grammar_1.re2c"
+       {*id =  12; continue;}
+#line 1058 "wisitoken_grammar_1_re2c.c"
+yy61:
+       YYDEBUG(61, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(62, YYPEEK ());
+#line 243 "wisitoken_grammar_1.re2c"
+       {*id =  26; continue;}
+#line 1065 "wisitoken_grammar_1_re2c.c"
+yy63:
+       YYDEBUG(63, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy44;
+       default:        goto yy3;
+       }
+yy64:
+       YYDEBUG(64, YYPEEK ());
+       yyaccept = 0;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy100;
+       default:        goto yy3;
+       }
+yy65:
+       YYDEBUG(65, YYPEEK ());
+       yyaccept = 0;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy100;
+       default:        goto yy3;
+       }
+yy66:
+       YYDEBUG(66, YYPEEK ());
+       yyaccept = 0;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy102;
+       default:        goto yy3;
+       }
+yy67:
+       YYDEBUG(67, YYPEEK ());
+       yyaccept = 0;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy102;
+       default:        goto yy3;
+       }
+yy68:
+       YYDEBUG(68, YYPEEK ());
+       yyaccept = 0;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:      goto yy102;
+       default:        goto yy3;
+       }
+yy69:
+       YYDEBUG(69, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+yy70:
+       YYDEBUG(70, YYPEEK ());
+       switch (yych) {
+       case ' ':
+       case '!':
+       case '#':
+       case '$':
+       case '%':
+       case '&':
+       case '\'':
+       case '(':
+       case ')':
+       case '*':
+       case '+':
+       case ',':
+       case '-':
+       case '.':
+       case '/':
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case ':':
+       case ';':
+       case '<':
+       case '=':
+       case '>':
+       case '?':
+       case '@':
+       case 'A':
+       case 'B':
+       case 'C':
+       case 'D':
+       case 'E':
+       case 'F':
+       case 'G':
+       case 'H':
+       case 'I':
+       case 'J':
+       case 'K':
+       case 'L':
+       case 'M':
+       case 'N':
+       case 'O':
+       case 'P':
+       case 'Q':
+       case 'R':
+       case 'S':
+       case 'T':
+       case 'U':
+       case 'V':
+       case 'W':
+       case 'X':
+       case 'Y':
+       case 'Z':
+       case '[':
+       case '\\':
+       case ']':
+       case '^':
+       case '_':
+       case '`':
+       case 'a':
+       case 'b':
+       case 'c':
+       case 'd':
+       case 'e':
+       case 'f':
+       case 'g':
+       case 'h':
+       case 'i':
+       case 'j':
+       case 'k':
+       case 'l':
+       case 'm':
+       case 'n':
+       case 'o':
+       case 'p':
+       case 'q':
+       case 'r':
+       case 's':
+       case 't':
+       case 'u':
+       case 'v':
+       case 'w':
+       case 'x':
+       case 'y':
+       case 'z':
+       case '{':
+       case '|':
+       case '}':
+       case '~':
+       case 0x7F:      goto yy69;
+       case '"':       goto yy72;
+       case 0xC2:
+       case 0xC3:
+       case 0xC4:
+       case 0xC5:
+       case 0xC6:
+       case 0xC7:
+       case 0xC8:
+       case 0xC9:
+       case 0xCA:
+       case 0xCB:
+       case 0xCC:
+       case 0xCD:
+       case 0xCE:
+       case 0xCF:
+       case 0xD0:
+       case 0xD1:
+       case 0xD2:
+       case 0xD3:
+       case 0xD4:
+       case 0xD5:
+       case 0xD6:
+       case 0xD7:
+       case 0xD8:
+       case 0xD9:
+       case 0xDA:
+       case 0xDB:
+       case 0xDC:
+       case 0xDD:
+       case 0xDE:
+       case 0xDF:      goto yy74;
+       case 0xE0:      goto yy75;
+       case 0xE1:
+       case 0xE2:
+       case 0xE3:
+       case 0xE4:
+       case 0xE5:
+       case 0xE6:
+       case 0xE7:
+       case 0xE8:
+       case 0xE9:
+       case 0xEA:
+       case 0xEB:
+       case 0xEC:
+       case 0xED:
+       case 0xEE:
+       case 0xEF:      goto yy76;
+       case 0xF0:      goto yy77;
+       case 0xF1:
+       case 0xF2:
+       case 0xF3:      goto yy78;
+       case 0xF4:      goto yy79;
+       default:        goto yy71;
+       }
+yy71:
+       YYDEBUG(71, YYPEEK ());
+       YYRESTORE ();
+       switch (yyaccept) {
+       case 0:         goto yy3;
+       case 1:         goto yy33;
+       case 2:         goto yy46;
+       case 3:         goto yy73;
+       case 4:         goto yy89;
+       case 5:         goto yy99;
+       case 6:         goto yy109;
+       case 7:         goto yy123;
+       case 8:         goto yy128;
+       case 9:         goto yy135;
+       case 10:        goto yy139;
+       default:        goto yy145;
+       }
+yy72:
+       YYDEBUG(72, YYPEEK ());
+       yyaccept = 3;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case '"':       goto yy69;
+       default:        goto yy73;
+       }
+yy73:
+       YYDEBUG(73, YYPEEK ());
+#line 251 "wisitoken_grammar_1.re2c"
+       {*id =  34; continue;}
+#line 1593 "wisitoken_grammar_1_re2c.c"
+yy74:
+       YYDEBUG(74, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy69;
+       default:        goto yy71;
+       }
+yy75:
+       YYDEBUG(75, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy74;
+       default:        goto yy71;
+       }
+yy76:
+       YYDEBUG(76, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy74;
+       default:        goto yy71;
+       }
+yy77:
+       YYDEBUG(77, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy76;
+       default:        goto yy71;
+       }
+yy78:
+       YYDEBUG(78, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy76;
+       default:        goto yy71;
+       }
+yy79:
+       YYDEBUG(79, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:      goto yy76;
+       default:        goto yy71;
+       }
+yy80:
+       YYDEBUG(80, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(81, YYPEEK ());
+#line 228 "wisitoken_grammar_1.re2c"
+       {*id =  11; skip_to(lexer, ")%"); continue;}
+#line 1930 "wisitoken_grammar_1_re2c.c"
+yy82:
+       YYDEBUG(82, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(83, YYPEEK ());
+#line 227 "wisitoken_grammar_1.re2c"
+       {*id =  10; skip_to(lexer, "]%"); continue;}
+#line 1937 "wisitoken_grammar_1_re2c.c"
+yy84:
+       YYDEBUG(84, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(85, YYPEEK ());
+#line 226 "wisitoken_grammar_1.re2c"
+       {*id =  9; skip_to(lexer, "}%"); continue;}
+#line 1944 "wisitoken_grammar_1_re2c.c"
+yy86:
+       YYDEBUG(86, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+yy87:
+       YYDEBUG(87, YYPEEK ());
+       switch (yych) {
+       case ' ':
+       case '!':
+       case '"':
+       case '#':
+       case '$':
+       case '%':
+       case '&':
+       case '(':
+       case ')':
+       case '*':
+       case '+':
+       case ',':
+       case '-':
+       case '.':
+       case '/':
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case ':':
+       case ';':
+       case '<':
+       case '=':
+       case '>':
+       case '?':
+       case '@':
+       case 'A':
+       case 'B':
+       case 'C':
+       case 'D':
+       case 'E':
+       case 'F':
+       case 'G':
+       case 'H':
+       case 'I':
+       case 'J':
+       case 'K':
+       case 'L':
+       case 'M':
+       case 'N':
+       case 'O':
+       case 'P':
+       case 'Q':
+       case 'R':
+       case 'S':
+       case 'T':
+       case 'U':
+       case 'V':
+       case 'W':
+       case 'X':
+       case 'Y':
+       case 'Z':
+       case '[':
+       case '\\':
+       case ']':
+       case '^':
+       case '_':
+       case '`':
+       case 'a':
+       case 'b':
+       case 'c':
+       case 'd':
+       case 'e':
+       case 'f':
+       case 'g':
+       case 'h':
+       case 'i':
+       case 'j':
+       case 'k':
+       case 'l':
+       case 'm':
+       case 'n':
+       case 'o':
+       case 'p':
+       case 'q':
+       case 'r':
+       case 's':
+       case 't':
+       case 'u':
+       case 'v':
+       case 'w':
+       case 'x':
+       case 'y':
+       case 'z':
+       case '{':
+       case '|':
+       case '}':
+       case '~':
+       case 0x7F:      goto yy86;
+       case '\'':      goto yy88;
+       case 0xC2:
+       case 0xC3:
+       case 0xC4:
+       case 0xC5:
+       case 0xC6:
+       case 0xC7:
+       case 0xC8:
+       case 0xC9:
+       case 0xCA:
+       case 0xCB:
+       case 0xCC:
+       case 0xCD:
+       case 0xCE:
+       case 0xCF:
+       case 0xD0:
+       case 0xD1:
+       case 0xD2:
+       case 0xD3:
+       case 0xD4:
+       case 0xD5:
+       case 0xD6:
+       case 0xD7:
+       case 0xD8:
+       case 0xD9:
+       case 0xDA:
+       case 0xDB:
+       case 0xDC:
+       case 0xDD:
+       case 0xDE:
+       case 0xDF:      goto yy90;
+       case 0xE0:      goto yy91;
+       case 0xE1:
+       case 0xE2:
+       case 0xE3:
+       case 0xE4:
+       case 0xE5:
+       case 0xE6:
+       case 0xE7:
+       case 0xE8:
+       case 0xE9:
+       case 0xEA:
+       case 0xEB:
+       case 0xEC:
+       case 0xED:
+       case 0xEE:
+       case 0xEF:      goto yy92;
+       case 0xF0:      goto yy93;
+       case 0xF1:
+       case 0xF2:
+       case 0xF3:      goto yy94;
+       case 0xF4:      goto yy95;
+       default:        goto yy71;
+       }
+yy88:
+       YYDEBUG(88, YYPEEK ());
+       yyaccept = 4;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case '\'':      goto yy86;
+       default:        goto yy89;
+       }
+yy89:
+       YYDEBUG(89, YYPEEK ());
+#line 252 "wisitoken_grammar_1.re2c"
+       {*id =  35; continue;}
+#line 2115 "wisitoken_grammar_1_re2c.c"
+yy90:
+       YYDEBUG(90, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy86;
+       default:        goto yy71;
+       }
+yy91:
+       YYDEBUG(91, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy90;
+       default:        goto yy71;
+       }
+yy92:
+       YYDEBUG(92, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy90;
+       default:        goto yy71;
+       }
+yy93:
+       YYDEBUG(93, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy92;
+       default:        goto yy71;
+       }
+yy94:
+       YYDEBUG(94, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy92;
+       default:        goto yy71;
+       }
+yy95:
+       YYDEBUG(95, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:      goto yy92;
+       default:        goto yy71;
+       }
+yy96:
+       YYDEBUG(96, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case '=':       goto yy113;
+       default:        goto yy71;
+       }
+yy97:
+       YYDEBUG(97, YYPEEK ());
+       yyaccept = 5;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       YYDEBUG(98, YYPEEK ());
+       switch (yych) {
+       case 0x00:
+       case 0x01:
+       case 0x02:
+       case 0x03:
+       case 0x05:
+       case 0x06:
+       case 0x07:
+       case 0x08:
+       case '\t':
+       case '\v':
+       case '\f':
+       case '\r':
+       case 0x0E:
+       case 0x0F:
+       case 0x10:
+       case 0x11:
+       case 0x12:
+       case 0x13:
+       case 0x14:
+       case 0x15:
+       case 0x16:
+       case 0x17:
+       case 0x18:
+       case 0x19:
+       case 0x1A:
+       case 0x1B:
+       case 0x1C:
+       case 0x1D:
+       case 0x1E:
+       case 0x1F:
+       case ' ':
+       case '!':
+       case '"':
+       case '#':
+       case '$':
+       case '%':
+       case '&':
+       case '\'':
+       case '(':
+       case ')':
+       case '*':
+       case '+':
+       case ',':
+       case '-':
+       case '.':
+       case '/':
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case ':':
+       case ';':
+       case '<':
+       case '=':
+       case '>':
+       case '?':
+       case '@':
+       case 'A':
+       case 'B':
+       case 'C':
+       case 'D':
+       case 'E':
+       case 'F':
+       case 'G':
+       case 'H':
+       case 'I':
+       case 'J':
+       case 'K':
+       case 'L':
+       case 'M':
+       case 'N':
+       case 'O':
+       case 'P':
+       case 'Q':
+       case 'R':
+       case 'S':
+       case 'T':
+       case 'U':
+       case 'V':
+       case 'W':
+       case 'X':
+       case 'Y':
+       case 'Z':
+       case '[':
+       case '\\':
+       case ']':
+       case '^':
+       case '_':
+       case '`':
+       case 'a':
+       case 'b':
+       case 'c':
+       case 'd':
+       case 'e':
+       case 'f':
+       case 'g':
+       case 'h':
+       case 'i':
+       case 'j':
+       case 'k':
+       case 'l':
+       case 'm':
+       case 'n':
+       case 'o':
+       case 'p':
+       case 'q':
+       case 'r':
+       case 's':
+       case 't':
+       case 'u':
+       case 'v':
+       case 'w':
+       case 'x':
+       case 'y':
+       case 'z':
+       case '{':
+       case '|':
+       case '}':
+       case '~':
+       case 0x7F:      goto yy97;
+       case 0xC2:
+       case 0xC3:
+       case 0xC4:
+       case 0xC5:
+       case 0xC6:
+       case 0xC7:
+       case 0xC8:
+       case 0xC9:
+       case 0xCA:
+       case 0xCB:
+       case 0xCC:
+       case 0xCD:
+       case 0xCE:
+       case 0xCF:
+       case 0xD0:
+       case 0xD1:
+       case 0xD2:
+       case 0xD3:
+       case 0xD4:
+       case 0xD5:
+       case 0xD6:
+       case 0xD7:
+       case 0xD8:
+       case 0xD9:
+       case 0xDA:
+       case 0xDB:
+       case 0xDC:
+       case 0xDD:
+       case 0xDE:
+       case 0xDF:      goto yy115;
+       case 0xE0:      goto yy116;
+       case 0xE1:
+       case 0xE2:
+       case 0xE3:
+       case 0xE4:
+       case 0xE5:
+       case 0xE6:
+       case 0xE7:
+       case 0xE8:
+       case 0xE9:
+       case 0xEA:
+       case 0xEB:
+       case 0xEC:
+       case 0xED:
+       case 0xEE:
+       case 0xEF:      goto yy117;
+       case 0xF0:      goto yy118;
+       case 0xF1:
+       case 0xF2:
+       case 0xF3:      goto yy119;
+       case 0xF4:      goto yy120;
+       default:        goto yy99;
+       }
+yy99:
+       YYDEBUG(99, YYPEEK ());
+#line 219 "wisitoken_grammar_1.re2c"
+       {*id =  2; continue;}
+#line 2645 "wisitoken_grammar_1_re2c.c"
+yy100:
+       YYDEBUG(100, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy44;
+       default:        goto yy71;
+       }
+yy101:
+       YYDEBUG(101, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy100;
+       default:        goto yy71;
+       }
+yy102:
+       YYDEBUG(102, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy100;
+       default:        goto yy71;
+       }
+yy103:
+       YYDEBUG(103, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy102;
+       default:        goto yy71;
+       }
+yy104:
+       YYDEBUG(104, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy102;
+       default:        goto yy71;
+       }
+yy105:
+       YYDEBUG(105, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:      goto yy102;
+       default:        goto yy71;
+       }
+yy106:
+       YYDEBUG(106, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'd':       goto yy121;
+       default:        goto yy45;
+       }
+yy107:
+       YYDEBUG(107, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'd':       goto yy122;
+       default:        goto yy45;
+       }
+yy108:
+       YYDEBUG(108, YYPEEK ());
+       yyaccept = 6;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case '-':
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case 'A':
+       case 'B':
+       case 'C':
+       case 'D':
+       case 'E':
+       case 'F':
+       case 'G':
+       case 'H':
+       case 'I':
+       case 'J':
+       case 'K':
+       case 'L':
+       case 'M':
+       case 'N':
+       case 'O':
+       case 'P':
+       case 'Q':
+       case 'R':
+       case 'S':
+       case 'T':
+       case 'U':
+       case 'V':
+       case 'W':
+       case 'X':
+       case 'Y':
+       case 'Z':
+       case '_':
+       case 'a':
+       case 'b':
+       case 'c':
+       case 'd':
+       case 'e':
+       case 'f':
+       case 'g':
+       case 'h':
+       case 'i':
+       case 'j':
+       case 'k':
+       case 'l':
+       case 'm':
+       case 'n':
+       case 'o':
+       case 'p':
+       case 'q':
+       case 'r':
+       case 's':
+       case 't':
+       case 'u':
+       case 'v':
+       case 'w':
+       case 'x':
+       case 'y':
+       case 'z':
+       case 0xC2:
+       case 0xC3:
+       case 0xC4:
+       case 0xC5:
+       case 0xC6:
+       case 0xC7:
+       case 0xC8:
+       case 0xC9:
+       case 0xCA:
+       case 0xCB:
+       case 0xCC:
+       case 0xCD:
+       case 0xCE:
+       case 0xCF:
+       case 0xD0:
+       case 0xD1:
+       case 0xD2:
+       case 0xD3:
+       case 0xD4:
+       case 0xD5:
+       case 0xD6:
+       case 0xD7:
+       case 0xD8:
+       case 0xD9:
+       case 0xDA:
+       case 0xDB:
+       case 0xDC:
+       case 0xDD:
+       case 0xDE:
+       case 0xDF:
+       case 0xE0:
+       case 0xE1:
+       case 0xE2:
+       case 0xE3:
+       case 0xE4:
+       case 0xE5:
+       case 0xE6:
+       case 0xE7:
+       case 0xE8:
+       case 0xE9:
+       case 0xEA:
+       case 0xEB:
+       case 0xEC:
+       case 0xED:
+       case 0xEE:
+       case 0xEF:
+       case 0xF0:
+       case 0xF1:
+       case 0xF2:
+       case 0xF3:
+       case 0xF4:      goto yy45;
+       default:        goto yy109;
+       }
+yy109:
+       YYDEBUG(109, YYPEEK ());
+#line 222 "wisitoken_grammar_1.re2c"
+       {*id =  5; continue;}
+#line 3124 "wisitoken_grammar_1_re2c.c"
+yy110:
+       YYDEBUG(110, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'y':       goto yy124;
+       default:        goto yy45;
+       }
+yy111:
+       YYDEBUG(111, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'n':       goto yy125;
+       default:        goto yy45;
+       }
+yy112:
+       YYDEBUG(112, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'k':       goto yy126;
+       default:        goto yy45;
+       }
+yy113:
+       YYDEBUG(113, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(114, YYPEEK ());
+#line 231 "wisitoken_grammar_1.re2c"
+       {*id =  14; continue;}
+#line 3161 "wisitoken_grammar_1_re2c.c"
+yy115:
+       YYDEBUG(115, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy97;
+       default:        goto yy71;
+       }
+yy116:
+       YYDEBUG(116, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy115;
+       default:        goto yy71;
+       }
+yy117:
+       YYDEBUG(117, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy115;
+       default:        goto yy71;
+       }
+yy118:
+       YYDEBUG(118, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy117;
+       default:        goto yy71;
+       }
+yy119:
+       YYDEBUG(119, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:
+       case 0x90:
+       case 0x91:
+       case 0x92:
+       case 0x93:
+       case 0x94:
+       case 0x95:
+       case 0x96:
+       case 0x97:
+       case 0x98:
+       case 0x99:
+       case 0x9A:
+       case 0x9B:
+       case 0x9C:
+       case 0x9D:
+       case 0x9E:
+       case 0x9F:
+       case 0xA0:
+       case 0xA1:
+       case 0xA2:
+       case 0xA3:
+       case 0xA4:
+       case 0xA5:
+       case 0xA6:
+       case 0xA7:
+       case 0xA8:
+       case 0xA9:
+       case 0xAA:
+       case 0xAB:
+       case 0xAC:
+       case 0xAD:
+       case 0xAE:
+       case 0xAF:
+       case 0xB0:
+       case 0xB1:
+       case 0xB2:
+       case 0xB3:
+       case 0xB4:
+       case 0xB5:
+       case 0xB6:
+       case 0xB7:
+       case 0xB8:
+       case 0xB9:
+       case 0xBA:
+       case 0xBB:
+       case 0xBC:
+       case 0xBD:
+       case 0xBE:
+       case 0xBF:      goto yy117;
+       default:        goto yy71;
+       }
+yy120:
+       YYDEBUG(120, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8A:
+       case 0x8B:
+       case 0x8C:
+       case 0x8D:
+       case 0x8E:
+       case 0x8F:      goto yy117;
+       default:        goto yy71;
+       }
+yy121:
+       YYDEBUG(121, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'e':       goto yy127;
+       default:        goto yy45;
+       }
+yy122:
+       YYDEBUG(122, YYPEEK ());
+       yyaccept = 7;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case '-':
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case 'A':
+       case 'B':
+       case 'C':
+       case 'D':
+       case 'E':
+       case 'F':
+       case 'G':
+       case 'H':
+       case 'I':
+       case 'J':
+       case 'K':
+       case 'L':
+       case 'M':
+       case 'N':
+       case 'O':
+       case 'P':
+       case 'Q':
+       case 'R':
+       case 'S':
+       case 'T':
+       case 'U':
+       case 'V':
+       case 'W':
+       case 'X':
+       case 'Y':
+       case 'Z':
+       case '_':
+       case 'a':
+       case 'b':
+       case 'c':
+       case 'd':
+       case 'e':
+       case 'f':
+       case 'g':
+       case 'h':
+       case 'i':
+       case 'j':
+       case 'k':
+       case 'l':
+       case 'm':
+       case 'n':
+       case 'o':
+       case 'p':
+       case 'q':
+       case 'r':
+       case 's':
+       case 't':
+       case 'u':
+       case 'v':
+       case 'w':
+       case 'x':
+       case 'y':
+       case 'z':
+       case 0xC2:
+       case 0xC3:
+       case 0xC4:
+       case 0xC5:
+       case 0xC6:
+       case 0xC7:
+       case 0xC8:
+       case 0xC9:
+       case 0xCA:
+       case 0xCB:
+       case 0xCC:
+       case 0xCD:
+       case 0xCE:
+       case 0xCF:
+       case 0xD0:
+       case 0xD1:
+       case 0xD2:
+       case 0xD3:
+       case 0xD4:
+       case 0xD5:
+       case 0xD6:
+       case 0xD7:
+       case 0xD8:
+       case 0xD9:
+       case 0xDA:
+       case 0xDB:
+       case 0xDC:
+       case 0xDD:
+       case 0xDE:
+       case 0xDF:
+       case 0xE0:
+       case 0xE1:
+       case 0xE2:
+       case 0xE3:
+       case 0xE4:
+       case 0xE5:
+       case 0xE6:
+       case 0xE7:
+       case 0xE8:
+       case 0xE9:
+       case 0xEA:
+       case 0xEB:
+       case 0xEC:
+       case 0xED:
+       case 0xEE:
+       case 0xEF:
+       case 0xF0:
+       case 0xF1:
+       case 0xF2:
+       case 0xF3:
+       case 0xF4:      goto yy45;
+       default:        goto yy123;
+       }
+yy123:
+       YYDEBUG(123, YYPEEK ());
+#line 221 "wisitoken_grammar_1.re2c"
+       {*id =  4; continue;}
+#line 3630 "wisitoken_grammar_1_re2c.c"
+yy124:
+       YYDEBUG(124, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'w':       goto yy129;
+       default:        goto yy45;
+       }
+yy125:
+       YYDEBUG(125, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case '_':       goto yy130;
+       default:        goto yy45;
+       }
+yy126:
+       YYDEBUG(126, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'e':       goto yy131;
+       default:        goto yy45;
+       }
+yy127:
+       YYDEBUG(127, YYPEEK ());
+       yyaccept = 8;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case '-':
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case 'A':
+       case 'B':
+       case 'C':
+       case 'D':
+       case 'E':
+       case 'F':
+       case 'G':
+       case 'H':
+       case 'I':
+       case 'J':
+       case 'K':
+       case 'L':
+       case 'M':
+       case 'N':
+       case 'O':
+       case 'P':
+       case 'Q':
+       case 'R':
+       case 'S':
+       case 'T':
+       case 'U':
+       case 'V':
+       case 'W':
+       case 'X':
+       case 'Y':
+       case 'Z':
+       case '_':
+       case 'a':
+       case 'b':
+       case 'c':
+       case 'd':
+       case 'e':
+       case 'f':
+       case 'g':
+       case 'h':
+       case 'i':
+       case 'j':
+       case 'k':
+       case 'l':
+       case 'm':
+       case 'n':
+       case 'o':
+       case 'p':
+       case 'q':
+       case 'r':
+       case 's':
+       case 't':
+       case 'u':
+       case 'v':
+       case 'w':
+       case 'x':
+       case 'y':
+       case 'z':
+       case 0xC2:
+       case 0xC3:
+       case 0xC4:
+       case 0xC5:
+       case 0xC6:
+       case 0xC7:
+       case 0xC8:
+       case 0xC9:
+       case 0xCA:
+       case 0xCB:
+       case 0xCC:
+       case 0xCD:
+       case 0xCE:
+       case 0xCF:
+       case 0xD0:
+       case 0xD1:
+       case 0xD2:
+       case 0xD3:
+       case 0xD4:
+       case 0xD5:
+       case 0xD6:
+       case 0xD7:
+       case 0xD8:
+       case 0xD9:
+       case 0xDA:
+       case 0xDB:
+       case 0xDC:
+       case 0xDD:
+       case 0xDE:
+       case 0xDF:
+       case 0xE0:
+       case 0xE1:
+       case 0xE2:
+       case 0xE3:
+       case 0xE4:
+       case 0xE5:
+       case 0xE6:
+       case 0xE7:
+       case 0xE8:
+       case 0xE9:
+       case 0xEA:
+       case 0xEB:
+       case 0xEC:
+       case 0xED:
+       case 0xEE:
+       case 0xEF:
+       case 0xF0:
+       case 0xF1:
+       case 0xF2:
+       case 0xF3:
+       case 0xF4:      goto yy45;
+       default:        goto yy128;
+       }
+yy128:
+       YYDEBUG(128, YYPEEK ());
+#line 220 "wisitoken_grammar_1.re2c"
+       {*id =  3; continue;}
+#line 3789 "wisitoken_grammar_1_re2c.c"
+yy129:
+       YYDEBUG(129, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'o':       goto yy132;
+       default:        goto yy45;
+       }
+yy130:
+       YYDEBUG(130, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'g':       goto yy133;
+       default:        goto yy45;
+       }
+yy131:
+       YYDEBUG(131, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'n':       goto yy134;
+       default:        goto yy45;
+       }
+yy132:
+       YYDEBUG(132, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'r':       goto yy136;
+       default:        goto yy45;
+       }
+yy133:
+       YYDEBUG(133, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'r':       goto yy137;
+       default:        goto yy45;
+       }
+yy134:
+       YYDEBUG(134, YYPEEK ());
+       yyaccept = 9;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case '-':
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case 'A':
+       case 'B':
+       case 'C':
+       case 'D':
+       case 'E':
+       case 'F':
+       case 'G':
+       case 'H':
+       case 'I':
+       case 'J':
+       case 'K':
+       case 'L':
+       case 'M':
+       case 'N':
+       case 'O':
+       case 'P':
+       case 'Q':
+       case 'R':
+       case 'S':
+       case 'T':
+       case 'U':
+       case 'V':
+       case 'W':
+       case 'X':
+       case 'Y':
+       case 'Z':
+       case '_':
+       case 'a':
+       case 'b':
+       case 'c':
+       case 'd':
+       case 'e':
+       case 'f':
+       case 'g':
+       case 'h':
+       case 'i':
+       case 'j':
+       case 'k':
+       case 'l':
+       case 'm':
+       case 'n':
+       case 'o':
+       case 'p':
+       case 'q':
+       case 'r':
+       case 's':
+       case 't':
+       case 'u':
+       case 'v':
+       case 'w':
+       case 'x':
+       case 'y':
+       case 'z':
+       case 0xC2:
+       case 0xC3:
+       case 0xC4:
+       case 0xC5:
+       case 0xC6:
+       case 0xC7:
+       case 0xC8:
+       case 0xC9:
+       case 0xCA:
+       case 0xCB:
+       case 0xCC:
+       case 0xCD:
+       case 0xCE:
+       case 0xCF:
+       case 0xD0:
+       case 0xD1:
+       case 0xD2:
+       case 0xD3:
+       case 0xD4:
+       case 0xD5:
+       case 0xD6:
+       case 0xD7:
+       case 0xD8:
+       case 0xD9:
+       case 0xDA:
+       case 0xDB:
+       case 0xDC:
+       case 0xDD:
+       case 0xDE:
+       case 0xDF:
+       case 0xE0:
+       case 0xE1:
+       case 0xE2:
+       case 0xE3:
+       case 0xE4:
+       case 0xE5:
+       case 0xE6:
+       case 0xE7:
+       case 0xE8:
+       case 0xE9:
+       case 0xEA:
+       case 0xEB:
+       case 0xEC:
+       case 0xED:
+       case 0xEE:
+       case 0xEF:
+       case 0xF0:
+       case 0xF1:
+       case 0xF2:
+       case 0xF3:
+       case 0xF4:      goto yy45;
+       default:        goto yy135;
+       }
+yy135:
+       YYDEBUG(135, YYPEEK ());
+#line 225 "wisitoken_grammar_1.re2c"
+       {*id =  8; continue;}
+#line 3968 "wisitoken_grammar_1_re2c.c"
+yy136:
+       YYDEBUG(136, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'd':       goto yy138;
+       default:        goto yy45;
+       }
+yy137:
+       YYDEBUG(137, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'a':       goto yy140;
+       default:        goto yy45;
+       }
+yy138:
+       YYDEBUG(138, YYPEEK ());
+       yyaccept = 10;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case '-':
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case 'A':
+       case 'B':
+       case 'C':
+       case 'D':
+       case 'E':
+       case 'F':
+       case 'G':
+       case 'H':
+       case 'I':
+       case 'J':
+       case 'K':
+       case 'L':
+       case 'M':
+       case 'N':
+       case 'O':
+       case 'P':
+       case 'Q':
+       case 'R':
+       case 'S':
+       case 'T':
+       case 'U':
+       case 'V':
+       case 'W':
+       case 'X':
+       case 'Y':
+       case 'Z':
+       case '_':
+       case 'a':
+       case 'b':
+       case 'c':
+       case 'd':
+       case 'e':
+       case 'f':
+       case 'g':
+       case 'h':
+       case 'i':
+       case 'j':
+       case 'k':
+       case 'l':
+       case 'm':
+       case 'n':
+       case 'o':
+       case 'p':
+       case 'q':
+       case 'r':
+       case 's':
+       case 't':
+       case 'u':
+       case 'v':
+       case 'w':
+       case 'x':
+       case 'y':
+       case 'z':
+       case 0xC2:
+       case 0xC3:
+       case 0xC4:
+       case 0xC5:
+       case 0xC6:
+       case 0xC7:
+       case 0xC8:
+       case 0xC9:
+       case 0xCA:
+       case 0xCB:
+       case 0xCC:
+       case 0xCD:
+       case 0xCE:
+       case 0xCF:
+       case 0xD0:
+       case 0xD1:
+       case 0xD2:
+       case 0xD3:
+       case 0xD4:
+       case 0xD5:
+       case 0xD6:
+       case 0xD7:
+       case 0xD8:
+       case 0xD9:
+       case 0xDA:
+       case 0xDB:
+       case 0xDC:
+       case 0xDD:
+       case 0xDE:
+       case 0xDF:
+       case 0xE0:
+       case 0xE1:
+       case 0xE2:
+       case 0xE3:
+       case 0xE4:
+       case 0xE5:
+       case 0xE6:
+       case 0xE7:
+       case 0xE8:
+       case 0xE9:
+       case 0xEA:
+       case 0xEB:
+       case 0xEC:
+       case 0xED:
+       case 0xEE:
+       case 0xEF:
+       case 0xF0:
+       case 0xF1:
+       case 0xF2:
+       case 0xF3:
+       case 0xF4:      goto yy45;
+       default:        goto yy139;
+       }
+yy139:
+       YYDEBUG(139, YYPEEK ());
+#line 223 "wisitoken_grammar_1.re2c"
+       {*id =  6; continue;}
+#line 4117 "wisitoken_grammar_1_re2c.c"
+yy140:
+       YYDEBUG(140, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'm':       goto yy141;
+       default:        goto yy45;
+       }
+yy141:
+       YYDEBUG(141, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'm':       goto yy142;
+       default:        goto yy45;
+       }
+yy142:
+       YYDEBUG(142, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'a':       goto yy143;
+       default:        goto yy45;
+       }
+yy143:
+       YYDEBUG(143, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'r':       goto yy144;
+       default:        goto yy45;
+       }
+yy144:
+       YYDEBUG(144, YYPEEK ());
+       yyaccept = 11;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case '-':
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case 'A':
+       case 'B':
+       case 'C':
+       case 'D':
+       case 'E':
+       case 'F':
+       case 'G':
+       case 'H':
+       case 'I':
+       case 'J':
+       case 'K':
+       case 'L':
+       case 'M':
+       case 'N':
+       case 'O':
+       case 'P':
+       case 'Q':
+       case 'R':
+       case 'S':
+       case 'T':
+       case 'U':
+       case 'V':
+       case 'W':
+       case 'X':
+       case 'Y':
+       case 'Z':
+       case '_':
+       case 'a':
+       case 'b':
+       case 'c':
+       case 'd':
+       case 'e':
+       case 'f':
+       case 'g':
+       case 'h':
+       case 'i':
+       case 'j':
+       case 'k':
+       case 'l':
+       case 'm':
+       case 'n':
+       case 'o':
+       case 'p':
+       case 'q':
+       case 'r':
+       case 's':
+       case 't':
+       case 'u':
+       case 'v':
+       case 'w':
+       case 'x':
+       case 'y':
+       case 'z':
+       case 0xC2:
+       case 0xC3:
+       case 0xC4:
+       case 0xC5:
+       case 0xC6:
+       case 0xC7:
+       case 0xC8:
+       case 0xC9:
+       case 0xCA:
+       case 0xCB:
+       case 0xCC:
+       case 0xCD:
+       case 0xCE:
+       case 0xCF:
+       case 0xD0:
+       case 0xD1:
+       case 0xD2:
+       case 0xD3:
+       case 0xD4:
+       case 0xD5:
+       case 0xD6:
+       case 0xD7:
+       case 0xD8:
+       case 0xD9:
+       case 0xDA:
+       case 0xDB:
+       case 0xDC:
+       case 0xDD:
+       case 0xDE:
+       case 0xDF:
+       case 0xE0:
+       case 0xE1:
+       case 0xE2:
+       case 0xE3:
+       case 0xE4:
+       case 0xE5:
+       case 0xE6:
+       case 0xE7:
+       case 0xE8:
+       case 0xE9:
+       case 0xEA:
+       case 0xEB:
+       case 0xEC:
+       case 0xED:
+       case 0xEE:
+       case 0xEF:
+       case 0xF0:
+       case 0xF1:
+       case 0xF2:
+       case 0xF3:
+       case 0xF4:      goto yy45;
+       default:        goto yy145;
+       }
+yy145:
+       YYDEBUG(145, YYPEEK ());
+#line 224 "wisitoken_grammar_1.re2c"
+       {*id =  7; continue;}
+#line 4286 "wisitoken_grammar_1_re2c.c"
+}
+#line 256 "wisitoken_grammar_1.re2c"
+
+      }
+   *byte_position = lexer->byte_token_start - lexer->buffer + 1;
+   *byte_length   = lexer->cursor - lexer->byte_token_start;
+   *char_position = lexer->char_token_start;
+   if (DO_COUNT)
+      *char_length = lexer->char_pos - lexer->char_token_start;
+   else
+      *char_length = lexer->char_pos - lexer->char_token_start + 1;
+   *line_start     = lexer->line_token_start;
+   return status;
+   }
diff --git a/wisitoken_grammar_1_re2c_c.ads b/wisitoken_grammar_1_re2c_c.ads
new file mode 100644
index 0000000..3c51528
--- /dev/null
+++ b/wisitoken_grammar_1_re2c_c.ads
@@ -0,0 +1,63 @@
+--  generated parser support file.
+--  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS wisitoken_grammar_1.wy
+--
+
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
+--
+--  Author: Stephen Leake <address@hidden>
+--
+--  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/>.
+
+with Interfaces.C;
+with WisiToken;
+with System;
+package wisitoken_grammar_1_re2c_c is
+
+   function New_Lexer
+     (Buffer    : in System.Address;
+      Length    : in Interfaces.C.size_t;
+      Verbosity : in Interfaces.C.int)
+     return System.Address
+   with Import        => True,
+        Convention    => C,
+        External_Name => "wisitoken_grammar_1_new_lexer";
+   --  Create the lexer object, passing it the full text to process.
+
+   procedure Free_Lexer (Lexer : in out System.Address)
+   with Import        => True,
+        Convention    => C,
+        External_Name => "wisitoken_grammar_1_free_lexer";
+   --  Free the lexer object
+
+   procedure Reset_Lexer (Lexer : in System.Address)
+   with Import        => True,
+        Convention    => C,
+        External_Name => "wisitoken_grammar_1_reset_lexer";
+
+   function Next_Token
+     (Lexer         : in     System.Address;
+      ID            :    out WisiToken.Token_ID;
+      Byte_Position :    out Interfaces.C.size_t;
+      Byte_Length   :    out Interfaces.C.size_t;
+      Char_Position :    out Interfaces.C.size_t;
+      Char_Length   :    out Interfaces.C.size_t;
+      Line_Start    :    out Interfaces.C.int)
+     return Interfaces.C.int
+   with Import        => True,
+        Convention    => C,
+        External_Name => "wisitoken_grammar_1_next_token";
+
+end wisitoken_grammar_1_re2c_c;
diff --git a/wisitoken_grammar_mode_parse.ads b/wisitoken_grammar_mode_parse.ads
new file mode 100644
index 0000000..f8015fa
--- /dev/null
+++ b/wisitoken_grammar_mode_parse.ads
@@ -0,0 +1,34 @@
+--  Abstract :
+--
+--  External process parser for wisitoken-grammar mode
+--
+--  Copyright (C) 2017 - 2019 Stephen Leake All Rights Reserved.
+--
+--  This program is free software; you can redistribute it and/or
+--  modify it under terms of the GNU General Public License as
+--  published by the Free Software Foundation; either version 3, 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
+--  distributed with this program; see file COPYING. If not, write to
+--  the Free Software Foundation, 51 Franklin Street, Suite 500, Boston,
+--  MA 02110-1335, USA.
+
+pragma License (GPL);
+
+with Wisitoken_Grammar_1_Process_Actions;
+with Wisitoken_Grammar_1_Process_Main;
+with Gen_Emacs_Wisi_LR_Parse;
+with Wisi.WisiToken_Grammar;
+procedure WisiToken_Grammar_Mode_Parse is new Gen_Emacs_Wisi_LR_Parse
+  (Parse_Data_Type                => Wisi.WisiToken_Grammar.Parse_Data_Type,
+   Name                           => "wisi_grammar_mode",
+   Language_Protocol_Version      => 
Wisi.WisiToken_Grammar.Language_Protocol_Version,
+   Descriptor                     => 
Wisitoken_Grammar_1_Process_Actions.Descriptor,
+   Partial_Parse_Active           => 
Wisitoken_Grammar_1_Process_Actions.Partial_Parse_Active,
+   Language_Fixes                 => null,
+   Language_Matching_Begin_Tokens => null,
+   Language_String_ID_Set         => null,
+   Create_Parser                  => 
Wisitoken_Grammar_1_Process_Main.Create_Parser);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]