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

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

[elpa] externals/wisi 89eee25 23/35: Release ada-mode 6.0.1, wisi 2.0.1;


From: Stefan Monnier
Subject: [elpa] externals/wisi 89eee25 23/35: Release ada-mode 6.0.1, wisi 2.0.1; fix copyright, packaging bugs
Date: Sat, 28 Nov 2020 14:47:54 -0500 (EST)

branch: externals/wisi
commit 89eee25db77edcf181284ba940feec8fe2479ee0
Author: Stephen Leake <stephen_leake@stephe-leake.org>
Commit: Stephen Leake <stephen_leake@stephe-leake.org>

    Release ada-mode 6.0.1, wisi 2.0.1; fix copyright, packaging bugs
---
 NEWS                                               |    7 +
 dir                                                |   19 +
 long_float_elementary_functions.ads                |    2 +-
 sal-gen_bounded_definite_vectors-gen_image.adb     |    2 +-
 sal-gen_bounded_definite_vectors-gen_image.ads     |    2 +-
 sal-gen_bounded_definite_vectors-gen_image_aux.adb |    2 +-
 sal-gen_bounded_definite_vectors-gen_image_aux.ads |    2 +-
 sal-gen_bounded_definite_vectors-gen_sorted.adb    |    2 +-
 sal-gen_bounded_definite_vectors-gen_sorted.ads    |    2 +-
 sal-gen_bounded_definite_vectors.adb               |    2 +-
 sal-gen_bounded_definite_vectors.ads               |    2 +-
 sal-gen_definite_doubly_linked_lists.adb           |    2 +-
 sal-gen_definite_doubly_linked_lists.ads           |    2 +-
 ...finite_doubly_linked_lists_sorted-gen_image.adb |    2 +-
 ...finite_doubly_linked_lists_sorted-gen_image.ads |    2 +-
 sal-gen_definite_doubly_linked_lists_sorted.adb    |    2 +-
 sal-gen_definite_doubly_linked_lists_sorted.ads    |    2 +-
 sal-gen_indefinite_doubly_linked_lists.adb         |    2 +-
 sal-gen_indefinite_doubly_linked_lists.ads         |    2 +-
 sal-gen_trimmed_image.ads                          |    2 +-
 sal-gen_unbounded_definite_min_heaps_fibonacci.adb |    2 +-
 sal-gen_unbounded_definite_min_heaps_fibonacci.ads |    2 +-
 ...gen_unbounded_definite_queues-gen_image_aux.adb |    2 +-
 ...gen_unbounded_definite_queues-gen_image_aux.ads |    2 +-
 sal-gen_unbounded_definite_queues.adb              |    2 +-
 sal-gen_unbounded_definite_queues.ads              |    2 +-
 sal-gen_unbounded_definite_red_black_trees.adb     |    2 +-
 sal-gen_unbounded_definite_red_black_trees.ads     |    2 +-
 ...gen_unbounded_definite_stacks-gen_image_aux.adb |    2 +-
 ...gen_unbounded_definite_stacks-gen_image_aux.ads |    2 +-
 sal-gen_unbounded_definite_stacks.adb              |    2 +-
 sal-gen_unbounded_definite_stacks.ads              |    2 +-
 ...n_unbounded_definite_vectors-gen_comparable.adb |    2 +-
 ...n_unbounded_definite_vectors-gen_comparable.ads |    2 +-
 sal-gen_unbounded_definite_vectors-gen_image.adb   |    2 +-
 sal-gen_unbounded_definite_vectors-gen_image.ads   |    2 +-
 sal-gen_unbounded_definite_vectors.adb             |    2 +-
 sal-gen_unbounded_definite_vectors.ads             |    2 +-
 sal.adb                                            |    4 +-
 sal.ads                                            |    2 +-
 standard_common.gpr                                |   19 +-
 wisi.adb                                           |    2 +-
 wisi.ads                                           |    2 +-
 wisi.el                                            |    2 +-
 wisitoken-bnf-generate.adb                         |    6 +-
 wisitoken-bnf-generate_grammar.adb                 |    2 +-
 wisitoken-bnf-generate_packrat.adb                 |    2 +-
 wisitoken-bnf-generate_utils.ads                   |    2 +-
 wisitoken-bnf-output_ada.adb                       |    2 +-
 wisitoken-bnf-output_ada_common.adb                |   47 +-
 wisitoken-bnf-output_ada_common.ads                |    7 +-
 wisitoken-bnf-output_ada_emacs.adb                 |    2 +-
 wisitoken-bnf-output_elisp.adb                     |    2 +-
 wisitoken-bnf-output_elisp_common.adb              |    2 +-
 wisitoken-bnf-output_elisp_common.ads              |    2 +-
 wisitoken-bnf-utils.adb                            |    2 +-
 wisitoken-bnf-utils.ads                            |    4 +-
 wisitoken-bnf.adb                                  |    2 +-
 wisitoken-bnf.ads                                  |   17 +-
 wisitoken-gen_token_enum.adb                       |    2 +-
 wisitoken-gen_token_enum.ads                       |    2 +-
 wisitoken-generate-lr-lalr_generate.adb            |    3 +-
 wisitoken-generate-lr-lalr_generate.ads            |    3 +-
 wisitoken-generate-lr-lr1_generate.adb             |    2 +-
 wisitoken-generate-lr-lr1_generate.ads             |    2 +-
 wisitoken-generate-lr.adb                          |    2 +-
 wisitoken-generate-lr.ads                          |    2 +-
 wisitoken-generate-lr1_items.adb                   |    3 +-
 wisitoken-generate-lr1_items.ads                   |    3 +-
 wisitoken-generate-packrat.adb                     |    2 +-
 wisitoken-generate-packrat.ads                     |    2 +-
 wisitoken-generate.adb                             |    2 +-
 wisitoken-generate.ads                             |    2 +-
 wisitoken-lexer-re2c.adb                           |    2 +-
 wisitoken-lexer-re2c.ads                           |    2 +-
 wisitoken-lexer-regexp.adb                         |    2 +-
 wisitoken-lexer-regexp.ads                         |    2 +-
 wisitoken-lexer.adb                                |    2 +-
 wisitoken-lexer.ads                                |    2 +-
 wisitoken-parse-lr-mckenzie_recover-base.adb       |    2 +-
 wisitoken-parse-lr-mckenzie_recover-base.ads       |    2 +-
 wisitoken-parse-lr-mckenzie_recover-explore.adb    |    2 +-
 wisitoken-parse-lr-mckenzie_recover-explore.ads    |    2 +-
 wisitoken-parse-lr-mckenzie_recover-parse.adb      |    2 +-
 wisitoken-parse-lr-mckenzie_recover-parse.ads      |    2 +-
 wisitoken-parse-lr-mckenzie_recover.adb            |    2 +-
 wisitoken-parse-lr-mckenzie_recover.ads            |    2 +-
 wisitoken-parse-lr-parser.adb                      |    3 +-
 wisitoken-parse-lr-parser.ads                      |    3 +-
 wisitoken-parse-lr-parser_lists.ads                |    2 +-
 wisitoken-parse-lr-parser_no_recover.adb           |    3 +-
 wisitoken-parse-lr-parser_no_recover.ads           |    3 +-
 wisitoken-parse-lr.adb                             |    2 +-
 wisitoken-parse-lr.ads                             |    3 +-
 wisitoken-parse-packrat-generated.adb              |    2 +-
 wisitoken-parse-packrat-generated.ads              |    2 +-
 wisitoken-parse-packrat-procedural.adb             |    2 +-
 wisitoken-parse-packrat-procedural.ads             |    2 +-
 wisitoken-parse-packrat.adb                        |    2 +-
 wisitoken-parse-packrat.ads                        |    2 +-
 wisitoken-parse.adb                                |    2 +-
 wisitoken-parse.ads                                |    2 +-
 wisitoken-productions.adb                          |    2 +-
 wisitoken-productions.ads                          |    2 +-
 wisitoken-regexp.adb                               | 1347 --------------------
 wisitoken-regexp.ads                               |  139 --
 wisitoken-semantic_checks.adb                      |    2 +-
 wisitoken-semantic_checks.ads                      |    2 +-
 wisitoken-syntax_trees.adb                         |    2 +-
 wisitoken-syntax_trees.ads                         |    4 +-
 wisitoken-text_io_trace.adb                        |    2 +-
 wisitoken-text_io_trace.ads                        |    2 +-
 wisitoken-user_guide.info                          |  556 ++++++++
 wisitoken-wisi_ada.adb                             |    3 +-
 wisitoken-wisi_ada.ads                             |    3 +-
 wisitoken.adb                                      |    6 +-
 wisitoken.ads                                      |    3 +-
 wisitoken.gpr                                      |   20 +-
 wisitoken_grammar_runtime.adb                      |   10 +-
 wisitoken_grammar_runtime.ads                      |    2 +-
 120 files changed, 766 insertions(+), 1666 deletions(-)

diff --git a/NEWS b/NEWS
index f86dbe5..a594bea 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,13 @@ Please send wisi bug reports to bug-gnu-emacs@gnu.org, with
 'wisi' in the subject. If possible, use M-x report-emacs-bug.
 
 
+* wisi 2.0.1
+8 Dec 2018
+
+** Assign copyright in Ada files to FSF
+
+** Update user guide, include it in elpa package
+
 * wisi 2.0.0
 17 Nov 2018
 
diff --git a/dir b/dir
new file mode 100644
index 0000000..fbc9cbb
--- /dev/null
+++ b/dir
@@ -0,0 +1,19 @@
+This is the file .../info/dir, which contains the
+topmost node of the Info hierarchy, called (dir)Top.
+The first time you invoke Info you start off looking at this node.
+
+File: dir,     Node: Top       This is the top of the INFO tree
+
+  This (the Directory node) gives a menu of major topics.
+  Typing "q" exits, "H" lists all Info commands, "d" returns here,
+  "h" gives a primer for first-timers,
+  "mEmacs<Return>" visits the Emacs manual, etc.
+
+  In Emacs, you can click mouse button 2 on a menu item or cross reference
+  to select it.
+
+* Menu:
+
+Parser generators
+* wisitoken-bnf-generate: (wisitoken-bnf-generate).
+                                Ada and Elisp parser generator
diff --git a/long_float_elementary_functions.ads 
b/long_float_elementary_functions.ads
index 3f543b9..d5664b7 100644
--- a/long_float_elementary_functions.ads
+++ b/long_float_elementary_functions.ads
@@ -2,7 +2,7 @@
 --
 --  instantiation
 --
---  Copyright (C) 2017 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_bounded_definite_vectors-gen_image.adb 
b/sal-gen_bounded_definite_vectors-gen_image.adb
index 893b178..e1726d1 100644
--- a/sal-gen_bounded_definite_vectors-gen_image.adb
+++ b/sal-gen_bounded_definite_vectors-gen_image.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_bounded_definite_vectors-gen_image.ads 
b/sal-gen_bounded_definite_vectors-gen_image.ads
index 6202be0..950b9d0 100644
--- a/sal-gen_bounded_definite_vectors-gen_image.ads
+++ b/sal-gen_bounded_definite_vectors-gen_image.ads
@@ -2,7 +2,7 @@
 --
 --  Image for instantiations of parent.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_bounded_definite_vectors-gen_image_aux.adb 
b/sal-gen_bounded_definite_vectors-gen_image_aux.adb
index 39ecd46..685ef13 100644
--- a/sal-gen_bounded_definite_vectors-gen_image_aux.adb
+++ b/sal-gen_bounded_definite_vectors-gen_image_aux.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_bounded_definite_vectors-gen_image_aux.ads 
b/sal-gen_bounded_definite_vectors-gen_image_aux.ads
index c72f8ee..241e67b 100644
--- a/sal-gen_bounded_definite_vectors-gen_image_aux.ads
+++ b/sal-gen_bounded_definite_vectors-gen_image_aux.ads
@@ -2,7 +2,7 @@
 --
 --  Image with auxiliary data for instantiations of parent.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_bounded_definite_vectors-gen_sorted.adb 
b/sal-gen_bounded_definite_vectors-gen_sorted.adb
index 088b807..5a8c550 100644
--- a/sal-gen_bounded_definite_vectors-gen_sorted.adb
+++ b/sal-gen_bounded_definite_vectors-gen_sorted.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_bounded_definite_vectors-gen_sorted.ads 
b/sal-gen_bounded_definite_vectors-gen_sorted.ads
index d210c0b..917a344 100644
--- a/sal-gen_bounded_definite_vectors-gen_sorted.ads
+++ b/sal-gen_bounded_definite_vectors-gen_sorted.ads
@@ -2,7 +2,7 @@
 --
 --  Add sorted behavior to parent.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_bounded_definite_vectors.adb 
b/sal-gen_bounded_definite_vectors.adb
index 75b4016..42f5643 100644
--- a/sal-gen_bounded_definite_vectors.adb
+++ b/sal-gen_bounded_definite_vectors.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_bounded_definite_vectors.ads 
b/sal-gen_bounded_definite_vectors.ads
index d4c808d..04a9ff1 100644
--- a/sal-gen_bounded_definite_vectors.ads
+++ b/sal-gen_bounded_definite_vectors.ads
@@ -3,7 +3,7 @@
 --  A simple bounded vector of definite items, intended to be faster
 --  than Ada.Containers.Bounded_Definite_Vectors.
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_definite_doubly_linked_lists.adb 
b/sal-gen_definite_doubly_linked_lists.adb
index 3855ae6..e8da73a 100644
--- a/sal-gen_definite_doubly_linked_lists.adb
+++ b/sal-gen_definite_doubly_linked_lists.adb
@@ -2,7 +2,7 @@
 --
 --  see spec
 --
---  Copyright (C) 2017, 2018 Stephen Leake.  All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  This library is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
diff --git a/sal-gen_definite_doubly_linked_lists.ads 
b/sal-gen_definite_doubly_linked_lists.ads
index 203f9ad..04a10f1 100644
--- a/sal-gen_definite_doubly_linked_lists.ads
+++ b/sal-gen_definite_doubly_linked_lists.ads
@@ -3,7 +3,7 @@
 --  A generic doubly linked list with definite elements, allowing
 --  permanent references to elements.
 --
---  Copyright (C) 2017, 2018 Stephen Leake.  All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  This library is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
diff --git a/sal-gen_definite_doubly_linked_lists_sorted-gen_image.adb 
b/sal-gen_definite_doubly_linked_lists_sorted-gen_image.adb
index 898a588..6e6efb3 100644
--- a/sal-gen_definite_doubly_linked_lists_sorted-gen_image.adb
+++ b/sal-gen_definite_doubly_linked_lists_sorted-gen_image.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_definite_doubly_linked_lists_sorted-gen_image.ads 
b/sal-gen_definite_doubly_linked_lists_sorted-gen_image.ads
index 2743f4e..4080707 100644
--- a/sal-gen_definite_doubly_linked_lists_sorted-gen_image.ads
+++ b/sal-gen_definite_doubly_linked_lists_sorted-gen_image.ads
@@ -2,7 +2,7 @@
 --
 --  Image of parent.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_definite_doubly_linked_lists_sorted.adb 
b/sal-gen_definite_doubly_linked_lists_sorted.adb
index da99b3e..addac4f 100644
--- a/sal-gen_definite_doubly_linked_lists_sorted.adb
+++ b/sal-gen_definite_doubly_linked_lists_sorted.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_definite_doubly_linked_lists_sorted.ads 
b/sal-gen_definite_doubly_linked_lists_sorted.ads
index 464ff86..b3d5431 100644
--- a/sal-gen_definite_doubly_linked_lists_sorted.ads
+++ b/sal-gen_definite_doubly_linked_lists_sorted.ads
@@ -2,7 +2,7 @@
 --
 --  A generic sorted doubly linked list with definite elements.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_indefinite_doubly_linked_lists.adb 
b/sal-gen_indefinite_doubly_linked_lists.adb
index 079e736..071c319 100644
--- a/sal-gen_indefinite_doubly_linked_lists.adb
+++ b/sal-gen_indefinite_doubly_linked_lists.adb
@@ -2,7 +2,7 @@
 --
 --  see spec
 --
---  Copyright (C) 2018 Stephen Leake.  All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  This library is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
diff --git a/sal-gen_indefinite_doubly_linked_lists.ads 
b/sal-gen_indefinite_doubly_linked_lists.ads
index f477f2d..5898bc7 100644
--- a/sal-gen_indefinite_doubly_linked_lists.ads
+++ b/sal-gen_indefinite_doubly_linked_lists.ads
@@ -3,7 +3,7 @@
 --  A generic doubly linked list with indefinite elements, allowing
 --  permanent references to elements.
 --
---  Copyright (C) 2018 Stephen Leake.  All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  This library is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
diff --git a/sal-gen_trimmed_image.ads b/sal-gen_trimmed_image.ads
index faf782f..3ff29f9 100644
--- a/sal-gen_trimmed_image.ads
+++ b/sal-gen_trimmed_image.ads
@@ -2,7 +2,7 @@
 --
 --  Generic trimmed image.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_unbounded_definite_min_heaps_fibonacci.adb 
b/sal-gen_unbounded_definite_min_heaps_fibonacci.adb
index 75b9478..e35219e 100644
--- a/sal-gen_unbounded_definite_min_heaps_fibonacci.adb
+++ b/sal-gen_unbounded_definite_min_heaps_fibonacci.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_unbounded_definite_min_heaps_fibonacci.ads 
b/sal-gen_unbounded_definite_min_heaps_fibonacci.ads
index 381bd35..09b4e39 100644
--- a/sal-gen_unbounded_definite_min_heaps_fibonacci.ads
+++ b/sal-gen_unbounded_definite_min_heaps_fibonacci.ads
@@ -7,7 +7,7 @@
 --  [1] Introduction to Algorithms, Third Edition. Thomas H. Cormen,
 --  Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Chapter 19.
 --
---  Copyright (C) 2017, 2018 Stephen Leake.  All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_unbounded_definite_queues-gen_image_aux.adb 
b/sal-gen_unbounded_definite_queues-gen_image_aux.adb
index 233aa1b..2a1990b 100644
--- a/sal-gen_unbounded_definite_queues-gen_image_aux.adb
+++ b/sal-gen_unbounded_definite_queues-gen_image_aux.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_unbounded_definite_queues-gen_image_aux.ads 
b/sal-gen_unbounded_definite_queues-gen_image_aux.ads
index 6ea7c8f..dafa8d9 100644
--- a/sal-gen_unbounded_definite_queues-gen_image_aux.ads
+++ b/sal-gen_unbounded_definite_queues-gen_image_aux.ads
@@ -2,7 +2,7 @@
 --
 --  Image with auxiliary data for instantiations of parent.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_unbounded_definite_queues.adb 
b/sal-gen_unbounded_definite_queues.adb
index f71fbe5..f0290fc 100644
--- a/sal-gen_unbounded_definite_queues.adb
+++ b/sal-gen_unbounded_definite_queues.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_unbounded_definite_queues.ads 
b/sal-gen_unbounded_definite_queues.ads
index d891f9d..0e21be7 100644
--- a/sal-gen_unbounded_definite_queues.ads
+++ b/sal-gen_unbounded_definite_queues.ads
@@ -2,7 +2,7 @@
 --
 --  An unbounded queue of definite non-limited elements.
 --
---  Copyright (C) 2017, 2018 Stephen Leake.  All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_unbounded_definite_red_black_trees.adb 
b/sal-gen_unbounded_definite_red_black_trees.adb
index 2d84c57..9099f06 100644
--- a/sal-gen_unbounded_definite_red_black_trees.adb
+++ b/sal-gen_unbounded_definite_red_black_trees.adb
@@ -2,7 +2,7 @@
 --
 --  Generic unbounded red-black tree with definite elements.
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_unbounded_definite_red_black_trees.ads 
b/sal-gen_unbounded_definite_red_black_trees.ads
index 7096970..e9513c9 100644
--- a/sal-gen_unbounded_definite_red_black_trees.ads
+++ b/sal-gen_unbounded_definite_red_black_trees.ads
@@ -8,7 +8,7 @@
 --  [1] Introduction to Algorithms, Thomas H. Cormen, Charles E.
 --  Leiserson, Ronald L. Rivest, Clifford Stein.
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_unbounded_definite_stacks-gen_image_aux.adb 
b/sal-gen_unbounded_definite_stacks-gen_image_aux.adb
index e900846..c4b52a6 100644
--- a/sal-gen_unbounded_definite_stacks-gen_image_aux.adb
+++ b/sal-gen_unbounded_definite_stacks-gen_image_aux.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_unbounded_definite_stacks-gen_image_aux.ads 
b/sal-gen_unbounded_definite_stacks-gen_image_aux.ads
index ff732a8..801ffd3 100644
--- a/sal-gen_unbounded_definite_stacks-gen_image_aux.ads
+++ b/sal-gen_unbounded_definite_stacks-gen_image_aux.ads
@@ -2,7 +2,7 @@
 --
 --  Image with auxiliary data for instantiations of parent.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_unbounded_definite_stacks.adb 
b/sal-gen_unbounded_definite_stacks.adb
index d916b6e..6b5337d 100644
--- a/sal-gen_unbounded_definite_stacks.adb
+++ b/sal-gen_unbounded_definite_stacks.adb
@@ -2,7 +2,7 @@
 --
 --  see spec
 --
---  Copyright (C) 1998, 2003, 2009, 2015, 2017, 2018 Stephen Leake.  All 
Rights Reserved.
+--  Copyright (C) 1998, 2003, 2009, 2015, 2017, 2018 Free Software Foundation, 
Inc.
 --
 --  SAL is free software; you can redistribute it and/or modify it
 --  under terms of the GNU General Public License as published by the
diff --git a/sal-gen_unbounded_definite_stacks.ads 
b/sal-gen_unbounded_definite_stacks.ads
index 413071f..b0cb65c 100644
--- a/sal-gen_unbounded_definite_stacks.ads
+++ b/sal-gen_unbounded_definite_stacks.ads
@@ -2,7 +2,7 @@
 --
 --  Stack implementation.
 --
---  Copyright (C) 1998-2000, 2002-2003, 2009, 2015, 2017, 2018 Stephen Leake.  
All Rights Reserved.
+--  Copyright (C) 1998-2000, 2002-2003, 2009, 2015, 2017, 2018 Free Software 
Foundation, Inc.
 --
 --  SAL is free software; you can redistribute it and/or modify it
 --  under terms of the GNU General Public License as published by the
diff --git a/sal-gen_unbounded_definite_vectors-gen_comparable.adb 
b/sal-gen_unbounded_definite_vectors-gen_comparable.adb
index 1bd9251..16c1fe8 100644
--- a/sal-gen_unbounded_definite_vectors-gen_comparable.adb
+++ b/sal-gen_unbounded_definite_vectors-gen_comparable.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_unbounded_definite_vectors-gen_comparable.ads 
b/sal-gen_unbounded_definite_vectors-gen_comparable.ads
index a12f81a..56d84c0 100644
--- a/sal-gen_unbounded_definite_vectors-gen_comparable.ads
+++ b/sal-gen_unbounded_definite_vectors-gen_comparable.ads
@@ -2,7 +2,7 @@
 --
 --  Add "<" to parent
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_unbounded_definite_vectors-gen_image.adb 
b/sal-gen_unbounded_definite_vectors-gen_image.adb
index 03a1c5f..929994a 100644
--- a/sal-gen_unbounded_definite_vectors-gen_image.adb
+++ b/sal-gen_unbounded_definite_vectors-gen_image.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_unbounded_definite_vectors-gen_image.ads 
b/sal-gen_unbounded_definite_vectors-gen_image.ads
index 1ace2fe..274e1f1 100644
--- a/sal-gen_unbounded_definite_vectors-gen_image.ads
+++ b/sal-gen_unbounded_definite_vectors-gen_image.ads
@@ -2,7 +2,7 @@
 --
 --  Image of parent.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_unbounded_definite_vectors.adb 
b/sal-gen_unbounded_definite_vectors.adb
index 8faaf88..74f3497 100644
--- a/sal-gen_unbounded_definite_vectors.adb
+++ b/sal-gen_unbounded_definite_vectors.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal-gen_unbounded_definite_vectors.ads 
b/sal-gen_unbounded_definite_vectors.ads
index 799e73c..6ad1684 100644
--- a/sal-gen_unbounded_definite_vectors.ads
+++ b/sal-gen_unbounded_definite_vectors.ads
@@ -8,7 +8,7 @@
 --  It provides no checking of cursor tampering; higher level code
 --  must ensure that.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/sal.adb b/sal.adb
index 6c5013e..13a5276 100644
--- a/sal.adb
+++ b/sal.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 1997 - 2004, 2006, 2009 Stephen Leake.  All Rights Reserved.
+--  Copyright (C) 1997 - 2004, 2006, 2009 Free Software Foundation, Inc.
 --
 --  SAL is free software; you can redistribute it and/or modify it
 --  under terms of the GNU General Public License as published by the
@@ -26,7 +26,7 @@ package body SAL is
 
    function Version return String is
    begin
-      return "SAL 2.01";
+      return "SAL 3.0";
    end Version;
 
 end SAL;
diff --git a/sal.ads b/sal.ads
index 0d5a4e6..1e63dbc 100644
--- a/sal.ads
+++ b/sal.ads
@@ -9,7 +9,7 @@
 --
 --  Contact Stephe at stephen_leake@stephe-leake.org.
 --
---  Copyright (C) 1997 - 2004, 2008, 2009, 2015, 2017, 2018 Stephen Leake.  
All Rights Reserved.
+--  Copyright (C) 1997 - 2004, 2008, 2009, 2015, 2017, 2018 Free Software 
Foundation, Inc.
 --
 --  SAL is free software; you can redistribute it and/or modify it
 --  under terms of the GNU General Public License as published by the
diff --git a/standard_common.gpr b/standard_common.gpr
index 82e2fc9..b51f8ed 100644
--- a/standard_common.gpr
+++ b/standard_common.gpr
@@ -1,4 +1,21 @@
--- Standard settings for all of Stephe's Ada projects.
+--  Abstract :
+--
+--  Standard settings for all of Stephe's Ada projects.
+--
+--  Copyright (C) 2018 Free Software Foundation, Inc.
+--
+--  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.
+
 project Standard_Common is
    for Source_Dirs use ();
 
diff --git a/wisi.adb b/wisi.adb
index 9b184b7..0c00735 100644
--- a/wisi.adb
+++ b/wisi.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisi.ads b/wisi.ads
index cfc61e1..4203930 100644
--- a/wisi.ads
+++ b/wisi.ads
@@ -10,7 +10,7 @@
 --
 --  [3] wisi-process-parse.el - defines elisp/process API
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisi.el b/wisi.el
index 00719a2..4a6b7ad 100755
--- a/wisi.el
+++ b/wisi.el
@@ -7,7 +7,7 @@
 ;; Keywords: parser
 ;;  indentation
 ;;  navigation
-;; Version: 2.0.0
+;; Version: 2.0.1
 ;; package-requires: ((cl-lib "1.0") (emacs "25.0") (seq "2.20"))
 ;; URL: http://www.nongnu.org/ada-mode/wisi/wisi.html
 ;;
diff --git a/wisitoken-bnf-generate.adb b/wisitoken-bnf-generate.adb
index 7569ffb..8d2da44 100644
--- a/wisitoken-bnf-generate.adb
+++ b/wisitoken-bnf-generate.adb
@@ -3,7 +3,7 @@
 --  Parser for Wisi grammar files, producing Ada or Elisp source
 --  files for a parser.
 --
---  Copyright (C) 2012 - 2015, 2017, 2018 Stephen Leake.  All Rights Reserved.
+--  Copyright (C) 2012 - 2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  The WisiToken package is free software; you can redistribute it
 --  and/or modify it under terms of the GNU General Public License as
@@ -54,7 +54,7 @@ is
    begin
       --  verbosity meaning is actually determined by output choice;
       --  they should be consistent with this description.
-      Put_Line (Standard_Error, "version 1.0");
+      Put_Line (Standard_Error, "version 1.0.1");
       Put_Line (Standard_Error, "wisi-generate [options] {wisi grammar file}");
       Put_Line (Standard_Error, "Generate source code implementing a parser 
for the grammar.");
       New_Line (Standard_Error);
@@ -349,7 +349,7 @@ begin
                Lexer_Done (Input_Data.User_Lexer) := True;
                if Input_Data.User_Lexer = re2c_Lexer then
                   WisiToken.BNF.Output_Ada_Common.Create_re2c
-                    (Input_Data, Tuple, Generate_Data, -Output_File_Name_Root, 
Input_Data.User_Names.Regexps);
+                    (Input_Data, Tuple, Generate_Data, -Output_File_Name_Root);
                end if;
             end if;
 
diff --git a/wisitoken-bnf-generate_grammar.adb 
b/wisitoken-bnf-generate_grammar.adb
index 03ef661..2264dcf 100644
--- a/wisitoken-bnf-generate_grammar.adb
+++ b/wisitoken-bnf-generate_grammar.adb
@@ -2,7 +2,7 @@
 --
 --  Output Ada source code to recreate Grammar.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-bnf-generate_packrat.adb 
b/wisitoken-bnf-generate_packrat.adb
index ee43b16..8c785c6 100644
--- a/wisitoken-bnf-generate_packrat.adb
+++ b/wisitoken-bnf-generate_packrat.adb
@@ -6,7 +6,7 @@
 --
 --  See wisitoken-parse-packrat.ads.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-bnf-generate_utils.ads b/wisitoken-bnf-generate_utils.ads
index d7347de..9e2ff96 100644
--- a/wisitoken-bnf-generate_utils.ads
+++ b/wisitoken-bnf-generate_utils.ads
@@ -3,7 +3,7 @@
 --  Utilities for translating input file structures to WisiToken
 --  structures needed for LALR.Generate.
 --
---  Copyright (C) 2014, 2015, 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2014, 2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  The WisiToken package is free software; you can redistribute it
 --  and/or modify it under terms of the GNU General Public License as
diff --git a/wisitoken-bnf-output_ada.adb b/wisitoken-bnf-output_ada.adb
index ee24c7e..0d99340 100644
--- a/wisitoken-bnf-output_ada.adb
+++ b/wisitoken-bnf-output_ada.adb
@@ -4,7 +4,7 @@
 --  parameters, and a parser for that grammar. The grammar parser
 --  actions must be Ada.
 --
---  Copyright (C) 2017, 2018 Stephen Leake.  All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  The WisiToken package is free software; you can redistribute it
 --  and/or modify it under terms of the GNU General Public License as
diff --git a/wisitoken-bnf-output_ada_common.adb 
b/wisitoken-bnf-output_ada_common.adb
index 3267ebb..de9db8c 100644
--- a/wisitoken-bnf-output_ada_common.adb
+++ b/wisitoken-bnf-output_ada_common.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
@@ -950,8 +950,7 @@ package body WisiToken.BNF.Output_Ada_Common is
      (Input_Data            :         in 
WisiToken_Grammar_Runtime.User_Data_Type;
       Tuple                 :         in Generate_Tuple;
       Generate_Data         : aliased in 
WisiToken.BNF.Generate_Utils.Generate_Data;
-      Output_File_Name_Root :         in String;
-      Elisp_Regexps         :         in WisiToken.BNF.String_Pair_Lists.List)
+      Output_File_Name_Root :         in String)
    is
       use Ada.Strings.Fixed;
       use Generate_Utils;
@@ -1176,7 +1175,7 @@ package body WisiToken.BNF.Output_Ada_Common is
       New_Line;
 
       --  Regexps used in definitions
-      for Pair of Input_Data.Tokens.Regexps loop
+      for Pair of Input_Data.Tokens.re2c_Regexps loop
          Indent_Line (-Pair.Name & " = " & (-Pair.Value) & ";");
       end loop;
       New_Line;
@@ -1184,41 +1183,31 @@ package body WisiToken.BNF.Output_Ada_Common is
       --  definitions
       for I in All_Tokens (Generate_Data).Iterate (Non_Grammar => True, 
Nonterminals => False) loop
 
-         declare
-            Val : constant String :=
-              (if Is_Present (Elisp_Regexps, Value (I))
-               then Value (Elisp_Regexps, Value (I))
-               else Value (I));
-         begin
-            if 0 /= Index (Source => Val, Pattern => "/") then
-               --  trailing context syntax; forbidden in definitions
-               null;
+         if 0 /= Index (Source => Value (I), Pattern => "/") then
+            --  trailing context syntax; forbidden in definitions
+            null;
 
-            elsif Kind (I) = "EOI" then
-               Indent_Line (Name (I) & " = [\x04];");
+         elsif Kind (I) = "EOI" then
+            Indent_Line (Name (I) & " = [\x04];");
 
-            elsif Kind (I) = "delimited-text" then
-               --  not declared in definitions
-               null;
+         elsif Kind (I) = "delimited-text" then
+            --  not declared in definitions
+            null;
 
-            elsif Kind (I) = "keyword" and 
Input_Data.Language_Params.Case_Insensitive then
-               Indent_Line (Name (I) & " = '" & Strip_Quotes (Val) & "';");
+         elsif Kind (I) = "keyword" and 
Input_Data.Language_Params.Case_Insensitive then
+            Indent_Line (Name (I) & " = '" & Strip_Quotes (Value (I)) & "';");
 
-            else
-               --  Other kinds have values that are regular expressions, in 
re2c syntax
-               Indent_Line (Name (I) & " = " & Val & ";");
-            end if;
-         end;
+         else
+            --  Other kinds have values that are regular expressions, in re2c 
syntax
+            Indent_Line (Name (I) & " = " & Value (I) & ";");
+         end if;
       end loop;
       New_Line;
 
       --  lexer rules
       for I in All_Tokens (Generate_Data).Iterate (Non_Grammar => True, 
Nonterminals => False) loop
          declare
-            Val : constant String :=
-              (if Is_Present (Elisp_Regexps, Value (I))
-               then Value (Elisp_Regexps, Value (I))
-               else Value (I));
+            Val : constant String := Value (I);
          begin
 
             if Kind (I) = "non-reporting" then
diff --git a/wisitoken-bnf-output_ada_common.ads 
b/wisitoken-bnf-output_ada_common.ads
index b4d8923..44d7a63 100644
--- a/wisitoken-bnf-output_ada_common.ads
+++ b/wisitoken-bnf-output_ada_common.ads
@@ -2,7 +2,7 @@
 --
 --  Types and operations shared by Ada and Ada_Emacs outputs.
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
@@ -83,9 +83,8 @@ package WisiToken.BNF.Output_Ada_Common is
      (Input_Data            :         in 
WisiToken_Grammar_Runtime.User_Data_Type;
       Tuple                 :         in Generate_Tuple;
       Generate_Data         : aliased in 
WisiToken.BNF.Generate_Utils.Generate_Data;
-      Output_File_Name_Root :         in String;
-      Elisp_Regexps         :         in WisiToken.BNF.String_Pair_Lists.List);
-   --  Create_re2c is called from wisi-generate, which does not declare
+      Output_File_Name_Root :         in String);
+   --  Create_re2c is called from wisitoken-bnf-generate, which does not 
declare
    --  Common_Data.
 
 end WisiToken.BNF.Output_Ada_Common;
diff --git a/wisitoken-bnf-output_ada_emacs.adb 
b/wisitoken-bnf-output_ada_emacs.adb
index 136c6d3..30da8c4 100644
--- a/wisitoken-bnf-output_ada_emacs.adb
+++ b/wisitoken-bnf-output_ada_emacs.adb
@@ -12,7 +12,7 @@
 --  If run in an Emacs dynamically loaded module, the parser actions
 --  call the elisp actions directly.
 --
---  Copyright (C) 2012 - 2015, 2017, 2018 Stephen Leake.  All Rights Reserved.
+--  Copyright (C) 2012 - 2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  The WisiToken package is free software; you can redistribute it
 --  and/or modify it under terms of the GNU General Public License as
diff --git a/wisitoken-bnf-output_elisp.adb b/wisitoken-bnf-output_elisp.adb
index 8317ac7..8007bd2 100644
--- a/wisitoken-bnf-output_elisp.adb
+++ b/wisitoken-bnf-output_elisp.adb
@@ -2,7 +2,7 @@
 --
 --  Output Elisp code implementing the grammar defined by the parameters.
 --
---  Copyright (C) 2012 - 2015, 2017, 2018 Stephen Leake.  All Rights Reserved.
+--  Copyright (C) 2012 - 2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  The WisiToken package is free software; you can redistribute it
 --  and/or modify it under terms of the GNU General Public License as
diff --git a/wisitoken-bnf-output_elisp_common.adb 
b/wisitoken-bnf-output_elisp_common.adb
index fc37469..9d46b4f 100644
--- a/wisitoken-bnf-output_elisp_common.adb
+++ b/wisitoken-bnf-output_elisp_common.adb
@@ -2,7 +2,7 @@
 --
 --  See spec
 --
---  Copyright (C) 2012, 2013, 2015, 2017, 2018 Stephen Leake.  All Rights 
Reserved.
+--  Copyright (C) 2012, 2013, 2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  This program is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
diff --git a/wisitoken-bnf-output_elisp_common.ads 
b/wisitoken-bnf-output_elisp_common.ads
index cb4e94b..040bd5e 100644
--- a/wisitoken-bnf-output_elisp_common.ads
+++ b/wisitoken-bnf-output_elisp_common.ads
@@ -2,7 +2,7 @@
 --
 --  Subprograms common to Output_Elisp and Output_Ada_Emacs
 --
---  Copyright (C) 2012, 2013, 2015, 2017, 2018 Stephen Leake. All Rights 
Reserved.
+--  Copyright (C) 2012, 2013, 2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  The WisiToken package is free software; you can redistribute it
 --  and/or modify it under terms of the GNU General Public License as
diff --git a/wisitoken-bnf-utils.adb b/wisitoken-bnf-utils.adb
index 4ff91b6..71e340f 100644
--- a/wisitoken-bnf-utils.adb
+++ b/wisitoken-bnf-utils.adb
@@ -2,7 +2,7 @@
 --
 --  See spec
 --
---  Copyright (C) 2012, 2013, 2015, 2017, 2018 Stephen Leake.  All Rights 
Reserved.
+--  Copyright (C) 2012, 2013, 2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  This program is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
diff --git a/wisitoken-bnf-utils.ads b/wisitoken-bnf-utils.ads
index 4d82f32..6062ff9 100644
--- a/wisitoken-bnf-utils.ads
+++ b/wisitoken-bnf-utils.ads
@@ -1,8 +1,8 @@
 --  Abstract :
 --
---  Utilities for generating source code from  Wisi source files
+--  Utilities for generating source code from BNF source files
 --
---  Copyright (C) 2012, 2013, 2015, 2017, 2018 Stephen Leake. All Rights 
Reserved.
+--  Copyright (C) 2012, 2013, 2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  The WisiToken package is free software; you can redistribute it
 --  and/or modify it under terms of the GNU General Public License as
diff --git a/wisitoken-bnf.adb b/wisitoken-bnf.adb
index cd49de7..22492f0 100644
--- a/wisitoken-bnf.adb
+++ b/wisitoken-bnf.adb
@@ -2,7 +2,7 @@
 --
 --  see spec
 --
---  Copyright (C) 2012 - 2015, 2017, 2018 Stephen Leake.  All Rights Reserved.
+--  Copyright (C) 2012 - 2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  This program is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
diff --git a/wisitoken-bnf.ads b/wisitoken-bnf.ads
index 60fb96a..cd40975 100644
--- a/wisitoken-bnf.ads
+++ b/wisitoken-bnf.ads
@@ -13,7 +13,7 @@
 --  [1] https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form
 --  [2] http://www.nongnu.org/ada-mode/wisi/wisi-user_guide.html, (info 
"(wisi-user_guide)Top")
 --
---  Copyright (C) 2012 - 2015, 2017, 2018 Stephen Leake.  All Rights Reserved.
+--  Copyright (C) 2012 - 2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  The WisiToken package is free software; you can redistribute it
 --  and/or modify it under terms of the GNU General Public License as
@@ -250,16 +250,16 @@ package WisiToken.BNF is
    function Is_Present (Rules : in Rule_Lists.List; LHS : in String) return 
Boolean;
 
    type Tokens is record
-      Non_Grammar      : Token_Lists.List;
-      Keywords         : String_Pair_Lists.List;
-      Tokens           : Token_Lists.List;
-      Rules            : Rule_Lists.List;
+      Non_Grammar : Token_Lists.List;
+      Keywords    : String_Pair_Lists.List;
+      Tokens      : Token_Lists.List;
+      Rules       : Rule_Lists.List;
       --  Rules included here because they define the nonterminal tokens, as
       --  well as the productions.
 
-      Regexps : String_Pair_Lists.List;
-      --  Regexps included here because they are used in defining the
-      --  Tokens.
+      re2c_Regexps : String_Pair_Lists.List;
+      --  From %re2c_regexp; included here because they are used in defining
+      --  the Tokens.
    end record;
 
    type User_Names is record
@@ -269,7 +269,6 @@ package WisiToken.BNF is
 
       Faces   : String_Lists.List;      -- %elisp_face
       Indents : String_Pair_Lists.List; -- %elisp_indent
-      Regexps : String_Pair_Lists.List; -- %regexp_name
    end record;
 
    function "+" (Item : in String) return 
Ada.Strings.Unbounded.Unbounded_String
diff --git a/wisitoken-gen_token_enum.adb b/wisitoken-gen_token_enum.adb
index 87e5f6d..0b17832 100644
--- a/wisitoken-gen_token_enum.adb
+++ b/wisitoken-gen_token_enum.adb
@@ -2,7 +2,7 @@
 --
 --  See spec
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-gen_token_enum.ads b/wisitoken-gen_token_enum.ads
index b14be0d..cfd508b 100644
--- a/wisitoken-gen_token_enum.ads
+++ b/wisitoken-gen_token_enum.ads
@@ -2,7 +2,7 @@
 --
 --  Support for an enumerated token type
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-generate-lr-lalr_generate.adb 
b/wisitoken-generate-lr-lalr_generate.adb
index d886077..0558f74 100644
--- a/wisitoken-generate-lr-lalr_generate.adb
+++ b/wisitoken-generate-lr-lalr_generate.adb
@@ -2,8 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2002 - 2005, 2008 - 2015, 2017, 2018 Stephe Leake
---  Copyright (C) 1999 Ted Dennison
+--  Copyright (C) 2002 - 2005, 2008 - 2015, 2017, 2018 Free Software 
Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-generate-lr-lalr_generate.ads 
b/wisitoken-generate-lr-lalr_generate.ads
index 01c65ca..80cc165 100644
--- a/wisitoken-generate-lr-lalr_generate.ads
+++ b/wisitoken-generate-lr-lalr_generate.ads
@@ -2,8 +2,7 @@
 --
 --  Generalized LALR parse table generator.
 --
---  Copyright (C) 2002 - 2003, 2009 - 2010, 2013 - 2015, 2017, 2018 Stephe 
Leake
---  Copyright (C) 1999 Ted Dennison
+--  Copyright (C) 2002 - 2003, 2009 - 2010, 2013 - 2015, 2017, 2018 Free 
Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-generate-lr-lr1_generate.adb 
b/wisitoken-generate-lr-lr1_generate.adb
index 14fa5db..53507ba 100644
--- a/wisitoken-generate-lr-lr1_generate.adb
+++ b/wisitoken-generate-lr-lr1_generate.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017, 2018 Stephe Leake
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-generate-lr-lr1_generate.ads 
b/wisitoken-generate-lr-lr1_generate.ads
index 7dea371..7a3c6f6 100644
--- a/wisitoken-generate-lr-lr1_generate.ads
+++ b/wisitoken-generate-lr-lr1_generate.ads
@@ -7,7 +7,7 @@
 --  [dragon] "Compilers Principles, Techniques, and Tools" by Aho,
 --  Sethi, and Ullman (aka: "The [Red] Dragon Book").
 --
---  Copyright (C) 2017, 2018 Stephe Leake
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-generate-lr.adb b/wisitoken-generate-lr.adb
index 32689c0..c124327 100644
--- a/wisitoken-generate-lr.adb
+++ b/wisitoken-generate-lr.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-generate-lr.ads b/wisitoken-generate-lr.ads
index 6000dab..4a57ff8 100644
--- a/wisitoken-generate-lr.ads
+++ b/wisitoken-generate-lr.ads
@@ -2,7 +2,7 @@
 --
 --  Common utilities for LR parser table generators.
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-generate-lr1_items.adb b/wisitoken-generate-lr1_items.adb
index a62a4af..05ad564 100644
--- a/wisitoken-generate-lr1_items.adb
+++ b/wisitoken-generate-lr1_items.adb
@@ -2,8 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2002, 2003, 2008, 2009, 2012 - 2015, 2017, 2018 Stephe Leake
---  Copyright (C) 1999 Ted Dennison
+--  Copyright (C) 2002, 2003, 2008, 2009, 2012 - 2015, 2017, 2018 Free 
Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-generate-lr1_items.ads b/wisitoken-generate-lr1_items.ads
index ff90e4a..d776e4a 100644
--- a/wisitoken-generate-lr1_items.ads
+++ b/wisitoken-generate-lr1_items.ads
@@ -2,8 +2,7 @@
 --
 --  Types and operatorion for LR(1) items.
 --
---  Copyright (C) 2003, 2008, 2013-2015, 2017, 2018 Stephe Leake
---  Copyright (C) 1999 Ted Dennison
+--  Copyright (C) 2003, 2008, 2013-2015, 2017, 2018 Free Software Foundation, 
Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-generate-packrat.adb b/wisitoken-generate-packrat.adb
index 068b6d0..80a4c10 100644
--- a/wisitoken-generate-packrat.adb
+++ b/wisitoken-generate-packrat.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-generate-packrat.ads b/wisitoken-generate-packrat.ads
index 152dd99..ec9a4cb 100644
--- a/wisitoken-generate-packrat.ads
+++ b/wisitoken-generate-packrat.ads
@@ -10,7 +10,7 @@
 --
 --  See wisitoken-parse-packrat.ads.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-generate.adb b/wisitoken-generate.adb
index aba997b..81ae9da 100644
--- a/wisitoken-generate.adb
+++ b/wisitoken-generate.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-generate.ads b/wisitoken-generate.ads
index 19648d2..28636d4 100644
--- a/wisitoken-generate.ads
+++ b/wisitoken-generate.ads
@@ -12,7 +12,7 @@
 --
 --  See wisitoken.ads
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-lexer-re2c.adb b/wisitoken-lexer-re2c.adb
index c5bc6af..5eae70d 100644
--- a/wisitoken-lexer-re2c.adb
+++ b/wisitoken-lexer-re2c.adb
@@ -2,7 +2,7 @@
 --
 --  see spec.
 --
---  Copyright (C) 2017, 2018 Stephe Leake
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-lexer-re2c.ads b/wisitoken-lexer-re2c.ads
index 9bb33f5..0472908 100644
--- a/wisitoken-lexer-re2c.ads
+++ b/wisitoken-lexer-re2c.ads
@@ -6,7 +6,7 @@
 --
 --  [1] http://re2c.org/
 --
---  Copyright (C) 2017, 2018 Stephe Leake
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-lexer-regexp.adb b/wisitoken-lexer-regexp.adb
index d355080..8eb2242 100644
--- a/wisitoken-lexer-regexp.adb
+++ b/wisitoken-lexer-regexp.adb
@@ -2,7 +2,7 @@
 --
 --  See spec
 --
---  Copyright (C) 2015, 2017, 2018 Stephe Leake
+--  Copyright (C) 2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-lexer-regexp.ads b/wisitoken-lexer-regexp.ads
index 33bda9b..8a94560 100644
--- a/wisitoken-lexer-regexp.ads
+++ b/wisitoken-lexer-regexp.ads
@@ -6,7 +6,7 @@
 --  used in most of the WisiToken unit tests. Since it uses regexp, it
 --  is easy to convert to an Aflex lexer.
 --
---  Copyright (C) 2015, 2017, 2018 Stephe Leake
+--  Copyright (C) 2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-lexer.adb b/wisitoken-lexer.adb
index 6d3d546..8ceff80 100644
--- a/wisitoken-lexer.adb
+++ b/wisitoken-lexer.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-lexer.ads b/wisitoken-lexer.ads
index b854004..0e9c6a1 100644
--- a/wisitoken-lexer.ads
+++ b/wisitoken-lexer.ads
@@ -2,7 +2,7 @@
 --
 --  An abstract lexer interface.
 --
---  Copyright (C) 2014 - 2015, 2017, 2018 Stephe Leake
+--  Copyright (C) 2014 - 2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-parse-lr-mckenzie_recover-base.adb 
b/wisitoken-parse-lr-mckenzie_recover-base.adb
index 52ddeac..17301b2 100644
--- a/wisitoken-parse-lr-mckenzie_recover-base.adb
+++ b/wisitoken-parse-lr-mckenzie_recover-base.adb
@@ -2,7 +2,7 @@
 --
 --  Base utilities for McKenzie_Recover
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-parse-lr-mckenzie_recover-base.ads 
b/wisitoken-parse-lr-mckenzie_recover-base.ads
index 1d292d6..e7592d4 100644
--- a/wisitoken-parse-lr-mckenzie_recover-base.ads
+++ b/wisitoken-parse-lr-mckenzie_recover-base.ads
@@ -2,7 +2,7 @@
 --
 --  Base utilities for McKenzie_Recover
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-parse-lr-mckenzie_recover-explore.adb 
b/wisitoken-parse-lr-mckenzie_recover-explore.adb
index 15910f7..f47ed68 100644
--- a/wisitoken-parse-lr-mckenzie_recover-explore.adb
+++ b/wisitoken-parse-lr-mckenzie_recover-explore.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-parse-lr-mckenzie_recover-explore.ads 
b/wisitoken-parse-lr-mckenzie_recover-explore.ads
index 12e4871..1777728 100644
--- a/wisitoken-parse-lr-mckenzie_recover-explore.ads
+++ b/wisitoken-parse-lr-mckenzie_recover-explore.ads
@@ -2,7 +2,7 @@
 --
 --  Code to explore parse table, enqueuing new configs to check.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-parse-lr-mckenzie_recover-parse.adb 
b/wisitoken-parse-lr-mckenzie_recover-parse.adb
index 0d78fcd..c9a7475 100644
--- a/wisitoken-parse-lr-mckenzie_recover-parse.adb
+++ b/wisitoken-parse-lr-mckenzie_recover-parse.adb
@@ -2,7 +2,7 @@
 --
 --  See spec
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-parse-lr-mckenzie_recover-parse.ads 
b/wisitoken-parse-lr-mckenzie_recover-parse.ads
index eb1eeee..0db7178 100644
--- a/wisitoken-parse-lr-mckenzie_recover-parse.ads
+++ b/wisitoken-parse-lr-mckenzie_recover-parse.ads
@@ -2,7 +2,7 @@
 --
 --  Config parsing subprograms.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-parse-lr-mckenzie_recover.adb 
b/wisitoken-parse-lr-mckenzie_recover.adb
index 26d75df..c92e2ed 100644
--- a/wisitoken-parse-lr-mckenzie_recover.adb
+++ b/wisitoken-parse-lr-mckenzie_recover.adb
@@ -2,7 +2,7 @@
 --
 --  See spec
 --
---  Copyright (C) 2017 - 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017 - 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-parse-lr-mckenzie_recover.ads 
b/wisitoken-parse-lr-mckenzie_recover.ads
index 533ed87..f92897b 100644
--- a/wisitoken-parse-lr-mckenzie_recover.ads
+++ b/wisitoken-parse-lr-mckenzie_recover.ads
@@ -11,7 +11,7 @@
 --  [Grune 2008] Parsing Techniques, A Practical Guide, Second
 --  Edition. Dick Grune, Ceriel J.H. Jacobs.
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-parse-lr-parser.adb b/wisitoken-parse-lr-parser.adb
index 5d3eedb..9f8aa66 100644
--- a/wisitoken-parse-lr-parser.adb
+++ b/wisitoken-parse-lr-parser.adb
@@ -2,8 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2002 - 2005, 2008 - 2015, 2017, 2018 Stephe Leake
---  Copyright (C) 1999 Ted Dennison
+--  Copyright (C) 2002 - 2005, 2008 - 2015, 2017, 2018 Free Software 
Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-parse-lr-parser.ads b/wisitoken-parse-lr-parser.ads
index 8aa5906..f5b7405 100644
--- a/wisitoken-parse-lr-parser.ads
+++ b/wisitoken-parse-lr-parser.ads
@@ -5,8 +5,7 @@
 --  In a child package of Parser.LR partly for historical reasons,
 --  partly to allow McKenzie_Recover to be in a sibling package.
 --
---  Copyright (C) 2002, 2003, 2009, 2010, 2013-2015, 2017, 2018 Stephe Leake
---  Copyright (C) 1999 Ted Dennison
+--  Copyright (C) 2002, 2003, 2009, 2010, 2013-2015, 2017, 2018 Free Software 
Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-parse-lr-parser_lists.ads 
b/wisitoken-parse-lr-parser_lists.ads
index 6c44892..dcaa268 100644
--- a/wisitoken-parse-lr-parser_lists.ads
+++ b/wisitoken-parse-lr-parser_lists.ads
@@ -2,7 +2,7 @@
 --
 --  Generalized LR parser state.
 --
---  Copyright (C) 2014-2015, 2017, 2018 Stephe Leake
+--  Copyright (C) 2014-2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-parse-lr-parser_no_recover.adb 
b/wisitoken-parse-lr-parser_no_recover.adb
index c82544a..48d9e4f 100644
--- a/wisitoken-parse-lr-parser_no_recover.adb
+++ b/wisitoken-parse-lr-parser_no_recover.adb
@@ -2,8 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2002 - 2005, 2008 - 2015, 2017, 2018 Stephe Leake
---  Copyright (C) 1999 Ted Dennison
+--  Copyright (C) 2002 - 2005, 2008 - 2015, 2017, 2018 Free Software 
Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-parse-lr-parser_no_recover.ads 
b/wisitoken-parse-lr-parser_no_recover.ads
index 17d1766..1f91e3d 100644
--- a/wisitoken-parse-lr-parser_no_recover.ads
+++ b/wisitoken-parse-lr-parser_no_recover.ads
@@ -6,8 +6,7 @@
 --  to not depend on wisitoken-lr-mckenzie_recover, so editing that
 --  does not cause everything to be regenerated/compiled.
 --
---  Copyright (C) 2002, 2003, 2009, 2010, 2013-2015, 2017, 2018 Stephe Leake
---  Copyright (C) 1999 Ted Dennison
+--  Copyright (C) 2002, 2003, 2009, 2010, 2013-2015, 2017, 2018 Free Software 
Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-parse-lr.adb b/wisitoken-parse-lr.adb
index 307985c..74dcb98 100644
--- a/wisitoken-parse-lr.adb
+++ b/wisitoken-parse-lr.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2013-2015, 2017, 2018 Stephe Leake
+--  Copyright (C) 2013-2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-parse-lr.ads b/wisitoken-parse-lr.ads
index 7bd38ad..6c9db82 100644
--- a/wisitoken-parse-lr.ads
+++ b/wisitoken-parse-lr.ads
@@ -9,8 +9,7 @@
 --
 --  See wisitoken.ads
 --
---  Copyright (C) 2002, 2003, 2009, 2010, 2013-2015, 2017 - 2018 Stephe Leake
---  Copyright (C) 1999 Ted Dennison
+--  Copyright (C) 2002, 2003, 2009, 2010, 2013-2015, 2017 - 2018 Free Software 
Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-parse-packrat-generated.adb 
b/wisitoken-parse-packrat-generated.adb
index c71e57c..0e1adb0 100644
--- a/wisitoken-parse-packrat-generated.adb
+++ b/wisitoken-parse-packrat-generated.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-parse-packrat-generated.ads 
b/wisitoken-parse-packrat-generated.ads
index 408d48e..80d6cee 100644
--- a/wisitoken-parse-packrat-generated.ads
+++ b/wisitoken-parse-packrat-generated.ads
@@ -7,7 +7,7 @@
 --
 --  see parent.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-parse-packrat-procedural.adb 
b/wisitoken-parse-packrat-procedural.adb
index 8ec9559..1e5024c 100644
--- a/wisitoken-parse-packrat-procedural.adb
+++ b/wisitoken-parse-packrat-procedural.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-parse-packrat-procedural.ads 
b/wisitoken-parse-packrat-procedural.ads
index bd6d86f..ecd14de 100644
--- a/wisitoken-parse-packrat-procedural.ads
+++ b/wisitoken-parse-packrat-procedural.ads
@@ -9,7 +9,7 @@
 --
 --  See parent.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-parse-packrat.adb b/wisitoken-parse-packrat.adb
index fd5f586..14fd2bb 100644
--- a/wisitoken-parse-packrat.adb
+++ b/wisitoken-parse-packrat.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-parse-packrat.ads b/wisitoken-parse-packrat.ads
index 50ff2f0..40eeba0 100644
--- a/wisitoken-parse-packrat.ads
+++ b/wisitoken-parse-packrat.ads
@@ -14,7 +14,7 @@
 --  [warth 2008]  Warth, A., Douglass, J.R. and Millstein, T.D., 2008. Packrat
 --                parsers can support left recursion. PEPM, 8, pp.103-110.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-parse.adb b/wisitoken-parse.adb
index 0573a95..52870e0 100644
--- a/wisitoken-parse.adb
+++ b/wisitoken-parse.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-parse.ads b/wisitoken-parse.ads
index 271163f..38574ed 100644
--- a/wisitoken-parse.ads
+++ b/wisitoken-parse.ads
@@ -2,7 +2,7 @@
 --
 --  Subprograms common to more than one parser, higher-level than in 
wisitoken.ads
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-productions.adb b/wisitoken-productions.adb
index 4d5079a..f95210b 100644
--- a/wisitoken-productions.adb
+++ b/wisitoken-productions.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephe Leake
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-productions.ads b/wisitoken-productions.ads
index 19f8dfa..0ae651e 100644
--- a/wisitoken-productions.ads
+++ b/wisitoken-productions.ads
@@ -2,7 +2,7 @@
 --
 --  Type and operations for building grammar productions.
 --
---  Copyright (C) 2018 Stephe Leake
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-regexp.adb b/wisitoken-regexp.adb
deleted file mode 100644
index b978bf9..0000000
--- a/wisitoken-regexp.adb
+++ /dev/null
@@ -1,1347 +0,0 @@
---  Abstract:
---
---  See spec.
---
---  Copyright (C) 2015, 2017 Stephen Leake
---  Copyright (C) 1998-2010, AdaCore
---
---  This file is part of the WisiToken package.
---
---  The WisiToken package 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. The WisiToken package 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.
---
---  As a special exception, if other files instantiate generics from
---  this unit, or you link this unit with other files to produce an
---  executable, this unit does not by itself cause the resulting
---  executable to be covered by the GNU General Public License. This
---  exception does not however invalidate any other reasons why the
---  executable file might be covered by the GNU Public License.
---
---  You should have received a copy of the GNU General Public License
---  and a copy of the GCC Runtime Library Exception distributed with
---  the WisiToken package; see files GPL.txt and GPL_runtime.txt. If
---  not, see <http://www.gnu.org/licenses/>.
-
-pragma License (Modified_GPL);
-
-with Ada.Unchecked_Deallocation;
-with GNAT.Case_Util;
-package body WisiToken.Regexp is
-
-   Initial_Max_States_In_Primary_Table : constant := 100;
-   --  Initial size for the number of states in the indefinite state
-   --  machine. The number of states will be increased as needed.
-   --
-   --  This is also used as the maximal number of meta states (groups of
-   --  states) in the secondary table.
-
-   Open_Paren    : constant Character := '(';
-   Close_Paren   : constant Character := ')';
-   Open_Bracket  : constant Character := '[';
-   Close_Bracket : constant Character := ']';
-
-   type State_Index is new Natural;
-   type Column_Index is new Natural;
-
-   type Regexp_Array is array
-     (State_Index range <>, Column_Index range <>) of State_Index;
-   --  First index is for the state number. Second index is for the character
-   --  type. Contents is the new State.
-
-   type Regexp_Array_Access is access Regexp_Array;
-   --  Use this type through the functions Set below, so that it can grow
-   --  dynamically depending on the needs.
-
-   type Mapping is array (Character'Range) of Column_Index;
-   --  Mapping between characters and column in the Regexp_Array
-
-   type Boolean_Array is array (State_Index range <>) of Boolean;
-
-   type Regexp_Value
-     (Alphabet_Size : Column_Index;
-      Num_States    : State_Index) is
-   record
-      Map            : Mapping;
-      States         : Regexp_Array (1 .. Num_States, 0 .. Alphabet_Size);
-      Is_Final       : Boolean_Array (1 .. Num_States);
-      Case_Sensitive : Boolean;
-      State          : State_Index;
-   end record;
-   --  Deterministic finite-state machine
-
-   -----------------------
-   -- Local Subprograms --
-   -----------------------
-
-   procedure Set
-     (Table  : in out Regexp_Array_Access;
-      State  : State_Index;
-      Column : Column_Index;
-      Value  : State_Index);
-   --  Sets a value in the table. If the table is too small, reallocate it
-   --  dynamically so that (State, Column) is a valid index in it.
-
-   function Get
-     (Table  : Regexp_Array_Access;
-      State  : State_Index;
-      Column : Column_Index) return State_Index;
-   --  Returns the value in the table at (State, Column). If this index does
-   --  not exist in the table, returns zero.
-
-   procedure Free is new Ada.Unchecked_Deallocation
-     (Regexp_Array, Regexp_Array_Access);
-
-   overriding procedure Adjust (R : in out Regexp) is
-      Tmp : Regexp_Access;
-   begin
-      if R.R /= null then
-         Tmp := new Regexp_Value (Alphabet_Size => R.R.Alphabet_Size,
-                                  Num_States    => R.R.Num_States);
-         Tmp.all := R.R.all;
-         R.R := Tmp;
-      end if;
-   end Adjust;
-
-   procedure Clear (R : in out Regexp)
-   is begin
-      R.R.State := 1;
-   end Clear;
-
-   function Compile
-     (Pattern        : String;
-      Case_Sensitive : Boolean := True) return Regexp
-   is
-      S : String := Pattern;
-      --  The pattern which is really compiled (when the pattern is case
-      --  insensitive, we convert this string to lower-cases
-
-      Map : Mapping := (others => 0);
-      --  Mapping between characters and columns in the tables
-
-      Alphabet_Size : Column_Index := 0;
-      --  Number of significant characters in the regular expression.
-      --  This total does not include special operators, such as *, (, ...
-
-      procedure Check_Well_Formed_Pattern;
-      --  Check that the pattern to compile is well-formed, so that subsequent
-      --  code can rely on this without performing each time the checks to
-      --  avoid accessing the pattern outside its bounds. However, not all
-      --  well-formedness rules are checked. In particular, rules about special
-      --  characters not being treated as regular characters are not checked.
-
-      procedure Create_Mapping;
-      --  Creates a mapping between characters in the regexp and columns
-      --  in the tables representing the regexp. Test that the regexp is
-      --  well-formed Modifies Alphabet_Size and Map
-
-      procedure Create_Primary_Table
-        (Table       : out Regexp_Array_Access;
-         Num_States  : out State_Index;
-         Start_State : out State_Index;
-         End_State   : out State_Index);
-      --  Creates the first version of the regexp (this is a non deterministic
-      --  finite state machine, which is unadapted for a fast pattern
-      --  matching algorithm). We use a recursive algorithm to process the
-      --  parenthesis sub-expressions.
-      --
-      --  Table : at the end of the procedure : Column 0 is for any character
-      --  ('.') and the last columns are for no character (closure). Num_States
-      --  is set to the number of states in the table Start_State is the number
-      --  of the starting state in the regexp End_State is the number of the
-      --  final state when the regexp matches.
-
-      function Create_Secondary_Table
-        (First_Table : Regexp_Array_Access;
-         Start_State : State_Index;
-         End_State   : State_Index) return Regexp;
-      --  Creates the definitive table representing the regular expression
-      --  This is actually a transformation of the primary table First_Table,
-      --  where every state is grouped with the states in its 'no-character'
-      --  columns. The transitions between the new states are then recalculated
-      --  and if necessary some new states are created.
-      --
-      --  Note that the resulting finite-state machine is not optimized in
-      --  terms of the number of states : it would be more time-consuming to
-      --  add a third pass to reduce the number of states in the machine, with
-      --  no speed improvement...
-
-      procedure Raise_Exception (M : String; Index : Integer);
-      pragma No_Return (Raise_Exception);
-      --  Raise an exception, indicating an error at character Index in S
-
-      -------------------------------
-      -- Check_Well_Formed_Pattern --
-      -------------------------------
-
-      procedure Check_Well_Formed_Pattern is
-         J : Integer;
-
-         Past_Elmt : Boolean := False;
-         --  Set to True everywhere an elmt has been parsed,
-         --  meaning there can be now an occurrence of '*', '+' and '?'.
-
-         Past_Term : Boolean := False;
-         --  Set to True everywhere a term has been parsed,
-         --  meaning there can be now an occurrence of '|'.
-
-         Parenthesis_Level : Integer := 0;
-
-         Last_Open : Integer := S'First - 1;
-         --  The last occurrence of an opening parenthesis.
-
-         procedure Raise_Exception_If_No_More_Chars (K : Integer := 0);
-         --  If no more characters are raised, call Raise_Exception
-
-         --------------------------------------
-         -- Raise_Exception_If_No_More_Chars --
-         --------------------------------------
-
-         procedure Raise_Exception_If_No_More_Chars (K : Integer := 0) is
-         begin
-            if J + K > S'Last then
-               Raise_Exception ("Ill-formed pattern while parsing", J);
-            end if;
-         end Raise_Exception_If_No_More_Chars;
-
-      --  Start of processing for Check_Well_Formed_Pattern
-
-      begin
-         J := S'First;
-         while J <= S'Last loop
-            case S (J) is
-            when Open_Bracket =>
-               J := J + 1;
-               Raise_Exception_If_No_More_Chars;
-
-               if S (J) = '^' then
-                  J := J + 1;
-                  Raise_Exception_If_No_More_Chars;
-               end if;
-
-               --  The first character never has a special meaning
-
-               if S (J) = ']' or else S (J) = '-' then
-                  J := J + 1;
-                  Raise_Exception_If_No_More_Chars;
-               end if;
-
-               --  The set of characters cannot be empty
-
-               if S (J) = ']' then
-                  Raise_Exception
-                    ("Set of characters cannot be empty in regular "
-                       & "expression", J);
-               end if;
-
-               declare
-                  Possible_Range_Start : Boolean := True;
-                  --  Set True everywhere a range character '-' can occur
-
-               begin
-                  loop
-                     exit when S (J) = Close_Bracket;
-
-                     --  The current character should be followed by a
-                     --  closing bracket.
-
-                     Raise_Exception_If_No_More_Chars (1);
-
-                     if S (J) = '-'
-                       and then S (J + 1) /= Close_Bracket
-                     then
-                        if not Possible_Range_Start then
-                           Raise_Exception
-                             ("No mix of ranges is allowed in "
-                                & "regular expression", J);
-                        end if;
-
-                        J := J + 1;
-                        Raise_Exception_If_No_More_Chars;
-
-                        --  Range cannot be followed by '-' character,
-                        --  except as last character in the set.
-
-                        Possible_Range_Start := False;
-
-                     else
-                        Possible_Range_Start := True;
-                     end if;
-
-                     if S (J) = '\' then
-                        J := J + 1;
-                        Raise_Exception_If_No_More_Chars;
-                     end if;
-
-                     J := J + 1;
-                  end loop;
-               end;
-
-               --  A closing bracket can end an elmt or term
-
-               Past_Elmt := True;
-               Past_Term := True;
-
-            when Close_Bracket =>
-
-               --  A close bracket must follow a open_bracket, and cannot be
-               --  found alone on the line.
-
-               Raise_Exception
-                 ("Incorrect character ']' in regular expression", J);
-
-            when '\' =>
-               if J < S'Last then
-                  J := J + 1;
-
-                  --  Any character can be an elmt or a term
-
-                  Past_Elmt := True;
-                  Past_Term := True;
-
-               else
-                  --  \ not allowed at the end of the regexp
-
-                  Raise_Exception
-                    ("Incorrect character '\' in regular expression", J);
-               end if;
-
-            when Open_Paren =>
-               Parenthesis_Level := Parenthesis_Level + 1;
-               Last_Open := J;
-
-               --  An open parenthesis does not end an elmt or term
-
-               Past_Elmt := False;
-               Past_Term := False;
-
-            when Close_Paren =>
-               Parenthesis_Level := Parenthesis_Level - 1;
-
-               if Parenthesis_Level < 0 then
-                  Raise_Exception
-                    ("')' is not associated with '(' in regular "
-                       & "expression", J);
-               end if;
-
-               if J = Last_Open + 1 then
-                  Raise_Exception
-                    ("Empty parentheses not allowed in regular "
-                       & "expression", J);
-               end if;
-
-               if not Past_Term then
-                  Raise_Exception
-                    ("Closing parenthesis not allowed here in regular "
-                       & "expression", J);
-               end if;
-
-               --  A closing parenthesis can end an elmt or term
-
-               Past_Elmt := True;
-               Past_Term := True;
-
-            when '{' =>
-               --  Any character can be an elmt or a term
-
-               Past_Elmt := True;
-               Past_Term := True;
-
-               --  No need to check for ',' as the code always accepts them
-
-            when '}' =>
-               --  Any character can be an elmt or a term
-
-               Past_Elmt := True;
-               Past_Term := True;
-
-            when '*' | '?' | '+' =>
-               --  These operators must apply to an elmt sub-expression,
-               --  and cannot be found if one has not just been parsed.
-
-               if not Past_Elmt then
-                  Raise_Exception
-                    ("'*', '+' and '?' operators must be "
-                       & "applied to an element in regular expression", J);
-               end if;
-
-               Past_Elmt := False;
-               Past_Term := True;
-
-            when '|' =>
-               --  This operator must apply to a term sub-expression,
-               --  and cannot be found if one has not just been parsed.
-
-               if not Past_Term then
-                  Raise_Exception
-                    ("'|' operator must be "
-                       & "applied to a term in regular expression", J);
-               end if;
-
-               Past_Elmt := False;
-               Past_Term := False;
-
-            when others =>
-               --  Any character can be an elmt or a term
-
-               Past_Elmt := True;
-               Past_Term := True;
-            end case;
-
-            J := J + 1;
-         end loop;
-
-         --  A closing parenthesis must follow an open parenthesis
-
-         if Parenthesis_Level /= 0 then
-            Raise_Exception
-              ("'(' must always be associated with a ')'", J);
-         end if;
-      end Check_Well_Formed_Pattern;
-
-      --------------------
-      -- Create_Mapping --
-      --------------------
-
-      procedure Create_Mapping is
-
-         procedure Add_In_Map (C : Character);
-         --  Add a character in the mapping, if it is not already defined
-
-         ----------------
-         -- Add_In_Map --
-         ----------------
-
-         procedure Add_In_Map (C : Character) is
-         begin
-            if Map (C) = 0 then
-               Alphabet_Size := Alphabet_Size + 1;
-               Map (C) := Alphabet_Size;
-            end if;
-         end Add_In_Map;
-
-         J                 : Integer := S'First;
-         Parenthesis_Level : Integer := 0;
-         Last_Open         : Integer := S'First - 1;
-
-      --  Start of processing for Create_Mapping
-
-      begin
-         while J <= S'Last loop
-            case S (J) is
-            when Open_Bracket =>
-               J := J + 1;
-
-               if S (J) = '^' then
-                  J := J + 1;
-               end if;
-
-               if S (J) = ']' or else S (J) = '-' then
-                  J := J + 1;
-               end if;
-
-               --  The first character never has a special meaning
-
-               loop
-                  if J > S'Last then
-                     Raise_Exception
-                       ("Ran out of characters while parsing ", J);
-                  end if;
-
-                  exit when S (J) = Close_Bracket;
-
-                  if S (J) = '-'
-                    and then S (J + 1) /= Close_Bracket
-                  then
-                     declare
-                        Start : constant Integer := J - 1;
-
-                     begin
-                        J := J + 1;
-
-                        if S (J) = '\' then
-                           J := J + 1;
-                        end if;
-
-                        for Char in S (Start) .. S (J) loop
-                           Add_In_Map (Char);
-                        end loop;
-                     end;
-                  else
-                     if S (J) = '\' then
-                        J := J + 1;
-                     end if;
-
-                     Add_In_Map (S (J));
-                  end if;
-
-                  J := J + 1;
-               end loop;
-
-               --  A close bracket must follow a open_bracket and cannot be
-               --  found alone on the line
-
-            when Close_Bracket =>
-               Raise_Exception
-                 ("Incorrect character ']' in regular expression", J);
-
-            when '\' =>
-               if J < S'Last  then
-                  J := J + 1;
-                  Add_In_Map (S (J));
-
-               else
-                  --  Back slash \ not allowed at the end of the regexp
-
-                  Raise_Exception
-                    ("Incorrect character '\' in regular expression", J);
-               end if;
-
-            when Open_Paren =>
-               Parenthesis_Level := Parenthesis_Level + 1;
-               Last_Open := J;
-
-            when Close_Paren =>
-               Parenthesis_Level := Parenthesis_Level - 1;
-
-               if Parenthesis_Level < 0 then
-                  Raise_Exception
-                    ("')' is not associated with '(' in regular "
-                       & "expression", J);
-               end if;
-
-               if J = Last_Open + 1 then
-                  Raise_Exception
-                    ("Empty parenthesis not allowed in regular "
-                       & "expression", J);
-               end if;
-
-            when '*' | '?' =>
-               if J = S'First then
-                  Raise_Exception
-                    ("'*', '+', '?' and '|' operators cannot be in "
-                       & "first position in regular expression", J);
-               end if;
-
-            when '|' | '+' =>
-               if J = S'First then
-
-                  --  These operators must apply to a sub-expression,
-                  --  and cannot be found at the beginning of the line
-
-                  Raise_Exception
-                    ("'*', '+', '?' and '|' operators cannot be in "
-                       & "first position in regular expression", J);
-               end if;
-
-            when others =>
-               Add_In_Map (S (J));
-            end case;
-
-            J := J + 1;
-         end loop;
-
-         --  A closing parenthesis must follow an open parenthesis
-
-         if Parenthesis_Level /= 0 then
-            Raise_Exception
-              ("'(' must always be associated with a ')'", J);
-         end if;
-
-      end Create_Mapping;
-
-      --------------------------
-      -- Create_Primary_Table --
-      --------------------------
-
-      procedure Create_Primary_Table
-        (Table       : out Regexp_Array_Access;
-         Num_States  : out State_Index;
-         Start_State : out State_Index;
-         End_State   : out State_Index)
-      is
-         Empty_Char : constant Column_Index := Alphabet_Size + 1;
-
-         Current_State : State_Index := 0;
-         --  Index of the last created state
-
-         procedure Add_Empty_Char
-           (State    : State_Index;
-            To_State : State_Index);
-         --  Add a empty-character transition from State to To_State
-
-         procedure Create_Repetition
-           (Repetition : Character;
-            Start_Prev : State_Index;
-            End_Prev   : State_Index;
-            New_Start  : out State_Index;
-            New_End    : in out State_Index);
-         --  Create the table in case we have a '*', '+' or '?'.
-         --  Start_Prev .. End_Prev should indicate respectively the start and
-         --  end index of the previous expression, to which '*', '+' or '?' is
-         --  applied.
-
-         procedure Create_Simple
-           (Start_Index : Integer;
-            End_Index   : Integer;
-            Start_State : out State_Index;
-            End_State   : out State_Index);
-         --  Fill the table for the regexp Simple. This is the recursive
-         --  procedure called to handle () expressions If End_State = 0, then
-         --  the call to Create_Simple creates an independent regexp, not a
-         --  concatenation Start_Index .. End_Index is the starting index in
-         --  the string S.
-         --
-         --  Warning: it may look like we are creating too many empty-string
-         --  transitions, but they are needed to get the correct regexp.
-         --  The table is filled as follow ( s means start-state, e means
-         --  end-state) :
-         --
-         --  regexp   state_num | a b * empty_string
-         --  -------  ------------------------------
-         --    a          1 (s) | 2 - - -
-         --               2 (e) | - - - -
-         --
-         --    ab         1 (s) | 2 - - -
-         --               2     | - - - 3
-         --               3     | - 4 - -
-         --               4 (e) | - - - -
-         --
-         --    a|b        1     | 2 - - -
-         --               2     | - - - 6
-         --               3     | - 4 - -
-         --               4     | - - - 6
-         --               5 (s) | - - - 1,3
-         --               6 (e) | - - - -
-         --
-         --    a*         1     | 2 - - -
-         --               2     | - - - 4
-         --               3 (s) | - - - 1,4
-         --               4 (e) | - - - 3
-         --
-         --    (a)        1 (s) | 2 - - -
-         --               2 (e) | - - - -
-         --
-         --    a+         1     | 2 - - -
-         --               2     | - - - 4
-         --               3 (s) | - - - 1
-         --               4 (e) | - - - 3
-         --
-         --    a?         1     | 2 - - -
-         --               2     | - - - 4
-         --               3 (s) | - - - 1,4
-         --               4 (e) | - - - -
-         --
-         --    .          1 (s) | 2 2 2 -
-         --               2 (e) | - - - -
-
-         function Next_Sub_Expression
-           (Start_Index : Integer;
-            End_Index   : Integer) return Integer;
-         --  Returns the index of the last character of the next sub-expression
-         --  in Simple. Index cannot be greater than End_Index.
-
-         --------------------
-         -- Add_Empty_Char --
-         --------------------
-
-         procedure Add_Empty_Char
-           (State    : State_Index;
-            To_State : State_Index)
-         is
-            J : Column_Index := Empty_Char;
-
-         begin
-            while Get (Table, State, J) /= 0 loop
-               J := J + 1;
-            end loop;
-
-            Set (Table, State, J, To_State);
-         end Add_Empty_Char;
-
-         -----------------------
-         -- Create_Repetition --
-         -----------------------
-
-         procedure Create_Repetition
-           (Repetition : Character;
-            Start_Prev : State_Index;
-            End_Prev   : State_Index;
-            New_Start  : out State_Index;
-            New_End    : in out State_Index)
-         is
-         begin
-            New_Start := Current_State + 1;
-
-            if New_End /= 0 then
-               Add_Empty_Char (New_End, New_Start);
-            end if;
-
-            Current_State := Current_State + 2;
-            New_End   := Current_State;
-
-            Add_Empty_Char (End_Prev, New_End);
-            Add_Empty_Char (New_Start, Start_Prev);
-
-            if Repetition /= '+' then
-               Add_Empty_Char (New_Start, New_End);
-            end if;
-
-            if Repetition /= '?' then
-               Add_Empty_Char (New_End, New_Start);
-            end if;
-         end Create_Repetition;
-
-         -------------------
-         -- Create_Simple --
-         -------------------
-
-         procedure Create_Simple
-           (Start_Index : Integer;
-            End_Index   : Integer;
-            Start_State : out State_Index;
-            End_State   : out State_Index)
-         is
-            J          : Integer := Start_Index;
-            Last_Start : State_Index := 0;
-
-         begin
-            Start_State := 0;
-            End_State   := 0;
-            while J <= End_Index loop
-               case S (J) is
-                  when Open_Paren =>
-                     declare
-                        J_Start    : constant Integer := J + 1;
-                        Next_Start : State_Index;
-                        Next_End   : State_Index;
-
-                     begin
-                        J := Next_Sub_Expression (J, End_Index);
-                        Create_Simple (J_Start, J - 1, Next_Start, Next_End);
-
-                        if J < End_Index
-                          and then (S (J + 1) = '*' or else
-                                    S (J + 1) = '+' or else
-                                    S (J + 1) = '?')
-                        then
-                           J := J + 1;
-                           Create_Repetition
-                             (S (J),
-                              Next_Start,
-                              Next_End,
-                              Last_Start,
-                              End_State);
-
-                        else
-                           Last_Start := Next_Start;
-
-                           if End_State /= 0 then
-                              Add_Empty_Char (End_State, Last_Start);
-                           end if;
-
-                           End_State := Next_End;
-                        end if;
-                     end;
-
-                  when '|' =>
-                     declare
-                        Start_Prev : constant State_Index := Start_State;
-                        End_Prev   : constant State_Index := End_State;
-                        Start_J    : constant Integer     := J + 1;
-                        Start_Next : State_Index := 0;
-                        End_Next   : State_Index := 0;
-
-                     begin
-                        J := Next_Sub_Expression (J, End_Index);
-
-                        --  Create a new state for the start of the alternative
-
-                        Current_State := Current_State + 1;
-                        Last_Start := Current_State;
-                        Start_State := Last_Start;
-
-                        --  Create the tree for the second part of alternative
-
-                        Create_Simple (Start_J, J, Start_Next, End_Next);
-
-                        --  Create the end state
-
-                        Add_Empty_Char (Last_Start, Start_Next);
-                        Add_Empty_Char (Last_Start, Start_Prev);
-                        Current_State := Current_State + 1;
-                        End_State := Current_State;
-                        Add_Empty_Char (End_Prev, End_State);
-                        Add_Empty_Char (End_Next, End_State);
-                     end;
-
-                  when Open_Bracket =>
-                     Current_State := Current_State + 1;
-
-                     declare
-                        Next_State : State_Index := Current_State + 1;
-
-                     begin
-                        J := J + 1;
-
-                        if S (J) = '^' then
-                           J := J + 1;
-
-                           Next_State := 0;
-
-                           for Column in 0 .. Alphabet_Size loop
-                              Set (Table, Current_State, Column,
-                                   Value => Current_State + 1);
-                           end loop;
-                        end if;
-
-                        --  Automatically add the first character
-
-                        if S (J) = '-' or else S (J) = ']' then
-                           Set (Table, Current_State, Map (S (J)),
-                                Value => Next_State);
-                           J := J + 1;
-                        end if;
-
-                        --  Loop till closing bracket found
-
-                        loop
-                           exit when S (J) = Close_Bracket;
-
-                           if S (J) = '-'
-                             and then S (J + 1) /= ']'
-                           then
-                              declare
-                                 Start : constant Integer := J - 1;
-
-                              begin
-                                 J := J + 1;
-
-                                 if S (J) = '\' then
-                                    J := J + 1;
-                                 end if;
-
-                                 for Char in S (Start) .. S (J) loop
-                                    Set (Table, Current_State, Map (Char),
-                                         Value => Next_State);
-                                 end loop;
-                              end;
-
-                           else
-                              if S (J) = '\' then
-                                 J := J + 1;
-                              end if;
-
-                              Set (Table, Current_State, Map (S (J)),
-                                   Value => Next_State);
-                           end if;
-                           J := J + 1;
-                        end loop;
-                     end;
-
-                     Current_State := Current_State + 1;
-
-                     --  If the next symbol is a special symbol
-
-                     if J < End_Index
-                       and then (S (J + 1) = '*' or else
-                                 S (J + 1) = '+' or else
-                                 S (J + 1) = '?')
-                     then
-                        J := J + 1;
-                        Create_Repetition
-                          (S (J),
-                           Current_State - 1,
-                           Current_State,
-                           Last_Start,
-                           End_State);
-
-                     else
-                        Last_Start := Current_State - 1;
-
-                        if End_State /= 0 then
-                           Add_Empty_Char (End_State, Last_Start);
-                        end if;
-
-                        End_State := Current_State;
-                     end if;
-
-                  when '*' | '+' | '?' | Close_Paren | Close_Bracket =>
-                     Raise_Exception
-                       ("Incorrect character in regular expression :", J);
-
-                  when others =>
-                     Current_State := Current_State + 1;
-
-                     --  Create the state for the symbol S (J)
-
-                     if S (J) = '.' then
-                        for K in 0 .. Alphabet_Size loop
-                           Set (Table, Current_State, K,
-                                Value => Current_State + 1);
-                        end loop;
-
-                     else
-                        if S (J) = '\' then
-                           J := J + 1;
-                        end if;
-
-                        Set (Table, Current_State, Map (S (J)),
-                             Value => Current_State + 1);
-                     end if;
-
-                     Current_State := Current_State + 1;
-
-                     --  If the next symbol is a special symbol
-
-                     if J < End_Index
-                       and then (S (J + 1) = '*' or else
-                                 S (J + 1) = '+' or else
-                                 S (J + 1) = '?')
-                     then
-                        J := J + 1;
-                        Create_Repetition
-                          (S (J),
-                           Current_State - 1,
-                           Current_State,
-                           Last_Start,
-                           End_State);
-
-                     else
-                        Last_Start := Current_State - 1;
-
-                        if End_State /= 0 then
-                           Add_Empty_Char (End_State, Last_Start);
-                        end if;
-
-                        End_State := Current_State;
-                     end if;
-
-               end case;
-
-               if Start_State = 0 then
-                  Start_State := Last_Start;
-               end if;
-
-               J := J + 1;
-            end loop;
-         end Create_Simple;
-
-         -------------------------
-         -- Next_Sub_Expression --
-         -------------------------
-
-         function Next_Sub_Expression
-           (Start_Index : Integer;
-            End_Index   : Integer) return Integer
-         is
-            J              : Integer := Start_Index;
-            Start_On_Alter : Boolean := False;
-
-         begin
-            if S (J) = '|' then
-               Start_On_Alter := True;
-            end if;
-
-            loop
-               exit when J = End_Index;
-               J := J + 1;
-
-               case S (J) is
-                  when '\' =>
-                     J := J + 1;
-
-                  when Open_Bracket =>
-                     loop
-                        J := J + 1;
-                        exit when S (J) = Close_Bracket;
-
-                        if S (J) = '\' then
-                           J := J + 1;
-                        end if;
-                     end loop;
-
-                  when Open_Paren =>
-                     J := Next_Sub_Expression (J, End_Index);
-
-                  when Close_Paren =>
-                     return J;
-
-                  when '|' =>
-                     if Start_On_Alter then
-                        return J - 1;
-                     end if;
-
-                  when others =>
-                     null;
-               end case;
-            end loop;
-
-            return J;
-         end Next_Sub_Expression;
-
-      --  Start of Create_Primary_Table
-
-      begin
-         Table.all := (others => (others => 0));
-         Create_Simple (S'First, S'Last, Start_State, End_State);
-         Num_States := Current_State;
-      end Create_Primary_Table;
-
-      ----------------------------
-      -- Create_Secondary_Table --
-      ----------------------------
-
-      function Create_Secondary_Table
-        (First_Table : Regexp_Array_Access;
-         Start_State : State_Index;
-         End_State   : State_Index) return Regexp
-      is
-         Last_Index : constant State_Index := First_Table'Last (1);
-
-         type Meta_State is array (0 .. Last_Index) of Boolean;
-         pragma Pack (Meta_State);
-         --  Whether a state from first_table belongs to a metastate.
-
-         No_States : constant Meta_State := (others => False);
-
-         type Meta_States_Array is array (State_Index range <>) of Meta_State;
-         type Meta_States_List is access all Meta_States_Array;
-         procedure Unchecked_Free is new Ada.Unchecked_Deallocation
-            (Meta_States_Array, Meta_States_List);
-         Meta_States : Meta_States_List;
-         --  Components of meta-states. A given state might belong to
-         --  several meta-states.
-         --  This array grows dynamically.
-
-         type Char_To_State is array (0 .. Alphabet_Size) of State_Index;
-         type Meta_States_Transition_Arr is
-            array (State_Index range <>) of Char_To_State;
-         type Meta_States_Transition is access all Meta_States_Transition_Arr;
-         procedure Unchecked_Free is new Ada.Unchecked_Deallocation
-           (Meta_States_Transition_Arr, Meta_States_Transition);
-         Table : Meta_States_Transition;
-         --  Documents the transitions between each meta-state. The
-         --  first index is the meta-state, the second column is the
-         --  character seen in the input, the value is the new meta-state.
-
-         Temp_State_Not_Null : Boolean;
-
-         Current_State       : State_Index := 1;
-         --  The current meta-state we are creating
-
-         Nb_State            : State_Index := 1;
-         --  The total number of meta-states created so far.
-
-         procedure Closure
-           (Meta_State : State_Index;
-            State      : State_Index);
-         --  Compute the closure of the state (that is every other state which
-         --  has a empty-character transition) and add it to the state
-
-         procedure Ensure_Meta_State (Meta : State_Index);
-         --  grows the Meta_States array as needed to make sure that there
-         --  is enough space to store the new meta state.
-
-         -----------------------
-         -- Ensure_Meta_State --
-         -----------------------
-
-         procedure Ensure_Meta_State (Meta : State_Index) is
-            Tmp  : Meta_States_List       := Meta_States;
-            Tmp2 : Meta_States_Transition := Table;
-
-         begin
-            if Meta_States = null then
-               Meta_States := new Meta_States_Array
-                  (1 .. State_Index'Max (Last_Index, Meta) + 1);
-               Meta_States (Meta_States'Range) := (others => No_States);
-
-               Table := new Meta_States_Transition_Arr
-                  (1 .. State_Index'Max (Last_Index, Meta) + 1);
-               Table.all := (others => (others => 0));
-
-            elsif Meta > Meta_States'Last then
-               Meta_States := new Meta_States_Array
-                  (1 .. State_Index'Max (2 * Tmp'Last, Meta));
-               Meta_States (Tmp'Range) := Tmp.all;
-               Meta_States (Tmp'Last + 1 .. Meta_States'Last) :=
-                  (others => No_States);
-               Unchecked_Free (Tmp);
-
-               Table := new Meta_States_Transition_Arr
-                  (1 .. State_Index'Max (2 * Tmp2'Last, Meta) + 1);
-               Table (Tmp2'Range) := Tmp2.all;
-               Table (Tmp2'Last + 1 .. Table'Last) :=
-                  (others => (others => 0));
-               Unchecked_Free (Tmp2);
-            end if;
-         end Ensure_Meta_State;
-
-         -------------
-         -- Closure --
-         -------------
-
-         procedure Closure
-           (Meta_State : State_Index;
-            State      : State_Index)
-         is
-         begin
-            if not Meta_States (Meta_State)(State) then
-               Meta_States (Meta_State)(State) := True;
-
-               --  For each transition on empty-character
-
-               for Column in Alphabet_Size + 1 .. First_Table'Last (2) loop
-                  exit when First_Table (State, Column) = 0;
-                  Closure (Meta_State, First_Table (State, Column));
-               end loop;
-            end if;
-         end Closure;
-
-      --  Start of processing for Create_Secondary_Table
-
-      begin
-         --  Create a new state
-
-         Ensure_Meta_State (Current_State);
-         Closure (Current_State, Start_State);
-
-         while Current_State <= Nb_State loop
-
-            --  We will be trying, below, to create the next meta-state
-
-            Ensure_Meta_State (Nb_State + 1);
-
-            --  For every character in the regexp, calculate the possible
-            --  transitions from Current_State.
-
-            for Column in 0 .. Alphabet_Size loop
-               Temp_State_Not_Null := False;
-
-               for K in Meta_States (Current_State)'Range loop
-                  if Meta_States (Current_State)(K)
-                    and then First_Table (K, Column) /= 0
-                  then
-                     Closure (Nb_State + 1, First_Table (K, Column));
-                     Temp_State_Not_Null := True;
-                  end if;
-               end loop;
-
-               --  If at least one transition existed
-
-               if Temp_State_Not_Null then
-
-                  --  Check if this new state corresponds to an old one
-
-                  for K in 1 .. Nb_State loop
-                     if Meta_States (K) = Meta_States (Nb_State + 1) then
-                        Table (Current_State)(Column) := K;
-
-                        --  Reset data, for the next time we try that state
-
-                        Meta_States (Nb_State + 1) := No_States;
-                        exit;
-                     end if;
-                  end loop;
-
-                  --  If not, create a new state
-
-                  if Table (Current_State)(Column) = 0 then
-                     Nb_State := Nb_State + 1;
-                     Ensure_Meta_State (Nb_State + 1);
-                     Table (Current_State)(Column) := Nb_State;
-                  end if;
-               end if;
-            end loop;
-
-            Current_State := Current_State + 1;
-         end loop;
-
-         --  Returns the regexp
-
-         declare
-            R : Regexp_Access;
-
-         begin
-            R := new Regexp_Value (Alphabet_Size => Alphabet_Size,
-                                   Num_States    => Nb_State);
-            R.Map            := Map;
-            R.Case_Sensitive := Case_Sensitive;
-
-            for S in 1 .. Nb_State loop
-               R.Is_Final (S) := Meta_States (S)(End_State);
-            end loop;
-
-            for State in 1 .. Nb_State loop
-               for K in 0 .. Alphabet_Size loop
-                  R.States (State, K) := Table (State)(K);
-               end loop;
-            end loop;
-
-            Unchecked_Free (Meta_States);
-            Unchecked_Free (Table);
-
-            return (Ada.Finalization.Controlled with R => R);
-         end;
-      end Create_Secondary_Table;
-
-      ---------------------
-      -- Raise_Exception --
-      ---------------------
-
-      procedure Raise_Exception (M : String; Index : Integer) is
-      begin
-         raise Error_In_Regexp with M & " at offset" & Index'Img;
-      end Raise_Exception;
-
-   --  Start of processing for Compile
-
-   begin
-      if S = "" then
-         raise Error_In_Regexp with "empty string";
-      end if;
-
-      if not Case_Sensitive then
-         GNAT.Case_Util.To_Lower (S);
-      end if;
-
-      --  Check the pattern is well-formed before any treatment
-
-      Check_Well_Formed_Pattern;
-
-      Create_Mapping;
-
-      --  Creates the primary table
-
-      declare
-         Table       : Regexp_Array_Access;
-         Num_States  : State_Index;
-         Start_State : State_Index;
-         End_State   : State_Index;
-         R           : Regexp;
-
-      begin
-         Table := new Regexp_Array (1 .. Initial_Max_States_In_Primary_Table,
-                                    0 .. Alphabet_Size + 10);
-
-         Create_Primary_Table (Table, Num_States, Start_State, End_State);
-
-         --  Creates the secondary table
-
-         R := Create_Secondary_Table (Table, Start_State, End_State);
-         Free (Table);
-         return R;
-      end;
-   end Compile;
-
-   overriding procedure Finalize (R : in out Regexp) is
-      procedure Free is new
-        Ada.Unchecked_Deallocation (Regexp_Value, Regexp_Access);
-   begin
-      Free (R.R);
-   end Finalize;
-
-   function Get
-     (Table  : Regexp_Array_Access;
-      State  : State_Index;
-      Column : Column_Index) return State_Index
-   is
-   begin
-      if State <= Table'Last (1)
-        and then Column <= Table'Last (2)
-      then
-         return Table (State, Column);
-      else
-         return 0;
-      end if;
-   end Get;
-
-   -----------
-   -- Match --
-   -----------
-
-   function Match (R : in out Regexp; S : String; Next : Integer) return 
Match_State
-   is begin
-      if R.R = null then
-         raise Constraint_Error;
-      end if;
-
-      if R.R.State = 0 then
-         return Error;
-      end if;
-
-      if R.R.Case_Sensitive then
-         R.R.State := R.R.States (R.R.State, R.R.Map (S (Next)));
-      else
-         R.R.State :=
-           R.R.States (R.R.State,
-                       R.R.Map (GNAT.Case_Util.To_Lower (S (Next))));
-      end if;
-
-      if R.R.State = 0 then
-         return Error;
-      elsif R.R.Is_Final (R.R.State) then
-         return Final;
-      else
-         return Matching;
-      end if;
-   end Match;
-
-   procedure Set
-     (Table  : in out Regexp_Array_Access;
-      State  : State_Index;
-      Column : Column_Index;
-      Value  : State_Index)
-   is
-      New_Lines   : State_Index;
-      New_Columns : Column_Index;
-      New_Table   : Regexp_Array_Access;
-
-   begin
-      if State <= Table'Last (1)
-        and then Column <= Table'Last (2)
-      then
-         Table (State, Column) := Value;
-      else
-         --  Doubles the size of the table until it is big enough that
-         --  (State, Column) is a valid index.
-
-         New_Lines := Table'Last (1) * (State / Table'Last (1) + 1);
-         New_Columns := Table'Last (2) * (Column / Table'Last (2) + 1);
-         New_Table := new Regexp_Array (Table'First (1) .. New_Lines,
-                                        Table'First (2) .. New_Columns);
-         New_Table.all := (others => (others => 0));
-
-         for J in Table'Range (1) loop
-            for K in Table'Range (2) loop
-               New_Table (J, K) := Table (J, K);
-            end loop;
-         end loop;
-
-         Free (Table);
-         Table := New_Table;
-         Table (State, Column) := Value;
-      end if;
-   end Set;
-
-   function State (R : in Regexp) return Match_State
-   is begin
-      if R.R.State = 0 then
-         return Error;
-      elsif R.R.Is_Final (R.R.State) then
-         return Final;
-      else
-         return Matching;
-      end if;
-   end State;
-
-end WisiToken.Regexp;
---  Local Variables:
---  jit-lock-defer-time: 0.5
---  End:
diff --git a/wisitoken-regexp.ads b/wisitoken-regexp.ads
deleted file mode 100644
index b7cf9ba..0000000
--- a/wisitoken-regexp.ads
+++ /dev/null
@@ -1,139 +0,0 @@
---  Abstract:
---
---  Regular expressions, for WisiToken.Lexer.Regexp. It supports a
---  subset of the syntax of regular expressions copied from familiar
---  Unix style utilities.
---
---  Copied from GNAT System.Regexp, modified to expose the matcher
---  state machine to allow matching substrings.
---
---  Copyright (C) 2015 Stephen Leake
---  Copyright (C) 1998-2010, AdaCore
---
---  This file is part of the WisiToken package.
---
---  The WisiToken package 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. The WisiToken package 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.
---
---  As a special exception, if other files instantiate generics from
---  this unit, or you link this unit with other files to produce an
---  executable, this unit does not by itself cause the resulting
---  executable to be covered by the GNU General Public License. This
---  exception does not however invalidate any other reasons why the
---  executable file might be covered by the GNU Public License.
---
---  You should have received a copy of the
---  GNU General Public License and
---  a copy of the GCC Runtime Library Exception distributed with the WisiToken 
package;
---  see files GPL.txt and GPL_runtime.txt. If not, see
---  <http://www.gnu.org/licenses/>.
-
-pragma License (Modified_GPL);
-
-with Ada.Finalization;
-package WisiToken.Regexp is
-
-   --  The regular expression must first be compiled, using the Compile
-   --  function, which creates a finite state matching table, allowing
-   --  very fast matching.
-
-   --  The following is the form of a regular expression, expressed in Ada
-   --  reference manual style BNF
-
-   --     regexp ::= term
-
-   --     regexp ::= term | term          -- alternation (term or term ...)
-
-   --     term ::= item
-
-   --     term ::= item item ...          -- concatenation (item then item)
-
-   --     item ::= elmt                   -- match elmt
-   --     item ::= elmt *                 -- zero or more elmt's
-   --     item ::= elmt +                 -- one or more elmt's
-   --     item ::= elmt ?                 -- matches elmt or nothing
-
-   --     elmt ::= nchr                   -- matches given character
-   --     elmt ::= [nchr nchr ...]        -- matches any character listed
-   --     elmt ::= [^ nchr nchr ...]      -- matches any character not listed
-   --     elmt ::= [char - char]          -- matches chars in given range
-   --     elmt ::= .                      -- matches any single character
-   --     elmt ::= ( regexp )             -- parens used for grouping
-
-   --     char ::= any character, including special characters
-   --     nchr ::= any character except \()[].*+?^ or \char to match char
-   --     ... is used to indication repetition (one or more terms)
-
-   --  See also regexp(1) man page on Unix systems for further details
-
-   type Regexp is private;
-
-   Error_In_Regexp : exception;
-
-   function Compile
-     (Pattern        : String;
-      Case_Sensitive : Boolean := True)
-     return Regexp;
-   --  Compile a Pattern. If the syntax of the given
-   --  expression is invalid (does not match above grammar), Error_In_Regexp
-   --  is raised.
-   --
-   --  If Pattern is the empty string it will raise Error_In_Regexp
-   --
-   --  Raises Error_In_Regexp when an error is found in the regular
-   --  expression
-
-   procedure Clear (R : in out Regexp);
-   --  Clear R internal state, to prepare for a new Match.
-
-   type Match_State is (Matching, Final, Error);
-
-   function Match (R : in out Regexp; S : String; Next : Integer) return 
Match_State;
-   --  Compute match for S (Next), assuming Next is the next character
-   --  in S after the previous call to Match. If this is the first
-   --  call, Next must be S'First.
-   --
-   --  S'First, S'Last may change between calls to Match.
-   --
-   --  The return values mean:
-   --
-   --  Matching: S (S'First .. Next) matches R, but more characters
-   --  are needed to complete the match.
-   --
-   --  Final: S (S'First .. Next) matches R; more characters may also.
-   --
-   --  Error: S (S'First .. Next) does not match R.
-   --
-   --  Raises Constraint_Error if R is not a compiled regular
-   --  expression.
-
-   function State (R : in Regexp) return Match_State;
-   --  Return the current state of R; if Matching, it is useful to
-   --  call Match again.
-   --
-   --  After Clear (R), State (R) returns Matching.
-
-private
-   type Regexp_Value;
-
-   type Regexp_Access is access Regexp_Value;
-
-   type Regexp is new Ada.Finalization.Controlled with record
-      R : Regexp_Access := null;
-   end record;
-
-   pragma Finalize_Storage_Only (Regexp);
-
-   overriding procedure Finalize (R : in out Regexp);
-   --  Free the memory occupied by R
-
-   overriding procedure Adjust (R : in out Regexp);
-   --  Deep copy R.R.all
-
-end WisiToken.Regexp;
diff --git a/wisitoken-semantic_checks.adb b/wisitoken-semantic_checks.adb
index af83b7f..e90fb59 100644
--- a/wisitoken-semantic_checks.adb
+++ b/wisitoken-semantic_checks.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-semantic_checks.ads b/wisitoken-semantic_checks.ads
index 49811d6..5fb5807 100644
--- a/wisitoken-semantic_checks.ads
+++ b/wisitoken-semantic_checks.ads
@@ -2,7 +2,7 @@
 --
 --  Grammar semantic check routines.
 --
---  Copyright (C) 2017, 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-syntax_trees.adb b/wisitoken-syntax_trees.adb
index 249065f..fa6602c 100644
--- a/wisitoken-syntax_trees.adb
+++ b/wisitoken-syntax_trees.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-syntax_trees.ads b/wisitoken-syntax_trees.ads
index dc04946..b9cf380 100644
--- a/wisitoken-syntax_trees.ads
+++ b/wisitoken-syntax_trees.ads
@@ -7,12 +7,12 @@
 --  We provide Base_Tree and Tree in one package, because only Tree
 --  needs an API; the only way Base_Tree is accessed is via Tree.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 
 --  There is one syntax tree for each parser. There is one shared
 --  Terminals array, matching the actual input text.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-text_io_trace.adb b/wisitoken-text_io_trace.adb
index 1329cff..daa9f4c 100644
--- a/wisitoken-text_io_trace.adb
+++ b/wisitoken-text_io_trace.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-text_io_trace.ads b/wisitoken-text_io_trace.ads
index 6deaf51..ad421dd 100644
--- a/wisitoken-text_io_trace.ads
+++ b/wisitoken-text_io_trace.ads
@@ -2,7 +2,7 @@
 --
 --  Trace output to Ada.Text_IO
 --
---  Copyright (C) 2017 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2017 Free Software Foundation, Inc.
 --
 --  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
diff --git a/wisitoken-user_guide.info b/wisitoken-user_guide.info
new file mode 100644
index 0000000..4d2bb1d
--- /dev/null
+++ b/wisitoken-user_guide.info
@@ -0,0 +1,556 @@
+This is wisitoken-user_guide.info, produced by makeinfo version 6.3 from
+wisitoken-user_guide.texinfo.
+
+Copyright (C) 2014-2015, 2017, 2018 Stephen Leake.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.3 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and no
+     Back-Cover Texts.  A copy of the license is included in the section
+     entitled "GNU Free Documentation License".
+INFO-DIR-SECTION Parser generators
+START-INFO-DIR-ENTRY
+* wisitoken-bnf-generate: (wisitoken-bnf-generate).         Ada and Elisp 
parser generator
+END-INFO-DIR-ENTRY
+
+
+File: wisitoken-user_guide.info,  Node: Top,  Next: Overview,  Up: (dir)
+
+WisiToken User Guide
+********************
+
+Copyright (C) 2014-2015, 2017, 2018 Stephen Leake.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.3 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and no
+     Back-Cover Texts.  A copy of the license is included in the section
+     entitled "GNU Free Documentation License".
+
+* Menu:
+
+* Overview::
+* Common grammar problems::
+* Grammar File Syntax::
+
+
+File: wisitoken-user_guide.info,  Node: Overview,  Next: Common grammar 
problems,  Prev: Top,  Up: Top
+
+1 Overview
+**********
+
+WisiToken is a parser and parser generator toolkit, supporting
+generalized LR (both LALR and LR1) and packrat parsers.  The grammar can
+be expressed as either Ada source code statements, or in an EBNF file.
+The parser generator generates either Ada or elisp source (the elisp
+source assumes the Emacs wisi Gnu ELPA package).
+
+   At one point, "wisi" was short for "Wisent Indentation engine"; the
+Emacs 'wisi' package implements an indentation engine that used to be
+based on the Emacs wisent parser.  However, that parser has now been
+replaced by a generalized LALR parser with error recovery, so "wisi" is
+just a name.
+
+* Menu:
+
+* Install::
+
+
+File: wisitoken-user_guide.info,  Node: Install,  Up: Overview
+
+1.1 Install
+===========
+
+WisiToken is available as source code only.
+
+   To use the Ada runtime, you will also need to install a lexer
+generator.  WisiToken supports re2c, and other lexers can be added.
+
+   re2c is available from <http://re2c.org/>.  WisiToken uses the
+environment variable RE2C_HOME to locate re2c.
+
+
+File: wisitoken-user_guide.info,  Node: Common grammar problems,  Next: 
Grammar File Syntax,  Prev: Overview,  Up: Top
+
+2 Common grammar problems
+*************************
+
+LALR grammars are tricky.  Here we describe some common problems people
+run into.
+
+* Menu:
+
+* Empty choice in list::
+
+
+File: wisitoken-user_guide.info,  Node: Empty choice in list,  Up: Common 
grammar problems
+
+2.1 Empty choice in list
+========================
+
+Many programming languages have lists in the grammar.  For example, Ada
+has lists of declarations:
+
+     package_body
+       : PACKAGE name IS declaration_list BEGIN statement_list END SEMICOLON
+       ;
+
+     declaration_list
+       : declaration
+       | declaration_list declaration
+       ;
+
+     declaration
+       : object_declaration
+       | subprogram_declaration
+       ;; ...
+       ;
+
+   Note that the above grammar fragment does not allow an empty
+declaration_list.  But Ada does, so the question is how can we add that
+to the grammar.
+
+   There are four choices:
+
+  1. Add an empty declaration choice to declaration_list:
+
+          declaration_list
+            : ;; empty list
+            | declaration
+            | declaration_list declaration
+            ;
+     This is now redundant; since declaration_list can be empty, the
+     second choice is not needed:
+          declaration_list
+            : ;; empty list
+            | declaration_list declaration
+            ;
+
+  2. Add an empty declaration choice to declaration:
+
+          declaration
+            : ;; empty declaration
+            | object_declaration
+            | subprogram_declaration
+            ;; ...
+            ;
+
+  3. Add another rule with the empty production:
+
+          package_body
+            : PACKAGE name IS declarative_part BEGIN statement_list END 
SEMICOLON
+            ;
+
+          declarative_part
+            : ;; empty
+            | declaration_list
+            ;
+
+          declaration_list
+            : declaration
+            | declaration_list declaration
+            ;
+
+          declaration
+            : object_declaration
+            | subprogram_declaration
+            ;; ...
+            ;
+
+  4. Add another choice in package_body that leaves out
+     declaration_list:
+          package_body
+            : PACKAGE name IS declaration_list BEGIN statement_list END 
SEMICOLON
+            | PACKAGE name IS BEGIN statement_list END SEMICOLON
+            ;
+
+   Choice 1 is redundant, giving parse errors at parse time.  Consider
+the following statements, where "<empty>" is used to indicate an empty
+declaration:
+
+   1) package One is <empty> begin end ; 2) package One is package One
+is <empty> begin end ; begin end ; 3) package One is <empty> package One
+is <empty declaration> begin end ; begin end ;
+
+   In parsing 3), the second 'package' causes a shift/reduce conflict;
+shift to start the nested declaration (as in 2), reduce to the empty
+declaration.  Both are correct according to the grammar.
+
+   Choice 2 leads to a shift/reduce conflict in the production for
+package_body; implementing the wisi parser as a generalized LALR parser
+allows it to handle this option.
+
+   Choice 2 is the preferred choice for Ada, since it involves the least
+modifications to the original Ada grammar in the Ada reference manual.
+
+
+File: wisitoken-user_guide.info,  Node: Grammar File Syntax,  Prev: Common 
grammar problems,  Up: Top
+
+3 Grammar File Syntax
+*********************
+
+The grammar file syntax is based on Gnu bison syntax with some additions
+and deletions (*note Bison: (bison)Top.).
+
+   (The grammar is specified in the WisiToken grammar file
+'wisitoken_grammar.wy').
+
+   The top level file structure is a list of declarations and
+nonterminals.
+
+   Comments are started by ";;" and terminated by end of line.
+
+* Menu:
+
+* Declarations::
+* Nonterminals::
+* Conditional code::
+
+
+File: wisitoken-user_guide.info,  Node: Declarations,  Next: Nonterminals,  
Up: Grammar File Syntax
+
+3.1 Declarations
+================
+
+The Declarations sections declares terminal tokens, conflicts, and other
+parser parameters.
+
+* Menu:
+
+* Raw Code::
+* Keywords::
+* Tokens::
+* Error recovery::
+* Other declarations::
+
+
+File: wisitoken-user_guide.info,  Node: Raw Code,  Next: Keywords,  Up: 
Declarations
+
+3.1.1 Raw code
+--------------
+
+%code { actions | copyright_license } [spec | body | context | pre | post]... 
%{ <output language code> }%
+
+   Raw code declarations contain arbitrary code, copied verbatim into
+the output.
+
+   For Elisp output, the generator adds the necessary 'require' forms
+for the elisp lexer, parser, and wisi actions; you only need to add add
+additional code if you use other actions.
+
+   For Ada output, the keywords following '%code' determine where the
+section is output.
+
+
+File: wisitoken-user_guide.info,  Node: Keywords,  Next: Tokens,  Prev: Raw 
Code,  Up: Declarations
+
+3.1.2 Keywords
+--------------
+
+%keyword <name> <string>
+
+example:
+%keyword SEMICOLON ";"
+
+   "Keywords" are reserved words or symbols in the target language; the
+lexers recognize them by the given string.
+
+
+File: wisitoken-user_guide.info,  Node: Tokens,  Next: Error recovery,  Prev: 
Keywords,  Up: Declarations
+
+3.1.3 Tokens
+------------
+
+%token < kind > name regexp
+
+example:
+%token <symbol> IDENTIFIER
+%token <punctuation> TICK "'"
+
+   The meaning of 'kind' is determined by the lexer and parser runtime.
+The syntax of the regular expression is determined by the lexer
+generator.
+
+   In the Emacs wisi lexer, the token kinds are recognized by Emacs
+syntax properties:
+
+'<punctuation>'
+     %token <punctuation> TICK "'"
+     A string of characters that have punctuation syntax, and match the
+     token string.
+
+'<symbol>'
+     %token <symbol> IDENTIFIER
+     A string of characters that have word syntax, that match no other
+     token.
+
+'<string-double>'
+     %token <string-double> STRING_LITERAL
+     A string of characters that have string syntax, with double quote
+     delimiters.
+
+'<string-single>'
+     %token <string-single> CHARACTER_LITERAL
+     A string of characters that have string syntax, with single quote
+     delimiters.
+
+'<number>'
+     %token <number> NUMERIC_LITERAL ada-wisi-number-p ada-wisi
+     A string of characters that have word syntax, recognized by the
+     function given in the third parameter.  The fourth parameter is the
+     source file for the recognizer (included via 'require').
+
+'<whitespace>'
+     %token <whitespace> WHITESPACE [ \t\n]
+     Not used by the wisi lexer; required by the Ada lexer.
+
+'<comment>'
+     %token <line_comment> COMMENT "--"[^\n]*[\n]
+     Not used by the wisi lexer; required by the Ada lexer.  The third
+     argument is the regular expression to recognize the entire comment.
+
+
+File: wisitoken-user_guide.info,  Node: Error recovery,  Next: Other 
declarations,  Prev: Tokens,  Up: Declarations
+
+3.1.4 Error recovery
+--------------------
+
+The parser can use error recovery algorithms when it encounters syntax
+errors; if a solution is found, the parse continues.
+
+   Error recovery uses multiple tasks to take advantage of multiple CPU
+cores.  Unfortunately, this means there is a race condition; the
+solutions found can be delivered in different orders on different runs.
+This matters because each solution results in a successful parse,
+possibly with different actions (different indentation computed, for
+example).  Which solution finally succeeds depends on which are
+terminated due to identical parser stacks, which in turn depends on the
+order they were delivered.  See
+'ada-mode/tests/ada_mode-interactive_2.adb' for an example.
+
+   Once the syntax errors are fixed, only the ambiguities in the grammar
+itself can cause a similar problem.
+
+   Several declarations set parameters for the error recovery.  If none
+of these parameters are present in the grammar file, the generated
+parser does not do error recovery.
+
+'%mckenzie_check_limit <limit>'
+     The number of tokens past the error point that must be parsed
+     successfully for a solution to be deemed successful.  Smaller
+     values give faster recovery; larger values give better solutions.
+     Too large a value risks encountering another user error, making a
+     solution impossible.  3 or 4 works well in practice.
+
+'mckenzie_check_delta_limit <limit>'
+     When error recovery is entered with multiple parsers active, once a
+     solution has been found for one parser, the other parsers are
+     allowed to check only 'mckenzie_check_delta_limit' possible
+     solutions before they fail.  This prevents long recovery times.
+
+'%mckenzie_cost_default <insert> <delete> <push back> <ignore check fail>'
+     McKenzie error recovery default costs for insert, delete, push back
+     single tokens, and for ignoring a semantic check failure; four
+     floating point numbers.
+
+     "Push back" means undo parsing; remove tokens from the parse stack
+     and put them back into the input stream.  This moves the
+     insert/delete point, allowing better solutions.
+
+     If not specified, costs are zero.  Costs can be negative; they all
+     add linearly.
+
+'%mckenzie_cost_delete <token> <cost>'
+     McKenzie error recovery delete cost for a specific token.
+
+'%mckenzie_cost_insert <token> <cost>'
+     McKenzie error recovery insert cost for a specific token.
+
+'%mckenzie_cost_limit <integer>'
+     McKenzie error recovery limit on cost of solutions; default max
+     integer.
+
+'%mckenzie_cost_push_back <token> <cost>'
+     McKenzie error recovery push back cost for a specific token.
+
+'%mckenzie_enqueue_limit <integer>'
+     McKenzie error recovery limit on possible solutions enqueued (to be
+     checked); default max integer.
+
+     The error recovery algorithm generates possible solutions based on
+     the grammar preceding the error point, by inserting, deleting, or
+     pushing back tokens.  Each possible solution is given a cost, and
+     enqueued to be checked later.  Solutions are checked in cost order
+     (lowest first).
+
+
+File: wisitoken-user_guide.info,  Node: Other declarations,  Prev: Error 
recovery,  Up: Declarations
+
+3.1.5 Other declarations
+------------------------
+
+'%case_insensitive'
+     If present, keywords are case insensitive in the lexer.
+
+'%conflict <conflict description>'
+     Declare a known conflict.
+
+     Example conflict declaration:
+     %conflict REDUCE/REDUCE in state abstract_limited_opt, 
abstract_limited_synchronized_opt on token NEW
+
+     The conflict description is output by 'wisitoken-bnf-generate' when
+     an undeclared conflict is detected.  If the user decides to not fix
+     the conflict, the description can be copied into the grammar source
+     file, so it will be ignored next time around.
+
+     Resolving conflicts in the grammar can be difficult, but leaving
+     them in can increase parse time and cause ambiguous parses.
+
+'%elisp_face <name>'
+     Declare a name for an elisp face constant.
+
+     When generating Ada code for Emacs, the elisp faces applied by
+     'wisi-face-apply' actions must be declared, so the elisp and Ada
+     code aggree on what they mean.
+
+'%elisp_indent <name>'
+     Declare a name for an elisp indent variable.
+
+     When generating Ada code for Emacs, the elisp indent variables used
+     in 'wisi-indent' actions must be declared, so the elisp and Ada
+     code aggree on what they mean.
+
+'embedded_quote_escape_doubled'
+     If present, quote characters embedded in strings are escaped by
+     doubling (as in Ada); otherwise they are escaped by preceding with
+     backslash (as in C). Default is backslash.
+
+'end_names_optional_option <name>'
+     When generating Ada code for Emacs, the name of the Ada variable
+     determining whether end block names are optional.
+
+     In the Ada language, block names can be repeated at the end; for
+     example:
+
+     Get_Inputs :
+     loop
+     ...
+     end loop Get_Inputs;
+
+     These names are optional in the Ada standard.  Making them required
+     improves error recovery; the recovery algorithm can use matching
+     names to isolate the error.
+
+'generate <generate_algorithm> <output_language> [text_rep |'
+     elisp | re2c | process | module]
+
+     '<generate_algorithm>' is one of 'LALR | LR1 | Packrat_Gen |
+     Packrat_Proc | External'
+
+     '<output_language>' is one of 'Ada | Ada_Emacs | elisp'
+
+     Declare one output source set.  Multiple sets can be declared; they
+     are all generated together.
+
+     'elisp | re2c' determine the lexer used by the generated code.
+
+     'process | module' determine the style of code generated by
+     'Ada_Emacs'; an external process executable, or an Emacs loadable
+     module.
+
+     'text_rep' determines how the parse table is represented; if
+     present, it is in a text file that is loaded at parser run time.
+     If absent, it is in the code.  For very large parse tables, such as
+     for an LR1 parser for a large language like Ada, the text
+     representation may be needed, because the Ada compiler can't handle
+     the very large number of statements that represent the parser table
+     in the code.  The text file can take a long time to read at parser
+     startup (a few seconds for the Ada language).
+
+'%no_language_runtime'
+     When generating Ada code for Emacs, '%no_language_runtime' causes
+     the generated code to not include the runtime.  Some grammars may
+     need no runtime, particularly if they are small grammars intendend
+     to test some generator feature.
+
+'%no_enum'
+     By default, the generated Ada code includes an enumeration type
+     declaring each token.  This makes the language-specific runtime
+     easier to write (without this type, tokens are identified by
+     integers).
+
+     '%no_enum' causes the generated code to not include the token
+     enumeration type.
+
+'%start'
+     The start token for the grammar.
+
+'regexp_name <name>'
+     Declare a named regular expression.  The name may then occur in
+     another regular expression.
+
+     The re2c lexer supports this usage; other lexers may not.
+
+
+File: wisitoken-user_guide.info,  Node: Nonterminals,  Next: Conditional code, 
 Prev: Declarations,  Up: Grammar File Syntax
+
+3.2 Nonterminals
+================
+
+The nonterminals section declares the nonterminal tokens, and the
+associated production rules and actions.
+
+   The syntax of nonterminals is:
+
+{nonterminal} : {token} ... [ %( action code )% [| {token} ... [ %(
+action code )% ] ]... ;
+
+   Each nonterminal gives the expansion of a nonterminal token into a
+list of tokens (both terminal and nonterminal); optional productions are
+separated by "|".  Each list of tokens is followed by an "action", which
+is output-language code (enclosed in '%( )%'), that will be executed
+when the production is reduced.
+
+
+File: wisitoken-user_guide.info,  Node: Conditional code,  Prev: Nonterminals, 
 Up: Grammar File Syntax
+
+3.3 Conditional code
+====================
+
+The elisp and elisp lexers support different regular expression syntax,
+so it is sometimes necessary to include or exclude some declarations and
+portions of rules based on the lexer.
+
+   In addition, LALR parsers can have more conflicts than LR1 parsers.
+
+   Therefore the EBNF supports '%if ... %end if':
+%if {lexer | parser} = {<lexer> | <generate_algorithm>}
+...
+%end if
+
+   The lines between '%if' and '%end if' are ignored if the current
+lexer or parser is not the one specified in the '%if' condition.
+
+   '%if ... %end if' cannot be nested.
+
+
+
+Tag Table:
+Node: Top721
+Node: Overview1366
+Node: Install2139
+Node: Common grammar problems2523
+Node: Empty choice in list2816
+Node: Grammar File Syntax5798
+Node: Declarations6355
+Node: Raw Code6675
+Node: Keywords7260
+Node: Tokens7569
+Node: Error recovery9217
+Node: Other declarations12453
+Node: Nonterminals16476
+Node: Conditional code17193
+
+End Tag Table
diff --git a/wisitoken-wisi_ada.adb b/wisitoken-wisi_ada.adb
index ba0285d..4a098c8 100644
--- a/wisitoken-wisi_ada.adb
+++ b/wisitoken-wisi_ada.adb
@@ -2,8 +2,7 @@
 --
 --  see spec
 --
---  Copyright (C) 2013, 2014, 2015, 2017, 2018 Stephe Leake
---  Copyright (C) 1999 Ted Dennison
+--  Copyright (C) 2013, 2014, 2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken-wisi_ada.ads b/wisitoken-wisi_ada.ads
index 0678d06..a78643f 100644
--- a/wisitoken-wisi_ada.ads
+++ b/wisitoken-wisi_ada.ads
@@ -2,8 +2,7 @@
 --
 --  Type and operations for building a grammar directly in Ada source.
 --
---  Copyright (C) 2003, 2013 - 2015, 2017, 2018 Stephe Leake
---  Copyright (C) 1999 Ted Dennison
+--  Copyright (C) 2003, 2013 - 2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken.adb b/wisitoken.adb
index 3553e4a..ce72d3f 100644
--- a/wisitoken.adb
+++ b/wisitoken.adb
@@ -1,6 +1,8 @@
--------------------------------------------------------------------------------
+--  Abstract:
+--
+--  See spec
 --
---  Copyright (C) 2009, 2014-2015, 2017, 2018 Stephe Leake
+--  Copyright (C) 2009, 2014-2015, 2017, 2018 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken.ads b/wisitoken.ads
index 734ff4a..81fc519 100644
--- a/wisitoken.ads
+++ b/wisitoken.ads
@@ -16,8 +16,7 @@
 --  Sethi, and Ullman (aka: "The [Red] Dragon Book" due to the dragon
 --  on the cover).
 --
---  Copyright (C) 2009, 2010, 2013 - 2015, 2017, 2018 Stephe Leake
---  Copyright (C) 1999 FlightSafety International and Ted Dennison
+--  Copyright (C) 2009, 2010, 2013 - 2015, 2017, 2018 Free Software 
Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
diff --git a/wisitoken.gpr b/wisitoken.gpr
index 82b23de..2b0064d 100644
--- a/wisitoken.gpr
+++ b/wisitoken.gpr
@@ -1,5 +1,21 @@
---  For the wisi ELPA package; provide WisiToken to other ELPA packages
---  SAL sources are also in the wisi package.
+--  Abstract :
+--
+--  Provide SAL and WisiToken to other ELPA packages
+--
+--  Copyright (C) 2018 Free Software Foundation, Inc.
+--
+--  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 "gnatcoll";
 with "standard_common";
 project WisiToken is
diff --git a/wisitoken_grammar_runtime.adb b/wisitoken_grammar_runtime.adb
index 905b7a5..412ffef 100644
--- a/wisitoken_grammar_runtime.adb
+++ b/wisitoken_grammar_runtime.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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
@@ -444,18 +444,12 @@ package body WisiToken_Grammar_Runtime is
                     ((Name  => +Get_Child_Text (Data, Tree, Tokens (3), 1, 
Strip_Quotes => True),
                       Value => +Get_Child_Text (Data, Tree, Tokens (3), 2)));
 
-               elsif Kind = "regexp_name" then
-                  Data.User_Names.Regexps.Append
-                    ((Name  => +Get_Child_Text (Data, Tree, Tokens (3), 1),
-                      Value => +Get_Child_Text (Data, Tree, Tokens (3), 2)));
-
                elsif Kind = "embedded_quote_escape_doubled" then
                   Data.Language_Params.Embedded_Quote_Escape_Doubled := True;
 
                elsif Kind = "end_names_optional_option" then
                   Data.Language_Params.End_Names_Optional_Option := +Get_Text 
(Data, Tree, Tokens (3));
 
-
                elsif Kind = "generate" then
                   declare
                      Children : constant Syntax_Trees.Valid_Node_Index_Array 
:= Tree.Get_Terminals (Tokens (3));
@@ -557,7 +551,7 @@ package body WisiToken_Grammar_Runtime is
                   Data.Language_Params.Start_Token := +Get_Text (Data, Tree, 
Tokens (3));
 
                elsif Kind = "re2c_regexp" then
-                  Data.Tokens.Regexps.Append
+                  Data.Tokens.re2c_Regexps.Append
                     ((+Get_Child_Text (Data, Tree, Tokens (3), 1),
                       +Get_Child_Text (Data, Tree, Tokens (3), 2)));
 
diff --git a/wisitoken_grammar_runtime.ads b/wisitoken_grammar_runtime.ads
index 1e87241..62aaf9a 100644
--- a/wisitoken_grammar_runtime.ads
+++ b/wisitoken_grammar_runtime.ads
@@ -2,7 +2,7 @@
 --
 --  Runtime utils for wisi_grammar.wy actions.
 --
---  Copyright (C) 2018 Stephen Leake All Rights Reserved.
+--  Copyright (C) 2018 Free Software Foundation, Inc.
 --
 --  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



reply via email to

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