[sablecc] 01/08: Imported Upstream version 3.2

Mathieu Trudel cyphermox-guest at moszumanska.debian.org
Wed Feb 3 14:35:25 UTC 2016


This is an automated email from the git hooks/post-receive script.

cyphermox-guest pushed a commit to branch master
in repository sablecc.

commit 4b54e97826e1a412772a957279abe5e84f632850
Author: Mathieu Trudel-Lapierre <mathieu.tl at gmail.com>
Date:   Wed Feb 3 09:21:52 2016 -0500

    Imported Upstream version 3.2
---
 AUTHORS                                            |    7 +
 COPYING-LESSER                                     |  504 ++
 ChangeLog                                          | 5350 +++++++++++
 LICENSE                                            |   23 +
 README.html                                        |  208 +
 THANKS                                             |   18 +
 bin/sablecc                                        |   11 +
 bin/sablecc.bat                                    |   10 +
 build.xml                                          |  484 +
 doc/description.html                               |  400 +
 doc/test.sablecc3                                  |  187 +
 etc/manifest                                       |    2 +
 lib/sablecc.jar                                    |  Bin 0 -> 300893 bytes
 sablecc-3x.sablecc3                                |  497 ++
 sablecc-anttask-1.0.1.tar.gz                       |  Bin 0 -> 15985 bytes
 src/org/sablecc/sablecc/AUTHORS                    |    7 +
 src/org/sablecc/sablecc/AcceptStates.java          |   59 +
 src/org/sablecc/sablecc/AddAstProductions.java     |  107 +
 ...ddEventualEmptyTransformationToProductions.java |   81 +
 .../sablecc/AddProdTransformAndAltTransform.java   |  144 +
 src/org/sablecc/sablecc/AltTransformAdapter.java   |  143 +
 .../sablecc/sablecc/AlternativeElementTypes.java   |   68 +
 src/org/sablecc/sablecc/BooleanCast.java           |   23 +
 src/org/sablecc/sablecc/COPYING-LESSER             |  504 ++
 src/org/sablecc/sablecc/Cast.java                  |   13 +
 src/org/sablecc/sablecc/CharSet.java               |  226 +
 src/org/sablecc/sablecc/ComputeCGNomenclature.java |  329 +
 src/org/sablecc/sablecc/ComputeInlining.java       |  176 +
 .../sablecc/sablecc/ComputeSimpleTermPosition.java |  107 +
 src/org/sablecc/sablecc/ConflictException.java     |   27 +
 src/org/sablecc/sablecc/ConstructNFA.java          |  417 +
 .../sablecc/ConstructParserGenerationDatas.java    |   86 +
 src/org/sablecc/sablecc/ConstructProdsMap.java     |   27 +
 src/org/sablecc/sablecc/DFA.java                   |  403 +
 src/org/sablecc/sablecc/DisplayLicense.java        |   68 +
 src/org/sablecc/sablecc/GenAlts.java               |  420 +
 src/org/sablecc/sablecc/GenAnalyses.java           |  439 +
 src/org/sablecc/sablecc/GenLexer.java              |  360 +
 src/org/sablecc/sablecc/GenParser.java             |  891 ++
 src/org/sablecc/sablecc/GenProds.java              |  125 +
 src/org/sablecc/sablecc/GenTokens.java             |  201 +
 src/org/sablecc/sablecc/GenUtils.java              |  252 +
 .../sablecc/GenerateAlternativeCodeForParser.java  |  604 ++
 src/org/sablecc/sablecc/Grammar.java               |  687 ++
 src/org/sablecc/sablecc/In_Production.java         |  173 +
 src/org/sablecc/sablecc/Inlining.java              |  527 ++
 src/org/sablecc/sablecc/IntSet.java                |  389 +
 src/org/sablecc/sablecc/IntegerCast.java           |   23 +
 src/org/sablecc/sablecc/IntegerComparator.java     |   23 +
 .../sablecc/InternalTransformationsToGrammar.java  |  649 ++
 src/org/sablecc/sablecc/LICENSE                    |   23 +
 src/org/sablecc/sablecc/LR0Collection.java         |  147 +
 src/org/sablecc/sablecc/LR0Item.java               |   98 +
 src/org/sablecc/sablecc/LR0ItemAndSetPair.java     |   23 +
 src/org/sablecc/sablecc/LR0ItemSet.java            |  180 +
 src/org/sablecc/sablecc/LR1Collection.java         |  183 +
 src/org/sablecc/sablecc/LR1Item.java               |   99 +
 src/org/sablecc/sablecc/LR1ItemSet.java            |  233 +
 src/org/sablecc/sablecc/ListCast.java              |   23 +
 src/org/sablecc/sablecc/MacroExpander.java         |  111 +
 src/org/sablecc/sablecc/NFA.java                   |  355 +
 src/org/sablecc/sablecc/NoCast.java                |   21 +
 src/org/sablecc/sablecc/NodeCast.java              |   24 +
 src/org/sablecc/sablecc/PrettyPrinter.java         |  300 +
 src/org/sablecc/sablecc/Production.java            |  157 +
 .../sablecc/RecursiveProductionsDetections.java    |   70 +
 src/org/sablecc/sablecc/ResolveAltIds.java         |  162 +
 src/org/sablecc/sablecc/ResolveAstIds.java         |  349 +
 src/org/sablecc/sablecc/ResolveIds.java            |  672 ++
 .../sablecc/sablecc/ResolveProdTransformIds.java   |  357 +
 src/org/sablecc/sablecc/ResolveTransformIds.java   | 1094 +++
 src/org/sablecc/sablecc/SableCC.java               |  288 +
 src/org/sablecc/sablecc/StringCast.java            |   23 +
 src/org/sablecc/sablecc/StringComparator.java      |   23 +
 src/org/sablecc/sablecc/Symbol.java                |  151 +
 src/org/sablecc/sablecc/SymbolSet.java             |  207 +
 src/org/sablecc/sablecc/Transitions.java           |   84 +
 src/org/sablecc/sablecc/TypedHashMap.java          |  175 +
 src/org/sablecc/sablecc/TypedLinkedList.java       |  121 +
 src/org/sablecc/sablecc/TypedTreeMap.java          |  251 +
 src/org/sablecc/sablecc/Version.java               |    6 +
 src/org/sablecc/sablecc/alternatives.txt           |  273 +
 src/org/sablecc/sablecc/analyses.txt               |  287 +
 src/org/sablecc/sablecc/analysis/Analysis.java     |  102 +
 .../sablecc/sablecc/analysis/AnalysisAdapter.java  |  503 ++
 .../sablecc/analysis/DepthFirstAdapter.java        | 1130 +++
 .../analysis/ReversedDepthFirstAdapter.java        | 1129 +++
 src/org/sablecc/sablecc/lexer.txt                  |  423 +
 src/org/sablecc/sablecc/lexer/Lexer.java           | 1151 +++
 src/org/sablecc/sablecc/lexer/LexerException.java  |   11 +
 src/org/sablecc/sablecc/lexer/lexer.dat            |  Bin 0 -> 7508 bytes
 src/org/sablecc/sablecc/node/AAlt.java             |  189 +
 src/org/sablecc/sablecc/node/AAltTransform.java    |  189 +
 src/org/sablecc/sablecc/node/AAst.java             |  103 +
 src/org/sablecc/sablecc/node/AAstAlt.java          |  146 +
 src/org/sablecc/sablecc/node/AAstProd.java         |  146 +
 src/org/sablecc/sablecc/node/ACharBasic.java       |   82 +
 src/org/sablecc/sablecc/node/ACharChar.java        |   82 +
 src/org/sablecc/sablecc/node/AConcat.java          |  103 +
 src/org/sablecc/sablecc/node/ADecChar.java         |   82 +
 src/org/sablecc/sablecc/node/AElem.java            |  211 +
 src/org/sablecc/sablecc/node/AGrammar.java         |  361 +
 src/org/sablecc/sablecc/node/AHelperDef.java       |  125 +
 src/org/sablecc/sablecc/node/AHelpers.java         |  103 +
 src/org/sablecc/sablecc/node/AHexChar.java         |   82 +
 src/org/sablecc/sablecc/node/AIdBasic.java         |   82 +
 src/org/sablecc/sablecc/node/AIgnTokens.java       |  103 +
 src/org/sablecc/sablecc/node/AIntervalSet.java     |  125 +
 src/org/sablecc/sablecc/node/AListTerm.java        |  146 +
 src/org/sablecc/sablecc/node/AMinusBinOp.java      |   33 +
 src/org/sablecc/sablecc/node/ANewListTerm.java     |  189 +
 src/org/sablecc/sablecc/node/ANewTerm.java         |  189 +
 src/org/sablecc/sablecc/node/ANullTerm.java        |   33 +
 src/org/sablecc/sablecc/node/AOperationSet.java    |  168 +
 src/org/sablecc/sablecc/node/APlusBinOp.java       |   33 +
 src/org/sablecc/sablecc/node/APlusUnOp.java        |   82 +
 src/org/sablecc/sablecc/node/AProd.java            |  253 +
 src/org/sablecc/sablecc/node/AProdName.java        |  125 +
 .../sablecc/sablecc/node/AProductionSpecifier.java |   33 +
 src/org/sablecc/sablecc/node/AProductions.java     |  103 +
 src/org/sablecc/sablecc/node/AQMarkUnOp.java       |   82 +
 src/org/sablecc/sablecc/node/ARegExp.java          |  103 +
 src/org/sablecc/sablecc/node/ARegExpBasic.java     |   82 +
 src/org/sablecc/sablecc/node/ASetBasic.java        |   82 +
 src/org/sablecc/sablecc/node/ASimpleListTerm.java  |  168 +
 src/org/sablecc/sablecc/node/ASimpleTerm.java      |  168 +
 src/org/sablecc/sablecc/node/AStarUnOp.java        |   82 +
 src/org/sablecc/sablecc/node/AStateList.java       |  189 +
 src/org/sablecc/sablecc/node/AStateListTail.java   |  125 +
 src/org/sablecc/sablecc/node/AStates.java          |  103 +
 src/org/sablecc/sablecc/node/AStringBasic.java     |   82 +
 src/org/sablecc/sablecc/node/ATokenDef.java        |  254 +
 src/org/sablecc/sablecc/node/ATokenSpecifier.java  |   33 +
 src/org/sablecc/sablecc/node/ATokens.java          |  103 +
 src/org/sablecc/sablecc/node/ATransition.java      |   82 +
 src/org/sablecc/sablecc/node/AUnExp.java           |  125 +
 src/org/sablecc/sablecc/node/Cast.java             |    8 +
 src/org/sablecc/sablecc/node/EOF.java              |   30 +
 src/org/sablecc/sablecc/node/NoCast.java           |   16 +
 src/org/sablecc/sablecc/node/Node.java             |   78 +
 src/org/sablecc/sablecc/node/NodeCast.java         |   16 +
 src/org/sablecc/sablecc/node/PAlt.java             |    6 +
 src/org/sablecc/sablecc/node/PAltTransform.java    |    6 +
 src/org/sablecc/sablecc/node/PAst.java             |    6 +
 src/org/sablecc/sablecc/node/PAstAlt.java          |    6 +
 src/org/sablecc/sablecc/node/PAstProd.java         |    6 +
 src/org/sablecc/sablecc/node/PBasic.java           |    6 +
 src/org/sablecc/sablecc/node/PBinOp.java           |    6 +
 src/org/sablecc/sablecc/node/PChar.java            |    6 +
 src/org/sablecc/sablecc/node/PConcat.java          |    6 +
 src/org/sablecc/sablecc/node/PElem.java            |    6 +
 src/org/sablecc/sablecc/node/PGrammar.java         |    6 +
 src/org/sablecc/sablecc/node/PHelperDef.java       |    6 +
 src/org/sablecc/sablecc/node/PHelpers.java         |    6 +
 src/org/sablecc/sablecc/node/PIgnTokens.java       |    6 +
 src/org/sablecc/sablecc/node/PListTerm.java        |    6 +
 src/org/sablecc/sablecc/node/PProd.java            |    6 +
 src/org/sablecc/sablecc/node/PProdName.java        |    6 +
 src/org/sablecc/sablecc/node/PProductions.java     |    6 +
 src/org/sablecc/sablecc/node/PRegExp.java          |    6 +
 src/org/sablecc/sablecc/node/PSet.java             |    6 +
 src/org/sablecc/sablecc/node/PSpecifier.java       |    6 +
 src/org/sablecc/sablecc/node/PStateList.java       |    6 +
 src/org/sablecc/sablecc/node/PStateListTail.java   |    6 +
 src/org/sablecc/sablecc/node/PStates.java          |    6 +
 src/org/sablecc/sablecc/node/PTerm.java            |    6 +
 src/org/sablecc/sablecc/node/PTokenDef.java        |    6 +
 src/org/sablecc/sablecc/node/PTokens.java          |    6 +
 src/org/sablecc/sablecc/node/PTransition.java      |    6 +
 src/org/sablecc/sablecc/node/PUnExp.java           |    6 +
 src/org/sablecc/sablecc/node/PUnOp.java            |    6 +
 src/org/sablecc/sablecc/node/Start.java            |  121 +
 src/org/sablecc/sablecc/node/Switch.java           |    6 +
 src/org/sablecc/sablecc/node/Switchable.java       |    8 +
 src/org/sablecc/sablecc/node/TAbstract.java        |   35 +
 src/org/sablecc/sablecc/node/TArrow.java           |   35 +
 src/org/sablecc/sablecc/node/TBar.java             |   35 +
 src/org/sablecc/sablecc/node/TBlank.java           |   30 +
 src/org/sablecc/sablecc/node/TChar.java            |   30 +
 src/org/sablecc/sablecc/node/TColon.java           |   35 +
 src/org/sablecc/sablecc/node/TComma.java           |   35 +
 src/org/sablecc/sablecc/node/TComment.java         |   30 +
 src/org/sablecc/sablecc/node/TDDot.java            |   35 +
 src/org/sablecc/sablecc/node/TDecChar.java         |   30 +
 src/org/sablecc/sablecc/node/TDot.java             |   35 +
 src/org/sablecc/sablecc/node/TEqual.java           |   35 +
 src/org/sablecc/sablecc/node/THelpers.java         |   35 +
 src/org/sablecc/sablecc/node/THexChar.java         |   30 +
 src/org/sablecc/sablecc/node/TId.java              |   30 +
 src/org/sablecc/sablecc/node/TIgnored.java         |   35 +
 src/org/sablecc/sablecc/node/TLBkt.java            |   35 +
 src/org/sablecc/sablecc/node/TLBrace.java          |   35 +
 src/org/sablecc/sablecc/node/TLPar.java            |   35 +
 src/org/sablecc/sablecc/node/TMinus.java           |   35 +
 src/org/sablecc/sablecc/node/TNew.java             |   35 +
 src/org/sablecc/sablecc/node/TNull.java            |   35 +
 src/org/sablecc/sablecc/node/TPackage.java         |   35 +
 src/org/sablecc/sablecc/node/TPkgId.java           |   30 +
 src/org/sablecc/sablecc/node/TPlus.java            |   35 +
 .../sablecc/sablecc/node/TProductionSpecifier.java |   35 +
 src/org/sablecc/sablecc/node/TProductions.java     |   35 +
 src/org/sablecc/sablecc/node/TQMark.java           |   35 +
 src/org/sablecc/sablecc/node/TRBkt.java            |   35 +
 src/org/sablecc/sablecc/node/TRBrace.java          |   35 +
 src/org/sablecc/sablecc/node/TRPar.java            |   35 +
 src/org/sablecc/sablecc/node/TSemicolon.java       |   35 +
 src/org/sablecc/sablecc/node/TSlash.java           |   35 +
 src/org/sablecc/sablecc/node/TStar.java            |   35 +
 src/org/sablecc/sablecc/node/TStates.java          |   35 +
 src/org/sablecc/sablecc/node/TString.java          |   30 +
 src/org/sablecc/sablecc/node/TSyntax.java          |   35 +
 src/org/sablecc/sablecc/node/TTokenSpecifier.java  |   35 +
 src/org/sablecc/sablecc/node/TTokens.java          |   35 +
 src/org/sablecc/sablecc/node/TTree.java            |   35 +
 src/org/sablecc/sablecc/node/Token.java            |   51 +
 src/org/sablecc/sablecc/node/TypedLinkedList.java  |  149 +
 src/org/sablecc/sablecc/parser.txt                 |  556 ++
 src/org/sablecc/sablecc/parser/Parser.java         | 9277 ++++++++++++++++++++
 .../sablecc/sablecc/parser/ParserException.java    |   21 +
 src/org/sablecc/sablecc/parser/State.java          |   17 +
 src/org/sablecc/sablecc/parser/TokenIndex.java     |  206 +
 src/org/sablecc/sablecc/parser/parser.dat          |  Bin 0 -> 20128 bytes
 src/org/sablecc/sablecc/productions.txt            |   18 +
 src/org/sablecc/sablecc/tokens.txt                 |   91 +
 src/org/sablecc/sablecc/utils.txt                  |  346 +
 225 files changed, 45617 insertions(+)

diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..37505d3
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,7 @@
+This file contains the name of all copyright holders.
+
+Etienne M. Gagnon <etienne.gagnon at uqam.ca>
+Ben Menking <bmenking at bigfoot.com>
+Mariusz Nowostawski <mariusz at marni.otago.ac.nz>
+Komivi Kevin Agbakpem <agbakpem.komivi at courrier.uqam.ca>
+Kis Gergely <kisg at inf.bme.hu>
diff --git a/COPYING-LESSER b/COPYING-LESSER
new file mode 100644
index 0000000..223ede7
--- /dev/null
+++ b/COPYING-LESSER
@@ -0,0 +1,504 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+

+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+

+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+

+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+

+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+

+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+

+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+

+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+

+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+

+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..6faa1ab
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,5350 @@
+------------------------------------------------------------------------
+r4738 | egagnon | 2005-12-24 13:35:29 -0500 (Sat, 24 Dec 2005) | 2 lines
+Changed paths:
+   A /sablecc/tags/sablecc-3.2 (from /sablecc/trunk:4737)
+
+* Tagged sablecc-3.2.
+
+------------------------------------------------------------------------
+r4737 | egagnon | 2005-12-24 12:19:36 -0500 (Sat, 24 Dec 2005) | 2 lines
+Changed paths:
+   M /sablecc/trunk/README.html
+   M /sablecc/trunk/build.xml
+   M /sablecc/trunk/src/org/sablecc/sablecc/Version.java
+
+* Updated version to 3.2.
+
+------------------------------------------------------------------------
+r4736 | egagnon | 2005-12-24 12:18:08 -0500 (Sat, 24 Dec 2005) | 3 lines
+Changed paths:
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenAlts.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenUtils.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/alternatives.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/analyses.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/lexer.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/productions.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/tokens.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/utils.txt
+
+* Generated generic code taking advantage of improved Java type
+  system.
+
+------------------------------------------------------------------------
+r4570 | egagnon | 2005-09-29 13:23:23 -0400 (Thu, 29 Sep 2005) | 6 lines
+Changed paths:
+   M /sablecc/trunk/README.html
+   M /sablecc/trunk/build.xml
+   M /sablecc/trunk/src/org/sablecc/sablecc/ComputeInlining.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenParser.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Inlining.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/SableCC.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Version.java
+
+* Updated version to 3.1.
+* Added a command-line option to control the maximum number of
+  alternatives in inlined productions.  Defaults to 20.
+* Fixed usage message to show all command-line options.
+* Fixed programming bug.  Fixes BUG:157.
+
+------------------------------------------------------------------------
+r4545 | egagnon | 2005-09-27 20:30:45 -0400 (Tue, 27 Sep 2005) | 9 lines
+Changed paths:
+   M /sablecc/trunk
+   M /sablecc/trunk/AUTHORS
+   M /sablecc/trunk/README.html
+   M /sablecc/trunk/README.html.in
+   M /sablecc/trunk/bin/sablecc
+   M /sablecc/trunk/bin/sablecc.bat
+   M /sablecc/trunk/build.xml
+   A /sablecc/trunk/doc (from /developers/egagnon/sandbox/sablecc-trunk/doc:4544)
+   M /sablecc/trunk/doc/description.html
+   M /sablecc/trunk/doc/test.sablecc3
+   D /sablecc/trunk/sablecc-2x.sablecc2
+   A /sablecc/trunk/sablecc-3x.sablecc3 (from /developers/egagnon/sandbox/sablecc-trunk/sablecc-3x.sablecc3:4544)
+   M /sablecc/trunk/src/org/sablecc/sablecc
+   A /sablecc/trunk/src/org/sablecc/sablecc/AddAstProductions.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/AddAstProductions.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/AddEventualEmptyTransformationToProductions.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/AddEventualEmptyTransformationToProductions.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/AddProdTransformAndAltTransform.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/AddProdTransformAndAltTransform.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/AltTransformAdapter.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/AltTransformAdapter.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/AlternativeElementTypes.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/AlternativeElementTypes.java:4544)
+   M /sablecc/trunk/src/org/sablecc/sablecc/BooleanCast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Cast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/CharSet.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/ComputeCGNomenclature.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/ComputeCGNomenclature.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/ComputeInlining.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/ComputeInlining.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/ComputeSimpleTermPosition.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/ComputeSimpleTermPosition.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/ConflictException.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/ConflictException.java:4544)
+   M /sablecc/trunk/src/org/sablecc/sablecc/ConstructNFA.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/ConstructParserGenerationDatas.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/ConstructParserGenerationDatas.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/ConstructProdsMap.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/ConstructProdsMap.java:4544)
+   M /sablecc/trunk/src/org/sablecc/sablecc/DFA.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/DisplayLicense.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenAlts.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenAnalyses.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenLexer.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenParser.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenProds.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenTokens.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenUtils.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java:4544)
+   M /sablecc/trunk/src/org/sablecc/sablecc/Grammar.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/In_Production.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/In_Production.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/Inlining.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/Inlining.java:4544)
+   M /sablecc/trunk/src/org/sablecc/sablecc/IntSet.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/IntegerCast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/IntegerComparator.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/InternalTransformationsToGrammar.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/InternalTransformationsToGrammar.java:4544)
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR0Collection.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR0Item.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR0ItemAndSetPair.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR0ItemSet.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR1Collection.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR1Item.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR1ItemSet.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/ListCast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/MacroExpander.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/NFA.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/NodeCast.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/PrettyPrinter.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/PrettyPrinter.java:4544)
+   M /sablecc/trunk/src/org/sablecc/sablecc/Production.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/RecursiveProductionsDetections.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/RecursiveProductionsDetections.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/ResolveAltIds.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/ResolveAltIds.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/ResolveAstIds.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/ResolveAstIds.java:4544)
+   M /sablecc/trunk/src/org/sablecc/sablecc/ResolveIds.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/ResolveProdTransformIds.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/ResolveProdTransformIds.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/ResolveTransformIds.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/ResolveTransformIds.java:4544)
+   M /sablecc/trunk/src/org/sablecc/sablecc/SableCC.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/StringCast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/StringComparator.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/Switch.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/Switchable.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Symbol.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/SymbolSet.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Transitions.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/TypedHashMap.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/TypedTreeMap.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Version.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/alternatives.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/analyses.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/analysis
+   M /sablecc/trunk/src/org/sablecc/sablecc/analysis/Analysis.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/analysis/AnalysisAdapter.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/analysis/DepthFirstAdapter.java
+   R /sablecc/trunk/src/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java:4544)
+   M /sablecc/trunk/src/org/sablecc/sablecc/lexer
+   M /sablecc/trunk/src/org/sablecc/sablecc/lexer/Lexer.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/lexer/lexer.dat
+   M /sablecc/trunk/src/org/sablecc/sablecc/lexer.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/node
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AAlt.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/AAlt.java:4544)
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AAltName.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AAltTransform.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/AAltTransform.java:4544)
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AAlts.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AAltsTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AAst.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/AAst.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AAstAlt.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/AAstAlt.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AAstProd.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/AAstProd.java:4544)
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AConcat.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AElem.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AElemName.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AGrammar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AHelperDef.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AHelpers.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AIdList.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AIdListTail.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AIgnTokens.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AIgnoredAlt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AIntervalSet.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AListTerm.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/AListTerm.java:4544)
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/ALookAhead.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AMinusBinOp.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ANewListTerm.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/ANewListTerm.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ANewTerm.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/ANewTerm.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ANullTerm.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/ANullTerm.java:4544)
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AOperationSet.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/APackage.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AParsedAlt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/APkgName.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/APkgNameTail.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/APlusBinOp.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AProd.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AProdName.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/AProdName.java:4544)
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AProductionSpecifier.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AProductions.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/ARegExp.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/ARegExpBasic.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/ARegExpTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ASimpleListTerm.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/ASimpleListTerm.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ASimpleTerm.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/ASimpleTerm.java:4544)
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AStateList.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AStateListTail.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AStates.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/ATokenDef.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/ATokenSpecifier.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/ATokens.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/ATransition.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PAltName.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PAltTransform.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/PAltTransform.java:4544)
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PAlts.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PAltsTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PAst.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/PAst.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PAstAlt.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/PAstAlt.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PAstProd.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/PAstProd.java:4544)
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PElemName.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PIdList.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PIdListTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PListTerm.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/PListTerm.java:4544)
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PLookAhead.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PPackage.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PPkgName.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PPkgNameTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PProdName.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/PProdName.java:4544)
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PRegExpTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PTerm.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/PTerm.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/TAbstract.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/TAbstract.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/TNew.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/TNew.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/TNull.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/TNull.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/TSyntax.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/TSyntax.java:4544)
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/TTree.java (from /developers/egagnon/sandbox/sablecc-trunk/src/org/sablecc/sablecc/node/TTree.java:4544)
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TypedLinkedList.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X1PAltsTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X1PElem.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X1PHelperDef.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X1PIdListTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X1PPkgNameTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X1PProd.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X1PRegExpTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X1PStateListTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X1PTokenDef.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X1PUnExp.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X2PAltsTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X2PElem.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X2PHelperDef.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X2PIdListTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X2PPkgNameTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X2PProd.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X2PRegExpTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X2PStateListTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X2PTokenDef.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/X2PUnExp.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/XPAltsTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/XPElem.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/XPHelperDef.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/XPIdListTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/XPPkgNameTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/XPProd.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/XPRegExpTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/XPStateListTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/XPTokenDef.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/XPUnExp.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser/Parser.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser/State.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser/TokenIndex.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser/parser.dat
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/productions.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/tokens.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/utils.txt
+
+* Merged: svn merge -r4541:4544 /developers/egagnon/sandbox/sablecc-trunk
+* Updated version to 3.0.
+* Added CST->AST grammar-specified transformations.
+* Added automatic conflict resolution through transparent inlining.
+  (This is enabled by default.  To disable, use --no-inline.)
+* Added the new SableCC 3 grammar in sablecc-3x.sablecc3.
+* Added example grammar in doc/test.sablecc3.
+* Added some preliminary documentation in doc/description.html.
+
+------------------------------------------------------------------------
+r1413 | egagnon | 2004-01-18 19:53:05 -0500 (Sun, 18 Jan 2004) | 3 lines
+Changed paths:
+   D /sablecc/trunk/ChangeLog
+   D /sablecc/trunk/ChangeLog.header
+   D /sablecc/trunk/ChangeLog.tail
+   D /sablecc/trunk/ChangeLog.usermap
+   M /sablecc/trunk/build.xml
+
+* Changed build.xml to generate ChangeLog on-the-fly from the
+  subversion repository log.
+
+------------------------------------------------------------------------
+r1412 | egagnon | 2004-01-18 19:32:49 -0500 (Sun, 18 Jan 2004) | 3 lines
+Changed paths:
+   M /sablecc/trunk/README.html
+   M /sablecc/trunk/build.xml
+   M /sablecc/trunk/src/org/sablecc/sablecc/Version.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/lexer/Lexer.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/lexer/lexer.dat
+
+* Self regenerated.
+* Increase version to 2.18.2.
+
+------------------------------------------------------------------------
+r1409 | egagnon | 2004-01-18 18:06:05 -0500 (Sun, 18 Jan 2004) | 3 lines
+Changed paths:
+   M /sablecc/trunk/sablecc-2x.sablecc2
+
+* Added 'eof = 4' to input grammar to fix a problem on some platform.
+* Allowed short comments on last line of grammar files.
+
+------------------------------------------------------------------------
+r162 | egagnon | 2003-05-22 10:53:00 -0400 (Thu, 22 May 2003) | 21 lines
+Changed paths:
+   M /sablecc/trunk/AUTHORS
+   M /sablecc/trunk/ChangeLog
+   M /sablecc/trunk/README.html
+   M /sablecc/trunk/build.xml
+   M /sablecc/trunk/src/org/sablecc/sablecc/TypedHashMap.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/TypedTreeMap.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Version.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TypedLinkedList.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/utils.txt
+
+2003-05-22 14:52  Etienne M. Gagnon <etienne.gagnon at uqam.ca>
+
+	* README.html, build.xml, src/org/sablecc/sablecc/Version.java:
+	
+	Increase version number.
+
+2003-03-28 16:06  Etienne M. Gagnon <etienne.gagnon at uqam.ca>
+
+	* src/org/sablecc/sablecc/: TypedHashMap.java, TypedTreeMap.java,
+	node/TypedLinkedList.java:
+	
+	Indent code.
+
+2003-03-28 15:28  Etienne M. Gagnon <etienne.gagnon at uqam.ca>
+
+	* AUTHORS, src/org/sablecc/sablecc/TypedHashMap.java,
+	src/org/sablecc/sablecc/TypedTreeMap.java,
+	src/org/sablecc/sablecc/utils.txt:
+	
+	Applied a patch by Kis Gergely to fix a bug in typed collections.
+
+------------------------------------------------------------------------
+r157 | egagnon | 2003-03-20 00:47:00 -0500 (Thu, 20 Mar 2003) | 298 lines
+Changed paths:
+   M /sablecc/trunk/AUTHORS
+   M /sablecc/trunk/ChangeLog
+   D /sablecc/trunk/ChangeLog.old
+   A /sablecc/trunk/ChangeLog.tail (from /sablecc/trunk/ChangeLog.old:156)
+   M /sablecc/trunk/ChangeLog.usermap
+   M /sablecc/trunk/LICENSE
+   M /sablecc/trunk/README.html
+   M /sablecc/trunk/build.xml
+   A /sablecc/trunk/genchangelog
+   A /sablecc/trunk/sablecc-2x.sablecc2
+   M /sablecc/trunk/src/org/sablecc/sablecc/AcceptStates.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/BooleanCast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Cast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/CharSet.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/ConstructNFA.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/DFA.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/DisplayLicense.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenAlts.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenAnalyses.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenLexer.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenParser.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenProds.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenTokens.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenUtils.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Grammar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/IntSet.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/IntegerCast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/IntegerComparator.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR0Collection.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR0Item.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR0ItemAndSetPair.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR0ItemSet.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR1Collection.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR1Item.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR1ItemSet.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/ListCast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/MacroExpander.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/NFA.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/NoCast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/NodeCast.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/NodeComparator.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Production.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/ResolveIds.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/SableCC.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/StringCast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/StringComparator.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Switch.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Switchable.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Symbol.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/SymbolSet.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Transitions.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/TypedHashMap.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/TypedLinkedList.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/TypedTreeMap.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Version.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/analysis/Analysis.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/analysis/AnalysisAdapter.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/analysis/DepthFirstAdapter.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/lexer/Lexer.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/lexer/LexerException.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/lexer/lexer.dat
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AAltName.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AAlts.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AAltsTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ACharBasic.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ACharChar.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AConcat.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ADecChar.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AElem.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AElemName.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AGrammar.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AHelperDef.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AHelpers.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AHexChar.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AIdBasic.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AIdList.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AIdListTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AIgnTokens.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AIgnoredAlt.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AIntervalSet.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ALookAhead.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AMinusBinOp.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AOperationSet.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/APackage.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AParsedAlt.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/APkgName.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/APkgNameTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/APlusBinOp.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/APlusUnOp.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AProd.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AProductionSpecifier.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AProductions.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AQMarkUnOp.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ARegExp.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ARegExpBasic.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ARegExpTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ASetBasic.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AStarUnOp.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AStateList.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AStateListTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AStates.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AStringBasic.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ATokenDef.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ATokenSpecifier.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ATokens.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/ATransition.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/AUnExp.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Alt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Alt1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Alt2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AltName.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AltName1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AltNameOpt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AltNameOpt1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AltNameOpt2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Alts.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Alts1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AltsTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AltsTail1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AltsTails.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AltsTails1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/AltsTails2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Basic.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Basic1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Basic2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Basic3.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Basic4.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Basic5.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/BinOp.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/BinOp1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/BinOp2.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/Cast.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Concat.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Concat1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/EOF.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Elem.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Elem1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/ElemName.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/ElemName1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/ElemNameOpt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/ElemNameOpt1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/ElemNameOpt2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Elems.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Elems1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Elems2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Grammar.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Grammar1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/HelperDef.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/HelperDef1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/HelperDefs.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/HelperDefs1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/HelperDefs2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Helpers.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Helpers1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/HelpersOpt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/HelpersOpt1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/HelpersOpt2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/IdList.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/IdList1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/IdListOpt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/IdListOpt1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/IdListTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/IdListTail1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/IdListTails.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/IdListTails1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/IdListTails2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/IgnTokens.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/IgnTokens1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/IgnTokensOpt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/IgnTokensOpt1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/IgnTokensOpt2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/LookAhead.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/LookAhead1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/LookAheadOpt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/LookAheadOpt1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/LookAheadOpt2.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/NoCast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Node.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/NodeCast.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PAlt.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PAltName.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PAlts.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PAltsTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PBasic.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PBinOp.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PChar.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PChar1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PChar2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PChar3.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PConcat.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PElem.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PElemName.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PGrammar.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PHelperDef.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PHelpers.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PIdList.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PIdListTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PIgnTokens.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PLookAhead.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PPackage.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PPkgName.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PPkgNameTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PProd.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PProductions.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PRegExp.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PRegExpTail.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PSet.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PSet1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PSet2.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PSpecifier.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PStateList.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PStateListTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PStates.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PTokenDef.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PTokens.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PTransition.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PUnExp.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/PUnOp.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Package.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Package1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PackageOpt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PackageOpt1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PackageOpt2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId10.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId3.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId4.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId5.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId6.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId7.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId8.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId9.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgName.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgName1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgNameOpt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgNameOpt1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgNameTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgNameTail1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgNameTails.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgNameTails1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/PkgNameTails2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Prod.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Prod1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Prods.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Prods1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Prods2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Productions.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Productions1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/ProductionsOpt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/ProductionsOpt1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/ProductionsOpt2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/RegExp.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/RegExp1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/RegExpTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/RegExpTail1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/RegExpTails.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/RegExpTails1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/RegExpTails2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Specifier.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Specifier1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Specifier2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/SpecifierOpt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/SpecifierOpt1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/SpecifierOpt2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Start.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Start1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/StateList.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/StateList1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/StateListOpt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/StateListOpt1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/StateListOpt2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/StateListTail.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/StateListTail1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/StateListTails.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/StateListTails1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/StateListTails2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/States.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/States1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/StatesOpt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/StatesOpt1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/StatesOpt2.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/Switch.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/Switchable.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TArrow.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TBar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TBlank.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TChar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TColon.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TComma.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TComment.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TDDot.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TDecChar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TDot.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TEqual.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/THelpers.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/THexChar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TId.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TIgnored.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TLBkt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TLBrace.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TLPar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TMinus.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TPackage.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TPkgId.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TPlus.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TProductionSpecifier.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TProductions.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TQMark.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TRBkt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TRBrace.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TRPar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TSemicolon.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TSlash.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TStar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TStates.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TString.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TTokenSpecifier.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TTokens.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Token.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/TokenDef.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/TokenDef1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/TokenDefs.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/TokenDefs1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/TokenDefs2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Tokens.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Tokens1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/TokensOpt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/TokensOpt1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/TokensOpt2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Transition.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/Transition1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/TransitionOpt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/TransitionOpt1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/TransitionOpt2.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/TypedLinkedList.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/UnExp.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/UnExp1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/UnExps.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/UnExps1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/UnExps2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/UnOp.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/UnOp1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/UnOp2.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/UnOp3.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/UnOpOpt.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/UnOpOpt1.java
+   D /sablecc/trunk/src/org/sablecc/sablecc/node/UnOpOpt2.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X1PAltsTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X1PElem.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X1PHelperDef.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X1PIdListTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X1PPkgNameTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X1PProd.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X1PRegExpTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X1PStateListTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X1PTokenDef.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X1PUnExp.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X2PAltsTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X2PElem.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X2PHelperDef.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X2PIdListTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X2PPkgNameTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X2PProd.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X2PRegExpTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X2PStateListTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X2PTokenDef.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/X2PUnExp.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/XPAltsTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/XPElem.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/XPHelperDef.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/XPIdListTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/XPPkgNameTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/XPProd.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/XPRegExpTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/XPStateListTail.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/XPTokenDef.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/node/XPUnExp.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser/Parser.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser/ParserException.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser/State.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser/TokenIndex.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser/parser.dat
+
+2003-03-20 05:47  Etienne M. Gagnon <etienne.gagnon at uqam.ca>
+
+	* build.xml:
+	
+	Remove changelog task.
+
+2003-03-20 04:50  Etienne M. Gagnon <etienne.gagnon at uqam.ca>
+
+	* README.html, build.xml, src/org/sablecc/sablecc/Version.java:
+	
+	Increase version number.
+
+2003-03-19 05:59  Etienne M. Gagnon <etienne.gagnon at uqam.ca>
+
+	* src/org/sablecc/sablecc/SableCC.java:
+	
+	Update copyright notice.
+
+2003-03-19 04:20  Etienne M. Gagnon <etienne.gagnon at uqam.ca>
+
+	* build.xml, sablecc-2x.sablecc2:
+	
+	Add grammar file to distribution.
+
+2003-03-19 03:44  Etienne M. Gagnon <etienne.gagnon at uqam.ca>
+
+	* src/org/sablecc/sablecc/: lexer/lexer.dat, node/PAlt.java,
+	node/PAltName.java, node/PAlts.java, node/PAltsTail.java,
+	node/PBasic.java, node/PBinOp.java, node/PChar.java,
+	node/PConcat.java, node/PElem.java, node/PElemName.java,
+	node/PGrammar.java, node/PHelperDef.java, node/PHelpers.java,
+	node/PIdList.java, node/PIdListTail.java, node/PIgnTokens.java,
+	node/PLookAhead.java, node/PPackage.java, node/PPkgName.java,
+	node/PPkgNameTail.java, node/PProd.java, node/PProductions.java,
+	node/PRegExp.java, node/PRegExpTail.java, node/PSet.java,
+	node/PSpecifier.java, node/PStateList.java,
+	node/PStateListTail.java, node/PStates.java, node/PTokenDef.java,
+	node/PTokens.java, node/PTransition.java, node/PUnExp.java,
+	node/PUnOp.java, node/Switch.java, node/XPAltsTail.java,
+	node/XPElem.java, node/XPHelperDef.java, node/XPIdListTail.java,
+	node/XPPkgNameTail.java, node/XPProd.java, node/XPRegExpTail.java,
+	node/XPStateListTail.java, node/XPTokenDef.java, node/XPUnExp.java,
+	parser/Parser.java, parser/parser.dat:
+	
+	Add .dat files with keyword expansion off.
+
+2003-03-19 03:27  Etienne M. Gagnon <etienne.gagnon at uqam.ca>
+
+	* src/org/sablecc/sablecc/: lexer/lexer.dat, parser/parser.dat:
+	
+	Remove binary files because I forgot to disable keyword expansion.
+
+2003-03-19 03:07  Etienne M. Gagnon <etienne.gagnon at uqam.ca>
+
+	* AUTHORS, LICENSE, src/org/sablecc/sablecc/AcceptStates.java,
+	src/org/sablecc/sablecc/ConstructNFA.java,
+	src/org/sablecc/sablecc/GenAlts.java,
+	src/org/sablecc/sablecc/GenAnalyses.java,
+	src/org/sablecc/sablecc/GenLexer.java,
+	src/org/sablecc/sablecc/GenParser.java,
+	src/org/sablecc/sablecc/GenProds.java,
+	src/org/sablecc/sablecc/GenTokens.java,
+	src/org/sablecc/sablecc/GenUtils.java,
+	src/org/sablecc/sablecc/ResolveIds.java,
+	src/org/sablecc/sablecc/SableCC.java,
+	src/org/sablecc/sablecc/Transitions.java,
+	src/org/sablecc/sablecc/analysis/Analysis.java,
+	src/org/sablecc/sablecc/analysis/AnalysisAdapter.java,
+	src/org/sablecc/sablecc/analysis/DepthFirstAdapter.java,
+	src/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java,
+	src/org/sablecc/sablecc/lexer/Lexer.java,
+	src/org/sablecc/sablecc/lexer/LexerException.java,
+	src/org/sablecc/sablecc/lexer/lexer.dat,
+	src/org/sablecc/sablecc/node/AAltName.java,
+	src/org/sablecc/sablecc/node/AAlts.java,
+	src/org/sablecc/sablecc/node/AAltsTail.java,
+	src/org/sablecc/sablecc/node/ACharBasic.java,
+	src/org/sablecc/sablecc/node/ACharChar.java,
+	src/org/sablecc/sablecc/node/AConcat.java,
+	src/org/sablecc/sablecc/node/ADecChar.java,
+	src/org/sablecc/sablecc/node/AElem.java,
+	src/org/sablecc/sablecc/node/AElemName.java,
+	src/org/sablecc/sablecc/node/AGrammar.java,
+	src/org/sablecc/sablecc/node/AHelperDef.java,
+	src/org/sablecc/sablecc/node/AHelpers.java,
+	src/org/sablecc/sablecc/node/AHexChar.java,
+	src/org/sablecc/sablecc/node/AIdBasic.java,
+	src/org/sablecc/sablecc/node/AIdList.java,
+	src/org/sablecc/sablecc/node/AIdListTail.java,
+	src/org/sablecc/sablecc/node/AIgnTokens.java,
+	src/org/sablecc/sablecc/node/AIgnoredAlt.java,
+	src/org/sablecc/sablecc/node/AIntervalSet.java,
+	src/org/sablecc/sablecc/node/ALookAhead.java,
+	src/org/sablecc/sablecc/node/AMinusBinOp.java,
+	src/org/sablecc/sablecc/node/AOperationSet.java,
+	src/org/sablecc/sablecc/node/APackage.java,
+	src/org/sablecc/sablecc/node/AParsedAlt.java,
+	src/org/sablecc/sablecc/node/APkgName.java,
+	src/org/sablecc/sablecc/node/APkgNameTail.java,
+	src/org/sablecc/sablecc/node/APlusBinOp.java,
+	src/org/sablecc/sablecc/node/APlusUnOp.java,
+	src/org/sablecc/sablecc/node/AProd.java,
+	src/org/sablecc/sablecc/node/AProductionSpecifier.java,
+	src/org/sablecc/sablecc/node/AProductions.java,
+	src/org/sablecc/sablecc/node/AQMarkUnOp.java,
+	src/org/sablecc/sablecc/node/ARegExp.java,
+	src/org/sablecc/sablecc/node/ARegExpBasic.java,
+	src/org/sablecc/sablecc/node/ARegExpTail.java,
+	src/org/sablecc/sablecc/node/ASetBasic.java,
+	src/org/sablecc/sablecc/node/AStarUnOp.java,
+	src/org/sablecc/sablecc/node/AStateList.java,
+	src/org/sablecc/sablecc/node/AStateListTail.java,
+	src/org/sablecc/sablecc/node/AStates.java,
+	src/org/sablecc/sablecc/node/AStringBasic.java,
+	src/org/sablecc/sablecc/node/ATokenDef.java,
+	src/org/sablecc/sablecc/node/ATokenSpecifier.java,
+	src/org/sablecc/sablecc/node/ATokens.java,
+	src/org/sablecc/sablecc/node/ATransition.java,
+	src/org/sablecc/sablecc/node/AUnExp.java,
+	src/org/sablecc/sablecc/node/Cast.java,
+	src/org/sablecc/sablecc/node/EOF.java,
+	src/org/sablecc/sablecc/node/NoCast.java,
+	src/org/sablecc/sablecc/node/Node.java,
+	src/org/sablecc/sablecc/node/NodeCast.java,
+	src/org/sablecc/sablecc/node/PAlt.java,
+	src/org/sablecc/sablecc/node/PAltName.java,
+	src/org/sablecc/sablecc/node/PAlts.java,
+	src/org/sablecc/sablecc/node/PAltsTail.java,
+	src/org/sablecc/sablecc/node/PBasic.java,
+	src/org/sablecc/sablecc/node/PBinOp.java,
+	src/org/sablecc/sablecc/node/PChar.java,
+	src/org/sablecc/sablecc/node/PConcat.java,
+	src/org/sablecc/sablecc/node/PElem.java,
+	src/org/sablecc/sablecc/node/PElemName.java,
+	src/org/sablecc/sablecc/node/PGrammar.java,
+	src/org/sablecc/sablecc/node/PHelperDef.java,
+	src/org/sablecc/sablecc/node/PHelpers.java,
+	src/org/sablecc/sablecc/node/PIdList.java,
+	src/org/sablecc/sablecc/node/PIdListTail.java,
+	src/org/sablecc/sablecc/node/PIgnTokens.java,
+	src/org/sablecc/sablecc/node/PLookAhead.java,
+	src/org/sablecc/sablecc/node/PPackage.java,
+	src/org/sablecc/sablecc/node/PPkgName.java,
+	src/org/sablecc/sablecc/node/PPkgNameTail.java,
+	src/org/sablecc/sablecc/node/PProd.java,
+	src/org/sablecc/sablecc/node/PProductions.java,
+	src/org/sablecc/sablecc/node/PRegExp.java,
+	src/org/sablecc/sablecc/node/PRegExpTail.java,
+	src/org/sablecc/sablecc/node/PSet.java,
+	src/org/sablecc/sablecc/node/PSpecifier.java,
+	src/org/sablecc/sablecc/node/PStateList.java,
+	src/org/sablecc/sablecc/node/PStateListTail.java,
+	src/org/sablecc/sablecc/node/PStates.java,
+	src/org/sablecc/sablecc/node/PTokenDef.java,
+	src/org/sablecc/sablecc/node/PTokens.java,
+	src/org/sablecc/sablecc/node/PTransition.java,
+	src/org/sablecc/sablecc/node/PUnExp.java,
+	src/org/sablecc/sablecc/node/PUnOp.java,
+	src/org/sablecc/sablecc/node/Start.java,
+	src/org/sablecc/sablecc/node/Switch.java,
+	src/org/sablecc/sablecc/node/Switchable.java,
+	src/org/sablecc/sablecc/node/TArrow.java,
+	src/org/sablecc/sablecc/node/TBar.java,
+	src/org/sablecc/sablecc/node/TBlank.java,
+	src/org/sablecc/sablecc/node/TChar.java,
+	src/org/sablecc/sablecc/node/TColon.java,
+	src/org/sablecc/sablecc/node/TComma.java,
+	src/org/sablecc/sablecc/node/TComment.java,
+	src/org/sablecc/sablecc/node/TDDot.java,
+	src/org/sablecc/sablecc/node/TDecChar.java,
+	src/org/sablecc/sablecc/node/TDot.java,
+	src/org/sablecc/sablecc/node/TEqual.java,
+	src/org/sablecc/sablecc/node/THelpers.java,
+	src/org/sablecc/sablecc/node/THexChar.java,
+	src/org/sablecc/sablecc/node/TId.java,
+	src/org/sablecc/sablecc/node/TIgnored.java,
+	src/org/sablecc/sablecc/node/TLBkt.java,
+	src/org/sablecc/sablecc/node/TLBrace.java,
+	src/org/sablecc/sablecc/node/TLPar.java,
+	src/org/sablecc/sablecc/node/TMinus.java,
+	src/org/sablecc/sablecc/node/TPackage.java,
+	src/org/sablecc/sablecc/node/TPkgId.java,
+	src/org/sablecc/sablecc/node/TPlus.java,
+	src/org/sablecc/sablecc/node/TProductionSpecifier.java,
+	src/org/sablecc/sablecc/node/TProductions.java,
+	src/org/sablecc/sablecc/node/TQMark.java,
+	src/org/sablecc/sablecc/node/TRBkt.java,
+	src/org/sablecc/sablecc/node/TRBrace.java,
+	src/org/sablecc/sablecc/node/TRPar.java,
+	src/org/sablecc/sablecc/node/TSemicolon.java,
+	src/org/sablecc/sablecc/node/TSlash.java,
+	src/org/sablecc/sablecc/node/TStar.java,
+	src/org/sablecc/sablecc/node/TStates.java,
+	src/org/sablecc/sablecc/node/TString.java,
+	src/org/sablecc/sablecc/node/TTokenSpecifier.java,
+	src/org/sablecc/sablecc/node/TTokens.java,
+	src/org/sablecc/sablecc/node/Token.java,
+	src/org/sablecc/sablecc/node/TypedLinkedList.java,
+	src/org/sablecc/sablecc/node/X1PAltsTail.java,
+	src/org/sablecc/sablecc/node/X1PElem.java,
+	src/org/sablecc/sablecc/node/X1PHelperDef.java,
+	src/org/sablecc/sablecc/node/X1PIdListTail.java,
+	src/org/sablecc/sablecc/node/X1PPkgNameTail.java,
+	src/org/sablecc/sablecc/node/X1PProd.java,
+	src/org/sablecc/sablecc/node/X1PRegExpTail.java,
+	src/org/sablecc/sablecc/node/X1PStateListTail.java,
+	src/org/sablecc/sablecc/node/X1PTokenDef.java,
+	src/org/sablecc/sablecc/node/X1PUnExp.java,
+	src/org/sablecc/sablecc/node/X2PAltsTail.java,
+	src/org/sablecc/sablecc/node/X2PElem.java,
+	src/org/sablecc/sablecc/node/X2PHelperDef.java,
+	src/org/sablecc/sablecc/node/X2PIdListTail.java,
+	src/org/sablecc/sablecc/node/X2PPkgNameTail.java,
+	src/org/sablecc/sablecc/node/X2PProd.java,
+	src/org/sablecc/sablecc/node/X2PRegExpTail.java,
+	src/org/sablecc/sablecc/node/X2PStateListTail.java,
+	src/org/sablecc/sablecc/node/X2PTokenDef.java,
+	src/org/sablecc/sablecc/node/X2PUnExp.java,
+	src/org/sablecc/sablecc/node/XPAltsTail.java,
+	src/org/sablecc/sablecc/node/XPElem.java,
+	src/org/sablecc/sablecc/node/XPHelperDef.java,
+	src/org/sablecc/sablecc/node/XPIdListTail.java,
+	src/org/sablecc/sablecc/node/XPPkgNameTail.java,
+	src/org/sablecc/sablecc/node/XPProd.java,
+	src/org/sablecc/sablecc/node/XPRegExpTail.java,
+	src/org/sablecc/sablecc/node/XPStateListTail.java,
+	src/org/sablecc/sablecc/node/XPTokenDef.java,
+	src/org/sablecc/sablecc/node/XPUnExp.java,
+	src/org/sablecc/sablecc/parser/Parser.java,
+	src/org/sablecc/sablecc/parser/ParserException.java,
+	src/org/sablecc/sablecc/parser/State.java,
+	src/org/sablecc/sablecc/parser/TokenIndex.java,
+	src/org/sablecc/sablecc/parser/parser.dat:
+	
+	A mix of code by Komivi Agbakpem and Etienne Gagnon to make SableCC
+	self generating.  This is an important step towards 3.0.  Changes
+	were implemented so that generated code should be 100% identical to
+	code produced by SableCC 2.16.2.  If you ever detect any failure to
+	produce identical code, you should report a bug.
+
+2002-06-12 19:33  Etienne M. Gagnon <etienne.gagnon at uqam.ca>
+
+	* src/org/sablecc/sablecc/: AcceptStates.java, BooleanCast.java,
+	Cast.java, CharSet.java, ConstructNFA.java, DFA.java,
+	DisplayLicense.java, GenAlts.java, GenAnalyses.java, GenLexer.java,
+	GenParser.java, GenProds.java, GenTokens.java, GenUtils.java,
+	Grammar.java, IntSet.java, IntegerCast.java,
+	IntegerComparator.java, LR0Collection.java, LR0Item.java,
+	LR0ItemAndSetPair.java, LR0ItemSet.java, LR1Collection.java,
+	LR1Item.java, LR1ItemSet.java, ListCast.java, MacroExpander.java,
+	NFA.java, NoCast.java, NodeCast.java, Production.java,
+	ResolveIds.java, SableCC.java, StringCast.java,
+	StringComparator.java, Switch.java, Switchable.java, Symbol.java,
+	SymbolSet.java, Transitions.java, TypedHashMap.java,
+	TypedLinkedList.java, TypedTreeMap.java, analysis/Analysis.java,
+	analysis/AnalysisAdapter.java, analysis/DepthFirstAdapter.java,
+	lexer/Lexer.java, lexer/LexerException.java, node/EOF.java,
+	node/Node.java, node/PChar.java, node/PSet.java, node/Start.java,
+	node/TArrow.java, node/TBar.java, node/TBlank.java,
+	node/TChar.java, node/TColon.java, node/TComma.java,
+	node/TComment.java, node/TDDot.java, node/TDecChar.java,
+	node/TDot.java, node/TEqual.java, node/THelpers.java,
+	node/THexChar.java, node/TId.java, node/TIgnored.java,
+	node/TLBkt.java, node/TLBrace.java, node/TLPar.java,
+	node/TMinus.java, node/TPackage.java, node/TPkgId.java,
+	node/TPlus.java, node/TProductionSpecifier.java,
+	node/TProductions.java, node/TQMark.java, node/TRBkt.java,
+	node/TRBrace.java, node/TRPar.java, node/TSemicolon.java,
+	node/TSlash.java, node/TStar.java, node/TStates.java,
+	node/TString.java, node/TTokenSpecifier.java, node/TTokens.java,
+	node/Token.java, parser/Parser.java, parser/ParserException.java,
+	parser/State.java, parser/TokenIndex.java, Grammar.java:
+	
+	Indent with astyle.
+
+2002-06-12 18:23  Etienne M. Gagnon <etienne.gagnon at uqam.ca>
+
+	* src/org/sablecc/sablecc/: CharSet.java, ConstructNFA.java,
+	DFA.java, GenAlts.java, GenAnalyses.java, GenProds.java,
+	GenTokens.java, GenUtils.java, Grammar.java, IntSet.java,
+	LR0Collection.java, LR0ItemSet.java, LR1Collection.java,
+	LR1Item.java, LR1ItemSet.java, MacroExpander.java, Production.java,
+	SableCC.java, Symbol.java, analysis/DepthFirstAdapter.java:
+	
+	Indent.
+
+2002-06-07 03:35  Etienne M. Gagnon <etienne.gagnon at uqam.ca>
+
+	* LICENSE, build.xml, src/org/sablecc/sablecc/ResolveIds.java,
+	src/org/sablecc/sablecc/Transitions.java,
+	src/org/sablecc/sablecc/TypedHashMap.java,
+	src/org/sablecc/sablecc/analysis/AnalysisAdapter.java:
+	
+	Prepare the transition to a SableCC 2 based front-end.	Concretely,
+	this means that we cannot depend anymore on the Node.getId() method
+	which is not generated by SableCC 2.  Thus, we must add a new
+	TypedHashMap class and eliminate the NodeComparator class.
+
+------------------------------------------------------------------------
+r156 | egagnon | 2003-03-20 00:47:00 -0500 (Thu, 20 Mar 2003) | 2 lines
+Changed paths:
+   A /sablecc/trunk (from /sablecc/trunk:77)
+
+Recover 2.16.x trunk.
+
+------------------------------------------------------------------------
+r77 | egagnon | 2001-01-29 22:34:00 -0500 (Mon, 29 Jan 2001) | 8 lines
+Changed paths:
+   M /sablecc/trunk/ChangeLog
+   M /sablecc/trunk/README.html
+   M /sablecc/trunk/README.html.in
+   M /sablecc/trunk/build.xml
+   M /sablecc/trunk/src/org/sablecc/sablecc/Version.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/alternatives.txt
+
+2001-01-30 03:30  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* README.html, README.html.in, build.xml,
+	src/org/sablecc/sablecc/Version.java,
+	src/org/sablecc/sablecc/alternatives.txt:
+	
+	Minor change to node.setXXX in generated code.	Updated version.
+
+------------------------------------------------------------------------
+r73 | egagnon | 2001-01-22 18:55:00 -0500 (Mon, 22 Jan 2001) | 8 lines
+Changed paths:
+   M /sablecc/trunk/ChangeLog
+   M /sablecc/trunk/README.html
+   M /sablecc/trunk/build.xml
+   M /sablecc/trunk/src/org/sablecc/sablecc/Version.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/lexer.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser.txt
+
+2001-01-22 23:54  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* README.html, build.xml, src/org/sablecc/sablecc/Version.java,
+	src/org/sablecc/sablecc/lexer.txt,
+	src/org/sablecc/sablecc/parser.txt:
+	
+	Improved error message for missing lexer.dat and parser.dat files.
+
+------------------------------------------------------------------------
+r71 | egagnon | 2001-01-21 11:24:00 -0500 (Sun, 21 Jan 2001) | 21 lines
+Changed paths:
+   M /sablecc/trunk/ChangeLog
+   M /sablecc/trunk/LICENSE
+   M /sablecc/trunk/README.html
+   M /sablecc/trunk/README.html.in
+   M /sablecc/trunk/THANKS
+   M /sablecc/trunk/build.xml
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenParser.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenTokens.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Grammar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR0Collection.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/ResolveIds.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/SableCC.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Version.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser.txt
+
+2001-01-21 16:24  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* LICENSE, src/org/sablecc/sablecc/SableCC.java:
+	
+	Change copyright year.
+
+2001-01-21 16:13  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* README.html, README.html.in, THANKS, build.xml,
+	src/org/sablecc/sablecc/GenParser.java,
+	src/org/sablecc/sablecc/GenTokens.java,
+	src/org/sablecc/sablecc/Grammar.java,
+	src/org/sablecc/sablecc/LR0Collection.java,
+	src/org/sablecc/sablecc/ResolveIds.java,
+	src/org/sablecc/sablecc/SableCC.java,
+	src/org/sablecc/sablecc/Version.java,
+	src/org/sablecc/sablecc/parser.txt:
+	
+	Include token in parser exception.  Update version to stable branch
+	2.16.x.
+
+------------------------------------------------------------------------
+r69 | egagnon | 2001-01-02 22:29:00 -0500 (Tue, 02 Jan 2001) | 13 lines
+Changed paths:
+   M /sablecc/trunk/ChangeLog
+   M /sablecc/trunk/README.html
+   M /sablecc/trunk/README.html.in
+   M /sablecc/trunk/build.xml
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenParser.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenTokens.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Grammar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/ResolveIds.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Symbol.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Version.java
+
+2001-01-03 03:28  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* README.html.in, build.xml,
+	src/org/sablecc/sablecc/GenParser.java,
+	src/org/sablecc/sablecc/GenTokens.java,
+	src/org/sablecc/sablecc/Grammar.java,
+	src/org/sablecc/sablecc/ResolveIds.java,
+	src/org/sablecc/sablecc/Symbol.java, README.html,
+	src/org/sablecc/sablecc/Version.java:
+	
+	Improved error messages.  Updated version to experimental branch
+	2.15.x.
+
+------------------------------------------------------------------------
+r67 | egagnon | 2000-12-24 14:34:00 -0500 (Sun, 24 Dec 2000) | 14 lines
+Changed paths:
+   M /sablecc/trunk/ChangeLog
+   M /sablecc/trunk/README.html
+   M /sablecc/trunk/build.xml
+   M /sablecc/trunk/src/org/sablecc/sablecc/Version.java
+
+2000-12-24 19:32  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* README.html, build.xml, src/org/sablecc/sablecc/Version.java:
+	
+	Fixed the build process to get a specific version of ant-task (this
+	is important for historical purpose.  Updated project version.
+
+2000-12-22 08:01  Mariusz Nowostawski <mariusz at marni.otago.ac.nz>
+
+	* build.xml:
+	
+	Adding support to include sablecc ANT task into the binary jar of
+	sablecc.
+
+------------------------------------------------------------------------
+r62 | egagnon | 2000-12-16 20:44:00 -0500 (Sat, 16 Dec 2000) | 22 lines
+Changed paths:
+   M /sablecc/trunk/ChangeLog
+   A /sablecc/trunk/ChangeLog.header
+   A /sablecc/trunk/ChangeLog.usermap
+   D /sablecc/trunk/README
+   M /sablecc/trunk/README.html
+   M /sablecc/trunk/README.html.in
+   A /sablecc/trunk/bin
+   A /sablecc/trunk/bin/sablecc
+   A /sablecc/trunk/bin/sablecc.bat
+   M /sablecc/trunk/build.xml
+   M /sablecc/trunk/src/org/sablecc/sablecc/SableCC.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Version.java
+
+2000-12-17 01:44  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* README.html, README.html.in, build.xml,
+	src/org/sablecc/sablecc/SableCC.java,
+	src/org/sablecc/sablecc/Version.java:
+	
+	Update version information.
+
+2000-12-17 01:06  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* README, README.html, README.html.in, build.xml, bin/sablecc,
+	bin/sablecc.bat, src/org/sablecc/sablecc/SableCC.java:
+	
+	Improved the build process.
+
+2000-12-08 17:02  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* build.xml:
+	
+	Touch regenerated files, and add a dependency on build.xml for *.in
+	files.
+
+------------------------------------------------------------------------
+r60 | egagnon | 2000-12-08 02:17:00 -0500 (Fri, 08 Dec 2000) | 345 lines
+Changed paths:
+   A /sablecc/trunk/AUTHORS
+   M /sablecc/trunk/ChangeLog
+   A /sablecc/trunk/ChangeLog.old
+   A /sablecc/trunk/LICENSE (from /sablecc/trunk/SableCC-LICENSE:59)
+   A /sablecc/trunk/README
+   A /sablecc/trunk/README.html
+   A /sablecc/trunk/README.html.in
+   D /sablecc/trunk/SableCC-LICENSE
+   D /sablecc/trunk/SableCC.java
+   A /sablecc/trunk/THANKS
+   A /sablecc/trunk/build.xml
+   D /sablecc/trunk/ca
+   A /sablecc/trunk/etc
+   A /sablecc/trunk/etc/manifest
+   D /sablecc/trunk/grammarv1.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/AcceptStates.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/BooleanCast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Cast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/CharSet.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/ConstructNFA.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/DFA.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/DisplayLicense.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenAlts.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenAnalyses.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenLexer.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenParser.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenProds.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenTokens.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/GenUtils.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Grammar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/IntSet.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/IntegerCast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/IntegerComparator.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR0Collection.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR0Item.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR0ItemAndSetPair.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR0ItemSet.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR1Collection.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR1Item.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/LR1ItemSet.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/ListCast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/MacroExpander.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/NFA.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/NoCast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/NodeCast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/NodeComparator.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Production.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/ResolveIds.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/SableCC.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/StringCast.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/StringComparator.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Switch.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Switchable.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Symbol.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/SymbolSet.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/Transitions.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/TypedLinkedList.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/TypedTreeMap.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/Version.java
+   A /sablecc/trunk/src/org/sablecc/sablecc/Version.java.in
+   M /sablecc/trunk/src/org/sablecc/sablecc/alternatives.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/analyses.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/analysis/Analysis.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/analysis/AnalysisAdapter.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/analysis/DepthFirstAdapter.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/lexer/Lexer.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/lexer/LexerException.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/lexer.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Alt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Alt1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Alt2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AltName.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AltName1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AltNameOpt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AltNameOpt1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AltNameOpt2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Alts.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Alts1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AltsTail.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AltsTail1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AltsTails.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AltsTails1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/AltsTails2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Basic.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Basic1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Basic2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Basic3.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Basic4.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Basic5.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/BinOp.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/BinOp1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/BinOp2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Concat.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Concat1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/EOF.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Elem.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Elem1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/ElemName.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/ElemName1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/ElemNameOpt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/ElemNameOpt1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/ElemNameOpt2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Elems.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Elems1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Elems2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Grammar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Grammar1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/HelperDef.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/HelperDef1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/HelperDefs.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/HelperDefs1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/HelperDefs2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Helpers.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Helpers1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/HelpersOpt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/HelpersOpt1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/HelpersOpt2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/IdList.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/IdList1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/IdListOpt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/IdListOpt1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/IdListTail.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/IdListTail1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/IdListTails.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/IdListTails1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/IdListTails2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/IgnTokens.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/IgnTokens1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/IgnTokensOpt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/IgnTokensOpt1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/IgnTokensOpt2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/LookAhead.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/LookAhead1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/LookAheadOpt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/LookAheadOpt1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/LookAheadOpt2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Node.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PChar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PChar1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PChar2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PChar3.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PSet.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PSet1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PSet2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Package.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Package1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PackageOpt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PackageOpt1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PackageOpt2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId10.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId3.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId4.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId5.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId6.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId7.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId8.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgId9.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgName.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgName1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgNameOpt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgNameOpt1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgNameTail.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgNameTail1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgNameTails.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgNameTails1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/PkgNameTails2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Prod.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Prod1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Prods.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Prods1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Prods2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Productions.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Productions1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/ProductionsOpt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/ProductionsOpt1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/ProductionsOpt2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/RegExp.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/RegExp1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/RegExpTail.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/RegExpTail1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/RegExpTails.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/RegExpTails1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/RegExpTails2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Specifier.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Specifier1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Specifier2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/SpecifierOpt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/SpecifierOpt1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/SpecifierOpt2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Start.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Start1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/StateList.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/StateList1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/StateListOpt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/StateListOpt1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/StateListOpt2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/StateListTail.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/StateListTail1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/StateListTails.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/StateListTails1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/StateListTails2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/States.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/States1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/StatesOpt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/StatesOpt1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/StatesOpt2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TArrow.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TBar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TBlank.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TChar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TColon.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TComma.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TComment.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TDDot.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TDecChar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TDot.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TEqual.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/THelpers.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/THexChar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TId.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TIgnored.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TLBkt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TLBrace.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TLPar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TMinus.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TPackage.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TPkgId.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TPlus.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TProductionSpecifier.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TProductions.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TQMark.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TRBkt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TRBrace.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TRPar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TSemicolon.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TSlash.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TStar.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TStates.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TString.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TTokenSpecifier.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TTokens.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Token.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TokenDef.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TokenDef1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TokenDefs.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TokenDefs1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TokenDefs2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Tokens.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Tokens1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TokensOpt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TokensOpt1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TokensOpt2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Transition.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/Transition1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TransitionOpt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TransitionOpt1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/TransitionOpt2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/UnExp.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/UnExp1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/UnExps.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/UnExps1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/UnExps2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/UnOp.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/UnOp1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/UnOp2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/UnOp3.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/UnOpOpt.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/UnOpOpt1.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/node/UnOpOpt2.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser/Parser.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser/ParserException.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser/State.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser/TokenIndex.java
+   M /sablecc/trunk/src/org/sablecc/sablecc/parser.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/productions.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/tokens.txt
+   M /sablecc/trunk/src/org/sablecc/sablecc/utils.txt
+
+2000-12-08 07:17  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* build.xml:
+	
+	Added reconfigure build target to force re-expansion of *.in files.
+
+2000-12-08 07:10  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* README.html, src/org/sablecc/sablecc/Version.java:
+	
+	Added generated source files in the CVS repository to simplify the
+	life of casual users.
+
+2000-12-08 07:05  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* AUTHORS, INSTALL, README, README.html.in, THANKS, build.xml,
+	etc/manifest, src/SableCC.java,
+	src/org/sablecc/sablecc/DisplayLicense.java,
+	src/org/sablecc/sablecc/SableCC.java,
+	src/org/sablecc/sablecc/Version.java.in:
+	
+	Fixed the build file to have the following targets: compile, jar,
+	srcdist, dist, clean, distclean.
+
+2000-12-07 14:09  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* src/org/sablecc/sablecc/SableCC.java:
+	
+	Fixed command line syntax.
+
+2000-12-07 08:50  Mariusz Nowostawski <mariusz at marni.otago.ac.nz>
+
+	* src/org/sablecc/sablecc/: DisplayLicense.java, Grammar.java,
+	LR0Collection.java, Production.java, SableCC.java, Symbol.java:
+	
+	Removing dependency on static final structures, adding optional
+	reinitialization to the sablecc engine. From the command line it is
+	now possible to invoke SableCC with multiple grammar files to
+	generate multiple parsers with single sablecc instance. From tools
+	it is possible to invoke sablecc engine for mutliple grammar files
+	and reuse all already loaded and initialized classes.
+
+2000-12-07 04:32  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* AUTHORS:
+	
+	Added new author.
+
+2000-12-07 04:24  Mariusz Nowostawski <mariusz at marni.otago.ac.nz>
+
+	* build.xml:
+	
+	Adding copyright info. Removing obsolete deltree construct. Fixing
+	etc/manifest in the dist target.
+
+2000-12-07 04:17  Mariusz Nowostawski <mariusz at marni.otago.ac.nz>
+
+	* build.xml, etc/manifest:
+	
+	Initial skeleton of built system to work with ANT (ant 1.3
+	compatibile).
+
+2000-12-06 05:05  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* src/org/sablecc/sablecc/parser/parser.dat:
+	
+	Adding file as binary.
+
+2000-12-06 05:04  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* src/org/sablecc/sablecc/parser/parser.dat:
+	
+	Removing file, because not checked-in as binary.
+
+2000-12-06 04:57  Etienne M. Gagnon <egagnon at j-meg.com>
+
+	* AUTHORS, COPYING-LESSER, INSTALL, LICENSE, README, THANKS,
+	src/SableCC.java, src/org/sablecc/sablecc/AcceptStates.java,
+	src/org/sablecc/sablecc/BooleanCast.java,
+	src/org/sablecc/sablecc/Cast.java,
+	src/org/sablecc/sablecc/CharSet.java,
+	src/org/sablecc/sablecc/ConstructNFA.java,
+	src/org/sablecc/sablecc/DFA.java,
+	src/org/sablecc/sablecc/DisplayLicense.java,
+	src/org/sablecc/sablecc/GenAlts.java,
+	src/org/sablecc/sablecc/GenAnalyses.java,
+	src/org/sablecc/sablecc/GenLexer.java,
+	src/org/sablecc/sablecc/GenParser.java,
+	src/org/sablecc/sablecc/GenProds.java,
+	src/org/sablecc/sablecc/GenTokens.java,
+	src/org/sablecc/sablecc/GenUtils.java,
+	src/org/sablecc/sablecc/Grammar.java,
+	src/org/sablecc/sablecc/IntSet.java,
+	src/org/sablecc/sablecc/IntegerCast.java,
+	src/org/sablecc/sablecc/IntegerComparator.java,
+	src/org/sablecc/sablecc/LR0Collection.java,
+	src/org/sablecc/sablecc/LR0Item.java,
+	src/org/sablecc/sablecc/LR0ItemAndSetPair.java,
+	src/org/sablecc/sablecc/LR0ItemSet.java,
+	src/org/sablecc/sablecc/LR1Collection.java,
+	src/org/sablecc/sablecc/LR1Item.java,
+	src/org/sablecc/sablecc/LR1ItemSet.java,
+	src/org/sablecc/sablecc/ListCast.java,
+	src/org/sablecc/sablecc/MacroExpander.java,
+	src/org/sablecc/sablecc/NFA.java,
+	src/org/sablecc/sablecc/NoCast.java,
+	src/org/sablecc/sablecc/NodeCast.java,
+	src/org/sablecc/sablecc/NodeComparator.java,
+	src/org/sablecc/sablecc/Production.java,
+	src/org/sablecc/sablecc/ResolveIds.java,
+	src/org/sablecc/sablecc/SableCC.java,
+	src/org/sablecc/sablecc/StringCast.java,
+	src/org/sablecc/sablecc/StringComparator.java,
+	src/org/sablecc/sablecc/Switch.java,
+	src/org/sablecc/sablecc/Switchable.java,
+	src/org/sablecc/sablecc/Symbol.java,
+	src/org/sablecc/sablecc/SymbolSet.java,
+	src/org/sablecc/sablecc/Transitions.java,
+	src/org/sablecc/sablecc/TypedLinkedList.java,
+	src/org/sablecc/sablecc/TypedTreeMap.java,
+	src/org/sablecc/sablecc/alternatives.txt,
+	src/org/sablecc/sablecc/analyses.txt,
+	src/org/sablecc/sablecc/lexer.txt,
+	src/org/sablecc/sablecc/parser.txt,
+	src/org/sablecc/sablecc/productions.txt,
+	src/org/sablecc/sablecc/tokens.txt,
+	src/org/sablecc/sablecc/utils.txt,
+	src/org/sablecc/sablecc/analysis/Analysis.java,
+	src/org/sablecc/sablecc/analysis/AnalysisAdapter.java,
+	src/org/sablecc/sablecc/analysis/DepthFirstAdapter.java,
+	src/org/sablecc/sablecc/lexer/Lexer.java,
+	src/org/sablecc/sablecc/lexer/LexerException.java,
+	src/org/sablecc/sablecc/node/Alt.java,
+	src/org/sablecc/sablecc/node/Alt1.java,
+	src/org/sablecc/sablecc/node/Alt2.java,
+	src/org/sablecc/sablecc/node/AltName.java,
+	src/org/sablecc/sablecc/node/AltName1.java,
+	src/org/sablecc/sablecc/node/AltNameOpt.java,
+	src/org/sablecc/sablecc/node/AltNameOpt1.java,
+	src/org/sablecc/sablecc/node/AltNameOpt2.java,
+	src/org/sablecc/sablecc/node/Alts.java,
+	src/org/sablecc/sablecc/node/Alts1.java,
+	src/org/sablecc/sablecc/node/AltsTail.java,
+	src/org/sablecc/sablecc/node/AltsTail1.java,
+	src/org/sablecc/sablecc/node/AltsTails.java,
+	src/org/sablecc/sablecc/node/AltsTails1.java,
+	src/org/sablecc/sablecc/node/AltsTails2.java,
+	src/org/sablecc/sablecc/node/Basic.java,
+	src/org/sablecc/sablecc/node/Basic1.java,
+	src/org/sablecc/sablecc/node/Basic2.java,
+	src/org/sablecc/sablecc/node/Basic3.java,
+	src/org/sablecc/sablecc/node/Basic4.java,
+	src/org/sablecc/sablecc/node/Basic5.java,
+	src/org/sablecc/sablecc/node/BinOp.java,
+	src/org/sablecc/sablecc/node/BinOp1.java,
+	src/org/sablecc/sablecc/node/BinOp2.java,
+	src/org/sablecc/sablecc/node/Concat.java,
+	src/org/sablecc/sablecc/node/Concat1.java,
+	src/org/sablecc/sablecc/node/EOF.java,
+	src/org/sablecc/sablecc/node/Elem.java,
+	src/org/sablecc/sablecc/node/Elem1.java,
+	src/org/sablecc/sablecc/node/ElemName.java,
+	src/org/sablecc/sablecc/node/ElemName1.java,
+	src/org/sablecc/sablecc/node/ElemNameOpt.java,
+	src/org/sablecc/sablecc/node/ElemNameOpt1.java,
+	src/org/sablecc/sablecc/node/ElemNameOpt2.java,
+	src/org/sablecc/sablecc/node/Elems.java,
+	src/org/sablecc/sablecc/node/Elems1.java,
+	src/org/sablecc/sablecc/node/Elems2.java,
+	src/org/sablecc/sablecc/node/Grammar.java,
+	src/org/sablecc/sablecc/node/Grammar1.java,
+	src/org/sablecc/sablecc/node/HelperDef.java,
+	src/org/sablecc/sablecc/node/HelperDef1.java,
+	src/org/sablecc/sablecc/node/HelperDefs.java,
+	src/org/sablecc/sablecc/node/HelperDefs1.java,
+	src/org/sablecc/sablecc/node/HelperDefs2.java,
+	src/org/sablecc/sablecc/node/Helpers.java,
+	src/org/sablecc/sablecc/node/Helpers1.java,
+	src/org/sablecc/sablecc/node/HelpersOpt.java,
+	src/org/sablecc/sablecc/node/HelpersOpt1.java,
+	src/org/sablecc/sablecc/node/HelpersOpt2.java,
+	src/org/sablecc/sablecc/node/IdList.java,
+	src/org/sablecc/sablecc/node/IdList1.java,
+	src/org/sablecc/sablecc/node/IdListOpt.java,
+	src/org/sablecc/sablecc/node/IdListOpt1.java,
+	src/org/sablecc/sablecc/node/IdListTail.java,
+	src/org/sablecc/sablecc/node/IdListTail1.java,
+	src/org/sablecc/sablecc/node/IdListTails.java,
+	src/org/sablecc/sablecc/node/IdListTails1.java,
+	src/org/sablecc/sablecc/node/IdListTails2.java,
+	src/org/sablecc/sablecc/node/IgnTokens.java,
+	src/org/sablecc/sablecc/node/IgnTokens1.java,
+	src/org/sablecc/sablecc/node/IgnTokensOpt.java,
+	src/org/sablecc/sablecc/node/IgnTokensOpt1.java,
+	src/org/sablecc/sablecc/node/IgnTokensOpt2.java,
+	src/org/sablecc/sablecc/node/LookAhead.java,
+	src/org/sablecc/sablecc/node/LookAhead1.java,
+	src/org/sablecc/sablecc/node/LookAheadOpt.java,
+	src/org/sablecc/sablecc/node/LookAheadOpt1.java,
+	src/org/sablecc/sablecc/node/LookAheadOpt2.java,
+	src/org/sablecc/sablecc/node/Node.java,
+	src/org/sablecc/sablecc/node/PChar.java,
+	src/org/sablecc/sablecc/node/PChar1.java,
+	src/org/sablecc/sablecc/node/PChar2.java,
+	src/org/sablecc/sablecc/node/PChar3.java,
+	src/org/sablecc/sablecc/node/PSet.java,
+	src/org/sablecc/sablecc/node/PSet1.java,
+	src/org/sablecc/sablecc/node/PSet2.java,
+	src/org/sablecc/sablecc/node/Package.java,
+	src/org/sablecc/sablecc/node/Package1.java,
+	src/org/sablecc/sablecc/node/PackageOpt.java,
+	src/org/sablecc/sablecc/node/PackageOpt1.java,
+	src/org/sablecc/sablecc/node/PackageOpt2.java,
+	src/org/sablecc/sablecc/node/PkgId.java,
+	src/org/sablecc/sablecc/node/PkgId1.java,
+	src/org/sablecc/sablecc/node/PkgId10.java,
+	src/org/sablecc/sablecc/node/PkgId2.java,
+	src/org/sablecc/sablecc/node/PkgId3.java,
+	src/org/sablecc/sablecc/node/PkgId4.java,
+	src/org/sablecc/sablecc/node/PkgId5.java,
+	src/org/sablecc/sablecc/node/PkgId6.java,
+	src/org/sablecc/sablecc/node/PkgId7.java,
+	src/org/sablecc/sablecc/node/PkgId8.java,
+	src/org/sablecc/sablecc/node/PkgId9.java,
+	src/org/sablecc/sablecc/node/PkgName.java,
+	src/org/sablecc/sablecc/node/PkgName1.java,
+	src/org/sablecc/sablecc/node/PkgNameOpt.java,
+	src/org/sablecc/sablecc/node/PkgNameOpt1.java,
+	src/org/sablecc/sablecc/node/PkgNameTail.java,
+	src/org/sablecc/sablecc/node/PkgNameTail1.java,
+	src/org/sablecc/sablecc/node/PkgNameTails.java,
+	src/org/sablecc/sablecc/node/PkgNameTails1.java,
+	src/org/sablecc/sablecc/node/PkgNameTails2.java,
+	src/org/sablecc/sablecc/node/Prod.java,
+	src/org/sablecc/sablecc/node/Prod1.java,
+	src/org/sablecc/sablecc/node/Prods.java,
+	src/org/sablecc/sablecc/node/Prods1.java,
+	src/org/sablecc/sablecc/node/Prods2.java,
+	src/org/sablecc/sablecc/node/Productions.java,
+	src/org/sablecc/sablecc/node/Productions1.java,
+	src/org/sablecc/sablecc/node/ProductionsOpt.java,
+	src/org/sablecc/sablecc/node/ProductionsOpt1.java,
+	src/org/sablecc/sablecc/node/ProductionsOpt2.java,
+	src/org/sablecc/sablecc/node/RegExp.java,
+	src/org/sablecc/sablecc/node/RegExp1.java,
+	src/org/sablecc/sablecc/node/RegExpTail.java,
+	src/org/sablecc/sablecc/node/RegExpTail1.java,
+	src/org/sablecc/sablecc/node/RegExpTails.java,
+	src/org/sablecc/sablecc/node/RegExpTails1.java,
+	src/org/sablecc/sablecc/node/RegExpTails2.java,
+	src/org/sablecc/sablecc/node/Specifier.java,
+	src/org/sablecc/sablecc/node/Specifier1.java,
+	src/org/sablecc/sablecc/node/Specifier2.java,
+	src/org/sablecc/sablecc/node/SpecifierOpt.java,
+	src/org/sablecc/sablecc/node/SpecifierOpt1.java,
+	src/org/sablecc/sablecc/node/SpecifierOpt2.java,
+	src/org/sablecc/sablecc/node/Start.java,
+	src/org/sablecc/sablecc/node/Start1.java,
+	src/org/sablecc/sablecc/node/StateList.java,
+	src/org/sablecc/sablecc/node/StateList1.java,
+	src/org/sablecc/sablecc/node/StateListOpt.java,
+	src/org/sablecc/sablecc/node/StateListOpt1.java,
+	src/org/sablecc/sablecc/node/StateListOpt2.java,
+	src/org/sablecc/sablecc/node/StateListTail.java,
+	src/org/sablecc/sablecc/node/StateListTail1.java,
+	src/org/sablecc/sablecc/node/StateListTails.java,
+	src/org/sablecc/sablecc/node/StateListTails1.java,
+	src/org/sablecc/sablecc/node/StateListTails2.java,
+	src/org/sablecc/sablecc/node/States.java,
+	src/org/sablecc/sablecc/node/States1.java,
+	src/org/sablecc/sablecc/node/StatesOpt.java,
+	src/org/sablecc/sablecc/node/StatesOpt1.java,
+	src/org/sablecc/sablecc/node/StatesOpt2.java,
+	src/org/sablecc/sablecc/node/TArrow.java,
+	src/org/sablecc/sablecc/node/TBar.java,
+	src/org/sablecc/sablecc/node/TBlank.java,
+	src/org/sablecc/sablecc/node/TChar.java,
+	src/org/sablecc/sablecc/node/TColon.java,
+	src/org/sablecc/sablecc/node/TComma.java,
+	src/org/sablecc/sablecc/node/TComment.java,
+	src/org/sablecc/sablecc/node/TDDot.java,
+	src/org/sablecc/sablecc/node/TDecChar.java,
+	src/org/sablecc/sablecc/node/TDot.java,
+	src/org/sablecc/sablecc/node/TEqual.java,
+	src/org/sablecc/sablecc/node/THelpers.java,
+	src/org/sablecc/sablecc/node/THexChar.java,
+	src/org/sablecc/sablecc/node/TId.java,
+	src/org/sablecc/sablecc/node/TIgnored.java,
+	src/org/sablecc/sablecc/node/TLBkt.java,
+	src/org/sablecc/sablecc/node/TLBrace.java,
+	src/org/sablecc/sablecc/node/TLPar.java,
+	src/org/sablecc/sablecc/node/TMinus.java,
+	src/org/sablecc/sablecc/node/TPackage.java,
+	src/org/sablecc/sablecc/node/TPkgId.java,
+	src/org/sablecc/sablecc/node/TPlus.java,
+	src/org/sablecc/sablecc/node/TProductionSpecifier.java,
+	src/org/sablecc/sablecc/node/TProductions.java,
+	src/org/sablecc/sablecc/node/TQMark.java,
+	src/org/sablecc/sablecc/node/TRBkt.java,
+	src/org/sablecc/sablecc/node/TRBrace.java,
+	src/org/sablecc/sablecc/node/TRPar.java,
+	src/org/sablecc/sablecc/node/TSemicolon.java,
+	src/org/sablecc/sablecc/node/TSlash.java,
+	src/org/sablecc/sablecc/node/TStar.java,
+	src/org/sablecc/sablecc/node/TStates.java,
+	src/org/sablecc/sablecc/node/TString.java,
+	src/org/sablecc/sablecc/node/TTokenSpecifier.java,
+	src/org/sablecc/sablecc/node/TTokens.java,
+	src/org/sablecc/sablecc/node/Token.java,
+	src/org/sablecc/sablecc/node/TokenDef.java,
+	src/org/sablecc/sablecc/node/TokenDef1.java,
+	src/org/sablecc/sablecc/node/TokenDefs.java,
+	src/org/sablecc/sablecc/node/TokenDefs1.java,
+	src/org/sablecc/sablecc/node/TokenDefs2.java,
+	src/org/sablecc/sablecc/node/Tokens.java,
+	src/org/sablecc/sablecc/node/Tokens1.java,
+	src/org/sablecc/sablecc/node/TokensOpt.java,
+	src/org/sablecc/sablecc/node/TokensOpt1.java,
+	src/org/sablecc/sablecc/node/TokensOpt2.java,
+	src/org/sablecc/sablecc/node/Transition.java,
+	src/org/sablecc/sablecc/node/Transition1.java,
+	src/org/sablecc/sablecc/node/TransitionOpt.java,
+	src/org/sablecc/sablecc/node/TransitionOpt1.java,
+	src/org/sablecc/sablecc/node/TransitionOpt2.java,
+	src/org/sablecc/sablecc/node/UnExp.java,
+	src/org/sablecc/sablecc/node/UnExp1.java,
+	src/org/sablecc/sablecc/node/UnExps.java,
+	src/org/sablecc/sablecc/node/UnExps1.java,
+	src/org/sablecc/sablecc/node/UnExps2.java,
+	src/org/sablecc/sablecc/node/UnOp.java,
+	src/org/sablecc/sablecc/node/UnOp1.java,
+	src/org/sablecc/sablecc/node/UnOp2.java,
+	src/org/sablecc/sablecc/node/UnOp3.java,
+	src/org/sablecc/sablecc/node/UnOpOpt.java,
+	src/org/sablecc/sablecc/node/UnOpOpt1.java,
+	src/org/sablecc/sablecc/node/UnOpOpt2.java,
+	src/org/sablecc/sablecc/parser/Parser.java,
+	src/org/sablecc/sablecc/parser/ParserException.java,
+	src/org/sablecc/sablecc/parser/State.java,
+	src/org/sablecc/sablecc/parser/TokenIndex.java,
+	src/org/sablecc/sablecc/parser/parser.dat:
+	
+	Changed the directory structure.   Use the org.sablecc.sablecc
+	package.
+
+------------------------------------------------------------------------
+r59 | egagnon | 2000-12-08 02:17:00 -0500 (Fri, 08 Dec 2000) | 2 lines
+Changed paths:
+   D /sablecc/trunk/ca/mcgill/sable/sablecc
+   A /sablecc/trunk/src
+   A /sablecc/trunk/src/org
+   A /sablecc/trunk/src/org/sablecc
+   A /sablecc/trunk/src/org/sablecc/sablecc (from /sablecc/trunk/ca/mcgill/sable/sablecc:58)
+
+Move directory.
+
+------------------------------------------------------------------------
+r52 | egagnon | 2000-03-04 21:43:51 -0500 (Sat, 04 Mar 2000) | 3 lines
+Changed paths:
+   A /sablecc/trunk/ChangeLog
+   M /sablecc/trunk/SableCC-LICENSE
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Production.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/alternatives.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analyses.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/productions.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/tokens.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/utils.txt
+
+Added much improved conflict error messages.  Applied modifications by
+Ben Menking <bmenking at bigfoot.com>.
+
+------------------------------------------------------------------------
+r50 | egagnon | 2000-03-03 20:30:20 -0500 (Fri, 03 Mar 2000) | 2 lines
+Changed paths:
+   M /sablecc/trunk/SableCC-LICENSE
+   M /sablecc/trunk/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/AcceptStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/BooleanCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Cast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/CharSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ConstructNFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DisplayLicense.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAlts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAnalyses.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenLexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenParser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenProds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenUtils.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemAndSetPair.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ListCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/MacroExpander.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NoCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Production.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ResolveIds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Switch.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Switchable.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Symbol.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SymbolSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Transitions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/TypedLinkedList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/TypedTreeMap.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/alternatives.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analyses.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/Analysis.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/AnalysisAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/DepthFirstAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/Lexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/LexerException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/EOF.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Node.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId10.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId6.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId7.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId8.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId9.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TArrow.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBlank.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TColon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComma.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComment.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDecChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TEqual.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THelpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THexChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TIgnored.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TMinus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPackage.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPlus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductionSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TQMark.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSemicolon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSlash.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TString.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokenSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Token.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/Parser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/ParserException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/State.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/TokenIndex.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/productions.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/tokens.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/utils.txt
+
+Fixed a bug in TypedLinkedList.
+
+------------------------------------------------------------------------
+r48 | egagnon | 1999-12-28 18:05:46 -0500 (Tue, 28 Dec 1999) | 2 lines
+Changed paths:
+   M /sablecc/trunk/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/AcceptStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/BooleanCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Cast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/CharSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ConstructNFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DisplayLicense.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAlts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAnalyses.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenLexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenParser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenProds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenUtils.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemAndSetPair.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ListCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/MacroExpander.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NoCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Production.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ResolveIds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Switch.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Switchable.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Symbol.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SymbolSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Transitions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/TypedLinkedList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/TypedTreeMap.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/alternatives.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analyses.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/Analysis.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/AnalysisAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/DepthFirstAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/Lexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/LexerException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/EOF.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Node.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId10.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId6.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId7.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId8.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId9.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TArrow.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBlank.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TColon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComma.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComment.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDecChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TEqual.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THelpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THexChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TIgnored.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TMinus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPackage.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPlus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductionSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TQMark.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSemicolon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSlash.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TString.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokenSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Token.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/Parser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/ParserException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/State.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/TokenIndex.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/productions.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/tokens.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/utils.txt
+
+Added -d option.
+
+------------------------------------------------------------------------
+r46 | egagnon | 1999-11-09 01:23:24 -0500 (Tue, 09 Nov 1999) | 2 lines
+Changed paths:
+   A /sablecc/trunk/COPYING-LESSER
+   A /sablecc/trunk/SableCC-LICENSE (from /sablecc/trunk/ca/mcgill/sable/sablecc/License.txt:45)
+   M /sablecc/trunk/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/AcceptStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/BooleanCast.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/Cast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/CharSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ConstructNFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DisplayLicense.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAlts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAnalyses.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenLexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenParser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenProds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenUtils.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemAndSetPair.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1ItemSet.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/License.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ListCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/MacroExpander.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NFA.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/NoCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Production.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ResolveIds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringComparator.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/Switch.java (from /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switch.java:45)
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/Switchable.java (from /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switchable.java:45)
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Symbol.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SymbolSet.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/Transitions.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/TypedLinkedList.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/TypedTreeMap.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/alternatives.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analyses.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/Analysis.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/AnalysisAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/DepthFirstAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/Lexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/LexerException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/EOF.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Node.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId10.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId6.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId7.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId8.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId9.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TArrow.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBlank.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TColon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComma.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComment.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDecChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TEqual.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THelpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THexChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TIgnored.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TMinus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPackage.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPlus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductionSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TQMark.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSemicolon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSlash.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TString.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokenSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Token.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/Parser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/ParserException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/State.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/TokenIndex.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/productions.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/tokens.txt
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/util
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/utils.txt
+
+Fixed lexer states.  JDK 1.2 only.  Removed SableUtil dependency.
+
+------------------------------------------------------------------------
+r44 | egagnon | 1999-02-20 17:54:54 -0500 (Sat, 20 Feb 1999) | 2 lines
+Changed paths:
+   M /sablecc/trunk/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/AcceptStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/BooleanCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/CharSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ConstructNFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DisplayLicense.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAlts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAnalyses.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenLexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenParser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenProds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenUtils.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemAndSetPair.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ListCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/MacroExpander.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Production.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ResolveIds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Symbol.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SymbolSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/alternatives.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analyses.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/Analysis.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/AnalysisAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/DepthFirstAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/Lexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/LexerException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/EOF.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Node.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId10.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId6.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId7.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId8.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId9.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TArrow.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBlank.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TColon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComma.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComment.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDecChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TEqual.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THelpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THexChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TIgnored.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TMinus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPackage.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPlus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductionSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TQMark.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSemicolon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSlash.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TString.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokenSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Token.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/Parser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/ParserException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/State.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/TokenIndex.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/productions.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/tokens.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switch.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switchable.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/utils.txt
+
+Fixed a bug related to loading resources.
+
+------------------------------------------------------------------------
+r42 | egagnon | 1999-02-19 09:48:35 -0500 (Fri, 19 Feb 1999) | 2 lines
+Changed paths:
+   M /sablecc/trunk/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/AcceptStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/BooleanCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/CharSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ConstructNFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DisplayLicense.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAlts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAnalyses.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenLexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenParser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenProds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenUtils.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemAndSetPair.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ListCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/MacroExpander.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Production.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ResolveIds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Symbol.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SymbolSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/alternatives.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analyses.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/Analysis.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/AnalysisAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/DepthFirstAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/Lexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/LexerException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/EOF.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Node.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId10.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId6.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId7.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId8.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId9.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TArrow.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBlank.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TColon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComma.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComment.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDecChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TEqual.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THelpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THexChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TIgnored.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TMinus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPackage.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPlus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductionSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TQMark.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSemicolon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSlash.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TString.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokenSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Token.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/Parser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/ParserException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/State.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/TokenIndex.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/productions.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/tokens.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switch.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switchable.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/utils.txt
+
+Added defaultIn/Out methods in AST walkers.
+
+------------------------------------------------------------------------
+r40 | egagnon | 1999-01-31 21:29:13 -0500 (Sun, 31 Jan 1999) | 2 lines
+Changed paths:
+   M /sablecc/trunk/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/AcceptStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/BooleanCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/CharSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ConstructNFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DisplayLicense.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAlts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAnalyses.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenLexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenParser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenProds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenUtils.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemAndSetPair.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ListCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/MacroExpander.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Production.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ResolveIds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Symbol.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SymbolSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/alternatives.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analyses.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/Analysis.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/AnalysisAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/DepthFirstAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/Lexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/LexerException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/EOF.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Node.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId10.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId6.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId7.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId8.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId9.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TArrow.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBlank.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TColon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComma.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComment.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDecChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TEqual.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THelpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THexChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TIgnored.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TMinus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPackage.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPlus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductionSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TQMark.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSemicolon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSlash.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TString.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokenSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Token.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/Parser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/ParserException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/State.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/TokenIndex.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/parser/parser.dat
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/productions.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/tokens.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switch.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switchable.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/utils.txt
+
+JDK 1.2 compatibility.
+
+------------------------------------------------------------------------
+r30 | egagnon | 1998-11-09 10:35:02 -0500 (Mon, 09 Nov 1998) | 2 lines
+Changed paths:
+   M /sablecc/trunk/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/AcceptStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/BooleanCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/CharSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ConstructNFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DisplayLicense.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAlts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAnalyses.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenLexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenParser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenProds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenUtils.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemAndSetPair.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ListCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/MacroExpander.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Production.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ResolveIds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Symbol.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SymbolSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/alternatives.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analyses.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/Analysis.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/AnalysisAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/DepthFirstAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/Lexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/LexerException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/EOF.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Node.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId10.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId6.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId7.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId8.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId9.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TArrow.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBlank.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TColon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComma.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComment.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDecChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TEqual.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THelpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THexChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TIgnored.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TMinus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPackage.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPlus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductionSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TQMark.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSemicolon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSlash.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TString.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokenSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Token.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/Parser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/ParserException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/State.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/TokenIndex.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/productions.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/tokens.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switch.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switchable.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/utils.txt
+
+Made Lexer.getToken() protected.
+
+------------------------------------------------------------------------
+r22 | egagnon | 1998-07-24 08:46:50 -0400 (Fri, 24 Jul 1998) | 2 lines
+Changed paths:
+   M /sablecc/trunk/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/AcceptStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/BooleanCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/CharSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ConstructNFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DisplayLicense.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAlts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAnalyses.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenLexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenParser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenProds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenUtils.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemAndSetPair.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ListCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/MacroExpander.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Production.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ResolveIds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Symbol.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SymbolSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/alternatives.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analyses.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/Analysis.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/AnalysisAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/DepthFirstAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/Lexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/LexerException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/EOF.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Node.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId10.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId6.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId7.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId8.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId9.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TArrow.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBlank.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TColon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComma.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComment.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDecChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TEqual.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THelpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THexChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TIgnored.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TMinus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPackage.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPlus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductionSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TQMark.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSemicolon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSlash.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TString.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokenSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Token.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/Parser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/ParserException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/State.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/TokenIndex.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/productions.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/tokens.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switch.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switchable.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/utils.txt
+
+Bug fix release.
+
+------------------------------------------------------------------------
+r18 | egagnon | 1998-07-23 12:19:27 -0400 (Thu, 23 Jul 1998) | 3 lines
+Changed paths:
+   M /sablecc/trunk/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/AcceptStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/BooleanCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/CharSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ConstructNFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DisplayLicense.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAlts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAnalyses.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenLexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenParser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenProds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenUtils.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemAndSetPair.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ListCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/MacroExpander.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Production.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ResolveIds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Symbol.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SymbolSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/alternatives.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analyses.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/Analysis.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/AnalysisAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/DepthFirstAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/Lexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/LexerException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/EOF.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Node.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId10.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId6.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId7.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId8.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId9.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TArrow.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBlank.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TColon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComma.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComment.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDecChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TEqual.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THelpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THexChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TIgnored.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TMinus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPackage.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPlus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductionSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TQMark.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSemicolon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSlash.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TString.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokenSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Token.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/Parser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/ParserException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/State.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/TokenIndex.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/productions.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/tokens.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switch.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switchable.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/utils.txt
+
+Fixed an bug in an error message and added throws clauses to filter
+methods.
+
+------------------------------------------------------------------------
+r16 | egagnon | 1998-07-18 21:43:30 -0400 (Sat, 18 Jul 1998) | 2 lines
+Changed paths:
+   M /sablecc/trunk/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/AcceptStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/BooleanCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/CharSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ConstructNFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DisplayLicense.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAlts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAnalyses.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenLexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenParser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenProds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenUtils.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemAndSetPair.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/License.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ListCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/MacroExpander.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Production.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ResolveIds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Symbol.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SymbolSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/alternatives.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analyses.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/Analysis.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/AnalysisAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/DepthFirstAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/Lexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/LexerException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/EOF.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Node.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId10.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId3.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId4.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId5.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId6.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId7.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId8.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgId9.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TArrow.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBlank.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TColon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComma.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComment.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDecChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TEqual.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THelpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THexChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TIgnored.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TMinus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPackage.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPkgId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPlus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductionSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TQMark.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSemicolon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSlash.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TString.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokenSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Token.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/Parser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/ParserException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/State.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/TokenIndex.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/productions.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/tokens.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switch.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switchable.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/utils.txt
+   D /sablecc/trunk/ca/mcgill/sable/util
+   M /sablecc/trunk/grammarv1.txt
+
+Fixed the package name bug. It now accepts uppercase letters.
+
+------------------------------------------------------------------------
+r7 | egagnon | 1998-07-04 14:21:32 -0400 (Sat, 04 Jul 1998) | 4 lines
+Changed paths:
+   M /sablecc/trunk/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/AcceptStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/BooleanCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/CharSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ConstructNFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/DisplayLicense.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAlts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenAnalyses.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenLexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenParser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenProds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/GenUtils.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemAndSetPair.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Item.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/LR1ItemSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/License.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ListCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/MacroExpander.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NFA.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/NodeComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Production.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/ResolveIds.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SableCC.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringCast.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/StringComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/Symbol.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/SymbolSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/alternatives.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analyses.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/Analysis.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/AnalysisAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/DepthFirstAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/Lexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/LexerException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic4.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic5.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/EOF.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Node.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/States1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TArrow.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBlank.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TColon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComma.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComment.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDecChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TEqual.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THelpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THexChar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TIgnored.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TMinus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPackage.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPlus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductionSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TQMark.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBkt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBrace.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRPar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSemicolon.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSlash.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStates.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TString.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokenSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Token.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp3.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt1.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/Parser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/ParserException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/State.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/TokenIndex.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/productions.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/tokens.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switch.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switchable.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/utils.txt
+   M /sablecc/trunk/ca/mcgill/sable/util/AbstractCollection.java
+   M /sablecc/trunk/ca/mcgill/sable/util/AbstractList.java
+   M /sablecc/trunk/ca/mcgill/sable/util/AbstractMap.java
+   M /sablecc/trunk/ca/mcgill/sable/util/AbstractSequentialList.java
+   M /sablecc/trunk/ca/mcgill/sable/util/AbstractSet.java
+   M /sablecc/trunk/ca/mcgill/sable/util/Cast.java
+   M /sablecc/trunk/ca/mcgill/sable/util/Collection.java
+   M /sablecc/trunk/ca/mcgill/sable/util/Comparable.java
+   M /sablecc/trunk/ca/mcgill/sable/util/Comparator.java
+   M /sablecc/trunk/ca/mcgill/sable/util/ConcurrentModificationException.java
+   M /sablecc/trunk/ca/mcgill/sable/util/Iterator.java
+   M /sablecc/trunk/ca/mcgill/sable/util/LinkedList.java
+   M /sablecc/trunk/ca/mcgill/sable/util/List.java
+   M /sablecc/trunk/ca/mcgill/sable/util/ListIterator.java
+   M /sablecc/trunk/ca/mcgill/sable/util/Map.java
+   M /sablecc/trunk/ca/mcgill/sable/util/NoCast.java
+   M /sablecc/trunk/ca/mcgill/sable/util/Set.java
+   M /sablecc/trunk/ca/mcgill/sable/util/SplayTreeMap.java
+   M /sablecc/trunk/ca/mcgill/sable/util/TypedLinkedList.java
+   M /sablecc/trunk/ca/mcgill/sable/util/TypedSplayTreeMap.java
+   M /sablecc/trunk/ca/mcgill/sable/util/UnsupportedOperationException.java
+
+Changed the license to the GNU Library General Public License, and
+divided the work into two parts: SableCC and SableUtil.  Also, fixed a
+minor lexer problem.
+
+------------------------------------------------------------------------
+r5 | egagnon | 1998-07-04 14:05:16 -0400 (Sat, 04 Jul 1998) | 6 lines
+Changed paths:
+   D /sablecc/trunk/GDL.grammar
+   M /sablecc/trunk/SableCC.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/AcceptStates.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/BooleanCast.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/CharSet.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/CollectIdentifiers.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/ConstructNFA.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/DFA.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/DisplayLicense.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/FindPackage.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/GenAlts.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/GenAnalyses.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/GenLexer.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/GenParser.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/GenProds.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/GenTokens.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/GenUtils.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/Grammar.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/IntSet.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerCast.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/IntegerComparator.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Collection.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/LR0Item.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemAndSetPair.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/LR0ItemSet.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Collection.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/LR1Item.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/LR1ItemSet.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/License.txt
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/ListCast.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/MacroExpander.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/Macros.txt
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/Main.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/NFA.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/NodeCast.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/NodeComparator.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/Production.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/ResolveIds.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/SableCC.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/StringCast.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/StringComparator.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/Symbol.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/SymbolSet.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/VerifyIdentifiers.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/alternatives.txt
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/analyses.txt
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/Analysis.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/AnalysisAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/analysis/DepthFirstAdapter.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/Lexer.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/lexer/LexerException.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/lexer.txt
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/lexertable
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alt2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltName1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltNameOpt2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alternative.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alternative1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alternatives.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alternatives1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alternatives2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Alts1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTail1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/AltsTails2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Bar.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic3.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic4.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Basic5.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/BasicTerm.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/BasicTerm1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/BasicTerm2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/BasicTerm3.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/BasicTerm4.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/BasicTerm5.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinOp2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinaryOperator.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinaryOperator1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/BinaryOperator2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Blank.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Char.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/CharSet.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/CharSet1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/CharSet2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/CharString.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concat1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concatenation.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concatenation1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Concatenation2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Dot.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/DotDot.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/EOF.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elem1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemName1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/ElemNameOpt2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Elems2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Equal.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Grammar1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDef1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelperDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Helpers2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/HelpersOpt2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdList1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListOpt2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTail1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/IdListTails2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Identifier.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Identifiers.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Identifiers1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Identifiers2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokens1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnTokensOpt2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnoredTokens.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnoredTokens1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/IgnoredTokens2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/LBracket.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/LParenthese.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAhead1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/LookAheadOpt2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Minus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Node.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PChar3.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PSet2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Package2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageName.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageName1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageName2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PackageOpt2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgName1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameOpt2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTail1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/PkgNameTails2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Plus.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prod1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Prods2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Production.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Production1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionDefinitions.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionDefinitions1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionDefinitions2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Productions2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/ProductionsOpt2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/QMark.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/RBracket.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/RParenthese.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExp1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTail1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegExpTails2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegularDefinition.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegularDefinition1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegularDefinitions.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegularDefinitions1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegularDefinitions2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegularExpression.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegularExpression1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/RegularExpression2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Semicolon.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Specifier2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/SpecifierOpt2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Star.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Start1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateList1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListOpt2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTail1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/StateListTails2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/States.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/States1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/StatesOpt2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TArrow.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBar.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TBlank.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TChar.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TColon.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComma.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TComment.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDDot.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDecChar.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TDot.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TEqual.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/THelpers.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/THexChar.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TId.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TIgnored.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBkt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLBrace.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TLPar.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TMinus.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPackage.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TPlus.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductionSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TProductions.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TQMark.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBkt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRBrace.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TRPar.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSemicolon.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TSlash.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStar.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TStates.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TString.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokenSpecifier.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/TTokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Token.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDef1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokenDefs2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/Tokens2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TokensOpt2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/Transition1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/TransitionOpt2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExp1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnExps2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp2.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOp3.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt1.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnOpOpt2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnaryOperator.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnaryOperator1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnaryOperator2.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnaryOperator3.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnaryTerm.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnaryTerm1.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/node/UnaryTerm2.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/Parser.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/ParserException.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/State.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/parser/TokenIndex.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/parser.txt
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/parsertable
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/productions.txt
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/tokens.txt
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/util/Comparable.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/util/Comparator.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/util/IntegerComparator.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/util/MacroExpander.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/util/Node.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/util/SplayTree.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/util/SplayTreeEnumeration.java
+   D /sablecc/trunk/ca/mcgill/sable/sablecc/util/StringComparator.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switch.java
+   M /sablecc/trunk/ca/mcgill/sable/sablecc/util/Switchable.java
+   A /sablecc/trunk/ca/mcgill/sable/sablecc/utils.txt
+   A /sablecc/trunk/ca/mcgill/sable/util
+   A /sablecc/trunk/ca/mcgill/sable/util/AbstractCollection.java
+   A /sablecc/trunk/ca/mcgill/sable/util/AbstractList.java
+   A /sablecc/trunk/ca/mcgill/sable/util/AbstractMap.java
+   A /sablecc/trunk/ca/mcgill/sable/util/AbstractSequentialList.java
+   A /sablecc/trunk/ca/mcgill/sable/util/AbstractSet.java
+   A /sablecc/trunk/ca/mcgill/sable/util/Cast.java
+   A /sablecc/trunk/ca/mcgill/sable/util/Collection.java
+   A /sablecc/trunk/ca/mcgill/sable/util/Comparable.java
+   A /sablecc/trunk/ca/mcgill/sable/util/Comparator.java
+   A /sablecc/trunk/ca/mcgill/sable/util/ConcurrentModificationException.java
+   A /sablecc/trunk/ca/mcgill/sable/util/Iterator.java
+   A /sablecc/trunk/ca/mcgill/sable/util/LinkedList.java
+   A /sablecc/trunk/ca/mcgill/sable/util/List.java
+   A /sablecc/trunk/ca/mcgill/sable/util/ListIterator.java
+   A /sablecc/trunk/ca/mcgill/sable/util/Map.java
+   A /sablecc/trunk/ca/mcgill/sable/util/NoCast.java
+   A /sablecc/trunk/ca/mcgill/sable/util/Set.java
+   A /sablecc/trunk/ca/mcgill/sable/util/SplayTreeMap.java
+   A /sablecc/trunk/ca/mcgill/sable/util/TypedLinkedList.java
+   A /sablecc/trunk/ca/mcgill/sable/util/TypedSplayTreeMap.java
+   A /sablecc/trunk/ca/mcgill/sable/util/UnsupportedOperationException.java
+   D /sablecc/trunk/com
+   A /sablecc/trunk/grammarv1.txt (from /sablecc/trunk/GDL.grammar:4)
+
+This is the first publicly released version of SableCC.  This version
+was released under the GNU General Public License.  In order to avoid
+propagating the GNU GPL restrictions to new code, please DO NOT use
+this version as a base for any modification; instead, use a version of
+SableCC licensed under a different license.
+
+------------------------------------------------------------------------
+r4 | egagnon | 1998-07-04 14:05:16 -0400 (Sat, 04 Jul 1998) | 2 lines
+Changed paths:
+   A /sablecc/trunk/ca
+   A /sablecc/trunk/ca/mcgill
+   A /sablecc/trunk/ca/mcgill/sable
+   A /sablecc/trunk/ca/mcgill/sable/sablecc (from /sablecc/trunk/com/sprynet/egagnon/sablecc:3)
+   D /sablecc/trunk/com/sprynet/egagnon/sablecc
+
+Move directory.
+
+------------------------------------------------------------------------
+r2 | egagnon | 1997-08-31 16:00:00 -0400 (Sun, 31 Aug 1997) | 6 lines
+Changed paths:
+   A /sablecc/trunk/GDL.grammar
+   A /sablecc/trunk/SableCC.java
+   A /sablecc/trunk/com
+   A /sablecc/trunk/com/sprynet
+   A /sablecc/trunk/com/sprynet/egagnon
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/CollectIdentifiers.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/FindPackage.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/Macros.txt
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/Main.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/VerifyIdentifiers.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/analysis
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/analysis/Analysis.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/analysis/AnalysisAdapter.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/analysis/DepthFirstAdapter.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/lexer
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/lexer/Lexer.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/lexer/LexerException.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/lexertable
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/lexertable/Chars.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/lexertable/ConstructNFA.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/lexertable/DFA.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/lexertable/Generator.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/lexertable/NFA.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/lexertable/TokenNumber.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Alternative.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Alternative1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Alternatives.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Alternatives1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Alternatives2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Bar.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/BasicTerm.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/BasicTerm1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/BasicTerm2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/BasicTerm3.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/BasicTerm4.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/BasicTerm5.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/BinaryOperator.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/BinaryOperator1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/BinaryOperator2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Blank.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Char.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/CharSet.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/CharSet1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/CharSet2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/CharString.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Concatenation.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Concatenation1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Concatenation2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Dot.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/DotDot.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/EOF.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Equal.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Grammar.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Grammar1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Helpers.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Helpers1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Helpers2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Identifier.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Identifiers.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Identifiers1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Identifiers2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/IgnoredTokens.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/IgnoredTokens1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/IgnoredTokens2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/LBracket.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/LParenthese.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Minus.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Node.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Package.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Package1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Package2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/PackageName.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/PackageName1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/PackageName2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Plus.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Production.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Production1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/ProductionDefinitions.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/ProductionDefinitions1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/ProductionDefinitions2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Productions.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Productions1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Productions2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/QMark.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/RBracket.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/RParenthese.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/RegularDefinition.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/RegularDefinition1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/RegularDefinitions.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/RegularDefinitions1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/RegularDefinitions2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/RegularExpression.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/RegularExpression1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/RegularExpression2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Semicolon.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Star.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Start.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Start1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/THelpers.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/TIgnored.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/TPackage.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/TProductions.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/TTokens.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Token.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Tokens.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Tokens1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/Tokens2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/UnaryOperator.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/UnaryOperator1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/UnaryOperator2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/UnaryOperator3.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/UnaryTerm.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/UnaryTerm1.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/node/UnaryTerm2.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parser
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parser/Parser.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parser/ParserException.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parser/State.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parser/TokenIndex.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parsertable
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parsertable/ConstructGrammar.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parsertable/FindTerminalsAndNonTerminals.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parsertable/Generate.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parsertable/Grammar.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parsertable/LR0Collection.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parsertable/LR0Item.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parsertable/LR0ItemAndSetPair.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parsertable/LR0ItemSet.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parsertable/LR1Collection.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parsertable/LR1Item.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parsertable/LR1ItemSet.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parsertable/Production.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parsertable/Symbol.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/parsertable/SymbolSet.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/util
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/util/Comparable.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/util/Comparator.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/util/IntegerComparator.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/util/MacroExpander.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/util/Node.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/util/SplayTree.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/util/SplayTreeEnumeration.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/util/StringComparator.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/util/Switch.java
+   A /sablecc/trunk/com/sprynet/egagnon/sablecc/util/Switchable.java
+
+This initial version of SableCC has been entirely written by Etienne
+Gagnon in 1997, while he was working in Vancouver (BC), Canada.
+Etienne has built this version as a personal project, without any
+direct nor indirect support from McGill University.  The name SableCC
+was given later, in September, 1998.
+
+------------------------------------------------------------------------
+r1 | egagnon | 1997-08-31 16:00:00 -0400 (Sun, 31 Aug 1997) | 2 lines
+Changed paths:
+   A /sablecc
+   A /sablecc/branches
+   A /sablecc/tags
+   A /sablecc/trunk
+
+Create sablecc project.
+
+------------------------------------------------------------------------
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..283bc3c
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,23 @@
+SableCC, an object-oriented compiler framework.
+Copyright (C) 1997-2003 Etienne M. Gagnon <etienne.gagnon at uqam.ca> and
+others.  All rights reserved.
+
+See the file "AUTHORS" for the name of all copyright holders.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as published
+by the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this program in the file "COPYING-LESSER"; if not,
+write to the Free Software Foundation, Inc., 59 Temple Place,
+Suite 330, Boston, MA  02111-1307  USA
+
+The SableCC web site is located at:
+http://www.sablecc.org/
diff --git a/README.html b/README.html
new file mode 100644
index 0000000..c082ad1
--- /dev/null
+++ b/README.html
@@ -0,0 +1,208 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title>SableCC 3.2 - Read Me</title>
+</head>
+<body bgcolor="#ffffff">
+<a name="top"></a>
+<center>
+<table width="100%" bgcolor="#f2ff80">
+  <tbody>
+    <tr align="center">
+      <td>
+      <h1><b><i><font size="+4">SableCC</font></i></b> version<!-- --> 3.2</h1>
+      <h2>ReadMe</h2>
+      </td>
+    </tr>
+  </tbody>
+</table>
+</center>
+<p>Welcome to <b><i><font size="+1">SableCC</font></i></b> version 3.2.</p>
+<p>Please read this document carefully.</p>
+<a name="content"></a>
+<table width="100%" bgcolor="#f2ff80">
+  <tbody>
+    <tr>
+      <td>
+      <table width="100%">
+        <tbody>
+          <tr valign="top">
+            <td>
+            <h2>Content</h2>
+            </td>
+            <td align="right"><a href="#top">top</a></td>
+          </tr>
+        </tbody>
+      </table>
+      </td>
+    </tr>
+  </tbody>
+</table>
+<ul>
+  <li> <a href="#start">Getting Started</a> </li>
+  <li> <a href="#license">License</a> </li>
+  <li> <a href="#documentation">Documentation</a> </li>
+  <li> <a href="#help">Getting Help</a> </li>
+  <li> <a href="#donations">Donations</a> </li>
+</ul>
+<a name="start"></a>
+<table width="100%" bgcolor="#f2ff80">
+  <tbody>
+    <tr>
+      <td>
+      <table width="100%">
+        <tbody>
+          <tr valign="top">
+            <td>
+            <h2>Getting Started</h2>
+            </td>
+            <td align="right"><a href="#content">content</a></td>
+          </tr>
+        </tbody>
+      </table>
+      </td>
+    </tr>
+  </tbody>
+</table>
+<p>Here are the minimal steps to get <b><i><font size="+1">SableCC</font></i></b>
+running.</p>
+<h3>1) If you got <tt>sablecc-3.2.tar.gz</tt> or <tt>sablecc-3.2.zip</tt> (binary packages)</h3>
+<ol>
+  <li> Decompress the file <tt>sablecc-3.2.tar.gz</tt> or <tt>sablecc-3.2.zip</tt>:
+    <tt>
+    <pre>	  tar -xzvf sablecc-3.2.tar.gz<br>	  </pre>
+    </tt> or <tt>
+    <pre>	  jar -xvf sablecc-3.2.zip<br>      </pre>
+    </tt> </li>
+  <li> Go into the in <tt>sablecc-3.2</tt> directory: <tt>
+    <pre>	  cd sablecc-3.2<br>      </pre>
+    </tt> </li>
+  <li> You will find an executable <tt>sablecc.jar</tt> file in the <tt>lib</tt>
+directory: <tt>
+    <pre>	  java -jar lib/sablecc.jar<br>      </pre>
+    </tt> </li>
+</ol>
+<p>This is it. If you have <a href="http://ant.apache.org/">Ant</a>
+installed on your system,
+you can install <b><i><font size="+1">SableCC</font></i></b> with the
+command: <tt>
+<pre>	ant -Dinstall.dir=<i>destination</i> install<br>    </pre>
+</tt> </p>
+<p>Otherwise, you can manually install <b><i><font size="+1">SableCC</font></i></b> as follow: 
+You should first copy (and edit) the files <tt>lib/sablecc.jar</tt> and
+<tt>bin/sablecc</tt> (GNU/Linux, Mac, Unix) or <tt>bin\sablecc.bat</tt> (Windows) to an
+appropriate location, and set your PATH environment variable
+appropriately. </p>
+<h3>2) If you got <tt>sablecc-3.2-src.tar.gz</tt> (source
+package)</h3>
+<ol>
+  <li> Decompress the file <tt>sablecc-3.2-src.tar.gz</tt>: <tt>
+    <pre>	  tar -xzvf sablecc-3.2-src.tar.gz<br>      </pre>
+    </tt> </li>
+  <li> Go into the in <tt>sablecc-3.2</tt> directory: <tt>
+    <pre>	  cd sablecc-3.2<br>      </pre>
+    </tt> </li>
+  <li> If you want an automatic build process, you need to have <a
+ href="http://ant.apache.org/">Ant</a> installed on your system. 
+ Simply type: <tt>
+    <pre>	  ant -Dinstall.dir=<i>destination</i> install<br>      </pre>
+    </tt> </li>
+</ol>
+<a name="license"></a>
+<table width="100%" bgcolor="#f2ff80">
+  <tbody>
+    <tr>
+      <td>
+      <table width="100%">
+        <tbody>
+          <tr valign="top">
+            <td>
+            <h2>License</h2>
+            </td>
+            <td align="right"><a href="#content">content</a></td>
+          </tr>
+        </tbody>
+      </table>
+      </td>
+    </tr>
+  </tbody>
+</table>
+<p><b><i><font size="+1">SableCC</font></i></b> is covered by the GNU
+Lesser General Public License. You can view the copyright notice and
+the exact terms of the license in the files <a href="LICENSE">LICENSE</a>,
+<a href="AUTHORS">AUTHORS</a> and <a href="COPYING-LESSER">COPYING-LESSER</a>.</p>
+<a name="documentation"></a>
+<table width="100%" bgcolor="#f2ff80">
+  <tbody>
+    <tr>
+      <td>
+      <table width="100%">
+        <tbody>
+          <tr valign="top">
+            <td>
+            <h2>Documentation</h2>
+            </td>
+            <td align="right"><a href="#content">content</a></td>
+          </tr>
+        </tbody>
+      </table>
+      </td>
+    </tr>
+  </tbody>
+</table>
+<p>You can find complete and detailed documentation on the <b><i><font
+ size="+1">SableCC </font></i></b>framework and syntax at the
+site <a href="http://sablecc.org/documentation.html">http://sablecc.org/documentation.html</a> .</p>
+<a name="help"></a>
+<table width="100%" bgcolor="#f2ff80">
+  <tbody>
+    <tr>
+      <td>
+      <table width="100%">
+        <tbody>
+          <tr valign="top">
+            <td>
+            <h2>Getting Help</h2>
+            </td>
+            <td align="right"><a href="#content">content</a></td>
+          </tr>
+        </tbody>
+      </table>
+      </td>
+    </tr>
+  </tbody>
+</table>
+<p>The easiest way of obtaining help is to get on the <i><b><font size="+1">SableCC</font></b> mailing-list</a></i>,
+ by visiting the site
+ <a href="http://sablecc.org/lists/control/listinfo/sablecc-user/">http://sablecc.org/lists/control/listinfo/sablecc-user/</a> .
+Many <b><i><font size="+1">SableCC</font></i></b> users around the
+world are already on this mailing-list. This is the best pool of
+information available to you.</p>
+<p>You can also get professional consulting services from J-Meg inc.  Simply get in touch with Etienne Gagnon
+   (<a href="mailto:egagnon at j-meg.com?subject=SableCC consulting services">egagnon at j-meg.com</a>).</p>
+<a name="donations"></a>
+<table width="100%" bgcolor="#f2ff80">
+  <tbody>
+    <tr>
+      <td>
+      <table width="100%">
+        <tbody>
+          <tr valign="top">
+            <td>
+            <h2>Donations</h2>
+            </td>
+            <td align="right"><a href="#content">content</a></td>
+          </tr>
+        </tbody>
+      </table>
+      </td>
+    </tr>
+  </tbody>
+</table>
+<p>You are very welcome to express your appreciation of <b><i><font
+ size="+1">SableCC</font></i></b>. If you
+ would like to make a financial donation to the SableCC project, you
+ can get in touch with Etienne Gagnon (<a href="mailto:egagnon at sablevm.org?subject=Donation">egagnon at sablevm.org</a>).
+ Thank you in advance. </p>
+</body>
+</html>
diff --git a/THANKS b/THANKS
new file mode 100644
index 0000000..b903e3e
--- /dev/null
+++ b/THANKS
@@ -0,0 +1,18 @@
+THANKS file.
+
+SableCC has been initially developed by Etienne M. Gagnon as his
+M.Sc. research project.
+
+Many people have contributed to SableCC by reporting problems,
+suggesting various improvements or providing other services.  Here is
+a list of (some of) these people and organizations.  Please help us
+keep it complete and exempt of errors.
+
+Thanks to you
+-------------
+
+* Prof. Laurie J. Hendren <hendren at sable.mcgill.ca>:
+    research advisor
+
+* Will Hartung <willh at msoft.com>
+    small patch for including token in parser exception
diff --git a/bin/sablecc b/bin/sablecc
new file mode 100644
index 0000000..94231cd
--- /dev/null
+++ b/bin/sablecc
@@ -0,0 +1,11 @@
+#!/bin/sh
+#
+# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+# * This file is part of SableCC.                             *
+# * See the file "LICENSE" for copyright information and the  *
+# * terms and conditions for copying, distribution and        *
+# * modification of SableCC.                                  *
+# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+#
+# IMPORTANT: Put the absolute path to sablecc.jar below.
+java -jar lib/sablecc.jar $*
diff --git a/bin/sablecc.bat b/bin/sablecc.bat
new file mode 100644
index 0000000..d084c4b
--- /dev/null
+++ b/bin/sablecc.bat
@@ -0,0 +1,10 @@
+rem * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+rem * This file is part of SableCC.                             *
+rem * See the file "LICENSE" for copyright information and the  *
+rem * terms and conditions for copying, distribution and        *
+rem * modification of SableCC.                                  *
+rem * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+rem
+rem IMPORTANT: Put the absolute path to sablecc.jar below.
+rem
+java -jar lib\sablecc.jar %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..6a40610
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,484 @@
+<?xml version="1.0"?>
+
+<!-- 
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+* This file is part of SableCC.                             * 
+* See the file "LICENSE" for copyright information and the  *
+* terms and conditions for copying, distribution and        *
+* modification of SableCC.                                  *
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+-->
+
+<project name="sablecc" default="compile" basedir=".">
+
+<!-- 
+=====================================
+Global Properties 
+=====================================
+-->
+
+  <property name="package" value="sablecc"/>
+  <property name="version" value="3.2"/>
+
+  <property name="src.dir" value="src"/>
+  <property name="classes.dir" value="classes"/>
+  <property name="package.name" value="${package}-${version}"/>
+  <property name="lib.dir" value="lib"/>
+  <property name="bin.dir" value="bin"/>
+  <property name="doc.dir" value="doc"/>
+  <property name="sablecc-anttask.version" value="1.0.1"/>
+  <property name="manifest" value="etc/manifest"/>
+
+  <!-- Jikes 1.18 generates incorrect bytecode, unfortunately. -->
+  <!-- property name="build.compiler" value="jikes"/-->
+
+  <property file="${user.home}/.ant.properties" />
+
+
+<!--
+=====================================
+Changelog Target
+=====================================
+-->
+
+  <target 
+    name="changelog"
+    description="generate ChangeLog"
+  >
+
+    <exec executable="/usr/bin/svn" output="ChangeLog">
+      <arg value="log"/>
+      <arg value="-v"/>
+    </exec>
+
+  </target>
+
+<!--
+=====================================
+Configure Target
+=====================================
+-->
+
+  <target 
+    name="configure" 
+    depends="version-in,readme-in"
+    description="expand *.in files"
+  />
+
+  <target 
+    name="version-in" 
+    depends="version-in-available,version-in-notRequired"
+    if="version-in.available"
+    unless="version-in.notRequired"
+  >
+
+    <copy file="${version-in.file}.in" tofile="${version-in.file}"/>
+    <replace file="${version-in.file}" token="@version@" value="${version}"/>
+    <touch file="${version-in.file}"/>
+
+  </target>
+
+  <target name="version-in-name">
+
+    <property 
+      name="version-in.file" 
+      value="${src.dir}/org/sablecc/sablecc/Version.java"
+    />
+
+  </target>
+
+  <target name="version-in-available" depends="version-in-name">
+
+    <available property="version-in.available" file="${version-in.file}.in"/>
+
+  </target>
+
+  <target name="version-in-notRequired" depends="version-in-name">
+
+    <uptodate property="version-in.notRequired" targetfile="${version-in.file}">
+      <srcfiles dir= "" includes="${version-in.file}.in"/>
+      <srcfiles dir= "" includes="build.xml"/>
+    </uptodate>
+
+  </target>
+
+  <target 
+    name="readme-in" 
+    depends="readme-in-available,readme-in-notRequired" 
+    if="readme-in.available"
+    unless="readme-in.notRequired"
+  >
+
+    <copy file="${readme-in.file}.in" tofile="${readme-in.file}"/>
+    <replace file="${readme-in.file}" token="@version@" value="${version}"/>
+    <touch file="${readme-in.file}"/>
+
+  </target>
+
+  <target name="readme-in-name">
+
+    <property 
+      name="readme-in.file" 
+      value="README.html"
+    />
+
+  </target>
+
+  <target name="readme-in-available" depends="readme-in-name">
+
+    <available property="readme-in.available" file="${readme-in.file}.in"/>
+
+  </target>
+
+  <target name="readme-in-notRequired" depends="readme-in-name">
+
+    <uptodate property="readme-in.notRequired" targetfile="${readme-in.file}">
+      <srcfiles dir= "" includes="${readme-in.file}.in"/>
+      <srcfiles dir= "" includes="build.xml"/>
+    </uptodate>
+
+  </target>
+
+<!--
+=====================================
+Reconfigure Target
+=====================================
+-->
+
+  <target 
+    name="reconfigure" 
+    depends="version-in-delete,readme-in-delete,configure"
+    description="force expansion of *.in files"
+  />
+
+  <target
+    name="version-in-delete"
+    depends="version-in-available"
+    if="version-in.available"
+  >
+
+    <delete file="${version-in.file}"/>
+
+  </target>
+
+  <target
+    name="readme-in-delete"
+    depends="readme-in-available"
+    if="readme-in.available"
+  >
+
+    <delete file="${readme-in.file}"/>
+
+  </target>
+
+<!--
+=====================================
+Compile Target
+=====================================
+-->
+
+  <target
+    name="compile"
+    depends="configure"
+    description="compile source files"
+  >
+
+    <mkdir dir="${classes.dir}"/>
+
+    <javac 
+      srcdir="${src.dir}"
+      destdir="${classes.dir}"
+      includes="**/*.java" 
+      depend="yes"
+    />
+
+    <copy todir="${classes.dir}">
+      <fileset dir="${src.dir}">
+        <include name="**/*.dat"/>
+        <include name="**/*.txt"/>
+      </fileset>
+    </copy>
+
+    <copy todir="${classes.dir}/org/sablecc/sablecc">
+      <fileset dir="${basedir}">
+        <include name="LICENSE"/>
+        <include name="AUTHORS"/>
+        <include name="COPYING-LESSER"/>
+      </fileset>
+    </copy>
+
+  </target>
+
+<!--
+=====================================
+Dist Target
+=====================================
+-->
+
+  <target 
+    name="dist" 
+    depends="srcdist,jar"
+    description="build main distribution file"
+  >
+
+    <gunzip src="${package.name}-src.tar.gz" dest="${package.name}-src.tar"/>
+    <untar src="${package.name}-src.tar" dest="${basedir}"/>
+
+    <copy todir="${package.name}/lib">
+      <fileset dir="${lib.dir}"/>
+    </copy>
+
+    <tar tarfile="${package.name}.tar" basedir="${basedir}" includes="${package.name}/"/>
+    <gzip zipfile="${package.name}.tar.gz" src="${package.name}.tar"/>
+
+    <delete file="${package.name}.tar"/>
+    <delete file="${package.name}-src.tar"/>
+    <delete dir="${package.name}"/>
+
+  </target>
+
+<!--
+===================================== 
+Dist-zip Target
+=====================================
+-->
+
+  <target 
+    name="dist-zip" 
+    depends="dist" 
+    description="build main distribution file in zip format"
+  >
+
+    <gunzip src="${package.name}.tar.gz" dest="${package.name}.tar"/>
+    <untar src="${package.name}.tar" dest="${basedir}"/>
+
+    <zip zipfile="${package.name}.zip" basedir="${basedir}" includes="${package.name}/"/>
+
+    <delete file="${package.name}.tar"/>
+    <delete dir="${package.name}"/>
+
+  </target>
+
+<!--
+=====================================
+Srcdist Target
+=====================================
+-->
+
+  <target 
+    name="srcdist" 
+    depends="configure,changelog,sablecc-anttask_get" 
+    description="build source-only distribution"
+  >
+
+    <copy todir="${package.name}/src" includeEmptyDirs="no">
+      <fileset dir="${src.dir}">
+        <include name="**/*.java"/>
+        <include name="**/*.dat"/>
+        <include name="**/*.txt"/>
+      </fileset>
+    </copy>
+
+    <copy todir="${package.name}/bin">
+      <fileset dir="${bin.dir}"/>
+    </copy>
+
+    <copy todir="${package.name}/doc">
+      <fileset dir="${doc.dir}">
+        <include name="test.sablecc3"/>
+        <include name="description.html"/>
+      </fileset>
+    </copy>
+
+    <copy file="${manifest}" todir="${package.name}/etc"/>
+
+    <copy todir="${package.name}">
+      <fileset dir="${basedir}">
+        <include name="AUTHORS"/>
+        <include name="COPYING-LESSER"/>
+        <include name="ChangeLog"/>
+        <include name="LICENSE"/>
+        <include name="README.html"/>
+        <include name="THANKS"/>
+        <include name="sablecc-anttask-${sablecc-anttask.version}.tar.gz"/>
+        <include name="build.xml"/>
+	<include name="sablecc-3x.sablecc3"/>
+      </fileset>
+    </copy>
+
+    <copy todir="${package.name}/src/org/sablecc/sablecc">
+      <fileset dir="${basedir}">
+        <include name="LICENSE"/>
+        <include name="AUTHORS"/>
+        <include name="COPYING-LESSER"/>
+      </fileset>
+    </copy>
+
+    <tar tarfile="${package.name}-src.tar" basedir="${basedir}" includes="${package.name}/"/>
+    <gzip zipfile="${package.name}-src.tar.gz" src="${package.name}-src.tar"/>
+
+    <delete file="${package.name}-src.tar"/>
+    <delete dir="${package.name}"/>
+
+  </target>
+
+<!--
+=====================================
+Jar Target
+=====================================
+-->
+
+  <target 
+    name="jar" 
+    depends="sablecc-anttask_prepare"
+    description="build executable jar"
+  >
+
+    <mkdir dir="${lib.dir}"/>
+
+    <jar 
+      jarfile="${lib.dir}/${package}.jar" 
+      basedir="${classes.dir}"
+      manifest="${manifest}"
+    />
+
+  </target>
+
+  <target name="sablecc-anttask_check_ready" depends="compile">
+
+    <available 
+      property="sablecc-anttask_ready" 
+      file="${classes.dir}/org/sablecc/ant/taskdef/Sablecc.class"
+    />
+
+  </target>
+
+  <target name="sablecc-anttask_check_available">
+
+    <available 
+      property="sablecc-anttask_available" 
+      file="sablecc-anttask-${sablecc-anttask.version}.tar.gz"
+    />
+
+  </target>
+
+  <target
+    name="sablecc-anttask_get" 
+    depends="sablecc-anttask_check_available" 
+    unless="sablecc-anttask_available" 
+  >
+
+    <!-- GET sablecc-anttask-${sablecc-anttask.version}.tar.gz -->
+    <get
+      src="http://download.sourceforge.net/sablecc/sablecc-anttask-${sablecc-anttask.version}.tar.gz"
+      dest="sablecc-anttask-${sablecc-anttask.version}.tar.gz"
+    />
+ 
+  </target>
+
+  <target
+    name="sablecc-anttask_prepare" 
+    depends="sablecc-anttask_check_ready,sablecc-anttask_get" 
+    unless="sablecc-anttask_ready" 
+  >
+
+    <gunzip src="sablecc-anttask-${sablecc-anttask.version}.tar.gz" dest="sablecc-anttask-${sablecc-anttask.version}.tar"/>
+    <untar src="sablecc-anttask-${sablecc-anttask.version}.tar" dest="${basedir}"/>
+    <unjar src="sablecc-anttask-${sablecc-anttask.version}/lib/sablecc-anttask.jar" dest="${classes.dir}"/>
+    <delete file="sablecc-anttask-${sablecc-anttask.version}.tar"/>
+    <delete dir="sablecc-anttask-${sablecc-anttask.version}"/>
+    <delete dir="${classes.dir}/META-INF"/>
+ 
+  </target>
+
+<!--
+=====================================
+Clean Target
+=====================================
+-->
+
+  <target name="clean" description="remove compiled files">
+
+    <delete dir="${classes.dir}"/>
+
+  </target>
+
+<!--
+=====================================
+Distclean Target
+=====================================
+-->
+
+  <target 
+    name="distclean" 
+    depends="clean,version-in-delete,readme-in-delete" 
+    description="remove all generated files"
+  >
+
+    <delete dir="${lib.dir}"/>
+    <delete>
+      <fileset dir="${basedir}" includes="${package.name}*"/>
+    </delete>
+
+  </target>
+
+<!--
+=====================================
+Install Target
+=====================================
+-->
+
+  <target
+    name="install"
+    depends="install-error,install-no-error"
+    description="install executables"
+  />
+
+  <target name="install-error" unless="install.dir">
+
+    <echo>
+========================================================================
+*** ERROR ***  You must provide an installation directory.  For example:
+
+   ant -Dinstall.dir=/usr/local install     (on Linux)
+or
+   ant -Dinstall.dir=C:\sablecc install     (on Windows)
+========================================================================
+    </echo>
+
+    <fail message="missing installation directory (see explanation above)"/>
+
+  </target>
+
+  <target 
+    name="install-no-error"
+    depends="jar"
+    if="install.dir"
+  >
+
+    <property name="install.location" location="${install.dir}"/>
+
+    <copy todir="${install.location}/bin" overwrite="yes">
+      <fileset dir="${bin.dir}"/>
+    </copy>
+    <replace file="${install.location}/bin/sablecc" token="lib/sablecc.jar" value="${install.location}/lib/sablecc.jar"/>
+    <replace file="${install.location}/bin/sablecc.bat" token="lib\sablecc.jar" value="${install.location}\lib\sablecc.jar"/>
+    <chmod file="${install.location}/bin/sablecc" perm="ugo+x"/>
+
+    <copy todir="${install.location}/lib" overwrite="yes">
+      <fileset dir="${lib.dir}"/>
+    </copy>
+
+    <echo>
+==========================================================================
+IMPORTANT: You must add ${install.location}/bin to your PATH.  For example:
+
+   export PATH=${install.location}/bin:$$PATH      (on Linux)
+or
+   set PATH=${install.location}\bin;%PATH%        (on Windows)
+==========================================================================
+    </echo>
+
+  </target>
+
+</project>
diff --git a/doc/description.html b/doc/description.html
new file mode 100644
index 0000000..a6be308
--- /dev/null
+++ b/doc/description.html
@@ -0,0 +1,400 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<!--Converted with LaTeX2HTML 97.1 (release) (July 13th, 1997)
+ by Nikos Drakos (nikos at cbl.leeds.ac.uk), CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippman, Marek Rouchal, Martin Wilck and others -->
+  <title>Description of CST->AST transformations in SableCC3</title>
+  <meta name="description"
+ content="Description of CST->AST transformations in SableCC3 ">
+  <meta name="keywords" content="description">
+  <meta name="resource-type" content="document">
+  <meta name="distribution" content="global">
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=iso_8859_1">
+  <link rel="STYLESHEET" href="description.css">
+</head>
+<body>
+<h1 align="center">
+<div align="center">
+<p>Description of CST->AST transformations in SableCC3
+</p>
+<p></p>
+</div>
+<p></p>
+</h1>
+<p align="left"></p>
+<p>
+<br>
+</p>
+<h2><a name="SECTION00100000000000000000">Contents</a>
+</h2>
+<!--Table of Contents-->
+<ul>
+  <li><a name="tex2html16"
+ href="description.html#SECTION00100000000000000000">
+Contents</a>
+  </li>
+  <li><a name="tex2html17"
+ href="description.html#SECTION00600000000000000000">Index</a>
+  </li>
+</ul>
+<!--End of Table of Contents-->
+<h1><a name="SECTION00200000000000000000">INTRODUCTION</a>
+</h1>
+<p>
+What has been changed?
+</p>
+<p></p>
+<ul>
+  <li> Addition of a new section called Abstract Syntax Tree.
+  </li>
+  <li> New syntax for transformations specification.
+  </li>
+  <li> SableCC3 provides support for SableCC2 grammars.
+  </li>
+</ul>
+<p>
+To be able to benefit of AST transformations in SableCC, it is
+necessary to add a new <b>Abstract Syntax Tree</b> section's to the
+grammar.
+This section must be placed after the Productions section's. It
+contains the grammar of the Abstract Syntax Tree, so all the Nodes in
+this tree are instances of classes generated using this part of the
+grammar. In this new section, the syntax of productions(ast_prod) is
+the same as in the section <b>Productions</b> of SableCC2 grammars.
+All the classes used to represent this tree are generated using the
+productions specified in this new section.
+<br>
+A typical grammar of SableCC3 should contains these following sections
+:
+</p>
+<ul>
+  <li> Helpers
+  </li>
+  <li> Tokens
+  </li>
+  <li> Ignored Tokens
+  </li>
+  <li> Productions and
+  </li>
+  <li> Abstract Syntax Tree.
+  </li>
+</ul>
+All these sections as it is specified in the SableCC3's grammar are
+optional.
+<p></p>
+<h1><a name="SECTION00300000000000000000"><img width="14" height="15"
+ align="bottom" border="0" src="img1.gif" alt="$\cal{I}$"> -
+TRANSFORMATIONS</a>
+</h1>
+<p>
+Transformations
+</p>
+<p>They are specified in the section Productions. Two intrinsically
+bound transformation's actions are needed to perform :
+</p>
+<ul>
+  <li> - the first is a for the production itself
+  </li>
+  <li> - and the second is for alternatives of this production
+  </li>
+</ul>
+<h1><a name="SECTION00310000000000000000">1.1 - Transformation of the
+production</a>
+</h1>
+<p>
+A production is transformed in one or several AST productions or
+tokens.
+</p>
+<p>Such a transformation looks like :
+<br>
+</p>
+<ul>
+  <li> production {-> prod_transform1 prod_transform2*
+prod_transform3 ... prod_transformN} = element1 element2 element3 ...
+elementN <br>
+{-> alt_transform1 alt_transform2 alt_transform3 ... alt_transformN}
+  </li>
+</ul>
+where prod_transformation1, prod_transformation2, ...,
+prod_transformationN are AST productions or Tokens. The existence of
+the operator * indicates that it is a list of this element and not just
+the element itself.
+<br>
+During the parsing time of this mini grammar's compliant program, at
+the reduction phase of the alternative below, instead of constrcuting a
+traditional production node, the parser will constrcut the following
+items :
+<ul>
+  <li> a node of type prod_transform1,
+  </li>
+  <li> a homogeneous list containing elements of type prod_transform2,
+  </li>
+  <li> a node of type prod_transform3
+  </li>
+  <li> ...(a type prod_transformi node or list of type prod_transformi
+node depending on the presence of * operator or not.)
+  </li>
+  <li> and finally a node of type prod_transformN.
+  </li>
+</ul>
+<h1><a name="SECTION00320000000000000000">1.2 - Transformation of
+alternatives</a>
+</h1>
+<p>(Note: In order to use SableCC grammar terminology, we will refer to
+: <b>element</b> for transformations of one production and <b>term</b>
+for tranformations of an alternative.)
+<br>
+</p>
+<p>The transformation of an alternative is guided by the transformation
+of the production :
+</p>
+<ul>
+  <li> the number of terms and the number of elements should be the
+same.
+  </li>
+  <li> the type of these terms shoud also correspond to the type of
+elements of the production.
+  </li>
+</ul>
+<p>
+If we look at our example of production in the paragraph 2.1, it means
+that : </p>
+<ul>
+  <li> prod_transform1 should be the same type that alt_transform1,
+  </li>
+  <li> prod_transform2 should be the same type that alt_transform2 and
+so forth for all another ones until prod_transformN.
+  </li>
+</ul>
+<p>(Note: When we say that prod_transform1 is the same type as
+alt_transform1, that means : alt_transform1 are one of the alternatives
+of the production prod_transform1 or alt_transform1 and prod_transform1
+can match the same token).
+<br>
+</p>
+<p>There are four types of terms for the transformation of an
+alternative: </p>
+<ul>
+  <li> 1 - Getting an already existing element :: (ident)</li>
+  <li> 2 - New alternative (New production[.nameofalternative]) ::
+creation of a new node
+  </li>
+  <li> 3 - List creation ([elem1 elem2 ...] ) :: creation of a
+homogeneous list of terms
+  </li>
+  <li> 4 - Elimination (Null) :: used in general to replace an element
+or to eliminate the effect of another one.
+  </li>
+  <li> 5 - Empty transformation :: used in general to get ride of all
+the the subtree
+  </li>
+</ul>
+<p>
+In order to describe with more precise manner these terms, let use one
+example of SableCC3 grammar with transformations.
+<br>
+This example can be found in appendix of this document.
+<br>
+</p>
+<p></p>
+<h2><a name="SECTION00321000000000000000">1.2.1 - Getting an already
+existing element (exp_list_tail {-> exp} = comma exp {-> exp};)</a>
+</h2>
+<p>
+In the production <b>exp_list_tail</b>, we have an alternative with
+two elements: <b>comma</b> and <b>exp</b>. In the transformation of
+this alternative, we only keeps the element exp. Here, we are just
+taking an already existing element of the tree. <br>
+Notice that the production exp_list_tail is supposed to change to exp,
+and the term of the transformation of alternative is also an exp.
+Therefore the concordance of type is respected.
+<br>
+In the production <b>factor</b>, if we look at the grammar, we realize
+that <b>term</b> is itself a production that is transformed to <b>exp</b>.
+It means that in our tree, all the <b>term</b> are transformed to <b>exp</b>.
+Hence, "term.exp" refers to the element "exp" which already replace
+production <b>term</b>; so term.exp is not an element of type <b>term</b>
+but an element of type <b>exp</b>. That makes us once again respect
+the required concordance of type.
+</p>
+<p></p>
+<h2><a name="SECTION00322000000000000000">1.2.2 - New alternative ( exp
+= {plus} exp plus factor {-> New exp.plus(exp, factor.exp)};  )
+</a>
+</h2>
+<p>
+The syntax is: <br>
+<b>New</b> following by the appropriate name the alternative of the
+production. If the alternative carries an explicitly specified name
+between like nameofalternative, the syntax must be:
+<b>New nameofproduction.nameofalternative (parameters)</b>, otherwise <b>New
+nameofproduction (parameters)</b>. In this case, nameofproduction and
+nameofalternatives are similar.
+<br>
+nameofproduction must be the name of a definite production in the AST
+section. And parameters must be describe as :
+<br>
+</p>
+<pre>	    parameter1, parameter2, parameter3,... .<br></pre>
+In the case of the transformation 2(see Appendix), exp.plus refers to
+the alternative <b>{plus} [l]:exp [r]:exp</b> of production <b>exp</b>
+that state in the Abstract Syntax Tree section. This alternative is
+composed of two elements which types are <b>exp</b>. It is why for
+parameters of <b>New exp.plus()</b>, we have <b>exp</b> and <b>factor.exp</b>
+which are two elements of type exp.
+<br>
+<p></p>
+<h2><a name="SECTION00323000000000000000">1.2.3 - List creation
+(exp_list {-> exp*} = exp exp_list_tail {-> [exp_list_tail.exp
+exp] };)</a>
+</h2>
+<p>
+To construct a list elements, the syntax used is <b>(elem1 elem2
+elem3... elemN)</b>, where elem1 ... elemN are all elements of the same
+type.
+<br>
+In production <b>exp_list</b>, <b>(exp_list_tail.exp exp)</b> is a
+list of exp. exp_list_tail.exp represents an exp type's element;
+because exp_list_tail is transformed to exp.
+<br>
+</p>
+<p></p>
+<h2><a name="SECTION00324000000000000000">1.2.4 - Elimination (Null).</a>
+</h2>
+<p>
+In the grammar in appendix, there is no such transformation. To make an
+illustration, we can modify one of alternatives. For example we can
+transform the production <b>exp</b> of section Productions to :
+</p>
+<pre>   exp = {plus} exp  plus factor  {-> New exp.plus(exp, factor.exp)} |<br>         {minus} exp minus factor {-> New exp.minus(exp, Null)}      |<br>	 {factor} factor	  {-> factor.exp };<br></pre>
+<p>
+It means that we don't keep the term factor anymore in the alternative
+minus. Null is an element that is compatible with all types except
+lists. So it can be used everywhere an element is needed. If a empty
+list is needed, just used this : ().
+<br>
+</p>
+<p></p>
+<h2><a name="SECTION00325000000000000000">1.2.5 - Empty transformation.</a>
+</h2>
+<p></p>
+<pre>   exp_list_tail {-> } = comma exp {-> };<br></pre>
+<p>
+There is a difference between empty and Null transformation :
+<br>
+in the case of null transformation (exp_list_tail {-> exp} = comma
+exp {-> Null} ), the corresponding node can still be accessed by
+writing <b>exp_list_tail.exp</b> even if the associated node contains
+null reference. That is <b>exp_list_tail.exp</b> is an expression type
+element but it contains null reference.
+<br>
+But in the case of empty transformation, one just get rid of the
+production. exp_list_tail cannot be accessed anymore.
+<br>
+</p>
+<p></p>
+<h1><a name="SECTION00330000000000000000">1.3 - Implicit transformations</a>
+</h1>
+<p>
+When transformation is not specified in the grammar, an implicit
+transformation is introduced by the parser either for productions and
+alternatives. Example: A production like
+</p>
+<ul>
+  <li> production = elem1 elem2 * elem3+ elem4?; is transformed to
+  </li>
+  <li> production  {-> production} = elem1 elem2 * elem3+
+elem4? {-> New production(elem1, [elem2], [elem3], elem4) }; </li>
+</ul>
+This implicit kind of transformation is always done for all productions
+and alternatives with no explicit transformations.
+<br>
+<p></p>
+<h1><a name="SECTION00400000000000000000"><img width="26" height="15"
+ align="bottom" border="0" src="img2.gif" alt="$\cal{II}$"> -
+Restrictions</a>
+</h1>
+<p></p>
+<dl compact="compact">
+  <dt>1.
+  </dt>
+  <dd>*** For the specification of transformations, the first
+production of Productions' sections should be transformed to the first
+production of the AST section. In our example(see appendix), we should
+have :
+    <br>
+    <br>
+    grammar {-> grammar} , what is seen to be the
+case because <br>
+    grammar = elems ... is transformed in <br>
+    grammar {-> grammar}  =   elems
+... by the parser. <br>
+  </dd>
+</dl>
+<br>
+<dl compact="compact">
+  <dt>2.</dt>
+  <dt><br>
+  </dt>
+  <dd>*** In transformations of alternative, an element with an
+operator * or + can only be referred to in a list transformation. For
+example :
+    <br>
+prod {-> elem} = elem1 elem*    {-> elem };  
+is not correct even if the concordance type is still respected.
+    <br>
+It should rather be :
+    <br>
+prod {-> elem*} = elem1 elem*  {-> (elem) };
+  </dd>
+</dl>
+<h1><a name="SECTION00500000000000000000">Appendix</a>
+</h1>
+<p></p>
+<pre>Package expression;<br><br>Helpers<br><br>    digit = ['0' .. '9'];<br>    tab = 9;<br>    cr = 13;<br>    lf = 10;<br>    eol = cr lf | cr | lf; // This takes care of different platforms<br><br>    blank = (' ' | tab | eol)+;<br><br>Tokens<br>    l_par = '(';<br>    r_par = ')';<br>    plus = '+';<br>    minus = '-';<br>    mult = '*';<br>    div = '/';<br>    comma = ',';<br><br>    blank = blank;<br>    number = digit+;<br><br><br>Ignored Tokens<br><br>    blank;<br><br>Productio [...]
+<p>
+Appendix
+</p>
+<p><br>
+</p>
+<h2><a name="SECTION00600000000000000000">Index</a>
+</h2>
+<dl compact="compact">
+  <p></p>
+</dl>
+<h1><a name="SECTION00700000000000000000">
+About this document ... </a>
+</h1>
+<strong></strong>
+<div align="center">
+<p><strong>Description of CST->AST transformations in SableCC3
+</strong></p>
+<p></p>
+</div>
+<p></p>
+<p>This document was generated using the
+<a
+ href="http://www-dsed.llnl.gov/files/programs/unix/latex2html/manual/"><strong>LaTeX</strong>2<tt>HTML</tt></a>
+translator Version 97.1 (release) (July 13th, 1997)
+</p>
+<p>Copyright © 1993, 1994, 1995, 1996, 1997,
+<a href="http://cbl.leeds.ac.uk/nikos/personal.html">Nikos Drakos</a>,
+Computer Based Learning Unit, University of Leeds.
+</p>
+<p>The command line arguments were: <br>
+<strong>latex2html</strong> <tt>-no_navigation -split 0 description.tex</tt>.
+</p>
+<p>The translation was initiated by Agbakpem Komivi on 5/23/2003
+<br>
+</p>
+<hr>
+<address><i>Agbakpem Komivi</i>
+<br>
+<i>5/23/2003</i>
+</address>
+</body>
+</html>
diff --git a/doc/test.sablecc3 b/doc/test.sablecc3
new file mode 100644
index 0000000..689c0f1
--- /dev/null
+++ b/doc/test.sablecc3
@@ -0,0 +1,187 @@
+//This file was conributed by Indrek Mandree.
+
+
+//
+// This is a demonstration grammar file with transformation rules for the
+// new SableCC3 parser generator (rel sablecc-3-beta.3.altgen.20040327)
+//
+// Points to remember:
+//
+//  * Why CST and AST? Due to limitations of parser technology the
+//    human described grammar does not represent the "perfect" abstract
+//    form of the language parsed. To get the AST transformations are done.
+//    (AST - Abstract Syntax Tree; CST - Concrete Syntax Tree)
+//
+//  * The AST section must be complete, nothing from Productions is
+//    automatically placed there.
+//
+//  * In curly braces are things related to AST, eg. we built the AST in
+//    those things, so everything is built/transformed from the leaves to
+//    root.
+//
+//  * Transformation is divided into two parts - product transformation
+//    declaration that declares what the alternatives should be
+//    transformed to and alternatives transformations definitions that
+//    define how the transform is actually done.
+//
+//  * A production can be transformed to multiple elements as seen in the
+//    'random_x2' rule.
+//
+//  * Productions with same structure as in the AST can be directly
+//    transformed to AST - see the 'textual' rule. What really happens is
+//    that for productions and alternatives without transform specification
+//    default transformation rules are generated. This also means that you
+//    could omit the transform declaration at exp rule.
+//
+//  * Lists it seems are represented with brackets '[ elem1, elem2, .. ]' and
+//    not parenthesis as described in the doc. If element is also a list it
+//    is automatically expanded and used. Empty list is [].
+//
+//  * The output we get from the parser is as described in the AST. We only
+//    have to work with that. The productions section is no longer used.
+//
+//  * When you just want to get rid of a production declare and define
+//    it and its alternatives as {-> } or with the newer sablecc release
+//    you can just leave it without any rules. See the 'separator' rule.
+//
+//  * You can't place null-s into lists. When the expression is null
+//    (either by ?) or directly set in transformation and is later added
+//    to a list - it is eliminated by SableCC.
+//
+//  * With the latest sablecc release '?' and '+' are supported in
+//    the AST section. They are also enforced from productions.
+//    You'll see when errors start popping up.
+//
+//  * In the product transformation declaration you can similarily use
+//    renaming in the style 'productname { .. [use_name]:name .. } = ..'
+//    This can be very useful when using multiple elements of the same type
+//    at transform. See the 'random_x2' rule for example.
+//
+//  Written by Indrek Mandre <indrek (at) mare . ee> in July-August 2003
+//  Example constructed from the SableCC docs/Kevin Agbakpem and
+//  Etienne Bergeron e-mail. http://www.mare.ee/indrek/sablecc/
+//
+
+Package expression;
+
+Helpers
+
+    digit = ['0' .. '9'];
+    tab = 9;
+    cr = 13;
+    lf = 10;
+    eol = cr lf | cr | lf;
+
+    blank = (' ' | tab | eol)+;
+
+Tokens
+    l_par = '(';
+    r_par = ')';
+    plus = '+';
+    minus = '-';
+    mult = '*';
+    div = '/';
+    semi = ';';
+
+    blank = blank;
+    number = digit+;
+
+    one = 'one';
+    two = 'two';
+    three = 'three';
+
+    random = 'random_digit';
+
+
+Ignored Tokens
+
+    blank;
+
+Productions
+
+    grammar           = exp_list                    {-> New grammar ([exp_list.exp])}
+                      ;
+
+    exp_list          {-> exp*} =
+                        {list}    exp_list separator exp {-> [exp_list.exp, exp.exp] }
+                      | {single}  exp               {-> [exp.exp] }
+                      ;
+
+    exp               {-> exp} =  
+                        {plus}    exp plus factor   {-> New exp.plus (exp.exp, factor.exp) }
+                      | {minus}   exp minus factor  {-> New exp.minus (exp.exp, factor.exp) }
+                      | {factor}  factor            {-> factor.exp }
+                      ;
+
+    factor            {-> exp} =
+                        {mult}    factor mult term  {-> New exp.mult (factor.exp, term.exp) }
+                      | {div}     factor div term   {-> New exp.div (factor.exp, term.exp) }
+                      | {term}    term              {-> term.exp }
+                      ;
+
+    term              {-> exp} =
+                        {number}  number            {-> New exp.number(number) }
+                      | {exp}     l_par exp r_par   {-> exp.exp }
+                      | {textual} textual+          {-> New exp.textual ([textual]) }
+                      | {random_x2} random_x2       {-> New exp.random_x2 (random_x2.ran1, random_x2.ran2) }
+                      ;
+
+    textual           =
+                        {t1}      one
+                      | {t2}      two
+                      | {t3}      three
+                      ;
+
+    random_x2         {-> [ran1]:random [ran2]:random} =
+                        [ran1]:random [ran2]:random {-> ran1 ran2 }
+                      ;
+
+    separator  {-> } =
+                        {semicolon} semi {-> }
+                      ;
+                      
+
+Abstract Syntax Tree
+
+    grammar           = exp+
+                      ;
+
+    exp               =
+                        {plus}    [l]:exp  [r]:exp |
+                        {minus}   [l]:exp  [r]:exp |
+                        {div}     [l]:exp  [r]:exp |
+                        {mult}    [l]:exp  [r]:exp |
+                        {textual} textual+ |
+                        {random_x2} [r1]:random [r2]:random |
+                        {number}  number
+                      ;
+
+    textual            =
+                        {t1}      one
+                      | {t2}      two
+                      | {t3}      three
+                      ;
+
+//
+// A few words about this grammar itself:
+//  - It is supposed to be a little integer based calculator with a few odd
+//    extensions to demonstrate sablecc transformations
+//  - You can use textual words to build up numbers (two one three -> 213)
+//    I didn't really bother to specify all the decimal textual numbers
+//  - The random number rule is a bit superficial, it just expects user to
+//    type 'random_digit random_digit' and produces a two-digit random
+//    number.  I didn't figure out any better way to make the multiple
+//    element transform rule "interesting" ;)
+//
+//  Valid expressions:
+//    (1 + 14  / (3 + 4)) * 14          -> 42
+//    one + 3 - two                     -> 2
+//    two one + three                   -> 24
+//    random_digit random_digit         -> ??
+//    random_digit random_digit + 1     -> ??
+//    1 + 3 ; 1 ; 4 + 5                 -> 4; 1; 9
+//
+// In the Calculate.java is the implementation of the tree visitor that
+// calculates the values.
+//
+
diff --git a/etc/manifest b/etc/manifest
new file mode 100644
index 0000000..75e33b3
--- /dev/null
+++ b/etc/manifest
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+Main-Class: org.sablecc.sablecc.SableCC
diff --git a/lib/sablecc.jar b/lib/sablecc.jar
new file mode 100644
index 0000000..1580cd0
Binary files /dev/null and b/lib/sablecc.jar differ
diff --git a/sablecc-3x.sablecc3 b/sablecc-3x.sablecc3
new file mode 100644
index 0000000..878eb49
--- /dev/null
+++ b/sablecc-3x.sablecc3
@@ -0,0 +1,497 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+/* This grammar defines the SableCC 3.x input language. */
+
+Package org.sablecc.sablecc; // Root Java package for generated files.
+
+Helpers
+
+/* These are character sets and regular expressions used in the
+   definition of tokens. */
+
+    all = [0 .. 0xFFFF];
+    lowercase = ['a' .. 'z'];
+    uppercase = ['A' .. 'Z'];
+    digit = ['0' .. '9'];
+    hex_digit = [digit + [['a' .. 'f'] + ['A' .. 'F']]];
+
+    tab = 9;
+    cr = 13;
+    lf = 10;
+    eol = cr lf | cr | lf; // This takes care of different platforms
+
+    not_cr_lf = [all - [cr + lf]];
+    not_star = [all - '*'];
+    not_star_slash = [not_star - '/'];
+
+    blank = (' ' | tab | eol)+;
+
+    short_comment = '//' not_cr_lf* eol;
+    long_comment =
+        '/*' not_star* '*'+ (not_star_slash not_star* '*'+)* '/';
+    comment = short_comment | long_comment;
+
+    letter = lowercase | uppercase | '_' | '$';
+    id_part = lowercase (lowercase | digit)*;
+
+States
+    normal, /* The first state is the initial state. */
+    package;
+
+Tokens
+
+/* These are token definitions. It is allowed to use helper regular *
+ * expressions in the body of a token definition.                   *
+ * On a given input, the longest valid definition is chosen, In     *
+ * case of a match, the definition that appears first is chosen.    *
+ * Example: on input -> 's' <- "char" will have precedence on       *
+ * "string", because it appears first.                              */
+
+{package}
+    pkg_id = letter (letter | digit)*;
+
+{normal->package}
+    package = 'Package';
+
+    states = 'States';
+    helpers = 'Helpers';
+    tokens = 'Tokens';
+    ignored = 'Ignored';
+    productions = 'Productions';
+
+    abstract = 'Abstract';
+    syntax = 'Syntax';
+    tree = 'Tree';
+    new = 'New';
+    null = 'Null';
+
+    token_specifier = 'T';
+    production_specifier = 'P';
+
+    dot = '.';
+    d_dot = '..';
+
+{normal, package->normal}
+    semicolon = ';';
+
+    equal = '=';
+    l_bkt = '[';
+    r_bkt = ']';
+    l_par = '(';
+    r_par = ')';
+    l_brace =  '{';
+    r_brace =  '}';
+    plus = '+';
+    minus = '-';
+    q_mark = '?';
+    star = '*';
+    bar = '|';
+    comma = ',';
+    slash = '/';
+    arrow = '->';
+    colon = ':';
+
+    id = id_part ('_' id_part)*;
+
+    char = ''' not_cr_lf ''';
+    dec_char = digit+;
+    hex_char = '0' ('x' | 'X') hex_digit+;
+
+    string = ''' [not_cr_lf - ''']+ ''';
+
+    blank = blank;
+    comment = comment;
+
+Ignored Tokens
+
+/* These tokens are simply ignored by the parser. */
+
+    blank,
+    comment;
+
+Productions
+
+/* These are the productions of the grammar. The first production is *
+ * used by the implicit start production:                            *
+ *   start = (first production) EOF;                                 *
+ * ?, * and + have the same meaning as in a regular expression.      *
+ * In case a token and a production share the same name, the use of  *
+ * P. (for production) or T. (for token) is required.                *
+ * Each alternative can be explicitely named by preceding it with a  *
+ * name enclosed in braces.                                          *
+ * Each alternative element can be explicitely named by preceding it *
+ * with a name enclosed in brackets and followed by a colon.         */
+
+
+    grammar =
+        P.package? P.helpers? P.states? P.tokens? ign_tokens? P.productions? P.ast?
+	   {-> New grammar([P.package.list_pkg_id], P.helpers, P.states, 
+	                   P.tokens, P.ign_tokens, P.productions, P.ast)
+	   };
+
+    package
+	   {-> [list_pkg_id]:pkg_id*} =
+        T.package pkg_name
+	   {-> [pkg_name.pkg_id] };
+
+    pkg_name 
+	   {-> pkg_id*} =
+        pkg_id [pkg_ids]:pkg_name_tail* semicolon
+	   {-> [pkg_id, pkg_ids.pkg_id] };
+
+    pkg_name_tail 
+	   {-> pkg_id } =
+        dot pkg_id
+	   {-> pkg_id };
+
+    helpers =
+        T.helpers [helper_defs]:helper_def+
+	   {-> New helpers([helper_defs]) };
+
+    helper_def =
+        id equal reg_exp semicolon
+	   {-> New helper_def(id, reg_exp) };
+
+    states =
+        T.states id_list semicolon
+	   {-> New states([id_list.id]) };
+
+    id_list 
+	   {-> id*} =
+        id [ids]:id_list_tail*
+	   {-> [id, ids.id]};
+
+    id_list_tail 
+	   {-> id } =
+        comma id
+	   {-> id};
+
+    tokens =
+        T.tokens [token_defs]:token_def+
+	   {-> New tokens([token_defs]) };
+
+    token_def =
+        state_list? id equal reg_exp look_ahead? semicolon
+	   {-> New token_def(state_list, id, reg_exp, look_ahead.slash, look_ahead.reg_exp) };
+
+    state_list =
+        l_brace id transition? [state_lists]:state_list_tail* r_brace
+	   {-> New state_list(id, transition, [state_lists])};
+
+    state_list_tail =
+        comma id transition?
+	   {-> New state_list_tail(id, transition) };
+
+    transition =
+        arrow id
+	   {-> New transition(id)};
+
+    ign_tokens =
+        ignored T.tokens id_list? semicolon
+	   {-> New ign_tokens([id_list.id]) };
+
+    look_ahead 
+	   {-> slash reg_exp} =
+        slash reg_exp
+	   {-> slash reg_exp};
+
+    reg_exp =
+        concat [concats]:reg_exp_tail*
+	   {-> New reg_exp([concat, concats.concat])};
+
+
+    reg_exp_tail 
+	   {-> concat } =
+        bar concat
+	   {-> concat};
+
+    concat =
+        [un_exps]:un_exp*
+	   {-> New concat([un_exps])};
+
+    un_exp =
+        basic un_op?;
+
+    basic =
+        {char}    P.char 
+	   {-> New basic.char(P.char)}		|
+        {set}     set 
+	   {-> New basic.set(set)}		|
+        {string}  string 
+	   {-> New basic.string(string)}	|
+        {id}      id 
+	   {-> New basic.id(id)}		|
+        {reg_exp} l_par reg_exp r_par
+	   {-> New basic.reg_exp(reg_exp)}	;
+
+    char =
+        {char} T.char |
+        {dec}  dec_char |
+        {hex}  hex_char;
+
+    set =
+        {operation} l_bkt [left]:basic  bin_op [right]:basic  r_bkt 
+	   {-> New set.operation(left, bin_op, right) } |
+        {interval}  l_bkt [left]:P.char d_dot  [right]:P.char r_bkt
+	   {-> New set.interval(left, right) };
+
+    un_op =
+        {star}   star 
+	   {-> New un_op.star(star)}   |
+        {q_mark} q_mark
+	   {-> New un_op.q_mark(q_mark)} |
+        {plus}   plus
+	   {-> New un_op.plus(plus)}   ;
+
+    bin_op =
+        {plus}  plus 
+	   {-> New bin_op.plus()}  |
+        {minus} minus
+	   {-> New bin_op.minus()} ;
+
+    productions =
+        T.productions [prods]:prod+
+	   {-> New productions([prods]) };
+
+    prod =
+        id prod_transform? equal alts semicolon
+	   {-> New prod(id, prod_transform.arrow, [prod_transform.elem], [alts.list_alt])};
+
+    prod_transform 
+	   {-> arrow elem*} =
+        l_brace arrow [elems]:elem* r_brace
+	   {-> arrow [elems]};
+
+    alts 
+	   {-> [list_alt]:alt*} =
+        alt [alts]:alts_tail*
+	   {-> [alt, alts.alt]};
+
+    alts_tail 
+	   {-> alt} =
+        bar alt
+	   {-> alt};
+
+    alt =
+        alt_name? [elems]:elem* alt_transform? 
+	   {-> New alt(alt_name.id, [elems], alt_transform)};
+
+    alt_transform =
+        l_brace arrow [terms]: term* r_brace
+	   {-> New alt_transform(l_brace, [terms], r_brace)};
+
+    term =
+        {new} new prod_name l_par params? r_par
+	   {-> New term.new(prod_name, l_par, [params.list_term]) } 		|
+
+        {list} l_bkt list_of_list_term? r_bkt
+	   {-> New term.list(l_bkt, [list_of_list_term.list_terms])} 	|
+
+        {simple} specifier? id simple_term_tail?
+	   {-> New term.simple(specifier, id, simple_term_tail.id)} 	|
+
+        {null} null
+	   {-> New term.null()}						;
+
+    list_of_list_term 
+	   {-> [list_terms]:list_term* } =
+		list_term [list_terms]:list_term_tail*
+	   {-> [list_term, list_terms.list_term] }    ;
+
+    list_term =
+        {new} new prod_name l_par params? r_par
+	   {-> New list_term.new(prod_name, l_par, [params.list_term])}		|
+       	{simple} specifier? id simple_term_tail? 
+	   {-> New list_term.simple(specifier, id, simple_term_tail.id)};
+
+    list_term_tail 
+	   {-> list_term} =
+	comma list_term
+	   {-> list_term} ;
+
+    simple_term_tail 
+	   {-> id} =
+        dot id
+	   {-> id};
+
+    prod_name =
+        id prod_name_tail?
+	   {-> New prod_name(id, prod_name_tail.id)};
+
+    prod_name_tail 
+	   {-> id} =
+        dot id
+	   {-> id};
+
+    params 
+	   {-> [list_term]:term*} =
+       term [params]:params_tail*
+	   {-> [term, params.term]};
+
+    params_tail 
+	   {-> term} =
+       comma term
+	   {-> term};
+
+    alt_name 
+	   {-> id} =
+        l_brace id r_brace
+	   {-> id};
+
+    elem =
+        elem_name? specifier? id un_op?
+	   {-> New elem(elem_name.id, specifier, id, un_op) };
+
+    elem_name 
+	   {-> id} =
+        l_bkt id r_bkt colon
+	   {-> id};
+
+    specifier =
+        {token}      token_specifier dot 
+	   {-> New specifier.token()} 			|
+        {production} production_specifier dot
+	   {-> New specifier.production()}		;
+
+    ast =
+        abstract syntax tree [prods]:ast_prod+
+	   {-> New ast([prods]) };
+
+    ast_prod =
+        id equal [alts]:ast_alts semicolon
+	   {-> New ast_prod(id, [alts.list_ast_alt])};
+
+    ast_alts 
+	   {-> [list_ast_alt]:ast_alt*} =
+        ast_alt [ast_alts]:ast_alts_tail*
+	   {-> [ast_alt, ast_alts.ast_alt]};
+
+    ast_alts_tail 
+	   {-> ast_alt} =
+        bar ast_alt
+	   {-> ast_alt};
+
+    ast_alt =
+        alt_name? [elems]:elem*
+	   {-> New ast_alt(alt_name.id, [elems])};
+
+
+/*****************************************************************************************/
+/*											 */
+/*											 */
+/*											 */
+/*											 */
+/*											 */
+/*****************************************************************************************/
+Abstract Syntax Tree
+
+    grammar =
+        [package]:pkg_id* P.helpers? P.states? P.tokens? P.ign_tokens? P.productions? P.ast?;
+
+    helpers =
+        [helper_defs]:helper_def*;
+
+    helper_def =
+        id reg_exp;
+
+    states =
+	[list_id]:id*;
+
+    tokens =
+        [token_defs]:token_def*;
+
+    token_def =
+        state_list? id reg_exp slash? [look_ahead]:reg_exp?;
+
+    state_list =
+        id transition? [state_lists]:state_list_tail*;
+
+    state_list_tail =
+        id transition?;
+
+    transition =
+        id;
+
+    ign_tokens =
+        [list_id]:id*;
+
+    reg_exp =
+        [concats]:concat*;
+
+    concat = 
+	[un_exps]: un_exp*;
+
+    un_exp =
+        basic un_op?;
+
+    basic =
+        {char}    P.char |
+        {set}     set |
+        {string}  string |
+        {id}      id |
+        {reg_exp} reg_exp;
+
+    char =
+        {char} T.char |
+        {dec}  dec_char |
+        {hex}  hex_char;
+
+    set =
+        {operation} [left]:basic bin_op [right]:basic |
+        {interval}  [left]:P.char [right]:P.char ;
+
+    un_op =
+        {star}   star 	|
+        {q_mark} q_mark |
+        {plus}   plus	;
+
+    bin_op =
+        {plus} |
+        {minus};
+
+    productions =
+        [prods]:prod*;
+
+    prod =
+        id arrow? [prod_transform]:elem* [alts]:alt*;
+
+    alt =
+        [alt_name]:id? [elems]:elem* alt_transform?;
+
+    alt_transform =
+	l_brace [terms]:term* r_brace;
+
+    term =
+        {new} prod_name l_par [params]:term* |
+        {list} l_bkt [list_terms]:list_term* |
+        {simple} specifier? id [simple_term_tail]:id? |
+        {null} ;
+
+    list_term =
+        {new} prod_name l_par [params]:term* |
+        {simple} specifier? id [simple_term_tail]:id? ;
+
+    prod_name =
+        id [prod_name_tail]:id? ;
+
+    elem =
+        [elem_name]:id? specifier? id un_op?;
+
+    specifier =
+        {token} 	|
+        {production} 	;
+
+    ast =
+        [prods]:ast_prod*;
+
+    ast_prod =
+        id [alts]:ast_alt*;
+
+    ast_alt =
+        [alt_name]:id? [elems]:elem*;
diff --git a/sablecc-anttask-1.0.1.tar.gz b/sablecc-anttask-1.0.1.tar.gz
new file mode 100644
index 0000000..cdd320c
Binary files /dev/null and b/sablecc-anttask-1.0.1.tar.gz differ
diff --git a/src/org/sablecc/sablecc/AUTHORS b/src/org/sablecc/sablecc/AUTHORS
new file mode 100644
index 0000000..37505d3
--- /dev/null
+++ b/src/org/sablecc/sablecc/AUTHORS
@@ -0,0 +1,7 @@
+This file contains the name of all copyright holders.
+
+Etienne M. Gagnon <etienne.gagnon at uqam.ca>
+Ben Menking <bmenking at bigfoot.com>
+Mariusz Nowostawski <mariusz at marni.otago.ac.nz>
+Komivi Kevin Agbakpem <agbakpem.komivi at courrier.uqam.ca>
+Kis Gergely <kisg at inf.bme.hu>
diff --git a/src/org/sablecc/sablecc/AcceptStates.java b/src/org/sablecc/sablecc/AcceptStates.java
new file mode 100644
index 0000000..7bdfe11
--- /dev/null
+++ b/src/org/sablecc/sablecc/AcceptStates.java
@@ -0,0 +1,59 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+
+public class AcceptStates extends DepthFirstAdapter
+{
+  public DFA dfa;
+  public String stateName;
+  private ResolveIds ids;
+
+  public AcceptStates(DFA dfa, ResolveIds ids, String stateName)
+  {
+    this.dfa = dfa;
+    this.ids = ids;
+    this.stateName = stateName;
+  }
+
+  public void caseStart(Start node)
+  {
+    for(int i = 0; i < dfa.states.size(); i++)
+    {
+      DFA.State state = (DFA.State) dfa.states.elementAt(i);
+      state.accept = -1;
+
+      int accept = -1;
+
+      for(int k = 0; k < state.nfaStates.size(); k++)
+      {
+        if(state.nfaStates.get(k))
+        {
+          if(dfa.nfa.states[k].accept != null)
+          {
+            if(accept == -1)
+            {
+              accept = ids.tokenList.indexOf(dfa.nfa.states[k].accept);
+            }
+            else
+            {
+              accept = Math.min(
+                         ids.tokenList.indexOf(dfa.nfa.states[k].accept),
+                         accept);
+            }
+          }
+        }
+      }
+
+      state.accept = accept;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/AddAstProductions.java b/src/org/sablecc/sablecc/AddAstProductions.java
new file mode 100644
index 0000000..3238138
--- /dev/null
+++ b/src/org/sablecc/sablecc/AddAstProductions.java
@@ -0,0 +1,107 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+import java.io.*;
+
+/*
+ * AddAstProductions
+ * 
+ * This class provide a part of the support of SableCC2.x.x grammars by 
+ * SableCC3.x.x.
+ * Its role is to add the section Abstract Syntax Tree and its productions
+ * to the Grammar based on the Production Section.
+ * It's the same result if a copy-paste of Productions section was added
+ * to the SableCC2.x.x original grammar and renammed Abstract Syntax Tree.
+ */
+
+public class AddAstProductions extends DepthFirstAdapter
+{
+
+  LinkedList listAstProd = new TypedLinkedList();
+  private boolean firstAlt;
+
+  public AddAstProductions()
+  {}
+
+  public void caseAProd(AProd node)
+  {
+    firstAlt = true;
+    listOfAstAlts = new TypedLinkedList();
+
+    /*
+     * Here, we assume that if there is no Abstract Syntax Tree Section specified
+     * in the grammar, no transformations syntax is allowed in Productions section
+     */
+    if(node.getArrow() != null)
+    {
+      error(node.getArrow());
+    }
+
+    Object []list_alt = (Object[]) node.getAlts().toArray();
+    for(int i=0; i<list_alt.length; i++)
+    {
+      ((PAlt)list_alt[i]).apply(this);
+    }
+
+    AAstProd astProd = new AAstProd(new TId(node.getId().getText()), listOfAstAlts);
+    listAstProd.add(astProd);
+  }
+
+  public void outAGrammar(AGrammar node)
+  {
+    node.setAst(new AAst(listAstProd));
+  }
+
+  public void inAAlt(AAlt node)
+  {
+    listElems = new TypedLinkedList();
+    processingParsedAlt = true;
+  }
+
+  public void inAAltTransform(AAltTransform node)
+  {
+    if(node.getLBrace() != null)
+    {
+      error(node.getLBrace());
+    }
+  }
+
+  public void outAAlt(AAlt node)
+  {
+    TId aAltname = node.getAltName() == null ? null : (TId)node.getAltName().clone();
+    AAstAlt astAlt = new AAstAlt(aAltname, listElems);
+
+    listOfAstAlts.add(astAlt);
+    processingParsedAlt = false;
+  }
+
+  boolean processingParsedAlt;
+
+  public void inAElem(AElem node)
+  {
+    if(processingParsedAlt)
+    {
+      AElem tmp = (AElem)node.clone();
+      listElems.add(tmp);
+    }
+  }
+
+  LinkedList listElems;
+  LinkedList listOfAstAlts;
+
+  public void error(Token token)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "AST transformations are not allowed because there are no section Abstract Syntax Tree");
+  }
+}
diff --git a/src/org/sablecc/sablecc/AddEventualEmptyTransformationToProductions.java b/src/org/sablecc/sablecc/AddEventualEmptyTransformationToProductions.java
new file mode 100644
index 0000000..3c0d404
--- /dev/null
+++ b/src/org/sablecc/sablecc/AddEventualEmptyTransformationToProductions.java
@@ -0,0 +1,81 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+import java.io.*;
+
+/*
+ * AddEventualEmptyTransformationToProductions
+ * 
+ * This class provide the second part of the support by SableCC3.x.x 
+ * for SableCC2.x.x grammars.
+ * Its role is to add Productions and Alternatives transformations within
+ * Productions section.
+ * Assuming this is run after the eventual AddAstProductions it also add
+ * default transformations to productions and alternatives which have not
+ * not specified them.
+ */
+
+public class AddEventualEmptyTransformationToProductions extends DepthFirstAdapter
+{
+  private String currentProd;
+  private String currentAlt;
+
+  private ResolveIds ids;
+  private ResolveAstIds ast_ids;
+
+  public AddEventualEmptyTransformationToProductions(ResolveIds ids, ResolveAstIds ast_ids)
+  {
+    this.ids = ids;
+    this.ast_ids = ast_ids;
+  }
+
+  public void inAProd(AProd node)
+  {
+    currentProd = (String)ids.names.get(node);
+
+    /* If there is no transformation specified for the production
+     * and there is no AST production which has the same name as the current
+     * CST production, this production is transformed into an empty
+     */
+    if(node.getArrow() == null && ast_ids.ast_prods.get(currentProd) == null )
+    {
+      node.setArrow(new TArrow(node.getId().getLine(), node.getId().getPos()+node.getId().getText().length() ));
+      node.setProdTransform(new LinkedList());
+
+      AAlt []alts = (AAlt[]) node.getAlts().toArray(new AAlt[0]);
+
+      for(int i=0; i<alts.length; i++)
+      {
+        alts[i].apply( new DepthFirstAdapter()
+                       {
+                         public void inAAlt(AAlt node)
+                         {
+                           if(node.getAltTransform() != null && ((AAltTransform)node.getAltTransform()).getTerms().size() > 0)
+                           {
+                             error(((AAltTransform)node.getAltTransform()).getLBrace());
+                           }
+                           node.setAltTransform( new AAltTransform(new TLBrace(), new LinkedList(), new TRBrace()) );
+                         }
+                       }
+                     );
+      }
+    }
+  }
+
+  private static void error(Token token)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "This alternative transformation should be transformed to {-> } " );
+  }
+
+}
diff --git a/src/org/sablecc/sablecc/AddProdTransformAndAltTransform.java b/src/org/sablecc/sablecc/AddProdTransformAndAltTransform.java
new file mode 100644
index 0000000..336a94e
--- /dev/null
+++ b/src/org/sablecc/sablecc/AddProdTransformAndAltTransform.java
@@ -0,0 +1,144 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+import java.io.*;
+
+/*
+ * AddProdTransformAndAltTransform
+ * 
+ * This class provide the second part of the support by SableCC3.x.x 
+ * for SableCC2.x.x grammars.
+ * Its role is to add Productions and Alternatives transformations within
+ * Productions section.
+ * Assuming this is run after the eventual AddAstProductions it also add
+ * default transformations to productions and alternatives which have not
+ * not specified them.
+ */
+
+public class AddProdTransformAndAltTransform extends DepthFirstAdapter
+{
+
+  private String currentProdId;
+  private String currentAlt;
+
+  public void inAProd(final AProd production)
+  {
+    currentProdId = production.getId().getText();
+
+    if(production.getArrow() == null)
+    {
+      AElem elem = new AElem(null, new AProductionSpecifier(), new TId(currentProdId), null);
+      LinkedList listOfProdTransformElem = new LinkedList();
+      listOfProdTransformElem.add(elem);
+      production.setProdTransform(listOfProdTransformElem);
+      production.setArrow(new TArrow());
+    }
+  }
+
+  private int i;
+  private LinkedList list;
+
+  public void inAAlt(AAlt alt)
+  {
+    if(alt.getAltTransform() == null)
+    {
+      currentAlt = currentProdId;
+      list = new LinkedList();
+      AProdName aProdName = new AProdName(new TId(currentProdId), null);
+
+      if(alt.getAltName() != null)
+      {
+        aProdName.setProdNameTail( new TId(alt.getAltName().getText()) );
+      }
+
+      if( alt.getElems().size() > 0 )
+      {
+        Object temp[] = alt.getElems().toArray();
+
+        for(i = 0; i < temp.length; i++)
+        {
+          ((PElem) temp[i]).apply(new DepthFirstAdapter()
+                                  {
+                                    public void caseAElem(AElem elem)
+                                    {
+                                      PTerm term;
+                                      String termId;
+                                      boolean elemNameExplicitelySpecified = false;
+
+                                      if(elem.getElemName() != null)
+                                      {
+                                        termId = elem.getElemName().getText();
+                                        elemNameExplicitelySpecified = true;
+                                      }
+                                      else
+                                      {
+                                        termId = elem.getId().getText();
+                                      }
+
+                                      if( (elem.getUnOp() != null) &&
+                                          ( (elem.getUnOp() instanceof AStarUnOp) || (elem.getUnOp() instanceof APlusUnOp) ) )
+                                      {
+                                        LinkedList listP = new LinkedList();
+                                        if( !elemNameExplicitelySpecified && (elem.getSpecifier()!= null) )
+                                        {
+                                          if(elem.getSpecifier() instanceof ATokenSpecifier)
+                                          {
+                                            listP.add( new ASimpleListTerm(new ATokenSpecifier(), new TId(termId), null ) );
+                                            term = new AListTerm(new TLBkt(), listP);
+                                          }
+                                          else
+                                          {
+                                            listP.add( new ASimpleListTerm(new AProductionSpecifier(), new TId(termId), null ) );
+                                            term = new AListTerm(new TLBkt(), listP);
+                                          }
+                                        }
+                                        else
+                                        {
+                                          listP.add( new ASimpleListTerm(null, new TId(termId), null) );
+                                          term = new AListTerm(new TLBkt(), listP);
+                                        }
+                                      }
+                                      else
+                                      {
+                                        if( !elemNameExplicitelySpecified && (elem.getSpecifier()!= null) )
+                                        {
+
+                                          if(elem.getSpecifier() instanceof ATokenSpecifier)
+                                          {
+                                            term = new ASimpleTerm( new ATokenSpecifier(), new TId(termId), null);
+                                          }
+                                          else
+                                          {
+                                            term = new ASimpleTerm( new AProductionSpecifier(), new TId(termId), null);
+                                          }
+                                        }
+                                        else
+                                        {
+                                          term = new ASimpleTerm( null, new TId(termId), null);
+                                        }
+                                      }
+
+                                      list.add(term);
+                                    }
+                                  }
+                                 );
+        }
+      }
+
+      ANewTerm newTerm = new ANewTerm(aProdName, new TLPar(), list);
+      LinkedList lst = new LinkedList();
+      lst.add(newTerm);
+
+      alt.setAltTransform(new AAltTransform(new TLBrace(), lst, new TRBrace()));
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/AltTransformAdapter.java b/src/org/sablecc/sablecc/AltTransformAdapter.java
new file mode 100644
index 0000000..fc12732
--- /dev/null
+++ b/src/org/sablecc/sablecc/AltTransformAdapter.java
@@ -0,0 +1,143 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.io.*;
+
+public class AltTransformAdapter extends DepthFirstAdapter
+{
+  ResolveAltIds altIds;
+  String currentNewAltName;
+
+  private Map isElementIsAlist;
+
+  private LinkedList listSimpleTermTransform;
+  private Map simpleTermTransform;
+  private Map simpleTermOrsimpleListTermTypes;
+
+  AltTransformAdapter(Map simpleTermTransform,
+                      LinkedList listSimpleTermTransform,
+                      String currentNewAltName,
+                      ResolveAltIds altIds, Map isElementIsAlist,
+                      Map simpleTermOrsimpleListTermTypes)
+  {
+    this.currentNewAltName = currentNewAltName;
+    this.altIds = altIds;
+    this.isElementIsAlist = isElementIsAlist;
+    this.listSimpleTermTransform = listSimpleTermTransform;
+    this.simpleTermTransform = simpleTermTransform;
+    this.simpleTermOrsimpleListTermTypes = simpleTermOrsimpleListTermTypes;
+  }
+
+  public void inASimpleTerm(ASimpleTerm node)
+  {
+    String name = node.getId().getText();
+
+    if( !((LinkedList)altIds.alts_elems.get(currentNewAltName)).contains(name) &&
+        !((LinkedList)altIds.alts_elems.get(currentNewAltName)).contains("$"+name) )
+    {
+      node.replaceBy( new ANullTerm() );
+    }
+
+    if( isElementIsAlist.get(currentNewAltName+name) != null )
+    {
+      TId simpleTermTail;
+      if(node.getSimpleTermTail() != null)
+      {
+        simpleTermTail = node.getSimpleTermTail();
+      }
+      else
+      {
+        simpleTermTail = new TId( (String)isElementIsAlist.get(currentNewAltName+name) );
+      }
+
+      ASimpleTerm asimpleTerm = new ASimpleTerm( node.getSpecifier(), node.getId(), simpleTermTail);
+
+      if(simpleTermOrsimpleListTermTypes.get(node) != null)
+      {
+        simpleTermOrsimpleListTermTypes.put(asimpleTerm, (String)simpleTermOrsimpleListTermTypes.get(node));
+      }
+
+      node.replaceBy(asimpleTerm);
+      simpleTermTransform.put(asimpleTerm, "L"+ResolveIds.name((String)isElementIsAlist.get(currentNewAltName+name)) );
+
+      //Terms are added here only if they were implicitely transformed
+      listSimpleTermTransform.add( asimpleTerm );
+    }
+  }
+
+  public void inASimpleListTerm(ASimpleListTerm node)
+  {
+    String name = node.getId().getText();
+
+    if( !((LinkedList)altIds.alts_elems.get(currentNewAltName)).contains(name) &&
+        !((LinkedList)altIds.alts_elems.get(currentNewAltName)).contains("$"+name) )
+    {
+      node.replaceBy( null );
+    }
+
+    if( isElementIsAlist.get(currentNewAltName+name) != null)
+    {
+      TId simpleTermTail;
+      if(node.getSimpleTermTail() != null)
+      {
+        simpleTermTail = node.getSimpleTermTail();
+      }
+      else
+      {
+        simpleTermTail = new TId((String)isElementIsAlist.get(currentNewAltName+name));
+      }
+
+      TId tid;
+      tid = ( ((LinkedList)altIds.alts_elems_list_elemName.get(currentNewAltName)).contains(name) ?
+              node.getId() : new TId( "$" + node.getId().getText() ) );
+
+      ASimpleListTerm asimpleListTerm = new ASimpleListTerm( node.getSpecifier(), tid, simpleTermTail);
+
+      if(simpleTermOrsimpleListTermTypes.get(node) != null)
+      {
+        simpleTermOrsimpleListTermTypes.put(asimpleListTerm, (String)simpleTermOrsimpleListTermTypes.get(node));
+      }
+
+      node.replaceBy(asimpleListTerm);
+      simpleTermTransform.put(asimpleListTerm, "L"+ResolveIds.name((String)isElementIsAlist.get(currentNewAltName+name) ));
+
+      //Terms are added here only if they were implicitely transformed
+      listSimpleTermTransform.add( asimpleListTerm );
+    }
+  }
+
+  public void outAListTerm(AListTerm node)
+  {
+    if( (node.getListTerms() != null) && (node.getListTerms().size() > 0) )
+    {
+      Object[] temp = node.getListTerms().toArray();
+
+      if(simpleTermTransform.get(temp[0]) != null)
+      {
+        String firstTermType = (String)simpleTermTransform.get(temp[0]);
+
+        if(firstTermType != null)
+        {
+          if(!firstTermType.startsWith("L"))
+          {
+            simpleTermTransform.put(node, "L" + firstTermType);
+          }
+          else
+          {
+            simpleTermTransform.put(node, firstTermType);
+          }
+        }
+      }
+    }
+  }
+
+}
diff --git a/src/org/sablecc/sablecc/AlternativeElementTypes.java b/src/org/sablecc/sablecc/AlternativeElementTypes.java
new file mode 100644
index 0000000..1c74f44
--- /dev/null
+++ b/src/org/sablecc/sablecc/AlternativeElementTypes.java
@@ -0,0 +1,68 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+import java.io.*;
+
+public class AlternativeElementTypes extends DepthFirstAdapter
+{
+  private Map altElemTypes = new TypedHashMap(StringCast.instance,
+                             StringCast.instance);
+
+  private ResolveIds ids;
+  private String currentAlt;
+
+  public AlternativeElementTypes(ResolveIds ids)
+  {
+    this.ids = ids;
+  }
+
+  public Map getMapOfAltElemType()
+  {
+    return altElemTypes;
+  }
+
+  public void caseAAst(AAst node)
+  {}
+
+  public void caseAProd(final AProd production)
+  {
+    Object []temp = production.getAlts().toArray();
+    for(int i = 0; i<temp.length; i++)
+    {
+      ((PAlt)temp[i]).apply(this);
+    }
+  }
+
+  public void caseAAlt(AAlt node)
+  {
+    currentAlt = (String)ids.names.get(node);
+    Object []temp = node.getElems().toArray();
+    for(int i = 0; i<temp.length; i++)
+    {
+      ((PElem)temp[i]).apply(this);
+    }
+  }
+
+  public void inAElem(AElem node)
+  {
+    String elemType = (String)ids.elemTypes.get(node);
+
+    if(node.getElemName() != null)
+    {
+      altElemTypes.put(currentAlt+"."+node.getElemName().getText(), elemType );
+    }
+    else
+    {
+      altElemTypes.put(currentAlt+"."+node.getId().getText(), elemType );
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/BooleanCast.java b/src/org/sablecc/sablecc/BooleanCast.java
new file mode 100644
index 0000000..b14570e
--- /dev/null
+++ b/src/org/sablecc/sablecc/BooleanCast.java
@@ -0,0 +1,23 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+
+public class BooleanCast implements Cast
+{
+  public final static BooleanCast instance = new BooleanCast();
+
+  private BooleanCast()
+  {}
+
+  public  Object cast(Object o)
+  {
+    return (Boolean) o;
+  }
+}
diff --git a/src/org/sablecc/sablecc/COPYING-LESSER b/src/org/sablecc/sablecc/COPYING-LESSER
new file mode 100644
index 0000000..223ede7
--- /dev/null
+++ b/src/org/sablecc/sablecc/COPYING-LESSER
@@ -0,0 +1,504 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+

+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+

+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+

+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+

+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+

+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+

+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+

+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+

+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+

+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/src/org/sablecc/sablecc/Cast.java b/src/org/sablecc/sablecc/Cast.java
new file mode 100644
index 0000000..3c17b13
--- /dev/null
+++ b/src/org/sablecc/sablecc/Cast.java
@@ -0,0 +1,13 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+public interface Cast
+{
+  Object cast(Object o);
+}
diff --git a/src/org/sablecc/sablecc/CharSet.java b/src/org/sablecc/sablecc/CharSet.java
new file mode 100644
index 0000000..b43bd7b
--- /dev/null
+++ b/src/org/sablecc/sablecc/CharSet.java
@@ -0,0 +1,226 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import java.util.Enumeration;
+import java.util.Vector;
+
+public class CharSet implements Cloneable
+{
+  private final Vector intervals = new Vector(0);
+
+  public CharSet(char c)
+  {
+    intervals.addElement(new Interval(c, c));
+  }
+
+  public CharSet(char start, char end)
+  {
+    intervals.addElement(new Interval(start, end));
+  }
+
+  private CharSet(Vector intervals)
+  {
+    for(Enumeration e = intervals.elements(); e.hasMoreElements();)
+    {
+      this.intervals.addElement(((Interval) e.nextElement()).clone());
+    }
+  }
+
+  public Object clone()
+  {
+    return new CharSet(intervals);
+  }
+
+  public Interval findOverlap(Interval interval1)
+  {
+    int low = 0;
+    int high = intervals.size() - 1;
+    Interval interval2;
+    Interval result = null;
+
+    while(high >= low)
+    {
+      int middle = (high + low) / 2;
+
+      interval2 = (Interval) intervals.elementAt(middle);
+
+      if(interval1.start <= interval2.end)
+      {
+        if(interval1.end >= interval2.start)
+        {
+          result = interval2;
+          // we continue, to find the lowest matching interval!
+        }
+
+        high = middle - 1;
+      }
+      else
+      {
+        low = middle + 1;
+      }
+    }
+
+    return result;
+  }
+
+  private void remove
+    (Interval interval)
+  {
+    intervals.removeElement(interval);
+  }
+
+  private void add
+    (Interval interval)
+  {
+    for(int i = 0; i < intervals.size(); i++)
+    {
+      Interval iv = (Interval) intervals.elementAt(i);
+
+      if(iv.start > interval.start)
+      {
+        intervals.insertElementAt(interval, i);
+        return;
+      }
+    }
+
+    intervals.addElement(interval);
+  }
+
+  public CharSet union(CharSet chars)
+  {
+    CharSet result = (CharSet) clone();
+
+    Interval interval;
+    Interval largeInterval;
+    Interval overlap;
+
+    for(Enumeration e = chars.intervals.elements(); e.hasMoreElements();)
+    {
+      interval = (Interval) ((Interval) e.nextElement()).clone();
+
+      do
+      {
+        largeInterval = new Interval(
+                          (interval.start == 0) ? (char) 0 : (char) (interval.start - 1),
+                          (interval.end == 0xffff) ? (char) 0xffff : (char) (interval.end + 1));
+
+        overlap = result.findOverlap(largeInterval);
+        if(overlap != null)
+        {
+          result.remove(overlap);
+          interval.start = (char) Math.min(interval.start, overlap.start);
+          interval.end = (char) Math.max(interval.end, overlap.end);
+        }
+      }
+      while(overlap != null);
+
+      result.add(interval);
+    }
+
+    return result;
+  }
+
+  public CharSet diff(CharSet chars)
+  {
+    CharSet result = (CharSet) clone();
+
+    Interval interval;
+    Interval overlap;
+
+    for(Enumeration e = chars.intervals.elements(); e.hasMoreElements();)
+    {
+      interval = (Interval) ((Interval) e.nextElement()).clone();
+
+      do
+      {
+        overlap = result.findOverlap(interval);
+        if(overlap != null)
+        {
+          result.remove(overlap);
+          if(overlap.start < interval.start)
+          {
+            result.add(new Interval(overlap.start, (char) (interval.start - 1)));
+          }
+          if(overlap.end > interval.end)
+          {
+            result.add(new Interval((char) (interval.end + 1), overlap.end));
+          }
+        }
+      }
+      while(overlap != null);
+    }
+
+    return result;
+  }
+
+  public String toString()
+  {
+    StringBuffer result = new StringBuffer();
+
+    for(Enumeration e = intervals.elements(); e.hasMoreElements();)
+    {
+      result.append("[" + e.nextElement() + "] ");
+    }
+
+    return "" + result;
+  }
+
+  public static class Interval implements Cloneable
+  {
+    public Interval(char start, char end)
+    {
+      this.start = start;
+      this.end = end;
+    }
+
+    public Object clone()
+    {
+      return new Interval(start, end);
+    }
+
+    private String c(char c)
+    {
+      if((c >= 32) && (c < 127))
+      {
+        return "" + c;
+      }
+
+      return "" + ((int) c);
+    }
+
+    public String toString()
+    {
+      if(start < end)
+      {
+        return c(start) + " .. " + c(end);
+      }
+      else
+      {
+        return c(start);
+      }
+    }
+
+    public char start;
+    public char end;
+  }
+
+  public static class IntervalCast implements Cast
+  {
+    public final static IntervalCast instance = new IntervalCast();
+
+    private IntervalCast()
+    {}
+
+    public Object cast(Object o)
+    {
+      return (Interval) o;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/ComputeCGNomenclature.java b/src/org/sablecc/sablecc/ComputeCGNomenclature.java
new file mode 100644
index 0000000..4452150
--- /dev/null
+++ b/src/org/sablecc/sablecc/ComputeCGNomenclature.java
@@ -0,0 +1,329 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Last Modification date :: 04-February-2004
+ * Add termtail to simple term and simple listterm
+ * in order to support scripting generation for parser by 
+ * the new scripting engine.
+ *
+ * Fix bug related to code generation. 
+ * Method #public void caseASimpleTerm(ASimpleTerm node)#
+ * and #public void caseASimpleTerm(ASimpleTerm node)#
+ * were rewrite. The type of simpleTerm was the problem.
+*/
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+import java.io.*;
+
+public class ComputeCGNomenclature extends DepthFirstAdapter
+{
+  private String currentProd;
+  private String currentAlt;
+  private int counter;
+  private ResolveIds ids;
+  private ResolveProdTransformIds prodTransformIds;
+  private Map altElemTypes;
+
+  private final Map altTransformElemTypes = new TypedHashMap(
+        NodeCast.instance,
+        StringCast.instance);
+
+  private final Map termNumbers = new TypedHashMap(NodeCast.instance,
+                                  IntegerCast.instance);
+
+  public ComputeCGNomenclature(ResolveIds ids, ResolveProdTransformIds prodTransformIds)
+  {
+    this.ids = ids;
+    this.prodTransformIds = prodTransformIds;
+  }
+
+  public void setAltElemTypes(Map aMap)
+  {
+    this.altElemTypes = aMap;
+  }
+
+  public Map getAltTransformElemTypes()
+  {
+    return altTransformElemTypes;
+  }
+
+  public Map getTermNumbers()
+  {
+    return termNumbers;
+  }
+
+  public void caseAProd(final AProd production)
+  {
+    currentProd = "P" + ids.name(production.getId().getText());
+    Object []temp = production.getAlts().toArray();
+    for(int i = 0; i<temp.length; i++)
+    {
+      ((PAlt)temp[i]).apply(this);
+    }
+  }
+
+  public void inAAlt(AAlt nodeAlt)
+  {
+    counter = 0;
+
+    if(nodeAlt.getAltName() != null)
+    {
+      currentAlt = "A"+
+                   ids.name( nodeAlt.getAltName().getText() )+
+                   currentProd.substring(1);
+    }
+    else
+    {
+      currentAlt = "A" + currentProd.substring(1);
+    }
+
+    counter = 0;
+  }
+
+  public void caseAAst(AAst node)
+  {}
+
+  public void inAElem(AElem node)
+  {
+    String elemType = (String)ids.elemTypes.get(node);
+
+    if(node.getElemName() != null)
+    {
+      ids.altsElemNameTypes.put(currentAlt+"."+node.getElemName().getText(), elemType );
+    }
+  }
+
+  public void inANewTerm(ANewTerm node)
+  {
+    AProdName aProdName = (AProdName)node.getProdName();
+    String type = "P" + ids.name(aProdName.getId().getText());
+
+    altTransformElemTypes.put(node, type);
+    termNumbers.put(node, new Integer(++counter));
+  }
+
+  public void inANewListTerm(ANewListTerm node)
+  {
+    AProdName aProdName = (AProdName)node.getProdName();
+    String type = "P" + ids.name(aProdName.getId().getText());
+
+    altTransformElemTypes.put(node, type);
+    termNumbers.put(node, new Integer(++counter));
+  }
+
+  public void outAListTerm(AListTerm node)
+  {
+    if( node.getListTerms().size() > 0 )
+    {
+      Object[] temp = node.getListTerms().toArray();
+
+      String firstTermType = (String)altTransformElemTypes.get(temp[0]);
+
+      if(firstTermType != null)
+      {
+        if(!firstTermType.startsWith("L"))
+        {
+          altTransformElemTypes.put(node, "L" + firstTermType);
+        }
+        else
+        {
+          altTransformElemTypes.put(node, firstTermType);
+        }
+      }
+    }
+    else
+    {
+      altTransformElemTypes.put(node, "Lnull");
+    }
+    termNumbers.put(node, new Integer(++counter));
+  }
+
+  public void caseASimpleTerm(ASimpleTerm node)
+  {
+    String name;
+    String elemType = (String) this.altElemTypes.get( currentAlt+"."+node.getId().getText() );
+
+    if(node.getSimpleTermTail() == null)
+    {
+      name = elemType;
+      if(name.startsWith("P") )
+      {
+        //add termtail to the simpleterm
+        node.setSimpleTermTail( (TId)node.getId().clone() );
+      }
+    }
+    else
+    {
+      String termTail = node.getSimpleTermTail().getText();
+      name = (String)prodTransformIds.prodTransformElemTypesString.get(elemType+"."+termTail);
+    }
+
+    if(name.endsWith("?"))
+    {
+      name = name.substring(0, name.length()-1);
+    }
+
+    altTransformElemTypes.put(node, name);
+    termNumbers.put(node, new Integer(++counter));
+  }
+
+  /*
+  public void caseASimpleTerm(ASimpleTerm node)
+  {
+  String name;
+  String elemType = (String)altElemTypes.get( currentAlt+"."+node.getId().getText() );
+
+  if( ( (elemType != null) && elemType.startsWith("T") ) ||
+  ( (elemType == null) && ids.tokens.get("T" + ids.name(node.getId().getText())) != null ) )
+  {
+    if(elemType != null)
+    {
+      name = elemType;
+    }
+    else
+    {
+      name = "T" + ids.name(node.getId().getText());
+    }
+  }
+  else
+  {
+    if(node.getSimpleTermTail() == null)
+    {
+      if(elemType != null)
+  {
+        name = elemType;
+  }
+  else
+  {
+  name = "P" + ids.name(node.getId().getText());
+  }
+
+  //add termtail to the simpleterm
+  node.setSimpleTermTail( (TId)node.getId().clone() );
+    }
+    else
+    {
+      String prodType;
+  if(elemType != null)
+  {
+        prodType = elemType;
+  }
+  else
+  {
+        prodType = "P" + ids.name(node.getId().getText());
+  }
+
+  String termTail = node.getSimpleTermTail().getText();
+  name = (String)prodTransformIds.prodTransformElemTypesString.get(prodType+"."+termTail);
+    }
+  }
+
+  if(name.endsWith("?"))
+  {
+    name = name.substring(0, name.length()-1);
+  }
+  altTransformElemTypes.put(node, name);
+  termNumbers.put(node, new Integer(++counter));
+  }
+  */
+  public void caseANullTerm(ANullTerm node)
+  {
+    altTransformElemTypes.put(node, "null");
+    termNumbers.put(node, new Integer(++counter));
+  }
+
+  public void caseASimpleListTerm(ASimpleListTerm node)
+  {
+    String name;
+    String elemType = (String)altElemTypes.get( currentAlt+"."+node.getId().getText() );
+
+    if(node.getSimpleTermTail() == null)
+    {
+      name = elemType;
+      if( name.startsWith("P") )
+      {
+        //add termtail to the simpleterm
+        node.setSimpleTermTail( (TId)node.getId().clone() );
+      }
+    }
+    else
+    {
+      String termTail = node.getSimpleTermTail().getText();
+      name = (String)prodTransformIds.prodTransformElemTypesString.get(elemType+"."+termTail);
+    }
+
+    if(name.endsWith("?"))
+    {
+      name = name.substring(0, name.length()-1);
+    }
+    altTransformElemTypes.put(node, name);
+    termNumbers.put(node, new Integer(++counter));
+  }
+  /*
+  public void caseASimpleListTerm(ASimpleListTerm node)
+  {
+  String name;
+  String elemType = (String)altElemTypes.get( currentAlt+"."+node.getId().getText() );
+
+  if( ( (elemType != null) && elemType.startsWith("T") ) ||
+  ( (elemType == null) && ids.tokens.get("T" + ids.name(node.getId().getText())) != null ) )
+  {
+    if(elemType != null)
+    {
+      name = elemType;
+    }
+    else
+    {
+  name = "T" + ids.name(node.getId().getText());
+    }
+  }
+  //it seems to be a production without a specifier
+  else
+  {
+    if(node.getSimpleTermTail() == null)
+    {
+      if(elemType != null)
+  {
+        name = elemType;
+  }
+  else
+  {
+  name = "P" + ids.name(node.getId().getText());
+  }
+
+  //add termtail to the simpleterm
+  node.setSimpleTermTail( (TId)node.getId().clone() );
+    }
+    else
+    {
+      String prodType;
+  if(elemType != null)
+      {
+        prodType = elemType;
+  }
+  else
+      {
+        prodType = "P" + ids.name(node.getId().getText());
+  }
+  String termTail = node.getSimpleTermTail().getText();
+  name = (String)prodTransformIds.prodTransformElemTypesString.get(prodType+"."+termTail);
+    }
+  }
+  if(name.endsWith("?"))
+  {
+    name = name.substring(0, name.length()-1);
+  }
+  altTransformElemTypes.put(node, name);
+  termNumbers.put(node, new Integer(++counter));
+  }
+  */
+}
diff --git a/src/org/sablecc/sablecc/ComputeInlining.java b/src/org/sablecc/sablecc/ComputeInlining.java
new file mode 100644
index 0000000..7926289
--- /dev/null
+++ b/src/org/sablecc/sablecc/ComputeInlining.java
@@ -0,0 +1,176 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+
+/*
+ * Last Modification date : 23 07 2004
+ * fix bug : when an inlining of a production does not resolve a conflict
+ * the associated alternatives transformation should not be transformed.
+ * The bug was about transforming this instead.
+*/
+
+/*
+ * ComputeInlining
+ * This class takes SableCC grammar represented by the tree
+ * and a list of production to inline within this grammar and
+ * try to inline those productions.
+ */
+
+public class ComputeInlining
+{
+  //Productions implied in a conflict
+  private Set setOfProdToBeInline;
+
+  //Map of all productions in the grammar
+  private Map productionsMap;
+  private Start tree;
+
+  public ComputeInlining(Set set
+                           ,
+                           Map productionsMap,
+                           Start tree)
+  {
+    this.setOfProdToBeInline = set
+                                 ;
+    this.productionsMap = productionsMap;
+    this.tree = tree;
+  }
+
+  /**
+   * This method compute the inline of a all productions implied in a conflict
+   * in the grammar.
+   * It returns :
+   *    -- true if at least one production is inlined with success 
+   *    -- and false otherwise.
+   */
+  public boolean computeInlining()
+  {
+    final BooleanEx atLeastOneProductionInlined = new BooleanEx(false);
+    String []nameOfProds = (String[])setOfProdToBeInline.toArray(new String[0]);
+
+    for(int i=0; i<nameOfProds.length; i++)
+    {
+      final AProd prod = (AProd)productionsMap.get(nameOfProds[i]);
+
+      //We proceed inlining only if the production to inline is not recursive
+      //and if it doesn't have more than SableCC.inliningMaxAlts alternatives.
+      if( prod.getAlts().size() <= SableCC.inliningMaxAlts && !isProductionRecursive(prod) )
+      {
+        //This class construct a special data structure for the production to inline.
+        final In_Production in_production = new In_Production((AProd)prod.clone());
+
+        tree.apply(new DepthFirstAdapter()
+                   {
+                     public void caseAProd(AProd node)
+                     {
+                       //We do not inline the production itself.
+                       if(node.getId().getText().equals(prod.getId().getText()))
+                       {
+                         return;
+                       }
+
+                       Inlining inliningClass = new Inlining(node, in_production);
+
+                       //The proper inlining is done here(method inlineProduction)
+                       if( inliningClass.inlineProduction() && !atLeastOneProductionInlined.getValue())
+                       {
+                         atLeastOneProductionInlined.setValue(true);
+                       }
+                     }
+                   }
+                  );
+      }
+    }
+
+    LinkedList listOfGrammarProds = ((AProductions)((AGrammar)tree.getPGrammar()).getProductions()).getProds();
+
+    //Once the production is inlined, we do not need it anymore, so we remove it from the grammar.
+    String[] inlinedProductionsToRemove = (String[])Inlining.productionsToBeRemoved.toArray(new String[0]);
+    for(int i=0; i<inlinedProductionsToRemove.length; i++)
+    {
+      listOfGrammarProds.remove(productionsMap.get(inlinedProductionsToRemove[i]) );
+    }
+
+    Inlining.productionsToBeRemoved.clear();
+    return atLeastOneProductionInlined.getValue();
+  }
+
+  /*
+   * A production is recursive if one of its alternatives contains an occurrence
+   * of itself.
+   */
+  public boolean isProductionRecursive(final AProd production)
+  {
+    final BooleanEx recursive = new BooleanEx(false);
+    final String currentProdName = production.getId().getText();
+
+    production.apply(new DepthFirstAdapter()
+                     {
+                       public void caseAProd(AProd node)
+                       {
+                         Object temp[] = node.getAlts().toArray();
+                         for(int i = 0; i < temp.length; i++)
+                         {
+                           ((PAlt) temp[i]).apply(this);
+                         }
+                       }
+
+                       public void caseAAlt(AAlt node)
+                       {
+                         Object temp[] = node.getElems().toArray();
+                         for(int i = 0; i < temp.length; i++)
+                         {
+                           ((PElem) temp[i]).apply(this);
+                         }
+                       }
+
+                       public void caseAElem(AElem node)
+                       {
+                         if(node.getId().getText().equals(currentProdName))
+                         {
+                           if(node.getSpecifier() != null && node.getSpecifier() instanceof ATokenSpecifier)
+                           {
+                             return;
+                           }
+                           recursive.setValue(true);
+                         }
+                       }
+                     }
+                    );
+    return recursive.getValue();
+  }
+
+  /* This class is used to simulate final Boolean.
+   * Since final variable cannot be assigned value more than
+   * one time, we need another class which boolean value field
+   * can be changed so often as necessary.
+   */
+  class BooleanEx
+  {
+    boolean value;
+
+    BooleanEx(boolean value)
+    {
+      this.value = value;
+    }
+
+    void setValue(boolean value)
+    {
+      this.value = value;
+    }
+
+    boolean getValue()
+    {
+      return value;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/ComputeSimpleTermPosition.java b/src/org/sablecc/sablecc/ComputeSimpleTermPosition.java
new file mode 100644
index 0000000..792f9c4
--- /dev/null
+++ b/src/org/sablecc/sablecc/ComputeSimpleTermPosition.java
@@ -0,0 +1,107 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+import java.io.*;
+
+public class ComputeSimpleTermPosition extends DepthFirstAdapter
+{
+  String currentAlt;
+  String currentProd;
+  boolean processingParsedAlt;
+  private ResolveIds ids;
+  private int counter;
+
+  public final Map positionsMap = new TypedHashMap(
+                                    StringCast.instance,
+                                    StringCast.instance);
+
+  public final Map elems_position = new TypedHashMap(
+                                      StringCast.instance,
+                                      IntegerCast.instance);
+
+  public ComputeSimpleTermPosition(ResolveIds ids)
+  {
+    this.ids = ids;
+  }
+
+  public void inAProd(AProd node)
+  {
+    currentProd = ids.name(node.getId().getText());
+    ids.names.put(node, currentProd);
+  }
+
+  public void inAAlt(AAlt node)
+  {
+    counter = 0;
+    processingParsedAlt = true;
+
+    if(node.getAltName() != null)
+    {
+      currentAlt = "A" +
+                   ids.name( node.getAltName().getText() ) +
+                   currentProd;
+    }
+    else
+    {
+      currentAlt = "A" + currentProd;
+    }
+
+    ids.names.put(node, currentAlt);
+  }
+
+  public void inAElem(AElem node)
+  {
+    if(processingParsedAlt)
+    {
+      String currentElemName;
+      if(node.getElemName() != null)
+      {
+        currentElemName = currentAlt + "." + node.getElemName().getText();
+      }
+      else
+      {
+        currentElemName = currentAlt + "." + node.getId().getText();
+      }
+
+      elems_position.put(currentElemName, new Integer(++counter));
+    }
+
+    if(node.getSpecifier() != null &&
+        node.getSpecifier() instanceof ATokenSpecifier)
+    {
+      return;
+    }
+
+    String name = ids.name( node.getId().getText() );
+
+    String elemType = (String)ids.elemTypes.get(node);
+    if(processingParsedAlt && elemType.startsWith("P"))
+    {
+      String elemName;
+      if(node.getElemName() != null)
+      {
+        elemName = node.getElemName().getText();
+      }
+      else
+      {
+        elemName = node.getId().getText();
+      }
+
+      positionsMap.put(currentAlt+"."+elemName, elemType);
+    }
+  }
+
+  public void outAAlt(AAlt node)
+  {
+    processingParsedAlt = false;
+  }
+}
diff --git a/src/org/sablecc/sablecc/ConflictException.java b/src/org/sablecc/sablecc/ConflictException.java
new file mode 100644
index 0000000..9dc3a37
--- /dev/null
+++ b/src/org/sablecc/sablecc/ConflictException.java
@@ -0,0 +1,27 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.node.*;
+import java.util.Set;
+
+public class ConflictException extends Exception
+{
+  private Set conflictualProductions;
+
+  public ConflictException(Set conflictualProductions, String message)
+  {
+    super(message);
+    this.conflictualProductions = conflictualProductions;
+  }
+
+  public Set getConflictualProductions()
+  {
+    return conflictualProductions;
+  }
+}
diff --git a/src/org/sablecc/sablecc/ConstructNFA.java b/src/org/sablecc/sablecc/ConstructNFA.java
new file mode 100644
index 0000000..33c65ec
--- /dev/null
+++ b/src/org/sablecc/sablecc/ConstructNFA.java
@@ -0,0 +1,417 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+
+public class ConstructNFA extends DepthFirstAdapter
+{
+  private ResolveIds ids;
+  private String stateName;
+
+  private int i;
+
+  ConstructNFA(ResolveIds ids, String stateName)
+  {
+    this.ids = ids;
+    this.stateName = stateName;
+  }
+
+  public void outStart(Start node)
+  {
+    setOut(node, getOut(node.getPGrammar()));
+
+    // free memory
+    if(getOut(node.getPGrammar()) != null)
+      setOut(node.getPGrammar(), null);
+  }
+
+  public void outAGrammar(AGrammar node)
+  {
+    setOut(node, getOut(node.getTokens()));
+
+    // free memory
+    if(getOut(node.getTokens()) != null)
+      setOut(node.getTokens(), null);
+  }
+
+  public void outAHelperDef(AHelperDef node)
+  {
+    setOut(node, getOut(node.getRegExp()));
+
+    // free memory
+    if(getOut(node.getRegExp()) != null)
+      setOut(node.getRegExp(), null);
+  }
+
+  public void outATokens(ATokens node)
+  {
+    ATokenDef[] tokenDefs = (ATokenDef[]) node.getTokenDefs().toArray(new ATokenDef[0]);
+    NFA result = null;
+
+    for(int i = tokenDefs.length - 1; i >= 0 ; i--)
+    {
+      NFA nfa = (NFA) getOut(tokenDefs[i]);
+      if(nfa != null)
+      {
+        if(result == null)
+        {
+          result = nfa;
+        }
+        else
+        {
+          result = nfa.merge(result);
+        }
+
+        // free memory
+        if(getOut(tokenDefs[i]) != null)
+          setOut(tokenDefs[i], null);
+      }
+    }
+
+    if(result != null)
+      setOut(node, result);
+  }
+
+  public void outATokenDef(ATokenDef node)
+  {
+    Set set
+      = (Set) getOut(node.getStateList());
+    Object o1 = getOut(node.getRegExp());
+
+    if((set
+        == null) || (set.size() == 0) || set.contains(stateName))
+    {
+      //System.out.print("*");
+
+      NFA n1 = (o1 instanceof NFA) ? (NFA) o1 : new NFA((CharSet) o1);
+      String name = (String) ids.names.get(node);
+
+      n1.states[n1.states.length - 1].accept = name;
+      setOut(node, n1);
+    }
+    else
+    {
+      //System.out.print("-");
+    }
+
+    // free memory
+    if(getOut(node.getStateList()) != null)
+      setOut(node.getStateList(), null);
+    if(getOut(node.getRegExp()) != null)
+      setOut(node.getRegExp(), null);
+  }
+
+  public void outAStateList(AStateList node)
+  {
+    Set set
+      = new TreeSet();
+    AStateListTail[] stateListTails = (AStateListTail[]) node.getStateLists().toArray(new AStateListTail[0]);
+
+    for(int i = stateListTails.length - 1; i >= 0 ; i--)
+    {
+      String str = stateListTails[i].getId().getText().toUpperCase();
+      set.add(str);
+    }
+
+    set.add(node.getId().getText().toUpperCase());
+    setOut(node, set
+            );
+  }
+
+  public void outARegExp(ARegExp node)
+  {
+    AConcat[] concats = (AConcat[]) node.getConcats().toArray(new AConcat[0]);
+    NFA result = null;
+
+    if(concats.length > 1)
+    {
+      for(int i = concats.length - 1; i >= 0 ; i--)
+      {
+        Object o = getOut(concats[i]);
+        NFA nfa = (o instanceof NFA) ? (NFA) o : new NFA((CharSet) o);
+
+        if(result == null)
+        {
+          result = nfa;
+        }
+        else
+        {
+          result = nfa.alternate(result);
+        }
+
+        // free memory
+        if(getOut(concats[i]) != null)
+          setOut(concats[i], null);
+      }
+      setOut(node, result);
+    }
+    else if(concats.length == 1)
+    {
+      setOut(node, getOut(concats[0]));
+
+      // free memory
+      if(getOut(concats[0]) != null)
+        setOut(concats[0], null);
+    }
+  }
+
+  public void outAConcat(AConcat node)
+  {
+    AUnExp[] unExps = (AUnExp[]) node.getUnExps().toArray(new AUnExp[0]);
+
+    if(unExps.length == 0)
+    {
+      setOut(node, new NFA());
+    }
+    else if(unExps.length == 1)
+    {
+      setOut(node, getOut(unExps[0]));
+
+      // free memory
+      if(getOut(unExps[0]) != null)
+        setOut(unExps[0], null);
+    }
+    else
+    {
+      NFA result = null;
+
+      for(int i = unExps.length - 1; i >= 0 ; i--)
+      {
+        Object o = getOut(unExps[i]);
+        NFA nfa = (o instanceof NFA) ? (NFA) o : new NFA((CharSet) o);
+
+        if(result == null)
+        {
+          result = nfa;
+        }
+        else
+        {
+          result = nfa.concatenate(result);
+        }
+
+        // free memory
+        if(getOut(unExps[i]) != null)
+          setOut(unExps[i], null);
+      }
+
+      setOut(node, result);
+    }
+  }
+
+  public void outAUnExp(AUnExp node)
+  {
+    Object o = getOut(node.getBasic());
+
+    char c = ' ';
+    if(node.getUnOp() != null)
+      c = ((Character) getOut(node.getUnOp())).charValue();
+
+    switch(c)
+    {
+    case '*':
+      {
+        NFA n = (o instanceof NFA) ? (NFA) o : new NFA((CharSet) o);
+        setOut(node, n.zeroOrMore());
+      }
+      break;
+    case '?':
+      {
+        NFA n = (o instanceof NFA) ? (NFA) o : new NFA((CharSet) o);
+        setOut(node, n.zeroOrOne());
+      }
+      break;
+    case '+':
+      {
+        NFA n = (o instanceof NFA) ? (NFA) o : new NFA((CharSet) o);
+        setOut(node, n.oneOrMore());
+      }
+      break;
+    default:
+      {
+        setOut(node, o);
+      }
+      break;
+    }
+
+    // free memory
+    if(getOut(node.getBasic()) != null)
+      setOut(node.getBasic(), null);
+    if(getOut(node.getUnOp()) != null)
+      setOut(node.getUnOp(), null);
+  }
+
+  public void outACharBasic(ACharBasic node)
+  {
+    char c = ((Character) getOut(node.getChar())).charValue();
+    setOut(node, new CharSet(c));
+
+    // free memory
+    if(getOut(node.getChar()) != null)
+      setOut(node.getChar(), null);
+  }
+
+  public void outASetBasic(ASetBasic node)
+  {
+    setOut(node, getOut(node.getSet()));
+
+    // free memory
+    if(getOut(node.getSet()) != null)
+      setOut(node.getSet(), null);
+  }
+
+  public void outAStringBasic(AStringBasic node)
+  {
+    String s = node.getString().getText();
+    s = s.substring(1, s.length() -1);
+
+    setOut(node, new NFA(s));
+  }
+
+  public void outAIdBasic(AIdBasic node)
+  {
+    Object o = getOut((Node) ids.helpers.get(node.getId().getText()));
+
+    if(o instanceof NFA)
+    {
+      setOut(node, ((NFA) o).clone());
+    }
+    else
+    {
+      setOut(node, ((CharSet) o).clone());
+    }
+  }
+
+  public void outARegExpBasic(ARegExpBasic node)
+  {
+    setOut(node, getOut(node.getRegExp()));
+
+    // free memory
+    if(getOut(node.getRegExp()) != null)
+      setOut(node.getRegExp(), null);
+  }
+
+  public void outACharChar(ACharChar node)
+  {
+    setOut(node, new Character(node.getChar().getText().charAt(1)));
+  }
+
+  public void outADecChar(ADecChar node)
+  {
+    setOut(node, new Character((char) Integer.parseInt(node.getDecChar().getText())));
+  }
+
+  public void outAHexChar(AHexChar node)
+  {
+    setOut(node, new Character((char)
+                               Integer.parseInt(node.getHexChar().getText().substring(2), 16)));
+  }
+
+  public void outAOperationSet(AOperationSet node)
+  {
+    try
+    {
+      CharSet cs1 = (CharSet) getOut(node.getLeft());
+      CharSet cs2 = (CharSet) getOut(node.getRight());
+      char binop = ((Character) getOut(node.getBinOp())).charValue();
+
+      switch(binop)
+      {
+      case '+':
+        {
+          setOut(node, cs1.union(cs2));
+        }
+        break;
+      case '-':
+        {
+          setOut(node, cs1.diff(cs2));
+        }
+        break;
+      }
+    }
+    catch(Exception e)
+    {
+      throw new RuntimeException(node + " is invalid.");
+    }
+
+    // free memory
+    if(getOut(node.getLeft()) != null)
+      setOut(node.getLeft(), null);
+    if(getOut(node.getBinOp()) != null)
+      setOut(node.getBinOp(), null);
+    if(getOut(node.getRight()) != null)
+      setOut(node.getRight(), null);
+  }
+
+  public void outAIntervalSet(AIntervalSet node)
+  {
+    char c1 = ((Character) getOut(node.getLeft())).charValue();
+    char c2 = ((Character) getOut(node.getRight())).charValue();
+
+    if(c1 > c2)
+    {
+      throw new RuntimeException(node + " is invalid.");
+    }
+
+    setOut(node, new CharSet(c1, c2));
+
+    // free memory
+    if(getOut(node.getLeft()) != null)
+      setOut(node.getLeft(), null);
+    if(getOut(node.getRight()) != null)
+      setOut(node.getRight(), null);
+  }
+
+  public void outAStarUnOp(AStarUnOp node)
+  {
+    setOut(node, new Character('*'));
+  }
+
+  public void outAQMarkUnOp(AQMarkUnOp node)
+  {
+    setOut(node, new Character('?'));
+  }
+
+  public void outAPlusUnOp(APlusUnOp node)
+  {
+    setOut(node, new Character('+'));
+  }
+
+  public void outAPlusBinOp(APlusBinOp node)
+  {
+    setOut(node, new Character('+'));
+  }
+
+  public void outAMinusBinOp(AMinusBinOp node)
+  {
+    setOut(node, new Character('-'));
+  }
+
+  public Object getOut(Node node)
+  {
+    if(node == null)
+    {
+      return null;
+    }
+
+    return super.getOut(node);
+  }
+
+  public void setOut(Node node, Object out)
+  {
+    if(node == null)
+    {
+      throw new NullPointerException();
+    }
+
+    super.setOut(node, out);
+  }
+}
+
diff --git a/src/org/sablecc/sablecc/ConstructParserGenerationDatas.java b/src/org/sablecc/sablecc/ConstructParserGenerationDatas.java
new file mode 100644
index 0000000..c14f56a
--- /dev/null
+++ b/src/org/sablecc/sablecc/ConstructParserGenerationDatas.java
@@ -0,0 +1,86 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+
+public class ConstructParserGenerationDatas extends DepthFirstAdapter
+{
+  private ResolveIds ids;
+  private int currentAlt;
+  private boolean processingAst;
+  private String currentProd;
+
+  private Map alts;
+
+  public ConstructParserGenerationDatas(ResolveIds ids, Map alts)
+  {
+    this.ids = ids;
+    this.alts = alts;
+  }
+
+  public void caseAAst(AAst node)
+  {}
+
+  public void caseAProd(AProd node)
+  {
+    currentProd = (String) ids.names.get(node);
+    AAlt[] alts = (AAlt[])node.getAlts().toArray(new AAlt[0]);
+    for(int i=0; i<alts.length; i++)
+    {
+      alts[i].apply(this);
+    }
+  }
+
+  public void caseAAlt(AAlt node)
+  {
+    currentAlt = Grammar.addProduction(currentProd, (String) ids.names.get(node));
+    alts.put(ids.names.get(node), node);
+
+    AElem[] temp = (AElem[])node.getElems().toArray(new AElem[0]);
+    for(int i = 0; i < temp.length; i++)
+    {
+      temp[i].apply(this);
+    }
+  }
+
+  public void caseAElem(AElem node)
+  {
+    String name = ids.name(node.getId().getText());
+
+    if(node.getSpecifier() != null)
+    {
+      if(node.getSpecifier() instanceof ATokenSpecifier)
+      {
+        ids.elemTypes.put(node, "T" + name);
+      }
+      else
+      {
+        ids.elemTypes.put(node, "P" + name);
+      }
+    }
+    else
+    {
+      Object token = ids.tokens.get("T" + name);
+      Object production = ids.prods.get("P" + name);
+
+      if(token != null)
+      {
+        ids.elemTypes.put(node, "T" + name);
+      }
+      else
+      {
+        ids.elemTypes.put(node, "P" + name);
+      }
+    }
+    name = (String) ids.elemTypes.get(node);
+    Grammar.addSymbolToProduction(name, currentAlt);
+  }
+}
diff --git a/src/org/sablecc/sablecc/ConstructProdsMap.java b/src/org/sablecc/sablecc/ConstructProdsMap.java
new file mode 100644
index 0000000..cd02575
--- /dev/null
+++ b/src/org/sablecc/sablecc/ConstructProdsMap.java
@@ -0,0 +1,27 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+
+public class ConstructProdsMap extends DepthFirstAdapter
+{
+  public Map productionsMap =
+    new TypedTreeMap(StringCast.instance,
+                     NodeCast.instance);
+
+  private String currentProd;
+
+  public void caseAProd(AProd node)
+  {
+    currentProd = ResolveIds.name(node.getId().getText());
+    productionsMap.put("P" + currentProd, node);
+  }
+}
diff --git a/src/org/sablecc/sablecc/DFA.java b/src/org/sablecc/sablecc/DFA.java
new file mode 100644
index 0000000..3747676
--- /dev/null
+++ b/src/org/sablecc/sablecc/DFA.java
@@ -0,0 +1,403 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.Vector;
+import java.util.Hashtable;
+
+public class DFA
+{
+  public DFA(NFA nfa)
+  {
+    this.nfa = nfa;
+    construct();
+    optimize();
+  }
+
+  public NFA nfa;
+  public final Vector states = new Vector(0);
+  public final Hashtable finder = new Hashtable(1);
+
+  private void optimize()
+  {
+    Vector transitions = new Vector(0);
+
+    for(int i = 0; i < states.size(); i++)
+    {
+      DFA.State state = (DFA.State) states.elementAt(i);
+      transitions.addElement(new Vector(0));
+
+      for(int j = 0; j < state.transitions.size(); j++)
+      {
+        int max = 0;
+        int st = -1;
+
+        for(int k = 0; k < i; k++)
+        {
+          int match = match(i,j,k);
+
+          if(match > max)
+          {
+            max = match;
+            st = k;
+          }
+        }
+
+        if(max < 2)
+        {
+          ((Vector) transitions.elementAt(i)).addElement(
+            state.transitions.elementAt(j));
+        }
+        else
+        {
+          DFA.Transition transition1 =
+            (DFA.Transition) state.transitions.elementAt(j);
+          DFA.Transition transition2 =
+            (DFA.Transition) state.transitions.elementAt(j + max - 1);
+
+          DFA.Transition transition =
+            new DFA.Transition(
+              new CharSet.Interval(
+                transition1.interval().start,
+                transition2.interval().end),
+              -2 - st);
+
+          ((Vector) transitions.elementAt(i)).addElement(transition);
+          j += max - 1;
+        }
+      }
+    }
+
+    for(int i = 0; i < states.size(); i++)
+    {
+      DFA.State state = (DFA.State) states.elementAt(i);
+      state.transitions = (Vector) transitions.elementAt(i);
+    }
+  }
+
+  private int match(int st1, int tr, int st2)
+  {
+    DFA.State state1 = (DFA.State) states.elementAt(st1);
+    DFA.State state2 = (DFA.State) states.elementAt(st2);
+
+    DFA.Transition first =
+      (DFA.Transition) state1.transitions.elementAt(tr);
+
+    int j = -1;
+
+    for(int i = 0; i < state2.transitions.size(); i++)
+    {
+      DFA.Transition transition =
+        (DFA.Transition) state2.transitions.elementAt(i);
+
+      if(transition.match(first))
+      {
+        j = i;
+        break;
+      }
+    }
+
+    if(j == -1)
+    {
+      return 0;
+    }
+
+    int max = 0;
+    int i = tr;
+
+    while((i < state1.transitions.size()) &&
+          (j < state2.transitions.size()))
+    {
+      DFA.Transition transition1 =
+        (DFA.Transition) state1.transitions.elementAt(i);
+
+      DFA.Transition transition2 =
+        (DFA.Transition) state2.transitions.elementAt(j);
+
+      if(!transition1.match(transition2))
+      {
+        return max;
+      }
+
+      max++;
+      i++;
+      j++;
+    }
+
+    return max;
+  }
+
+  private void construct()
+  {
+    computeEClosures();
+
+    IntSet initial = new IntSet();
+    initial.or(eclosure(0));
+
+    State state = new State(initial);
+    states.addElement(state);
+    finder.put(state.nfaStates, new Integer(0));
+
+    int i = -1;
+    while(++i < states.size())
+    {
+      System.out.print(".");
+
+      state = (State) states.elementAt(i);
+
+      CharSet.Interval interval = new CharSet.Interval((char) 0, (char) 0xffff);
+
+      do
+      {
+        IntSet destination = new IntSet();
+        interval.end = (char) 0xffff;
+        boolean modified = false;
+
+        int[] elements = state.nfaStates.elements();
+
+        for(int k = 0; k < elements.length; k++)
+        {
+          int j = elements[k];
+
+          if((nfa.states[j].transitions[0] != null) &&
+              (nfa.states[j].transitions[0].chars != null))
+          {
+            CharSet.Interval overlap =
+              nfa.states[j].transitions[0].chars.findOverlap(interval);
+
+            if(overlap != null)
+            {
+              if(overlap.start > interval.start)
+              {
+                interval.end = (char) (overlap.start - 1);
+              }
+              else
+              {
+                destination.set(nfa.states[j].transitions[0].destination);
+                modified = true;
+
+                if(overlap.end < interval.end)
+                {
+                  interval.end = overlap.end;
+                }
+              }
+            }
+          }
+
+          if((nfa.states[j].transitions[1] != null) &&
+              (nfa.states[j].transitions[1].chars != null))
+          {
+            CharSet.Interval overlap =
+              nfa.states[j].transitions[1].chars.findOverlap(interval);
+
+            if(overlap != null)
+            {
+              if(overlap.start > interval.start)
+              {
+                interval.end = (char) (overlap.start - 1);
+              }
+              else
+              {
+                destination.set(nfa.states[j].transitions[1].destination);
+
+                if(overlap.end < interval.end)
+                {
+                  interval.end = overlap.end;
+                }
+              }
+            }
+          }
+        }
+
+        if(modified)
+        {
+          destination = eclosure(destination);
+          Integer dest = (Integer) finder.get(destination);
+
+          if(dest != null)
+          {
+            state.transitions.addElement(
+              new Transition((CharSet.Interval) interval.clone(), dest.intValue()));
+          }
+          else
+          {
+            State s = new State(destination);
+            states.addElement(s);
+            finder.put(s.nfaStates, new Integer(states.size() - 1));
+
+            state.transitions.addElement(
+              new Transition((CharSet.Interval) interval.clone(), states.size() - 1));
+          }
+        }
+
+        interval.start = (char) (interval.end + 1);
+      }
+      while(interval.end != (char) 0xffff);
+
+      //            System.out.println(state);
+    }
+
+    //        System.out.println(this);
+  }
+
+  private IntSet[] eclosures;
+
+  private void computeEClosures()
+  {
+    eclosures = new IntSet[nfa.states.length];
+
+    for(int i = 0; i < nfa.states.length; i++)
+    {
+      System.out.print(".");
+
+      IntSet set
+        = new IntSet();
+      eclosure(i, set
+                );
+      eclosures[i] = set
+                       ;
+    }
+
+    System.out.println();
+  }
+
+  private IntSet eclosure(int state)
+  {
+    return eclosures[state];
+  }
+
+  private void eclosure(int state, IntSet nfaStates)
+  {
+    if(eclosures[state] != null)
+    {
+      nfaStates.or(eclosures[state]);
+      return;
+    }
+
+    nfaStates.set(state);
+
+    if((nfa.states[state].transitions[0] != null) &&
+        (nfa.states[state].transitions[0].chars == null) &&
+        (!nfaStates.get(nfa.states[state].transitions[0].destination)))
+
+    {
+      eclosure(nfa.states[state].transitions[0].destination, nfaStates);
+    }
+
+    if((nfa.states[state].transitions[1] != null) &&
+        (nfa.states[state].transitions[1].chars == null) &&
+        (!nfaStates.get(nfa.states[state].transitions[1].destination)))
+
+    {
+      eclosure(nfa.states[state].transitions[1].destination, nfaStates);
+    }
+  }
+
+  private IntSet eclosure(IntSet nfaStates)
+  {
+    IntSet result = new IntSet();
+
+    int[] elements = nfaStates.elements();
+
+    for(int j = 0; j < elements.length; j++)
+    {
+      int i = elements[j];
+
+      result.or(eclosure(i));
+    }
+
+    return result;
+  }
+
+  public String toString()
+  {
+    StringBuffer result = new StringBuffer();
+
+    for(int i = 0; i < states.size(); i++)
+    {
+      result.append(i + ": " + states.elementAt(i) +
+                    System.getProperty("line.separator"));
+    }
+
+    return result.toString();
+  }
+
+  public static class State
+  {
+    public State(IntSet nfaStates)
+    {
+      this.nfaStates = nfaStates;
+    }
+
+    public IntSet nfaStates = new IntSet();
+    public Vector transitions = new Vector(0);
+    public int accept;
+
+    public String toString()
+    {
+      StringBuffer result = new StringBuffer();
+
+      /*            for(int i = 0; i < nfaStates.size(); i++)
+                  {
+                      if(nfaStates.get(i))
+                      {
+                          if(nfa.states[i].accept != null)
+                          {
+                              result.append("(" + nfa.states[i].accept + ")");
+                          }
+                      }
+                  }*/
+
+      for(int i = 0; i < transitions.size(); i++)
+      {
+        result.append(transitions.elementAt(i) + ",");
+      }
+
+      return result /*+ " " + nfaStates*/ + "";
+    }
+  }
+
+  public static class Transition
+  {
+    private char start;
+    private char end;
+
+    public int destination;
+
+    public Transition(CharSet.Interval interval, int destination)
+    {
+      this.start = interval.start;
+      this.end = interval.end;
+      this.destination = destination;
+    }
+
+    public CharSet.Interval interval()
+    {
+      return new CharSet.Interval(start, end);
+    }
+
+    public Transition(Transition transition)
+    {
+      start = transition.start;
+      end = transition.end;
+      destination = transition.destination;
+    }
+
+    public String toString()
+    {
+      return destination + ":[" + interval() + "]";
+    }
+
+    public boolean match(Transition transition)
+    {
+      return (start == transition.start) &&
+             (end == transition.end) &&
+             (destination == transition.destination);
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/DisplayLicense.java b/src/org/sablecc/sablecc/DisplayLicense.java
new file mode 100644
index 0000000..7fae95d
--- /dev/null
+++ b/src/org/sablecc/sablecc/DisplayLicense.java
@@ -0,0 +1,68 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.io.*;
+
+class DisplayLicense
+{
+  DisplayLicense()
+  {
+    try
+    {
+      BufferedReader in =
+        new BufferedReader(
+          new InputStreamReader(
+            getClass().getResourceAsStream("LICENSE")));
+      System.out.println("---- FILE: LICENSE ----");
+
+      String s;
+      while((s = in.readLine()) != null)
+      {
+        System.out.println(s);
+      }
+      in.close();
+
+      System.out.println("---- END OF FILE: SableCC-LICENSE ----");
+      System.out.println();
+
+      System.out.println("---- FILE: AUTHORS ----");
+      in =
+        new BufferedReader(
+          new InputStreamReader(
+            getClass().getResourceAsStream("AUTHORS")));
+
+      while((s = in.readLine()) != null)
+      {
+        System.out.println(s);
+      }
+      in.close();
+      System.out.println("---- END OF FILE: AUTHORS ----");
+      System.out.println();
+
+      System.out.println("---- FILE: COPYING-LESSER ----");
+
+      in =
+        new BufferedReader(
+          new InputStreamReader(
+            getClass().getResourceAsStream("COPYING-LESSER")));
+
+      while((s = in.readLine()) != null)
+      {
+        System.out.println(s);
+      }
+      in.close();
+      System.out.println("---- END OF FILE: COPYING-LESSER ----");
+    }
+    catch(Exception e)
+    {
+      System.out.println(e);
+      System.exit(1);
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/GenAlts.java b/src/org/sablecc/sablecc/GenAlts.java
new file mode 100644
index 0000000..db62b6d
--- /dev/null
+++ b/src/org/sablecc/sablecc/GenAlts.java
@@ -0,0 +1,420 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+import java.io.*;
+
+public class GenAlts extends DepthFirstAdapter
+{
+  private MacroExpander macros;
+  private ResolveAstIds ast_ids;
+  private File pkgDir;
+  private String pkgName;
+  private List elemList;
+
+  private String currentProd;
+  ElemInfo info;
+  //    final GenAlts instance = this;
+
+  public GenAlts(ResolveAstIds ast_ids)
+  {
+    this.ast_ids = ast_ids;
+    try
+    {
+      macros = new MacroExpander(
+                 new InputStreamReader(
+                   getClass().getResourceAsStream("alternatives.txt")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("unable to open alternatives.txt.");
+    }
+
+    pkgDir = new File(ast_ids.astIds.pkgDir, "node");
+    pkgName = ast_ids.astIds.pkgName.equals("") ? "node" : ast_ids.astIds.pkgName + ".node";
+
+    if(!pkgDir.exists())
+    {
+      if(!pkgDir.mkdir())
+      {
+        throw new RuntimeException("Unable to create " + pkgDir.getAbsolutePath());
+      }
+    }
+  }
+
+  public void inAAstProd(AAstProd node)
+  {
+    currentProd = (String) ast_ids.ast_names.get(node);
+  }
+
+  public void inAAstAlt(AAstAlt node)
+  {
+    elemList = new TypedLinkedList(ElemInfoCast.instance);
+  }
+
+  public void caseAProductions(AProductions node)
+  {}
+
+  public void inAElem(AElem node)
+  {
+    info = new ElemInfo();
+    info.name = (String) ast_ids.ast_names.get(node);
+    info.type = (String) ast_ids.ast_elemTypes.get(node);
+    info.operator = ElemInfo.NONE;
+
+    if(node.getUnOp() != null)
+    {
+      node.getUnOp().apply(new DepthFirstAdapter()
+                           {
+                             public void caseAStarUnOp(AStarUnOp node)
+                             {
+                               info.operator = ElemInfo.STAR;
+                             }
+
+                             public void caseAQMarkUnOp(AQMarkUnOp node)
+                             {
+                               info.operator = ElemInfo.QMARK;
+                             }
+
+                             public void caseAPlusUnOp(APlusUnOp node)
+                             {
+                               info.operator = ElemInfo.PLUS;
+                             }
+                           }
+                          );
+    }
+    elemList.add(info);
+    info = null;
+  }
+
+  public void outAAstAlt(AAstAlt node)
+  {
+    String name = (String) ast_ids.ast_names.get(node);
+
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, name + ".java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, name + ".java").getAbsolutePath());
+    }
+
+    try
+    {
+        boolean hasOperator = false;
+        boolean hasList = false;
+
+      for(Iterator i = elemList.iterator(); i.hasNext();)
+      {
+        ElemInfo info = (ElemInfo) i.next();
+        if(info != null)
+          switch(info.operator)
+          {
+          case ElemInfo.STAR:
+          case ElemInfo.PLUS:
+            {
+              hasList = true;
+            }
+            break;
+          }
+      }
+
+      macros.apply(file, "AlternativeHeader1", new String[] {pkgName});
+
+      if(hasList)
+      {
+          macros.apply(file, "AlternativeHeaderList", new String[] {});
+      }
+
+      macros.apply(file, "AlternativeHeader2", new String[] {
+              ast_ids.astIds.pkgName.equals("") ? "analysis" : ast_ids.astIds.pkgName + ".analysis",
+              name, currentProd});
+
+      for(Iterator i = elemList.iterator(); i.hasNext();)
+      {
+        ElemInfo info = (ElemInfo) i.next();
+        if(info != null)
+          switch(info.operator)
+          {
+          case ElemInfo.QMARK:
+          case ElemInfo.NONE:
+            {
+              macros.apply(file, "NodeElement",
+                           new String[] {info.type,
+                                         nodeName(info.name)});
+            }
+            break;
+          case ElemInfo.STAR:
+          case ElemInfo.PLUS:
+            {
+              hasOperator = true;
+              macros.apply(file, "ListElement",
+                           new String[] {info.type, nodeName(info.name)});
+            }
+            break;
+          }
+      }
+
+      macros.apply(file, "ConstructorHeader",
+                   new String[] {name});
+      macros.apply(file, "ConstructorBodyHeader", null);
+      macros.apply(file, "ConstructorBodyTail", null);
+
+      if(elemList.size() > 0)
+      {
+        macros.apply(file, "ConstructorHeader",
+                     new String[] {name});
+
+        for(Iterator i = elemList.iterator(); i.hasNext();)
+        {
+          ElemInfo info = (ElemInfo) i.next();
+          if(info != null)
+            switch(info.operator)
+            {
+            case ElemInfo.QMARK:
+            case ElemInfo.NONE:
+              {
+                macros.apply(file, "ConstructorHeaderDeclNode",
+                             new String[] {info.type, nodeName(info.name), i.hasNext() ? "," : ""});
+              }
+              break;
+            case ElemInfo.STAR:
+            case ElemInfo.PLUS:
+              {
+                macros.apply(file, "ConstructorHeaderDeclList",
+                             new String[] {info.type, nodeName(info.name), i.hasNext() ? "," : ""});
+              }
+              break;
+            }
+        }
+
+        macros.apply(file, "ConstructorBodyHeader", null);
+
+        for(Iterator i = elemList.iterator(); i.hasNext();)
+        {
+          ElemInfo info = (ElemInfo) i.next();
+
+          if(info != null )
+            switch(info.operator)
+            {
+            case ElemInfo.QMARK:
+            case ElemInfo.NONE:
+              {
+                macros.apply(file, "ConstructorBodyNode",
+                             new String[] {info.name, nodeName(info.name)});
+              }
+              break;
+            case ElemInfo.STAR:
+            case ElemInfo.PLUS:
+              {
+                macros.apply(file, "ConstructorBodyList",
+                             new String[] {info.name, nodeName(info.name)});
+              }
+              break;
+            }
+        }
+
+        macros.apply(file, "ConstructorBodyTail", null);
+      }
+
+      //****************
+      macros.apply(file, "CloneHeader",
+                   new String[] {name});
+
+      for(Iterator i = elemList.iterator(); i.hasNext();)
+      {
+        ElemInfo info = (ElemInfo) i.next();
+        if(info != null)
+          switch(info.operator)
+          {
+          case ElemInfo.QMARK:
+          case ElemInfo.NONE:
+            {
+              macros.apply(file, "CloneBodyNode",
+                           new String[] {info.type, nodeName(info.name), i.hasNext() ? "," : ""});
+            }
+            break;
+          case ElemInfo.STAR:
+          case ElemInfo.PLUS:
+            {
+              macros.apply(file, "CloneBodyList",
+                           new String[] {nodeName(info.name), i.hasNext() ? "," : ""});
+            }
+            break;
+          }
+      }
+
+      macros.apply(file, "CloneTail", null);
+
+      macros.apply(file, "Apply", new String[] {name});
+
+      for(Iterator i = elemList.iterator(); i.hasNext();)
+      {
+        ElemInfo info = (ElemInfo) i.next();
+
+        if(info != null)
+          switch(info.operator)
+          {
+          case ElemInfo.QMARK:
+          case ElemInfo.NONE:
+            {
+              macros.apply(file, "GetSetNode",
+                           new String[] {info.type, info.name, nodeName(info.name)});
+            }
+            break;
+          case ElemInfo.STAR:
+          case ElemInfo.PLUS:
+            {
+              macros.apply(file, "GetSetList",
+                           new String[] {info.name, nodeName(info.name), info.type});
+            }
+            break;
+          }
+      }
+
+      macros.apply(file, "ToStringHeader", null);
+      for(Iterator i = elemList.iterator(); i.hasNext();)
+      {
+        ElemInfo info = (ElemInfo) i.next();
+
+        if(info != null)
+          switch(info.operator)
+          {
+          case ElemInfo.QMARK:
+          case ElemInfo.NONE:
+            {
+              macros.apply(file, "ToStringBodyNode",
+                           new String[] {nodeName(info.name)});
+            }
+            break;
+          case ElemInfo.STAR:
+          case ElemInfo.PLUS:
+            {
+              macros.apply(file, "ToStringBodyList",
+                           new String[] {nodeName(info.name)});
+            }
+            break;
+          }
+      }
+      macros.apply(file, "ToStringTail", null);
+
+      macros.apply(file, "RemoveChildHeader", null);
+      for(Iterator i = elemList.iterator(); i.hasNext();)
+      {
+        ElemInfo info = (ElemInfo) i.next();
+
+        if(info != null)
+          switch(info.operator)
+          {
+          case ElemInfo.QMARK:
+          case ElemInfo.NONE:
+            {
+              macros.apply(file, "RemoveChildNode",
+                           new String[] {nodeName(info.name)});
+            }
+            break;
+          case ElemInfo.STAR:
+          case ElemInfo.PLUS:
+            {
+              macros.apply(file, "RemoveChildList",
+                           new String[] {nodeName(info.name)});
+            }
+            break;
+          }
+      }
+      macros.apply(file, "RemoveChildTail", null);
+
+      macros.apply(file, "ReplaceChildHeader", null);
+      for(Iterator i = elemList.iterator(); i.hasNext();)
+      {
+        ElemInfo info = (ElemInfo) i.next();
+
+        if(info != null)
+          switch(info.operator)
+          {
+          case ElemInfo.QMARK:
+          case ElemInfo.NONE:
+            {
+              macros.apply(file, "ReplaceChildNode",
+                           new String[] {nodeName(info.name), info.name, info.type});
+            }
+            break;
+          case ElemInfo.STAR:
+          case ElemInfo.PLUS:
+            {
+              macros.apply(file, "ReplaceChildList",
+                           new String[] {nodeName(info.name), info.type});
+            }
+            break;
+          }
+      }
+      macros.apply(file, "ReplaceChildTail", null);
+
+      macros.apply(file, "AlternativeTail", null);
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, name + ".java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+
+    elemList = null;
+  }
+
+  public static String nodeName(String s)
+  {
+    StringBuffer result = new StringBuffer(s);
+
+    if(result.length() > 0)
+    {
+      result.setCharAt(0, Character.toLowerCase(result.charAt(0)));
+    }
+
+    return result.toString();
+  }
+
+  private static class ElemInfo
+  {
+    final static int NONE = 0;
+    final static int STAR = 1;
+    final static int QMARK = 2;
+    final static int PLUS = 3;
+
+    String name;
+    String type;
+    int operator;
+  }
+
+  private static class ElemInfoCast implements Cast
+  {
+    public final static ElemInfoCast instance = new ElemInfoCast();
+
+    private ElemInfoCast()
+    {}
+
+    public    Object cast(Object o)
+    {
+      return (ElemInfo) o;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/GenAnalyses.java b/src/org/sablecc/sablecc/GenAnalyses.java
new file mode 100644
index 0000000..2e7eb94
--- /dev/null
+++ b/src/org/sablecc/sablecc/GenAnalyses.java
@@ -0,0 +1,439 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+import java.io.*;
+
+public class GenAnalyses extends DepthFirstAdapter
+{
+  private MacroExpander macros;
+  private ResolveAstIds ast_ids;
+  private File pkgDir;
+  private String pkgName;
+  private List elemList;
+  private List altList = new TypedLinkedList(AltInfoCast.instance);
+  private List tokenList = new TypedLinkedList(StringCast.instance);
+  private String mainProduction;
+
+  ElemInfo info;
+  //    final GenAnalyses instance = this;
+
+  public GenAnalyses(ResolveAstIds ast_ids)
+  {
+    this.ast_ids = ast_ids;
+    try
+    {
+      macros = new MacroExpander(
+                 new InputStreamReader(
+                   getClass().getResourceAsStream("analyses.txt")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("unable to open analyses.txt.");
+    }
+
+    pkgDir = new File(ast_ids.astIds.pkgDir, "analysis");
+    pkgName = ast_ids.astIds.pkgName.equals("") ? "analysis" : ast_ids.astIds.pkgName + ".analysis";
+
+    if(!pkgDir.exists())
+    {
+      if(!pkgDir.mkdir())
+      {
+        throw new RuntimeException("Unable to create " + pkgDir.getAbsolutePath());
+      }
+    }
+  }
+
+  public void inAAstProd(AAstProd node)
+  {
+    if(mainProduction == null)
+    {
+      mainProduction = (String) ast_ids.ast_names.get(node);
+    }
+  }
+
+  public void inATokenDef(ATokenDef node)
+  {
+    tokenList.add(ast_ids.astIds.names.get(node));
+  }
+
+  public void inAAstAlt(AAstAlt node)
+  {
+    elemList = new TypedLinkedList(ElemInfoCast.instance);
+  }
+
+  public void caseAProductions(AProductions node)
+  {}
+
+  public void inAElem(AElem node)
+  {
+    info = new ElemInfo();
+
+    info.name = (String) ast_ids.ast_names.get(node);
+    info.type = (String) ast_ids.ast_elemTypes.get(node);
+    info.operator = ElemInfo.NONE;
+
+    if(node.getUnOp() != null)
+    {
+      node.getUnOp().apply(new DepthFirstAdapter()
+                           {
+
+                             public void caseAStarUnOp(AStarUnOp node)
+                             {
+                               info.operator = ElemInfo.STAR;
+                             }
+
+                             public void caseAQMarkUnOp(AQMarkUnOp node)
+                             {
+                               info.operator = ElemInfo.QMARK;
+                             }
+
+                             public void caseAPlusUnOp(APlusUnOp node)
+                             {
+                               info.operator = ElemInfo.PLUS;
+                             }
+                           }
+                          );
+    }
+
+    elemList.add(info);
+    info = null;
+  }
+
+  public void outAAstAlt(AAstAlt node)
+  {
+    AltInfo info = new AltInfo();
+
+    info.name = (String) ast_ids.ast_names.get(node);
+    info.elems.addAll(elemList);
+    elemList = null;
+
+    altList.add(info);
+  }
+
+  public void outStart(Start node)
+  {
+    createAnalysis();
+    createAnalysisAdapter();
+
+    if(mainProduction != null)
+    {
+      createDepthFirstAdapter();
+      createReversedDepthFirstAdapter();
+    }
+  }
+
+  public void createAnalysis()
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, "Analysis.java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, "Analysis.java").getAbsolutePath());
+    }
+
+    try
+    {
+      macros.apply(file, "AnalysisHeader", new String[] {pkgName,
+                   ast_ids.astIds.pkgName.equals("") ? "node" : ast_ids.astIds.pkgName + ".node"});
+
+      if(mainProduction != null)
+      {
+        macros.apply(file, "AnalysisStart", null);
+
+        for(Iterator i = altList.iterator(); i.hasNext();)
+        {
+          AltInfo info = (AltInfo) i.next();
+
+          macros.apply(file, "AnalysisBody",
+                       new String[] {info.name});
+        }
+
+        file.newLine();
+      }
+
+      for(Iterator i = tokenList.iterator(); i.hasNext();)
+      {
+        macros.apply(file, "AnalysisBody",
+                     new String[] {(String) i.next()});
+      }
+
+      macros.apply(file, "AnalysisTail", null);
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "Analysis.java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+
+  public void createAnalysisAdapter()
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, "AnalysisAdapter.java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, "AnalysisAdapter.java").getAbsolutePath());
+    }
+
+    try
+    {
+      macros.apply(file, "AnalysisAdapterHeader", new String[] {pkgName,
+                   ast_ids.astIds.pkgName.equals("") ? "node" : ast_ids.astIds.pkgName + ".node"});
+
+      if(mainProduction != null)
+      {
+        macros.apply(file, "AnalysisAdapterStart", null);
+
+        for(Iterator i = altList.iterator(); i.hasNext();)
+        {
+          AltInfo info = (AltInfo) i.next();
+
+          macros.apply(file, "AnalysisAdapterBody",
+                       new String[] {info.name});
+        }
+      }
+
+      for(Iterator i = tokenList.iterator(); i.hasNext();)
+      {
+        macros.apply(file, "AnalysisAdapterBody",
+                     new String[] {(String) i.next()});
+      }
+
+      macros.apply(file, "AnalysisAdapterTail", null);
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "AnalysisAdapter.java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+
+  public void createDepthFirstAdapter()
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, "DepthFirstAdapter.java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, "DepthFirstAdapter.java").getAbsolutePath());
+    }
+
+    try
+    {
+      macros.apply(file, "DepthFirstAdapterHeader", new String[] {pkgName,
+                   ast_ids.astIds.pkgName.equals("") ? "node" : ast_ids.astIds.pkgName + ".node",
+                   mainProduction});
+
+      for(Iterator i = altList.iterator(); i.hasNext();)
+      {
+        AltInfo info = (AltInfo) i.next();
+
+        macros.apply(file, "DepthFirstAdapterInOut",
+                     new String[] {info.name});
+
+        macros.apply(file, "DepthFirstAdapterCaseHeader",
+                     new String[] {info.name});
+
+        for(Iterator j = info.elems.iterator(); j.hasNext();)
+        {
+          ElemInfo eInfo = (ElemInfo) j.next();
+
+          switch(eInfo.operator)
+          {
+          case ElemInfo.QMARK:
+          case ElemInfo.NONE:
+            {
+              macros.apply(file, "DepthFirstAdapterCaseBodyNode",
+                           new String[] {eInfo.name});
+            }
+            break;
+          case ElemInfo.STAR:
+          case ElemInfo.PLUS:
+            {
+              macros.apply(file, "DepthFirstAdapterCaseBodyList",
+                           new String[] {eInfo.name, eInfo.type});
+            }
+            break;
+          }
+        }
+
+        macros.apply(file, "DepthFirstAdapterCaseTail",
+                     new String[] {info.name});
+
+      }
+
+      macros.apply(file, "DepthFirstAdapterTail", null);
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "DepthFirstAdapter.java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+
+  public void createReversedDepthFirstAdapter()
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, "ReversedDepthFirstAdapter.java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, "ReversedDepthFirstAdapter.java").getAbsolutePath());
+    }
+
+    try
+    {
+      macros.apply(file, "ReversedDepthFirstAdapterHeader", new String[] {pkgName,
+                   ast_ids.astIds.pkgName.equals("") ? "node" : ast_ids.astIds.pkgName + ".node",
+                   mainProduction});
+
+      for(Iterator i = altList.iterator(); i.hasNext();)
+      {
+        AltInfo info = (AltInfo) i.next();
+
+        macros.apply(file, "DepthFirstAdapterInOut",
+                     new String[] {info.name});
+
+        macros.apply(file, "DepthFirstAdapterCaseHeader",
+                     new String[] {info.name});
+
+        for(ListIterator j = info.elems.listIterator(info.elems.size()); j.hasPrevious();)
+        {
+          ElemInfo eInfo = (ElemInfo) j.previous();
+
+          switch(eInfo.operator)
+          {
+          case ElemInfo.QMARK:
+          case ElemInfo.NONE:
+            {
+              macros.apply(file, "DepthFirstAdapterCaseBodyNode",
+                           new String[] {eInfo.name});
+            }
+            break;
+          case ElemInfo.STAR:
+          case ElemInfo.PLUS:
+            {
+              macros.apply(file, "ReversedDepthFirstAdapterCaseBodyList",
+                           new String[] {eInfo.name, eInfo.type});
+            }
+            break;
+          }
+        }
+
+        macros.apply(file, "DepthFirstAdapterCaseTail",
+                     new String[] {info.name});
+
+      }
+
+      macros.apply(file, "DepthFirstAdapterTail", null);
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "ReversedDepthFirstAdapter.java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+
+  private static class ElemInfo
+  {
+    final static int NONE = 0;
+    final static int STAR = 1;
+    final static int QMARK = 2;
+    final static int PLUS = 3;
+
+    String name;
+    String type;
+    int operator;
+  }
+
+  private static class ElemInfoCast implements Cast
+  {
+    final static ElemInfoCast instance = new ElemInfoCast();
+
+    private ElemInfoCast()
+    {}
+
+    public    Object cast(Object o)
+    {
+      return (ElemInfo) o;
+    }
+  }
+
+  private static class AltInfo
+  {
+    String name;
+    final List elems = new TypedLinkedList(ElemInfoCast.instance);
+  }
+
+  private static class AltInfoCast implements Cast
+  {
+    final static AltInfoCast instance = new AltInfoCast();
+
+    private AltInfoCast()
+    {}
+
+    public    Object cast(Object o)
+    {
+      return (AltInfo) o;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/GenLexer.java b/src/org/sablecc/sablecc/GenLexer.java
new file mode 100644
index 0000000..05ea799
--- /dev/null
+++ b/src/org/sablecc/sablecc/GenLexer.java
@@ -0,0 +1,360 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.io.*;
+import java.util.Vector;
+import java.util.Enumeration;
+
+public class GenLexer extends AnalysisAdapter
+{
+  private MacroExpander macros;
+  private ResolveIds ids;
+  private File pkgDir;
+  private String pkgName;
+  private AcceptStates[] acceptStatesArray;
+  private Transitions transitions;
+
+  public GenLexer(ResolveIds ids)
+  {
+    this.ids = ids;
+
+    try
+    {
+      macros = new MacroExpander(
+                 new InputStreamReader(
+                   getClass().getResourceAsStream("lexer.txt")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("unable to open lexer.txt.");
+    }
+
+    pkgDir = new File(ids.pkgDir, "lexer");
+    pkgName = ids.pkgName.equals("") ? "lexer" : ids.pkgName + ".lexer";
+
+    if(!pkgDir.exists())
+    {
+      if(!pkgDir.mkdir())
+      {
+        throw new RuntimeException("Unable to create " + pkgDir.getAbsolutePath());
+      }
+    }
+  }
+
+  public void caseStart(Start tree)
+  {
+    String[] names;
+    int numStates = Math.max(1, ids.stateList.size());
+
+    acceptStatesArray = new AcceptStates[numStates];
+    names = new String[numStates];
+
+    if(ids.stateList.size() == 0)
+    {
+      names[0] = "INITIAL";
+    }
+    else
+    {
+      Iterator iter = ids.stateList.iterator();
+      for(int i = 0; i < numStates; i++)
+      {
+        names[i] = (String) iter.next();
+      }
+    }
+
+    for(int i = 0; i < numStates; i++)
+    {
+      System.out.println(" State: " + names[i]);
+
+      System.out.println(" - Constructing NFA.");
+      ConstructNFA nfaConstructor = new ConstructNFA(ids, names[i]);
+      tree.apply(nfaConstructor);
+      System.out.println();
+
+      NFA nfa = (NFA) nfaConstructor.getOut(tree);
+      nfaConstructor = null;
+
+      System.out.println(" - Constructing DFA.");
+      DFA dfa = new DFA(nfa);
+      System.out.println();
+
+      System.out.println(" - resolving ACCEPT states.");
+      acceptStatesArray[i] = new AcceptStates(dfa, ids, names[i]);
+      tree.apply(acceptStatesArray[i]);
+    }
+
+    transitions = new Transitions();
+    tree.apply(transitions);
+
+    createLexerException();
+    createLexer();
+  }
+
+  private void createLexerException()
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, "LexerException.java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, "LexerException.java").getAbsolutePath());
+    }
+
+    try
+    {
+      macros.apply(file, "LexerException", new String[] {pkgName});
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "LexerException.java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+
+  private void createLexer()
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, "Lexer.java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, "Lexer.java").getAbsolutePath());
+    }
+
+    try
+    {
+      String startState = "INITIAL";
+      if(ids.stateList.size() > 0)
+      {
+        startState = (String) ids.stateList.getFirst();
+      }
+
+      macros.apply(file, "LexerHeader", new String[] {pkgName,
+                   ids.pkgName.equals("") ? "node" : ids.pkgName + ".node",
+                   startState});
+
+      for(ListIterator i = ids.tokenList.listIterator(); i.hasNext();)
+      {
+        String name = (String) i.next();
+        Node node = (Node) ids.tokens.get(name);
+        boolean fixed = ((Boolean) ids.fixedTokens.get(node))
+                          .booleanValue();
+
+        if(fixed)
+        {
+          macros.apply(file, "LexerFixedToken",
+                       new String[] {"" + i.previousIndex(), name});
+        }
+        else
+        {
+          macros.apply(file, "LexerVariableToken",
+                       new String[] {"" + i.previousIndex(), name});
+        }
+
+        Map map = (Map) transitions.tokenStates.get(node);
+        if(map.size() > 0)
+        {
+          macros.apply(file, "TokenSwitchHeader", null);
+
+          for(Iterator j = map.entrySet().iterator(); j.hasNext();)
+          {
+            Map.Entry entry = (Map.Entry) j.next();
+
+            macros.apply(file, "TokenCase",
+                         new String[] {ids.stateList.indexOf((String) entry.getKey()) + "",
+                                       (String) entry.getValue()});
+          }
+
+          macros.apply(file, "TokenSwitchTail", null);
+        }
+
+        macros.apply(file, "LexerTokenTail", null);
+      }
+
+      macros.apply(file, "LexerBody1");
+
+      for(ListIterator i = ids.tokenList.listIterator(); i.hasNext();)
+      {
+        String name = (String) i.next();
+        Node node = (Node) ids.tokens.get(name);
+        boolean fixed = ((Boolean) ids.fixedTokens.get(node))
+                          .booleanValue();
+
+        if(fixed)
+        {
+          macros.apply(file, "LexerNewFixedToken",
+                       new String[] {"" + i.previousIndex(), name});
+        }
+        else
+        {
+          macros.apply(file, "LexerNewVariableToken",
+                       new String[] {"" + i.previousIndex(), name});
+        }
+      }
+
+      macros.apply(file, "LexerBody2");
+
+      DataOutputStream out = new DataOutputStream(
+                               new BufferedOutputStream(
+                                 new FileOutputStream(
+                                   new File(pkgDir, "lexer.dat"))));
+
+      out.writeInt(acceptStatesArray.length);
+      for(int accSt = 0; accSt < acceptStatesArray.length; accSt++)
+      {
+        DFA dfa = acceptStatesArray[accSt].dfa;
+
+        file.write("        { // " + acceptStatesArray[accSt].stateName + System.getProperty("line.separator"));
+        Vector outerArray = new Vector();
+
+        for(int i = 0; i < dfa.states.size(); i++)
+        {
+          Vector innerArray = new Vector();
+
+          DFA.State state = (DFA.State) dfa.states.elementAt(i);
+          file.write("            {");
+
+          for(int j = 0; j < state.transitions.size(); j++)
+          {
+            DFA.Transition transition =
+              (DFA.Transition) state.transitions.elementAt(j);
+
+            file.write("{" + ((int) transition.interval().start) + ", " +
+                       ((int) transition.interval().end) + ", " +
+                       transition.destination + "}, ");
+
+            innerArray.addElement(new int[] {
+                                    ((int) transition.interval().start),
+                                    ((int) transition.interval().end),
+                                    transition.destination});
+          }
+
+          file.write("}," + System.getProperty("line.separator"));
+
+          outerArray.addElement(innerArray);
+        }
+        file.write("        }" + System.getProperty("line.separator"));
+
+        out.writeInt(outerArray.size());
+        for(Enumeration e = outerArray.elements(); e.hasMoreElements();)
+        {
+          Vector innerArray = (Vector) e.nextElement();
+          out.writeInt(innerArray.size());
+          for(Enumeration n = innerArray.elements(); n.hasMoreElements();)
+          {
+            int[] array = (int[]) n.nextElement();
+
+            for(int i = 0; i < 3; i++)
+            {
+              out.writeInt(array[i]);
+            }
+          }
+        }
+      }
+
+      macros.apply(file, "LexerAcceptHeader");
+
+      final int stateNumber = acceptStatesArray.length;
+
+      Vector outerArray = new Vector();
+
+      for(int i = 0; i < stateNumber; i++)
+      {
+        DFA dfa = acceptStatesArray[i].dfa;
+        Vector innerArray = new Vector();
+
+        file.write("        // " + acceptStatesArray[i].stateName + System.getProperty("line.separator"));
+        file.write("        {");
+
+        for(int j = 0; j < dfa.states.size(); j++)
+        {
+          DFA.State state = (DFA.State) dfa.states.elementAt(j);
+
+          file.write(state.accept + ", ");
+          innerArray.addElement(new Integer(state.accept));
+        }
+
+        file.write("}," + System.getProperty("line.separator"));
+
+        outerArray.addElement(innerArray);
+      }
+
+      out.writeInt(outerArray.size());
+      for(Enumeration e = outerArray.elements(); e.hasMoreElements();)
+      {
+        Vector innerArray = (Vector) e.nextElement();
+        out.writeInt(innerArray.size());
+        for(Enumeration n = innerArray.elements(); n.hasMoreElements();)
+        {
+          Integer i = (Integer) n.nextElement();
+          out.writeInt(i.intValue());
+        }
+      }
+      out.close();
+
+      file.write(System.getProperty("line.separator"));
+
+      macros.apply(file, "LexerAcceptTail");
+
+      macros.apply(file, "LexerStateHeader");
+
+      if(ids.stateList.size() > 0)
+      {
+        for(ListIterator i = ids.stateList.listIterator(); i.hasNext();)
+        {
+          String s = (String) i.next();
+
+          macros.apply(file, "LexerStateBody",
+                       new String[] {s, "" + i.previousIndex()});
+        }
+      }
+      else
+      {
+        macros.apply(file, "LexerStateBody",
+                     new String[] {"INITIAL", "" + 0});
+      }
+
+      macros.apply(file, "LexerStateTail");
+
+      macros.apply(file, "LexerTail");
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "Lexer.java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+}
diff --git a/src/org/sablecc/sablecc/GenParser.java b/src/org/sablecc/sablecc/GenParser.java
new file mode 100644
index 0000000..84230dd
--- /dev/null
+++ b/src/org/sablecc/sablecc/GenParser.java
@@ -0,0 +1,891 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.io.*;
+import org.sablecc.sablecc.Grammar;
+import java.util.Vector;
+import java.util.Enumeration;
+
+/*
+ * GenParser
+ * 
+ * This class is the responsible of generation of the parser.
+ * It calls another classes which will do internal transformations
+ * to the grammar in order to made it support by BNF parser generator
+ * algorithm whereas SableCC3.x.x grammars can be written with some 
+ * operators of the EBNF form.
+ * It can also call an appropriate Tree-Walker which in case of conflict
+ * will try to inline productions involved in the conflict with the aim of
+ * resolving it.
+ */
+
+public class GenParser extends DepthFirstAdapter
+{
+  //This is the tree-walker field which made internal transformations("EBNF"->BNF) to the grammar
+  InternalTransformationsToGrammar bnf_and_CST_AST_Transformations;
+
+  //tree-walker field which construct data structures for generating of parsing tables.
+  ConstructParserGenerationDatas genParserAdapter;
+
+  private MacroExpander macros;
+  private ResolveIds ids;
+  private ResolveAltIds altIds;
+  private ResolveTransformIds transformIds;
+
+  // This class reference variable fills the map "altsElemTypes" from class AlternativeElementTypes. It associates
+  // the name of elements with its types
+  private AlternativeElementTypes AET;
+
+  //This computes variables declarations position and type for parser generation.
+  //In fact it helps to determine how many elements are needed to pop from the stack
+  private ComputeCGNomenclature CG;
+
+  //This helps to compute alternative transformations code generation.
+  private ComputeSimpleTermPosition CTP;
+
+  private File pkgDir;
+  private String pkgName;
+  private boolean hasProductions;
+  private String firstProductionName;
+  private boolean processInlining;
+  private boolean prettyPrinting;
+  private boolean grammarHasTransformations;
+
+  // This boolean is used to check weither the filter() method in class Parser.java
+  // should be present or not.
+  private boolean activateFilter = true;
+
+  //This tree-walker field generate the code of parsing and construction of the AST.
+  GenerateAlternativeCodeForParser aParsedAltAdapter;
+
+  private LinkedList listSimpleTermTransform = new LinkedList();
+
+  public final Map simpleTermTransform =
+    new TypedHashMap(NodeCast.instance,
+                     StringCast.instance);
+
+  //This map contains Productions which were explicitely transformed in the grammar
+  //Those transformations was specified by the grammar-writer.
+  private final Map mapProductionTransformations =
+    new TypedHashMap(StringCast.instance,
+                     ListCast.instance);
+
+  private Map alts;
+
+  public GenParser(ResolveIds ids, ResolveAltIds altIds, ResolveTransformIds transformIds,
+                   String firstProductionName, boolean processInlining, boolean prettyPrinting,
+                   boolean grammarHasTransformations)
+  {
+    this.ids = ids;
+    this.altIds = altIds;
+    this.transformIds = transformIds;
+    this.processInlining = processInlining;
+    this.prettyPrinting = prettyPrinting;
+    this.grammarHasTransformations = grammarHasTransformations;
+
+    AET = new AlternativeElementTypes(ids);
+    CG = new ComputeCGNomenclature(ids, transformIds.getProdTransformIds());
+    CTP = new ComputeSimpleTermPosition(ids);
+    this.firstProductionName = firstProductionName;
+
+    try
+    {
+      macros = new MacroExpander(
+                 new InputStreamReader(
+                   getClass().getResourceAsStream("parser.txt")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("unable to open parser.txt.");
+    }
+
+    pkgDir = new File(ids.pkgDir, "parser");
+    pkgName = ids.pkgName.equals("") ? "parser" : ids.pkgName + ".parser";
+
+    if(!pkgDir.exists())
+    {
+      if(!pkgDir.mkdir())
+      {
+        throw new RuntimeException("Unable to create " + pkgDir.getAbsolutePath());
+      }
+    }
+  }
+
+  public void caseStart(Start tree)
+  {
+    tree.getPGrammar().apply(new DepthFirstAdapter()
+                             {
+                               public void caseAProd(AProd node)
+                               {
+                                 hasProductions = true;
+                                 if(node.getProdTransform() != null)
+                                 {
+                                   mapProductionTransformations.put("P"+ResolveIds.name(node.getId().getText()),
+                                                                    node.getProdTransform().clone() );
+                                 }
+                               }
+                             }
+                            );
+
+    if(!hasProductions)
+    {
+      return;
+    }
+
+    //Performing internal transformations
+    bnf_and_CST_AST_Transformations =
+      new InternalTransformationsToGrammar(ids, altIds, transformIds,
+                                           listSimpleTermTransform,
+                                           simpleTermTransform,
+                                           mapProductionTransformations,
+                                           transformIds.simpleTermOrsimpleListTermTypes);
+
+    //apply internal transformations to the grammar.
+    tree.getPGrammar().apply(bnf_and_CST_AST_Transformations);
+
+    if(prettyPrinting)
+    {
+      tree.apply(new PrettyPrinter());
+      return;
+    }
+
+    ConstructProdsMap mapOfProds = new ConstructProdsMap();
+    tree.apply(mapOfProds);
+
+    boolean computeLALR = false;
+
+    //This do-while loop is managing the inlining process.
+    do
+    {
+      //Initialization of parsing tables and some symbol tables
+      //names and elemTypes from ResolveIds.
+      reinit();
+      reConstructSymbolTables(tree);
+
+      tree.apply(new DepthFirstAdapter()
+                 {
+                   private boolean hasAlternative;
+
+                   public void caseATokenDef(ATokenDef node)
+                   {
+                     String name = (String) ids.names.get(node);
+                     String errorName = (String) ids.errorNames.get(node);
+
+                     if(!ids.ignTokens.containsKey(name))
+                     {
+                       Grammar.addTerminal(name, errorName);
+                     }
+                   }
+
+                   public void inAProd(AProd node)
+                   {
+                     hasAlternative = false;
+                   }
+
+                   public void inAAlt(AAlt node)
+                   {
+                     hasAlternative = true;
+                   }
+
+                   public void outAProd(AProd node)
+                   {
+                     if(hasAlternative)
+                     {
+                       Grammar.addNonterminal((String) ids.names.get(node));
+                     }
+                   }
+                 }
+                );
+
+      //Construct all necessary informations for generation of the parser.
+      //This map contains all the alternatives of the transformed final grammar
+      alts = new TypedHashMap(StringCast.instance, NodeCast.instance);
+
+      tree.getPGrammar().apply(new ConstructParserGenerationDatas(ids, alts));
+
+      try
+      {
+        //Generation of parsing symbol tables
+        Grammar.computeLALR();
+        computeLALR = true;
+      }
+      catch(ConflictException ce)
+      {
+        if(activateFilter)
+        {
+          activateFilter = false;
+        }
+
+        //Here, we are trying to inline the grammar with production imply in the conflict.
+        if(processInlining)
+        {
+          ComputeInlining grammarToBeInlinedWithConflictualProductions = new ComputeInlining(ce.getConflictualProductions(),
+              mapOfProds.productionsMap,
+              tree);
+          if(!grammarToBeInlinedWithConflictualProductions.computeInlining())
+          {
+            System.out.println("\nA previous conflict that we've tried to solve by inline some productions inside the grammars cannot be solved that way. The transformed grammar is : ");
+            tree.apply(new PrettyPrinter());
+            throw new RuntimeException(ce.getMessage());
+          }
+
+          System.out.println();
+          System.out.println("Inlining.");
+        }
+        else
+        {
+          throw new RuntimeException(ce.getMessage());
+        }
+      }
+    }
+    while(!computeLALR);
+
+    tree.getPGrammar().apply(AET);
+    CG.setAltElemTypes(AET.getMapOfAltElemType());
+    tree.getPGrammar().apply(CG);
+    tree.getPGrammar().apply(CTP);
+
+    createParser();
+    createParserException();
+    createState();
+    createTokenIndex();
+  }
+
+  public void reinit()
+  {
+    // re-initialize all static structures in the engine
+    LR0Collection.reinit();
+    Symbol.reinit();
+    Production.reinit();
+    Grammar.reinit();
+    ids.reinit();
+  }
+
+  private String currentProd;
+  private String currentAlt;
+
+  //reconstruction of map names of class ResolveIds
+  public void reConstructSymbolTables(Start tree)
+  {
+    tree.apply(new DepthFirstAdapter()
+               {
+                 public void caseAProd(AProd node)
+                 {
+                   currentProd = ids.name(node.getId().getText());
+                   String name = "P" + currentProd;
+
+                   ids.names.put(node, name);
+
+                   //list of inAAlt code.
+                   Object []list_alt = (Object [])node.getAlts().toArray();
+                   for(int i = 0; i< list_alt.length; i++)
+                   {
+                     ((PAlt)list_alt[i]).apply(this);
+                   }
+                 }
+
+                 public void outAHelperDef(AHelperDef node)
+                 {
+                   String name = node.getId().getText();
+                   ids.names.put(node, name);
+                 }
+
+                 public void outATokenDef(ATokenDef node)
+                 {
+                   String name = "T" + ids.name(node.getId().getText());
+
+                   ids.names.put(node, name);
+                 }
+
+                 public void caseAAlt(final AAlt alt)
+                 {
+                   if(alt.getAltName() != null)
+                   {
+                     currentAlt =
+                       "A" +
+                       ids.name(alt.getAltName().getText()) +
+                       currentProd;
+
+                     ids.names.put(alt, currentAlt);
+                   }
+                   else
+                   {
+                     currentAlt = "A" + currentProd;
+                     ids.names.put(alt, currentAlt);
+                   }
+
+                   AElem list_elem[] = (AElem[]) alt.getElems().toArray(new AElem[0]);
+                   for(int i=0; i<list_elem.length;i++)
+                   {
+                     list_elem[i].apply(this);
+                   }
+                 }
+
+                 public void caseAAst(AAst node)
+                 {}
+
+                 public void caseAElem(final AElem elem)
+                 {
+                   if(elem.getElemName() != null)
+                   {
+                     ids.names.put(elem, ids.name(elem.getElemName().getText()) );
+                   }
+                   else
+                   {
+                     ids.names.put(elem, ids.name(elem.getId().getText()));
+                   }
+                 }
+               }
+              );
+  }
+
+  //Parser.java Generation
+  private void createParser()
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, "Parser.java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, "Parser.java").getAbsolutePath());
+    }
+
+    try
+    {
+      Symbol[] terminals = Symbol.terminals();
+      Symbol[] nonterminals = Symbol.nonterminals();
+      Production[] productions = Production.productions();
+
+      macros.apply(file, "ParserHeader", new String[] {pkgName,
+                   ids.pkgName.equals("") ? "lexer" : ids.pkgName + ".lexer",
+                   ids.pkgName.equals("") ? "node" : ids.pkgName + ".node",
+                   ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis"});
+
+      if(activateFilter && !grammarHasTransformations)
+      {
+        macros.apply(file, "ParserNoInliningPushHeader");
+        macros.apply(file, "ParserCommon", new String[] {", true", ", false"});
+      }
+      else
+      {
+        macros.apply(file, "ParserInliningPushHeader");
+        macros.apply(file, "ParserCommon", new String[] {"", ""});
+      }
+
+      //this loop generates the code for all possible reductions and the type of
+      //the node needed to be created at a local point.
+      for(int i = 0; i < (productions.length - 1); i++)
+      {
+        Node node = (Node) alts.get(productions[i].name);
+
+        if(activateFilter && !grammarHasTransformations)
+        {
+          macros.apply(file, "ParserNoInliningReduce", new String[] {
+                         "" + productions[i].index,
+                         "" + productions[i].leftside,
+                         "" + (productions[i].name.startsWith("ANonTerminal$") ||
+                               productions[i].name.startsWith("ATerminal$")),
+                         productions[i].name});
+        }
+        else
+        {
+          macros.apply(file, "ParserInliningReduce", new String[] {
+                         "" + productions[i].index,
+                         "" + productions[i].leftside,
+                         productions[i].name});
+        }
+      }
+
+      macros.apply(file, "ParserParseTail", new String[] {firstProductionName});
+
+      //the node creation code. Reduce methods definitions are done here
+      for(int i = 0; i < (productions.length - 1); i++)
+      {
+        macros.apply(file, "ParserNewHeader", new String[] {
+                       "" + productions[i].index,
+                       productions[i].name});
+
+        final Node node = (Node) alts.get(productions[i].name);
+
+        final BufferedWriter finalFile = file;
+        final LinkedList stack = new LinkedList();
+
+        node.apply(new DepthFirstAdapter()
+                   {
+                     private int current;
+
+                     public void caseAElem(AElem elem)
+                     {
+                       current++;
+
+                       stack.addFirst(new Element("ParserNewBodyDecl",
+                                                  new String[] {"" + current}));
+                     }
+                   }
+                  );
+
+        try
+        {
+          for(Iterator it = stack.iterator(); it.hasNext();)
+          {
+            Element e = (Element) it.next();
+            macros.apply(file, e.macro, e.arguments);
+          }
+        }
+        catch(IOException e)
+        {
+          throw new RuntimeException("An error occured while writing to " +
+                                     new File(pkgDir, "Parser.java").getAbsolutePath());
+        }
+
+        String nodeName = (String)ids.names.get(node);
+        String realnodeName = (String)ids.names.get(node);
+        aParsedAltAdapter =
+          new GenerateAlternativeCodeForParser(pkgDir, nodeName, realnodeName,
+                                               file, transformIds, CG, CTP,
+                                               simpleTermTransform, macros,
+                                               listSimpleTermTransform,
+                                               transformIds.simpleTermOrsimpleListTermTypes);
+        node.apply(aParsedAltAdapter);
+      }
+
+      macros.apply(file, "ParserActionHeader");
+
+      StringBuffer table = new StringBuffer();
+
+      DataOutputStream out = new DataOutputStream(
+                               new BufferedOutputStream(
+                                 new FileOutputStream(
+                                   new File(pkgDir, "parser.dat"))));
+
+      Vector outerArray = new Vector();
+      //Generating of paring tables
+      for(int i = 0; i < Grammar.action_.length; i++)
+      {
+        Vector innerArray = new Vector();
+
+        String mostFrequentAction = "ERROR";
+        int mostFrequentDestination = i;
+        int frequence = 0;
+        Map map = new TreeMap(IntegerComparator.instance);
+
+        for(int j = 0; j < Grammar.action_[i].length; j++)
+        {
+          if(Grammar.action_[i][j] != null)
+          {
+            if(Grammar.action_[i][j][0] == 1)
+            {
+              Integer index = new Integer(Grammar.action_[i][j][1]);
+              Integer count = (Integer) map.get(index);
+              int freq = count == null ? 0 : count.intValue();
+              map.put(index, new Integer(++freq));
+              if(freq > frequence)
+              {
+                frequence = freq;
+                mostFrequentAction = "REDUCE";
+                mostFrequentDestination = Grammar.action_[i][j][1];
+              }
+            }
+          }
+        }
+        table.append("\t\t\t{");
+
+        table.append("{" + -1 + ", " +
+                     mostFrequentAction + ", " +
+                     mostFrequentDestination + "}, ");
+        innerArray.addElement(
+          new int[] {-1,
+                     mostFrequentAction.equals("ERROR") ? 3 : 1,
+                     mostFrequentDestination});
+
+        for(int j = 0; j < Grammar.action_[i].length; j++)
+        {
+          if(Grammar.action_[i][j] != null)
+          {
+            switch(Grammar.action_[i][j][0])
+            {
+            case 0:
+              table.append("{" + j + ", SHIFT, " + Grammar.action_[i][j][1] + "}, ");
+              innerArray.addElement(new int[] {j, 0, Grammar.action_[i][j][1]});
+              break;
+            case 1:
+              if(Grammar.action_[i][j][1] != mostFrequentDestination)
+              {
+                table.append("{" + j + ", REDUCE, " + Grammar.action_[i][j][1] + "}, ");
+                innerArray.addElement(new int[] {j, 1, Grammar.action_[i][j][1]});
+              }
+              break;
+            case 2:
+              table.append("{" + j + ", ACCEPT, -1}, ");
+              innerArray.addElement(new int[] {j, 2, -1});
+              break;
+            }
+          }
+        }
+
+        table.append("}," + System.getProperty("line.separator"));
+        outerArray.addElement(innerArray);
+      }
+
+      file.write("" + table);
+
+      out.writeInt(outerArray.size());
+      for(Enumeration e = outerArray.elements(); e.hasMoreElements();)
+      {
+        Vector innerArray = (Vector) e.nextElement();
+        out.writeInt(innerArray.size());
+        for(Enumeration n = innerArray.elements(); n.hasMoreElements();)
+        {
+          int[] array = (int[]) n.nextElement();
+
+          for(int i = 0; i < 3; i++)
+          {
+            out.writeInt(array[i]);
+          }
+        }
+      }
+
+      macros.apply(file, "ParserActionTail");
+
+      macros.apply(file, "ParserGotoHeader");
+
+      table = new StringBuffer();
+      outerArray = new Vector();
+
+      for(int j = 0; j < nonterminals.length - 1; j++)
+      {
+        Vector innerArray = new Vector();
+
+        int mostFrequent = -1;
+        int frequence = 0;
+        Map map = new TreeMap(IntegerComparator.instance);
+
+        for(int i = 0; i < Grammar.goto_.length; i++)
+        {
+          if(Grammar.goto_[i][j] != -1)
+          {
+            Integer index = new Integer(Grammar.goto_[i][j]);
+            Integer count = (Integer) map.get(index);
+            int freq = count == null ? 0 : count.intValue();
+            map.put(index, new Integer(++freq));
+            if(freq > frequence)
+            {
+              frequence = freq;
+              mostFrequent = Grammar.goto_[i][j];
+            }
+          }
+        }
+
+        table.append("\t\t\t{");
+
+        table.append("{" + (-1) + ", " + mostFrequent + "}, ");
+        innerArray.addElement(new int[] {-1, mostFrequent});
+
+        for(int i = 0; i < Grammar.goto_.length; i++)
+        {
+          if((Grammar.goto_[i][j] != -1) &&
+              (Grammar.goto_[i][j] != mostFrequent))
+          {
+            table.append("{" + i + ", " + Grammar.goto_[i][j] + "}, ");
+            innerArray.addElement(new int[] {i, Grammar.goto_[i][j]});
+          }
+        }
+
+        table.append("}," + System.getProperty("line.separator"));
+
+        outerArray.addElement(innerArray);
+      }
+
+      file.write("" + table);
+
+      out.writeInt(outerArray.size());
+      for(Enumeration e = outerArray.elements(); e.hasMoreElements();)
+      {
+        Vector innerArray = (Vector) e.nextElement();
+        out.writeInt(innerArray.size());
+        for(Enumeration n = innerArray.elements(); n.hasMoreElements();)
+        {
+          int[] array = (int[]) n.nextElement();
+
+          for(int i = 0; i < 2; i++)
+          {
+            out.writeInt(array[i]);
+          }
+        }
+      }
+
+      macros.apply(file, "ParserGotoTail");
+
+      macros.apply(file, "ParserErrorsHeader");
+
+      table = new StringBuffer();
+      StringBuffer index = new StringBuffer();
+      int nextIndex = 0;
+
+      Map errorIndex = new TypedTreeMap(
+                         StringComparator.instance,
+                         StringCast.instance,
+                         IntegerCast.instance);
+
+      outerArray = new Vector();
+      Vector indexArray = new Vector();
+
+      index.append("\t\t\t");
+      for(int i = 0; i < Grammar.action_.length; i++)
+      {
+        StringBuffer s = new StringBuffer();
+        s.append("expecting: ");
+
+        boolean comma = false;
+        for(int j = 0; j < Grammar.action_[i].length; j++)
+        {
+          if(Grammar.action_[i][j] != null)
+          {
+            if(comma)
+            {
+              s.append(", ");
+            }
+            else
+            {
+              comma = true;
+            }
+
+            s.append(Symbol.symbol(j, true).errorName);
+          }
+        }
+
+        if(errorIndex.containsKey(s.toString()))
+        {
+          index.append(errorIndex.get(s.toString()) + ", ");
+          indexArray.addElement(errorIndex.get(s.toString()));
+        }
+        else
+        {
+          table.append("\t\t\t\"" + s + "\"," + System.getProperty("line.separator"));
+          outerArray.addElement(s.toString());
+          errorIndex.put(s.toString(), new Integer(nextIndex));
+          indexArray.addElement(new Integer(nextIndex));
+          index.append(nextIndex++ + ", ");
+        }
+      }
+
+      file.write("" + table);
+
+      out.writeInt(outerArray.size());
+      for(Enumeration e = outerArray.elements(); e.hasMoreElements();)
+      {
+        String s = (String) e.nextElement();
+        out.writeInt(s.length());
+        int length = s.length();
+        for(int i = 0; i < length; i++)
+        {
+          out.writeChar(s.charAt(i));
+        }
+      }
+
+      out.writeInt(indexArray.size());
+      for(Enumeration e = indexArray.elements(); e.hasMoreElements();)
+      {
+        Integer n = (Integer) e.nextElement();
+        out.writeInt(n.intValue());
+      }
+
+      out.close();
+
+      macros.apply(file, "ParserErrorsTail");
+
+      macros.apply(file, "ParserErrorIndexHeader");
+      file.write("" + index);
+      macros.apply(file, "ParserErrorIndexTail");
+
+      macros.apply(file, "ParserTail");
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "Parser.java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+
+  private void createTokenIndex()
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, "TokenIndex.java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, "TokenIndex.java").getAbsolutePath());
+    }
+
+    try
+    {
+      Symbol[] terminals = Symbol.terminals();
+
+      macros.apply(file, "TokenIndexHeader", new String[] {pkgName,
+                   ids.pkgName.equals("") ? "node" : ids.pkgName + ".node",
+                   ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis"});
+
+      for(int i = 0; i < (terminals.length - 2); i++)
+      {
+        macros.apply(file, "TokenIndexBody", new String[] {terminals[i].name, "" + i});
+      }
+
+      macros.apply(file, "TokenIndexTail", new String[] {"" + (terminals.length - 2)});
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "TokenIndex.java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+
+  private void createParserException()
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, "ParserException.java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, "ParserException.java").getAbsolutePath());
+    }
+
+    try
+    {
+      macros.apply(file, "ParserException", new String[] {pkgName,
+                   ids.pkgName.equals("") ? "node" : ids.pkgName + ".node"});
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "ParserException.java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+
+  private void createState()
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, "State.java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, "State.java").getAbsolutePath());
+    }
+
+    try
+    {
+      macros.apply(file, "State", new String[] {pkgName});
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "State.java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+
+  private int count(String name)
+  {
+    if(name.charAt(0) != 'X')
+    {
+      return 0;
+    }
+
+    StringBuffer s = new StringBuffer();
+    int i = 1;
+
+    while((i < name.length()) &&
+          (name.charAt(i) >= '0') &&
+          (name.charAt(i) <= '9'))
+    {
+      s.append(name.charAt(i++));
+    }
+
+    return Integer.parseInt(s.toString());
+  }
+
+  private String name(String name)
+  {
+    if(name.charAt(0) != 'X')
+    {
+      return name;
+    }
+
+    int i = 1;
+    while((i < name.length()) &&
+          (name.charAt(i) >= '0') &&
+          (name.charAt(i) <= '9'))
+    {
+      i++;
+    }
+
+    return name.substring(i);
+  }
+
+  static class Element
+  {
+    String macro;
+    String[] arguments;
+
+    Element(String macro, String[] arguments)
+    {
+      this.macro = macro;
+      this.arguments = arguments;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/GenProds.java b/src/org/sablecc/sablecc/GenProds.java
new file mode 100644
index 0000000..5e47012
--- /dev/null
+++ b/src/org/sablecc/sablecc/GenProds.java
@@ -0,0 +1,125 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+import java.io.*;
+
+public class GenProds extends DepthFirstAdapter
+{
+  private MacroExpander macros;
+  private ResolveAstIds ast_ids;
+  private File pkgDir;
+  private String pkgName;
+  private Map hiddenProds = new TypedTreeMap(
+                              StringComparator.instance,
+                              StringCast.instance,
+                              NodeCast.instance);
+
+  public GenProds(ResolveAstIds ast_ids)
+  {
+    this.ast_ids = ast_ids;
+
+    try
+    {
+      macros = new MacroExpander(
+                 new InputStreamReader(
+                   getClass().getResourceAsStream("productions.txt")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("unable to open productions.txt.");
+    }
+
+    pkgDir = new File(ast_ids.astIds.pkgDir, "node");
+    pkgName = ast_ids.astIds.pkgName.equals("") ? "node" : ast_ids.astIds.pkgName + ".node";
+
+    if(!pkgDir.exists())
+    {
+      if(!pkgDir.mkdir())
+      {
+        throw new RuntimeException("Unable to create " + pkgDir.getAbsolutePath());
+      }
+    }
+  }
+
+  public void inAAstProd(AAstProd node)
+  {
+    String name = (String) ast_ids.ast_names.get(node);
+
+    createProduction(name);
+  }
+
+  private void createProduction(String name)
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, name + ".java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, name + ".java").getAbsolutePath());
+    }
+
+    try
+    {
+      macros.apply(file, "Production", new String[] {pkgName, name});
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, name + ".java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+
+  private void createAlternative(String name, String macro, String[] arg)
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, name + ".java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, name + ".java").getAbsolutePath());
+    }
+
+    try
+    {
+      macros.apply(file, macro, arg);
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, name + ".java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+}
diff --git a/src/org/sablecc/sablecc/GenTokens.java b/src/org/sablecc/sablecc/GenTokens.java
new file mode 100644
index 0000000..dac7d0c
--- /dev/null
+++ b/src/org/sablecc/sablecc/GenTokens.java
@@ -0,0 +1,201 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.io.*;
+import java.util.LinkedList;
+
+public class GenTokens extends DepthFirstAdapter
+{
+  private MacroExpander macros;
+  private ResolveIds ids;
+  private File pkgDir;
+  private String pkgName;
+
+  //    final GenTokens instance = this;
+  String text;
+
+  public GenTokens(ResolveIds ids)
+  {
+    this.ids = ids;
+
+    try
+    {
+      macros = new MacroExpander(
+                 new InputStreamReader(
+                   getClass().getResourceAsStream("tokens.txt")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("unable to open tokens.txt.");
+    }
+
+    pkgDir = new File(ids.pkgDir, "node");
+    pkgName = ids.pkgName.equals("") ? "node" : ids.pkgName + ".node";
+
+    if(!pkgDir.exists())
+    {
+      if(!pkgDir.mkdir())
+      {
+        throw new RuntimeException("Unable to create " + pkgDir.getAbsolutePath());
+      }
+    }
+  }
+
+  public void inATokenDef(ATokenDef node)
+  {
+    String name = (String) ids.names.get(node);
+
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, name + ".java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, name + ".java").getAbsolutePath());
+    }
+
+    text = null;
+
+    ARegExp regExp = (ARegExp) node.getRegExp();
+
+    LinkedList concats = regExp.getConcats();
+
+    if(concats.size() == 1)
+    {
+      AConcat concat = (AConcat)concats.getFirst();
+      LinkedList unExps = concat.getUnExps();
+
+      if(unExps.size() == 1)
+      {
+        AUnExp unExp = (AUnExp) unExps.getFirst();
+
+        PBasic basic = unExp.getBasic();
+
+        if((basic instanceof AStringBasic) &&
+            (unExp.getUnOp() == null))
+        {
+          text = ((AStringBasic) basic).getString().getText();
+          text = text.substring(1, text.length() - 1);
+        }
+        else if((basic instanceof ACharBasic) &&
+                (unExp.getUnOp() == null))
+        {
+          PChar pChar = ((ACharBasic) basic).getChar();
+
+          if(pChar instanceof ACharChar)
+          {
+            text = ((ACharChar) pChar).getChar().getText();
+            text = text.substring(1, text.length() - 1);
+          }
+        }
+      }
+    }
+
+    try
+    {
+      if(text == null)
+      {
+        ids.fixedTokens.put(node, new Boolean(false));
+
+        macros.apply(file, "VariableTextToken", new String[] { pkgName,
+                     ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
+                     name});
+      }
+      else
+      {
+        ids.fixedTokens.put(node, new Boolean(true));
+
+        macros.apply(file, "FixedTextToken", new String[] { pkgName,
+                     ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
+                     name, processText(text)});
+
+        ids.errorNames.put(node, "'" + text + "'");
+      }
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, name + ".java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+
+  private String processText(String s)
+  {
+    StringBuffer result = new StringBuffer();
+
+    for(int i = 0; i < s.length(); i++)
+    {
+      char c = s.charAt(i);
+
+      switch(c)
+      {
+      case '\b':
+        {
+          result.append("\\t");
+          break;
+        }
+      case '\t':
+        {
+          result.append("\\t");
+          break;
+        }
+      case '\n':
+        {
+          result.append("\\n");
+          break;
+        }
+      case '\f':
+        {
+          result.append("\\f");
+          break;
+        }
+      case '\r':
+        {
+          result.append("\\r");
+          break;
+        }
+      case '\"':
+        {
+          result.append("\\\"");
+          break;
+        }
+      case '\'':
+        {
+          result.append("\\\'");
+          break;
+        }
+      case '\\':
+        {
+          result.append("\\\\");
+          break;
+        }
+      default:
+        {
+          result.append(c);
+        }
+      }
+    }
+
+    return result.toString();
+  }
+}
+
diff --git a/src/org/sablecc/sablecc/GenUtils.java b/src/org/sablecc/sablecc/GenUtils.java
new file mode 100644
index 0000000..06ea736
--- /dev/null
+++ b/src/org/sablecc/sablecc/GenUtils.java
@@ -0,0 +1,252 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+import java.io.*;
+
+public class GenUtils extends DepthFirstAdapter
+{
+  private MacroExpander macros;
+  private ResolveAstIds ast_ids;
+  private File pkgDir;
+  private String pkgName;
+  private String mainProduction;
+
+  public GenUtils(ResolveAstIds ast_ids)
+  {
+    this.ast_ids = ast_ids;
+
+    try
+    {
+      macros = new MacroExpander(
+                 new InputStreamReader(
+                   getClass().getResourceAsStream("utils.txt")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("unable to open utils.txt.");
+    }
+
+    pkgDir = new File(ast_ids.astIds.pkgDir, "node");
+    pkgName = ast_ids.astIds.pkgName.equals("") ? "node" : ast_ids.astIds.pkgName + ".node";
+
+    if(!pkgDir.exists())
+    {
+      if(!pkgDir.mkdir())
+      {
+        throw new RuntimeException("Unable to create " + pkgDir.getAbsolutePath());
+      }
+    }
+  }
+
+  /*
+  public void caseAGrammar(AGrammar node)
+  {
+  AAstProd []temp = (AAstProd[])node.getAst().toArray(new AAstProd[0]);
+
+  for(int i=0; i<temp.length; i++)
+  {
+    temp[i].apply(this);
+  }
+  }
+  */
+
+  public void caseAAstProd(AAstProd node)
+  {
+    if(mainProduction == null)
+    {
+      mainProduction = (String) ast_ids.ast_names.get(node);
+    }
+  }
+
+  public void outStart(Start node)
+  {
+    if(mainProduction != null)
+    {
+      createStart();
+    }
+
+    createEOF();
+    createNode();
+    createToken();
+    create("Switch");
+    create("Switchable");
+  }
+
+  public void createStart()
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, "Start.java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, "Start.java").getAbsolutePath());
+    }
+
+    try
+    {
+      macros.apply(file, "Start", new String[] {pkgName,
+                   ast_ids.astIds.pkgName.equals("") ? "analysis" : ast_ids.astIds.pkgName + ".analysis",
+                   mainProduction, GenAlts.nodeName(mainProduction)});
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "Start.java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+
+  public void createEOF()
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, "EOF.java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, "EOF.java").getAbsolutePath());
+    }
+
+    try
+    {
+      macros.apply(file, "EOF", new String[] {pkgName,
+                                              ast_ids.astIds.pkgName.equals("") ? "analysis" : ast_ids.astIds.pkgName + ".analysis"});
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "EOF.java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+
+  public void createNode()
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, "Node.java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, "Node.java").getAbsolutePath());
+    }
+
+    try
+    {
+      macros.apply(file, "Node", new String[] {pkgName,
+                   ast_ids.astIds.pkgName.equals("") ? "analysis" : ast_ids.astIds.pkgName + ".analysis"});
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "Node.java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+
+  public void createToken()
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, "Token.java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, "Token.java").getAbsolutePath());
+    }
+
+    try
+    {
+      macros.apply(file, "Token", new String[] {pkgName});
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "Token.java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+
+  public void create(String cls)
+  {
+    BufferedWriter file;
+
+    try
+    {
+      file = new BufferedWriter(
+               new FileWriter(
+                 new File(pkgDir, cls + ".java")));
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("Unable to create " + new File(pkgDir, cls + ".java").getAbsolutePath());
+    }
+
+    try
+    {
+      macros.apply(file, cls, new String[] {pkgName});
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, cls + ".java").getAbsolutePath());
+    }
+
+    try
+    {
+      file.close();
+    }
+    catch(IOException e)
+    {}
+  }
+}
diff --git a/src/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
new file mode 100644
index 0000000..8a532a4
--- /dev/null
+++ b/src/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
@@ -0,0 +1,604 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.io.*;
+import org.sablecc.sablecc.Grammar;
+import java.util.Vector;
+import java.util.Enumeration;
+
+public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
+{
+  String currentAlt;
+  String realcurrentAlt;
+  BufferedWriter file;
+  private File pkgDir;
+
+  private ResolveTransformIds transformIds;
+  private ComputeCGNomenclature CG;
+  private ComputeSimpleTermPosition CTP;
+  private MacroExpander macros;
+  private Map simpleTermTransformMap;
+  private LinkedList listSimpleTermTransform;
+  private Map simpleTermOrsimpleListTermTypes;
+
+  GenerateAlternativeCodeForParser(File pkgDir, String aParsedAltName,
+                                   String raParsedAltName,
+                                   BufferedWriter file,
+                                   ResolveTransformIds transformIds,
+                                   ComputeCGNomenclature CG,
+                                   ComputeSimpleTermPosition CTP,
+                                   Map simpleTermTransformMap,
+                                   MacroExpander macros,
+                                   LinkedList listSimpleTermTransform,
+                                   Map simpleTermOrsimpleListTermTypes)
+  {
+    this.pkgDir = pkgDir;
+    this.file = file;
+    currentAlt = aParsedAltName;
+    realcurrentAlt = raParsedAltName;
+    this.transformIds = transformIds;
+    this.CG = CG;
+    this.CTP = CTP;
+    this.simpleTermTransformMap = simpleTermTransformMap;
+    this.macros = macros;
+    this.listSimpleTermTransform = listSimpleTermTransform;
+    this.simpleTermOrsimpleListTermTypes = simpleTermOrsimpleListTermTypes;
+  }
+
+  public void inAAltTransform(AAltTransform node)
+  {
+    Object temp[] = node.getTerms().toArray();
+    String type_name;
+    int position;
+
+    for(int i = 0; i < temp.length; i++)
+    {
+      if(simpleTermTransformMap.get(temp[i]) != null)
+      {
+        type_name = (String)simpleTermTransformMap.get(temp[i]);
+      }
+      else
+      {
+        type_name = (String)CG.getAltTransformElemTypes().get(temp[i]);
+      }
+
+      position = ((Integer)CG.getTermNumbers().get(temp[i])).intValue();
+
+      try
+      {
+        if(type_name.startsWith("L"))
+        {
+          macros.apply(file, "ParserListVariableDeclaration", new String[] {"" + position});
+        }
+        else if(type_name.equals("null"))
+        {
+          macros.apply(file, "ParserNullVariableDeclaration", new String[] {"" + position});
+        }
+        else
+        {
+          macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {type_name, type_name.toLowerCase(), "" + position});
+        }
+      }
+      catch(IOException e)
+      {
+        throw new RuntimeException("An error occured while writing to " +
+                                   new File(pkgDir, "Parser.java").getAbsolutePath());
+      }
+    }
+  }
+
+  public void outAAltTransform(AAltTransform node)
+  {
+    Object temp[] = node.getTerms().toArray();
+    String type_name;
+    int position;
+
+    try
+    {
+      for(int i = 0; i < temp.length; i++)
+      {
+        if(simpleTermTransformMap.get(temp[i]) != null)
+        {
+          type_name = (String)simpleTermTransformMap.get(temp[i]);
+        }
+        else
+        {
+          type_name = (String)CG.getAltTransformElemTypes().get(temp[i]);
+        }
+
+        position = ((Integer)CG.getTermNumbers().get(temp[i])).intValue();
+
+        if(type_name.startsWith("L"))
+        {
+          type_name = "list";
+        }
+        else if(type_name.equals("null"))
+        {
+          type_name = "null";
+        }
+        else
+        {
+          type_name = type_name.toLowerCase();
+        }
+        macros.apply(file, "ParserNewBodyListAdd", new String[] {type_name, "" + position});
+
+      }
+      macros.apply(file, "ParserNewTail");
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "Parser.java").getAbsolutePath());
+    }
+  }
+
+  public void inAParams(LinkedList list_param)
+  {
+    String type_name;
+    int position;
+
+    Object temp[] = list_param.toArray();
+
+    for(int i = 0; i < temp.length; i++)
+    {
+      if(simpleTermTransformMap.get(temp[i]) != null)
+      {
+        type_name = (String)simpleTermTransformMap.get(temp[i]);
+      }
+      else
+      {
+        type_name = (String)CG.getAltTransformElemTypes().get(temp[i]);
+      }
+      position = ((Integer)CG.getTermNumbers().get(temp[i])).intValue();
+
+      try
+      {
+        if(type_name.startsWith("L"))
+        {
+          macros.apply(file, "ParserListVariableDeclaration", new String[] {"" + position});
+        }
+        else if(type_name.equals("null"))
+        {
+          macros.apply(file, "ParserNullVariableDeclaration", new String[] {"" + position});
+        }
+        else
+        {
+          macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {type_name, type_name.toLowerCase(), "" + position});
+        }
+      }
+      catch(IOException e)
+      {
+        throw new RuntimeException("An error occured while writing to " +
+                                   new File(pkgDir, "Parser.java").getAbsolutePath());
+      }
+    }
+  }
+
+  public void inASimpleTerm(ASimpleTerm node)
+  {
+    try
+    {
+      String type_name;
+      if(simpleTermTransformMap.get(node) != null)
+      {
+        type_name = (String)simpleTermTransformMap.get(node);
+      }
+      else
+      {
+        type_name = (String)CG.getAltTransformElemTypes().get(node);
+      }
+      int position = ((Integer)CG.getTermNumbers().get(node)).intValue();
+      String termKey = currentAlt+"."+node.getId().getText();
+      int elemPosition = ((Integer)CTP.elems_position.get(termKey)).intValue();
+      int positionMap = 0;
+
+      if(node.getSimpleTermTail() != null )
+      {
+        if( !listSimpleTermTransform.contains(node.getId().getText() ) )
+        {
+          String type = (String)CTP.positionsMap.get( realcurrentAlt+"."+node.getId().getText() );
+          LinkedList list = (LinkedList)transformIds.getProdTransformIds().prod_transforms.get(type);
+          if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 )
+          {
+            positionMap = list.indexOf( node.getSimpleTermTail().getText() );
+          }
+        }
+
+        if(simpleTermOrsimpleListTermTypes.get(node) != null)
+        {
+          String type = (String)simpleTermOrsimpleListTermTypes.get(node);
+          LinkedList list = (LinkedList)transformIds.getProdTransformIds().prod_transforms.get(type);
+          if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 )
+          {
+            positionMap = list.indexOf( node.getSimpleTermTail().getText() );
+          }
+        }
+      }
+
+      String type;
+      if(type_name.startsWith("L"))
+      {
+        type_name = "list";
+        type = "LinkedList";
+      }
+      else if(type_name.equals("null"))
+      {
+        type_name = "null";
+        type = "Object";
+      }
+      else
+      {
+        type = type_name;
+      }
+
+      macros.apply(file, "ParserSimpleTerm", new String[]
+                   {
+                     type_name.toLowerCase(), ""+position,
+                     type, ""+elemPosition, ""+positionMap
+                   }
+                  );
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "Parser.java").getAbsolutePath());
+    }
+  }
+
+  public void inASimpleListTerm(ASimpleListTerm node)
+  {
+    try
+    {
+      String type_name;
+      if(simpleTermTransformMap.get(node) != null)
+      {
+        type_name = (String)simpleTermTransformMap.get(node);
+      }
+      else
+      {
+        type_name = (String)CG.getAltTransformElemTypes().get(node);
+      }
+
+      String termKey = currentAlt+"."+node.getId().getText();
+      int position = ((Integer)CG.getTermNumbers().get(node)).intValue();
+
+      int elemPosition = ((Integer)CTP.elems_position.get(termKey)).intValue();
+
+      int positionMap = 0;
+
+      if(node.getSimpleTermTail() != null )
+      {
+        if( !listSimpleTermTransform.contains(node.getId().getText()) )
+        {
+          String type = (String)CTP.positionsMap.get( realcurrentAlt+"."+node.getId().getText() );
+          LinkedList list = (LinkedList)transformIds.getProdTransformIds().prod_transforms.get(type);
+          if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 )
+          {
+            positionMap = list.indexOf( node.getSimpleTermTail().getText() );
+          }
+        }
+
+        if(simpleTermOrsimpleListTermTypes.get(node) != null)
+        {
+          String type = (String)simpleTermOrsimpleListTermTypes.get(node);
+          LinkedList list = (LinkedList)transformIds.getProdTransformIds().prod_transforms.get(type);
+          if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 )
+          {
+            positionMap = list.indexOf( node.getSimpleTermTail().getText() );
+          }
+        }
+      }
+
+      String type;
+      if(type_name.startsWith("L"))
+      {
+        type_name = "list";
+        type = "LinkedList";
+      }
+      else if(type_name.equals("null"))
+      {
+        type_name = "null";
+        type = "Object";
+      }
+      else
+      {
+        type = type_name;
+      }
+
+      macros.apply(file, "ParserSimpleTerm", new String[]
+                   {
+                     type_name.toLowerCase(), ""+position,
+                     type, ""+elemPosition, ""+positionMap
+                   }
+                  );
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "Parser.java").getAbsolutePath());
+    }
+  }
+
+  public void inANewTerm(ANewTerm node)
+  {
+    try
+    {
+      macros.apply(file, "ParserBraceOpening");
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "Parser.java").getAbsolutePath());
+    }
+    inAParams(node.getParams());
+  }
+
+  public void inANewListTerm(ANewListTerm node)
+  {
+    try
+    {
+      macros.apply(file, "ParserBraceOpening");
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "Parser.java").getAbsolutePath());
+    }
+    inAParams(node.getParams());
+  }
+
+  public void inAListTerm(AListTerm node)
+  {
+    try
+    {
+      macros.apply(file, "ParserBraceOpening");
+      Object temp[] = node.getListTerms().toArray();
+
+      for(int i = 0; i < temp.length; i++)
+      {
+        String type_name;
+        if(simpleTermTransformMap.get(temp[i]) != null)
+        {
+          type_name = (String)simpleTermTransformMap.get(temp[i]);
+        }
+        else
+        {
+          type_name = (String)CG.getAltTransformElemTypes().get(temp[i]);
+        }
+        int position = ((Integer)CG.getTermNumbers().get(temp[i])).intValue();
+
+        if(type_name.startsWith("L"))
+        {
+          macros.apply(file, "ParserListVariableDeclaration", new String[] {"" + position});
+        }
+        else if(type_name.equals("null"))
+        {
+          macros.apply(file, "ParserNullVariableDeclaration", new String[] {"" + position});
+        }
+        else
+        {
+          macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {type_name, type_name.toLowerCase(), "" + position});
+        }
+      }
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "Parser.java").getAbsolutePath());
+    }
+  }
+
+  public void outAListTerm(AListTerm node)
+  {
+    try
+    {
+      Object temp[] = node.getListTerms().toArray();
+      int listPosition = ((Integer)CG.getTermNumbers().get(node)).intValue();
+
+      for(int i = 0; i < temp.length; i++)
+      {
+        String type_name;
+        if(simpleTermTransformMap.get(temp[i]) != null)
+        {
+          type_name = (String)simpleTermTransformMap.get(temp[i]);
+        }
+        else
+        {
+          type_name = (String)CG.getAltTransformElemTypes().get(temp[i]);
+        }
+        int position = ((Integer)CG.getTermNumbers().get(temp[i])).intValue();
+
+        if(!type_name.equals("null"))
+        {
+          if(type_name.startsWith("L"))
+          {
+            macros.apply(file, "ParserTypedLinkedListAddAll", new String[] {"list", ""+listPosition, "list", ""+ position});
+          }
+          else
+          {
+            macros.apply(file, "ParserTypedLinkedListAdd", new String[] {"list", ""+listPosition, type_name.toLowerCase(), ""+ position});
+          }
+        }
+      }
+      macros.apply(file, "ParserBraceClosing");
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "Parser.java").getAbsolutePath());
+    }
+  }
+
+  public void outANewTerm(ANewTerm node)
+  {
+    String type_name = (String)CG.getAltTransformElemTypes().get(node);
+    if(simpleTermTransformMap.get(node) != null)
+    {
+      type_name = (String)simpleTermTransformMap.get(node);
+    }
+    else
+    {
+      type_name = (String)CG.getAltTransformElemTypes().get(node);
+    }
+    int position = ((Integer)CG.getTermNumbers().get(node)).intValue();
+    String newAltName = name((AProdName)node.getProdName());
+
+    try
+    {
+      if(type_name.startsWith("L"))
+      {
+        type_name = "list";
+      }
+      else
+      {
+        type_name = type_name.toLowerCase();
+      }
+      macros.apply(file, "ParserNewBodyNew", new String[] {type_name, ""+position, newAltName});
+
+      if(node.getParams().size() > 0)
+      {
+        Object temp[] = node.getParams().toArray();
+        String isNotTheFirstParam = "";
+
+        for(int i = 0; i < temp.length; i++)
+        {
+          if(simpleTermTransformMap.get(temp[i]) != null)
+          {
+            type_name = (String)simpleTermTransformMap.get(temp[i]);
+          }
+          else
+          {
+            type_name = (String)CG.getAltTransformElemTypes().get(temp[i]);
+          }
+          position = ((Integer)CG.getTermNumbers().get(temp[i])).intValue();
+
+          if(i != 0)
+          {
+            isNotTheFirstParam = ", ";
+          }
+
+          if(type_name.equals("null"))
+          {
+            macros.apply(file, "ParserNew&ListBodyParamsNull", new String[] {isNotTheFirstParam+"null"});
+          }
+          else
+          {
+            if(type_name.startsWith("L"))
+            {
+              type_name = "list";
+            }
+            else
+            {
+              type_name = type_name.toLowerCase();
+            }
+            macros.apply(file, "ParserNew&ListBodyParams", new String[] {isNotTheFirstParam+type_name, ""+position});
+          }
+
+        }
+      }
+      macros.apply(file, "ParserNewBodyNewTail");
+      macros.apply(file, "ParserBraceClosing");
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "TokenIndex.java").getAbsolutePath());
+    }
+  }
+
+  public void outANewListTerm(ANewListTerm node)
+  {
+    String type_name;
+    if(simpleTermTransformMap.get(node) != null)
+    {
+      type_name = (String)simpleTermTransformMap.get(node);
+    }
+    else
+    {
+      type_name = (String)CG.getAltTransformElemTypes().get(node);
+    }
+    int position = ((Integer)CG.getTermNumbers().get(node)).intValue();
+    String newAltName = name((AProdName)node.getProdName());
+    try
+    {
+      if(type_name.startsWith("L"))
+      {
+        type_name = "list";
+      }
+      else
+      {
+        type_name = type_name.toLowerCase();
+      }
+      macros.apply(file, "ParserNewBodyNew", new String[] {type_name, ""+position, newAltName});
+
+      if(node.getParams().size() > 0)
+      {
+        Object temp[] = node.getParams().toArray();
+        String isNotTheFirstParam = "";
+
+        for(int i = 0; i < temp.length; i++)
+        {
+          if(simpleTermTransformMap.get(temp[i]) != null)
+          {
+            type_name = (String)simpleTermTransformMap.get(temp[i]);
+          }
+          else
+          {
+            type_name = (String)CG.getAltTransformElemTypes().get(temp[i]);
+          }
+          position = ((Integer)CG.getTermNumbers().get(temp[i])).intValue();
+
+          if(i != 0)
+          {
+            isNotTheFirstParam = ", ";
+          }
+
+          if(type_name.equals("null"))
+          {
+            macros.apply(file, "ParserNew&ListBodyParamsNull", new String[] {isNotTheFirstParam+"null"});
+          }
+          else
+          {
+            if(type_name.startsWith("L"))
+            {
+              type_name = "list";
+            }
+            else
+            {
+              type_name = type_name.toLowerCase();
+            }
+            macros.apply(file, "ParserNew&ListBodyParams", new String[] {isNotTheFirstParam+type_name, ""+position});
+          }
+        }
+      }
+      macros.apply(file, "ParserNewBodyNewTail");
+      macros.apply(file, "ParserBraceClosing");
+    }
+    catch(IOException e)
+    {
+      throw new RuntimeException("An error occured while writing to " +
+                                 new File(pkgDir, "TokenIndex.java").getAbsolutePath());
+    }
+  }
+
+  public String name(AProdName node)
+  {
+    if(node.getProdNameTail() != null)
+    {
+      return "A" +
+             ResolveIds.name(node.getProdNameTail().getText()) +
+             ResolveIds.name(node.getId().getText());
+    }
+    return "A" + ResolveIds.name(node.getId().getText());
+  }
+
+}
diff --git a/src/org/sablecc/sablecc/Grammar.java b/src/org/sablecc/sablecc/Grammar.java
new file mode 100644
index 0000000..77d121b
--- /dev/null
+++ b/src/org/sablecc/sablecc/Grammar.java
@@ -0,0 +1,687 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.Vector;
+import java.util.*;
+
+public final class Grammar
+{
+  private static TreeMap fastLr0Closure = new TreeMap();
+  private static TreeMap fastLr1Closure = new TreeMap();
+
+  static int startSymbol;
+  static int startProduction;
+  static int eof ;
+  static int dummy ;
+
+  static int[][][] action_;
+  static int[][] goto_;
+
+  static
+  {
+    reinit();
+  }
+
+  private Grammar()
+  {}
+
+  public static int addTerminal(String name, String errorName)
+  {
+    return new Symbol(name, errorName, true).index;
+  }
+
+  public static int addNonterminal(String name)
+  {
+    return new Symbol(name, null, false).index;
+  }
+
+  public static int addProduction(String nonterminal, String name)
+  {
+    Symbol symbol = Symbol.symbol(nonterminal);
+
+    if(symbol.terminal)
+    {
+      throw new IllegalArgumentException("The symbol " + nonterminal +
+                                         " is a terminal.");
+    }
+
+    return new Production(symbol.index, name).index;
+  }
+
+  public static void addSymbolToProduction(String symbol, int production)
+  {
+    Production.production(production).addSymbol(Symbol.symbol(symbol));
+  }
+
+  public static void reinit()
+  {
+    fastLr0Closure = new TreeMap();
+    fastLr1Closure = new TreeMap();
+    startSymbol = 0;
+    startProduction = -1;
+    eof = -1;
+    dummy = -1;
+    action_ = null;
+    goto_ = null;
+  }
+
+  public static void computeLALR() throws ConflictException
+  {
+    // Add EOF to terminals
+    eof = addTerminal("EOF", "EOF");
+    // Add dummy to terminals
+    dummy = addTerminal("#", null);
+
+    // Add the production S'->S
+    startSymbol = addNonterminal("Start");
+    Production start = new Production(startSymbol, "Start");
+    start.addSymbol(Symbol.symbol(0, false));
+    startProduction = start.index;
+
+    computeFirst();
+
+    LR0ItemSet set
+      = new LR0ItemSet();
+    set.set(new LR0Item(startProduction, 0));
+    LR1Collection collection = new LR1Collection(set
+                                                );
+
+    LR0ItemSet[] sets = collection.collection.sets();
+    Symbol[] terminals = Symbol.terminals();
+    Symbol[] nonterminals = Symbol.nonterminals();
+
+    action_ = new int[sets.length][terminals.length - 1][];
+    goto_ = new int[sets.length][nonterminals.length - 1];
+
+    Set listOfConflictualProds = new HashSet();
+    StringBuffer conflictMessage = new StringBuffer();
+
+    for(int i = 0; i < sets.length; i++)
+    {
+      System.out.print(".");
+
+      LR1ItemSet state = new LR1ItemSet();
+
+      {
+        LR0Item[] items = sets[i].items();
+        for(int j = 0; j < items.length; j++)
+        {
+          Symbol[] lookaheads = ((SymbolSet) collection.lookaheads[i].
+                                 get
+                                   (items[j])).getSymbols();
+
+          for(int k = 0; k < lookaheads.length; k++)
+          {
+            state.set(new LR1Item(items[j], lookaheads[k].index));
+          }
+        }
+      }
+
+      state = CLOSURE(state);
+
+      LR1Item[] items = state.items();
+
+      for(int j = 0; j < terminals.length; j++)
+      {
+        Integer destination = collection.collection.GOTO(i, terminals[j]);
+        if(destination != null)
+        {
+          //Shift action is taken
+          action_[i][j] = new int[] {0, destination.intValue()};
+        }
+
+        for(int k = 0; k < items.length; k++)
+        {
+          Production production = Production.
+                                  production(items[k].lr0Item.production);
+
+          //A conflict occurs only if one is on the end of an alternative
+          try
+          {
+            production.rightside(items[k].lr0Item.position);
+          }
+          catch(Exception e)
+          {
+            if(production.leftside != startSymbol)
+            {
+              if(items[k].terminal == terminals[j].index)
+              {
+                int[] action = action_[i][j];
+                if(action != null)
+                {
+                  /* The current alternative is conflictual (reduce in a XXX/reduce conflict) */
+                  listOfConflictualProds.add(Symbol.symbol(production.leftside, false).toString());
+
+                  /*  */
+                  switch(action[0])
+                  {
+                  case 0:
+                    conflictMessage.append(
+                      "\n\nshift/reduce conflict in state [stack:" +
+                      collection.collection.names.elementAt(i) + "*] on " +
+                      terminals[j] + " in " + state.toString(terminals[j]));
+
+                    /* nothing else to do */
+                    break;
+
+                  case 1:
+                    conflictMessage.append(
+                      "\n\nreduce/reduce conflict in state [stack:" +
+                      collection.collection.names.elementAt(i) + "*] on " +
+                      terminals[j] + " in " + state.toString(terminals[j]));
+
+                    listOfConflictualProds.add(Symbol.symbol(Production.production(action[1]).leftside, false).toString());
+                    break;
+
+                  case 2:
+                    conflictMessage.append(
+                      "\n\nreduce/accept conflict in state [stack:" +
+                      collection.collection.names.elementAt(i) + "*] on " +
+                      terminals[j] + " in " + state.toString(terminals[j]));
+
+                    listOfConflictualProds.add(Symbol.symbol(Production.production(action[1]).leftside, false).toString());
+                    break;
+                  }
+                }
+                else
+                {
+                  //it's a reduction action
+                  action_[i][j] = new int[] {1,
+                                             items[k].lr0Item.production};
+                }
+              }
+            }
+            else
+            {
+              if(terminals[j].index == eof)
+              {
+                int[] action = action_[i][j];
+                if(action != null)
+                {
+                  /* The current alternative is conflictual (accept in a XXX/accept conflict) */
+                  listOfConflictualProds.add(Symbol.symbol(production.leftside, false).toString());
+
+                  /*  */
+                  switch(action[0])
+                  {
+                  case 0:
+                    conflictMessage.append(
+                      "shift/accept conflict in state [stack:" +
+                      collection.collection.names.elementAt(i) + "*] on " +
+                      terminals[j] + " in " + state);
+
+                    /* nothing else to do */
+                    break;
+
+                  case 1:
+                    conflictMessage.append(
+                      "reduce/accept conflict in state [stack:" +
+                      collection.collection.names.elementAt(i) + "*] on " +
+                      terminals[j] + " in " + state);
+
+                    listOfConflictualProds.add(Symbol.symbol(Production.production(action[1]).leftside, false).toString());
+
+                    break;
+                  }
+                }
+                else
+                {
+                  //accept action is taken
+                  action_[i][j] = new int[] {2};
+                }
+              }
+            }
+          }//End of catch
+        }
+
+      }
+
+      if (listOfConflictualProds.size() > 0)
+      {
+        throw new ConflictException(listOfConflictualProds, conflictMessage.toString());
+      }
+
+      for(int j = 0; j < nonterminals.length - 1; j++)
+      {
+        Integer destination = collection.collection.GOTO(i, nonterminals[j]);
+
+        if(destination != null)
+        {
+          goto_[i][j] = destination.intValue();
+        }
+        else
+        {
+          goto_[i][j] = -1;
+        }
+      }
+
+    }
+    System.out.println();
+  }
+
+  static SymbolSet[] FIRST_Terminal;
+  static SymbolSet[] FIRST_Nonterminal;
+
+  static void computeFirst()
+  {
+    // Get terminals, nonterminals and productions
+    Symbol[] terminals = Symbol.terminals();
+    Symbol[] nonterminals = Symbol.nonterminals();
+    Production[] productions = Production.productions();
+
+    // Initialize FIRST(X) to {}
+    FIRST_Terminal = new SymbolSet[terminals.length];
+    for(int i = 0; i < terminals.length; i++)
+    {
+      FIRST_Terminal[i] = new SymbolSet();
+    }
+
+    FIRST_Nonterminal = new SymbolSet[nonterminals.length];
+    for(int i = 0; i < nonterminals.length; i++)
+    {
+      FIRST_Nonterminal[i] = new SymbolSet();
+    }
+
+    // if X is terminal, then FIRST(X) is {X}
+    for(int i = 0; i < terminals.length; i++)
+    {
+      FIRST_Terminal[i].setTerminal(terminals[i].index);
+    }
+
+    // if X -> empty is a production, then add empty to FIRST(X)
+    for(int i = 0; i < productions.length; i++)
+    {
+      if(productions[i].rightside().length == 0)
+      {
+        FIRST_Nonterminal[productions[i].leftside].
+        setEmpty();
+      }
+    }
+
+    // if X is nonterminal and X -> Y(1) Y(2) ... Y(k) is a production,
+    // then place t in FIRST(X) if for some i, t is in FIRST(Y(i)), and
+    // empty is in all of FIRST(Y(1)), ... , FIRST(Y(i-1)).
+    boolean changed;
+    do
+    {
+      changed = false;
+
+      for(int i = 0; i < productions.length; i++)
+      {
+        SymbolSet before =
+          (SymbolSet) FIRST_Nonterminal[productions[i].leftside].clone();
+
+        FIRST_Nonterminal[productions[i].leftside].
+        or(FIRST(productions[i].rightside()));
+
+        if(!before.equals(FIRST_Nonterminal[productions[i].leftside]))
+        {
+          changed = true;
+        }
+      }
+    }
+    while(changed);
+  }
+
+  static SymbolSet FIRST(Symbol[] symbols)
+  {
+    return FIRST(symbols, 0, symbols.length);
+  }
+
+  static SymbolSet FIRST(Symbol[] symbols, int begin)
+  {
+    return FIRST(symbols, begin, symbols.length);
+  }
+
+  static SymbolSet FIRST(Symbol[] symbols, int begin, int end)
+  {
+    SymbolSet result = new SymbolSet();
+
+    boolean previousContainsEmpty = true;
+
+    for(int i = begin; i < end; i++)
+    {
+      if(!previousContainsEmpty)
+      {
+        break;
+      }
+
+      if(symbols[i].terminal)
+      {
+        result.or(FIRST_Terminal[symbols[i].index]);
+        previousContainsEmpty = FIRST_Terminal[symbols[i].index].getEmpty();
+      }
+      else
+      {
+        result.or(FIRST_Nonterminal[symbols[i].index]);
+        previousContainsEmpty = FIRST_Nonterminal[symbols[i].index].getEmpty();
+      }
+    }
+
+    if(previousContainsEmpty)
+    {
+      result.setEmpty();
+    }
+    else
+    {
+      result.clearEmpty();
+    }
+
+    return result;
+  }
+
+  static SymbolSet[] FOLLOW;
+
+  static void computeFollow()
+  {
+    // Get terminals, nonterminals and productions
+    Symbol[] terminals = Symbol.terminals();
+    Symbol[] nonterminals = Symbol.nonterminals();
+    Production[] productions = Production.productions();
+
+    // Initialize FOLLOW(A) to {}
+    FOLLOW = new SymbolSet[nonterminals.length];
+    for(int i = 0; i < nonterminals.length; i++)
+    {
+      FOLLOW[i] = new SymbolSet();
+    }
+
+    // Place eof in FOLLOW(S) where S is the start symbol.
+    FOLLOW[startSymbol].setTerminal(eof);
+
+    // If there is a production A->xBy, then everything in FIRST(y) except
+    // for empty is placed in FOLLOW(B).
+    for(int i = 0; i < productions.length; i++)
+    {
+      Symbol[] rightside = productions[i].rightside();
+
+      for(int j = 0; j < rightside.length; j++)
+      {
+        if(!rightside[j].terminal)
+        {
+          SymbolSet set
+            = FIRST(rightside, j + 1);
+          set.clearEmpty();
+          FOLLOW[rightside[j].index].or(set
+                                       );
+        }
+      }
+    }
+
+    // If there is a production A->xB, or a production A->xBy where FIRST(y)
+    // contains empty, then everything in FOLLOW(A) is in FOLLOW(B).
+    boolean changed;
+    do
+    {
+      changed = false;
+
+      for(int i = 0; i < productions.length; i++)
+      {
+        Symbol[] rightside = productions[i].rightside();
+
+        for(int j = 0; j < rightside.length; j++)
+        {
+          if(!rightside[j].terminal)
+          {
+            SymbolSet before =
+              (SymbolSet) FOLLOW[rightside[j].index].clone();
+
+            if(FIRST(rightside, j + 1).getEmpty())
+            {
+              FOLLOW[rightside[j].index].
+              or(FOLLOW[productions[i].leftside]);
+            }
+
+            if(!before.equals(FOLLOW[rightside[j].index]))
+            {
+              changed = true;
+            }
+          }
+        }
+      }
+    }
+    while(changed);
+  }
+
+  static SymbolSet FOLLOW(int nonterminal)
+  {
+    return FOLLOW[nonterminal];
+  }
+
+  static LR0ItemSet CLOSURE(LR0Item item)
+  {
+    LR0ItemSet result = (LR0ItemSet) fastLr0Closure.get(item);
+
+    if(result != null)
+    {
+      return result;
+    }
+
+    result = new LR0ItemSet();
+    result.set(item);
+
+    LR0ItemSet newItems = result;
+    boolean modified;
+    do
+    {
+      modified = false;
+      LR0Item[] items = newItems.items();
+      newItems = new LR0ItemSet();
+
+      for(int i = 0; i < items.length; i++)
+      {
+        Production production = Production.production(items[i].production);
+        Symbol[] rightside = production.rightside();
+        if(items[i].position < rightside.length)
+        {
+          Symbol symbol = rightside[items[i].position];
+
+          if(!symbol.terminal)
+          {
+            Production[] alternatives =
+              Production.alternatives(symbol.index);
+
+            for(int j = 0; j < alternatives.length; j++)
+            {
+              LR0Item newItem = new LR0Item(alternatives[j].index, 0);
+
+              if(!result.get(newItem))
+              {
+                result.set(newItem);
+                newItems.set(newItem);
+                modified = true;
+              }
+            }
+          }
+        }
+      }
+    }
+    while(modified);
+
+    fastLr0Closure.put(item, result);
+
+    return result;
+  }
+
+  //    private static final SplayTreeMap fastLr0SetClosure = new SplayTreeMap();
+
+  static LR0ItemSet CLOSURE(LR0ItemSet set
+                             )
+  {
+    LR0ItemSet result =
+      /*
+        (LR0ItemSet) fastLr0SetClosure.get(set);
+
+        if(result != null)
+        {
+        return result;
+        }
+
+        result =*/
+      new LR0ItemSet();
+
+    LR0Item[] setItems = set.items();
+
+    for(int i = 0; i < setItems.length; i++)
+    {
+      LR0Item[] items = CLOSURE(setItems[i]).items();
+
+      for(int j = 0; j < items.length; j++)
+      {
+        result.set(items[j]);
+      }
+    }
+
+    // fastLr0SetClosure.put(set, result);
+
+    return result;
+  }
+
+  static LR1ItemSet CLOSURE(LR1Item item)
+  {
+    LR1ItemSet result = (LR1ItemSet) fastLr1Closure.get(item);
+
+    if(result != null)
+    {
+      return result;
+    }
+
+    result = new LR1ItemSet();
+    result.set(item);
+
+    LR1ItemSet newItems = result;
+    boolean modified;
+    do
+    {
+      modified = false;
+      LR1Item[] items = newItems.items();
+      newItems = new LR1ItemSet();
+
+      for(int i = 0; i < items.length; i++)
+      {
+        Production production = Production.production(items[i].lr0Item.production);
+        Symbol[] rightside = production.rightside();
+        if(items[i].lr0Item.position < rightside.length)
+        {
+          Symbol symbol = rightside[items[i].lr0Item.position];
+
+          if(!symbol.terminal)
+          {
+            Vector tailVector = new Vector(0);
+
+            for(int k = items[i].lr0Item.position + 1; k < rightside.length; k++)
+            {
+              tailVector.addElement(rightside[k]);
+            }
+
+            tailVector.addElement(Symbol.symbol(items[i].terminal, true));
+
+            Symbol[] tail = new Symbol[tailVector.size()];
+            tailVector.copyInto(tail);
+
+            Symbol[] symbols = FIRST(tail).getSymbols();
+
+            Production[] alternatives =
+              Production.alternatives(symbol.index);
+
+            for(int k = 0; k < symbols.length; k++)
+            {
+              if(symbols[k].terminal)
+              {
+                for(int j = 0; j < alternatives.length; j++)
+                {
+                  LR1Item newItem = new LR1Item(
+                                      new LR0Item(alternatives[j].index, 0),
+                                      symbols[k].index);
+
+                  if(!result.get(newItem))
+                  {
+                    result.set(newItem);
+                    newItems.set(newItem);
+                    modified = true;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    while(modified);
+
+    fastLr1Closure.put(item, result);
+
+    return result;
+  }
+
+  // private static final SplayTreeMap fastLr1SetClosure = new SplayTreeMap();
+
+  static LR1ItemSet CLOSURE(LR1ItemSet set
+                             )
+  {
+    LR1ItemSet result =
+      /*
+        (LR1ItemSet) fastLr1SetClosure.get(set);
+
+        if(result != null)
+        {
+        return result;
+        }
+
+        result =*/
+      new LR1ItemSet();
+
+    LR1Item[] setItems = set.items();
+
+    for(int i = 0; i < setItems.length; i++)
+    {
+      LR1Item[] items = CLOSURE(new LR1Item(setItems[i].lr0Item, dummy)).items();
+
+      for(int j = 0; j < items.length; j++)
+      {
+        result.set(new LR1Item(items[j].lr0Item,
+                               items[j].terminal == dummy ? setItems[i].terminal : items[j].terminal));
+      }
+    }
+
+    //        fastLr1SetClosure.put(set, result);
+
+    return result;
+  }
+
+  static LR0ItemSet GOTO(LR0ItemSet set
+                           , Symbol symbol)
+  {
+    LR0ItemSet initialset = set
+                              ;
+    set
+      = CLOSURE(set
+               );
+    LR0ItemSet result = new LR0ItemSet();
+
+    // return all items A->xS.y such that A->x.Sy is in set. (S=symbol)
+    LR0Item[] items = set.items();
+    for(int i = 0; i < items.length; i++)
+    {
+      Production production = Production.production(items[i].production);
+      Symbol[] rightside = production.rightside();
+      if(items[i].position < rightside.length)
+      {
+        if(symbol.equals(rightside[items[i].position]))
+        {
+          result.set(new LR0Item(items[i].production,
+                                 items[i].position + 1));
+        }
+      }
+    }
+
+    return result;
+  }
+
+}
diff --git a/src/org/sablecc/sablecc/In_Production.java b/src/org/sablecc/sablecc/In_Production.java
new file mode 100644
index 0000000..79aedb3
--- /dev/null
+++ b/src/org/sablecc/sablecc/In_Production.java
@@ -0,0 +1,173 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+
+public class In_Production
+{
+  private String name;
+  private String[] prodTransformElems;
+  private int nbAlts;
+  private In_Alternative[] alternatives;
+
+  public In_Production(AProd prod)
+  {
+    setName(prod.getId().getText());
+
+    AElem[] prodTransforms = (AElem [])prod.getProdTransform().toArray(new AElem[0]);
+    prodTransformElems = new String[prodTransforms.length];
+
+    for(int i=0; i<prodTransforms.length; i++)
+    {
+      if(prodTransforms[i].getElemName() != null)
+      {
+        prodTransformElems[i] = prodTransforms[i].getElemName().getText();
+      }
+      else
+      {
+        prodTransformElems[i] = prodTransforms[i].getId().getText();
+      }
+    }
+
+    if(prodTransforms.length == 0)
+    {
+      prodTransformElems = new String[1];
+      prodTransformElems[0] = new String("  ");
+    }
+
+    AAlt[] alts = (AAlt[])prod.getAlts().toArray(new AAlt[0]);
+    alternatives = new In_Alternative[alts.length];
+
+    for(int i=0; i<alts.length; i++)
+    {
+      addAlternative(i, new In_Alternative(alts[i], prodTransformElems, name));
+    }
+
+    nbAlts = alts.length;
+  }
+
+  public void setName(String name)
+  {
+    this.name = name;
+  }
+
+  public String getName()
+  {
+    return name;
+  }
+
+  public int getNbAlts()
+  {
+    return nbAlts;
+  }
+
+  public void addAlternative(int position, In_Alternative alt)
+  {
+    alternatives[position] = alt;
+  }
+
+  public In_Alternative getAlternative(int position)
+  {
+    return alternatives[position];
+  }
+
+  class In_Alternative
+  {
+    String name;
+    int nbElems;
+    AElem[] elements;
+    Map prodTransform_altTransform;
+
+    In_Alternative(AAlt alt, String[] prodTransformElems, String prodName)
+    {
+      setName(alt.getAltName() != null ? alt.getAltName().getText() : "");
+
+      elements = new AElem[alt.getElems().size()];
+      AElem[] listOfElems = (AElem[]) alt.getElems().toArray(new AElem[0]);
+
+      final String newElemName = (name.equals("") ? prodName : prodName + "#" + name );
+
+      for(int i=0; i<listOfElems.length; i++)
+      {
+        AElem tmpElem = (AElem)listOfElems[i].clone();
+
+        if(tmpElem.getElemName() != null)
+        {
+          tmpElem.setElemName(new TId(newElemName + "#" + tmpElem.getElemName().getText() ) );
+        }
+        else
+        {
+          tmpElem.setElemName(new TId(newElemName + "#" + tmpElem.getId().getText() ));
+        }
+
+        addElem(i, tmpElem );
+      }
+
+      nbElems = listOfElems.length;
+
+      prodTransform_altTransform =
+        new TypedHashMap(prodTransformElems.length,
+                         StringCast.instance,
+                         NodeCast.instance);
+
+      LinkedList list = ((AAltTransform)alt.getAltTransform()).getTerms();
+      for(int i=0; i<list.size(); i++)
+      {
+        PTerm tmpTerm = (PTerm)list.get(i);
+        tmpTerm.apply(new DepthFirstAdapter()
+                      {
+                        public void caseASimpleListTerm(ASimpleListTerm node)
+                        {
+                          node.setId( new TId(newElemName + "#" + node.getId().getText(), node.getId().getLine(), node.getId().getPos()) );
+                        }
+
+                        public void caseASimpleTerm(ASimpleTerm node)
+                        {
+                          node.setId( new TId(newElemName + "#" + node.getId().getText(), node.getId().getLine(), node.getId().getPos()) );
+                        }
+
+                      }
+                     );
+        prodTransform_altTransform.put(prodTransformElems[i], tmpTerm);
+      }
+    }
+
+    void setName(String name)
+    {
+      this.name = name;
+    }
+
+    String getName()
+    {
+      return name;
+    }
+
+    int getNbElems()
+    {
+      return nbElems;
+    }
+
+    Map getProdTransform_AlTransformMap()
+    {
+      return prodTransform_altTransform;
+    }
+
+    void addElem(int position, AElem elem)
+    {
+      elements[position] = elem;
+    }
+
+    AElem[] getElems()
+    {
+      return elements;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/Inlining.java b/src/org/sablecc/sablecc/Inlining.java
new file mode 100644
index 0000000..ae8979d
--- /dev/null
+++ b/src/org/sablecc/sablecc/Inlining.java
@@ -0,0 +1,527 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Last Modification date : 17-11-2003
+ * Fix simpleTerm and simpleListTerm bug related to
+ * name confusion.
+ * Now, elem_name is automatically added to an elem to avoid that.
+ * The name has the form (production_name#alternative_name#elemId)
+ * or (production_name#alternative_name#elemName)
+ */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+
+public class Inlining
+{
+  public static HashSet productionsToBeRemoved =
+    new HashSet();
+
+  private AProd current_production;
+
+  //The production to inline within current_production
+  private In_Production prod_to_inline;
+
+  public Inlining(AProd curr_prod, In_Production prod_to_inline)
+  {
+    this.current_production = curr_prod;
+    this.prod_to_inline = prod_to_inline;
+  }
+
+  /*
+   * The core of inlining is done here.
+   * returns true if it succeeds and false otherwise
+  */
+  public boolean inlineProduction()
+  {
+    AAlt[] alts = (AAlt[])current_production.getAlts().toArray(new AAlt[0]);
+    final BooleanEx prodMustBeInlined = new BooleanEx(false);
+
+    /*
+      We're trying to detect if the current production must be inlined.
+      ie one of its alternatives contains production to inline
+    */
+    for(int i=0; i<alts.length; i++)
+    {
+      ((PAlt)alts[i]).apply( new DepthFirstAdapter()
+                             {
+                               public void caseAElem(AElem node)
+                               {
+                                 String elem_name = node.getId().getText();
+
+                                 if(elem_name.equals(prod_to_inline.getName()) &&
+                                     !(node.getSpecifier() instanceof ATokenSpecifier) )
+                                 {
+                                   prodMustBeInlined.setValue(true);
+                                 }
+                               }
+                             }
+                           );
+      //We only need to know if one element within one of the production alternatives matches.
+      if(prodMustBeInlined.getValue())
+      {
+        break;
+      }
+    }
+
+    //If the production must be inlined
+    if(prodMustBeInlined.getValue())
+    {
+      /*
+      Once we detect that the production can be inline, 
+      we try to inline each of its alternatives.
+       */
+      LinkedList listOfAlts = new TypedLinkedList(NodeCast.instance);
+      for(int i=0; i<alts.length; i++)
+      {
+        listOfAlts.addAll( inlineAlternative(alts[i]) );
+      }
+      /**************************************************************************
+      if( !containsDoubloons(listOfAlts) )
+      {
+       //list of productions whose inlining was a success.
+       productionsToBeRemoved.add("P" + ResolveIds.name(prod_to_inline.getName()));
+
+       current_production.setAlts(listOfAlts);
+       return true;
+      }
+      return false;
+      /**************************************************************************/
+      listOfAlts = (LinkedList)removeAlternativeDoubloonsFromInlinedProduction(listOfAlts);
+
+      //list of productions whose inlining was a success.
+      productionsToBeRemoved.add("P" + ResolveIds.name(prod_to_inline.getName()));
+
+      current_production.setAlts(listOfAlts);
+      return true;
+    }
+
+    return false;
+  }
+
+  List removeAlternativeDoubloonsFromInlinedProduction(List inlinedAlternatives)
+  {
+    AAlt[] alts = (AAlt [])inlinedAlternatives.toArray(new AAlt[0]);
+    LinkedList[] theWhole = new LinkedList[alts.length];
+
+    TreeSet indexOfDoublonsAlternatives = new TreeSet();
+
+    for(int i=0; i<alts.length; i++)
+    {
+      LinkedList elems = alts[i].getElems();
+      AElem[] arrayOfElems = (AElem []) elems.toArray(new AElem[0]);
+      LinkedList listOfElems = new TypedLinkedList(StringCast.instance);
+      for(int j=0; j<arrayOfElems.length; j++)
+      {
+        listOfElems.add(arrayOfElems[j].getId().getText());
+      }
+      theWhole[i] = listOfElems;
+
+      LinkedList currentList = listOfElems;
+
+      for(int k=0; k<i; k++)
+      {
+        if( currentList.equals(theWhole[k]) )
+        {
+          //theWhole[k] = null;
+          indexOfDoublonsAlternatives.add(new Integer(k));
+        }
+      }
+    }
+
+    {
+      int i = 0;
+
+      for(Iterator iter = indexOfDoublonsAlternatives.iterator(); iter.hasNext();)
+      {
+        int index = ((Integer)iter.next()).intValue();
+        //System.out.println("(" + index + "," + i + ")");
+        inlinedAlternatives.remove( index - i++ );
+      }
+    }
+    return inlinedAlternatives;
+  }
+
+  /*****************************************************************
+  boolean containsDoubloons(List aList)
+  {
+    AAlt[] alts = (AAlt [])aList.toArray(new AAlt[0]);
+    LinkedList[] theWhole = new LinkedList[alts.length];
+
+    for(int i=0; i<alts.length; i++)
+    {
+      LinkedList elems = alts[i].getElems();
+      AElem[] arrayOfElems = (AElem []) elems.toArray(new AElem[0]);
+      LinkedList listOfElems = new TypedLinkedList(StringCast.instance);
+      for(int j=0; j<arrayOfElems.length; j++)
+      {
+    	  listOfElems.add(arrayOfElems[j].getId().getText());
+      }
+      theWhole[i] = listOfElems;
+
+      LinkedList currentList = listOfElems;
+      for(int k=0; k<i; k++)
+      {
+  if( currentList.equals(theWhole[k]) )
+  {
+   return true;
+  }
+      }
+    }
+    return false; 
+  }
+  /*****************************************************************/
+
+  /*
+   * Inlining of an alternative
+   *
+   */
+  public LinkedList inlineAlternative(AAlt alt)
+  {
+    AElem[] elems = (AElem[])alt.getElems().toArray(new AElem[0]);
+    String elem_name ;
+
+    // This list contains the names of elements to inline within an alternative
+    // The elem name can be either a production name or name given to it by user
+    //LinkedList eventualProdIdOrNames = new LinkedList();
+    int occurenceOfProductionToInlineWithinTheAlternative = 0;
+
+    for(int i=0; i<elems.length; i++)
+    {
+      elem_name = elems[i].getId().getText();
+
+      /*
+      Element to inline within an alternative is added to
+      a list of occurrences of the production to inline
+      */
+      if(elem_name.equals(prod_to_inline.getName()) &&
+          !(elems[i].getSpecifier() instanceof ATokenSpecifier) )
+      {
+        occurenceOfProductionToInlineWithinTheAlternative++;
+        /*
+        if(elems[i].getElemName() != null)
+               {
+                 eventualProdIdOrNames.add( elems[i].getElemName().getText() );
+               }
+               else
+               {
+                 eventualProdIdOrNames.add( elems[i].getId().getText() );
+               }
+        */
+      }
+    }
+
+    LinkedList resultingListOfAlts = new TypedLinkedList();
+    resultingListOfAlts.add(alt);
+    for(int i=0; i<occurenceOfProductionToInlineWithinTheAlternative; i++)
+    {
+      resultingListOfAlts = inline(resultingListOfAlts, i+1);
+    }
+
+    return resultingListOfAlts;
+  }
+
+  String alt_elem_info = null;
+  /*
+   * whichOccurence is used to number an element within the alternative
+   */
+  public LinkedList inline(LinkedList altsList, int whichOccurence)
+  {
+    LinkedList resultList = new LinkedList();
+    AAlt[] alts = (AAlt[])altsList.toArray(new AAlt[0]);
+    AAlt aParsed_alt;
+    Map mapOfNewTermNames;
+
+    for(int i=0; i<alts.length; i++)
+    {
+      aParsed_alt = alts[i];
+
+      for(int j=0; j<prod_to_inline.getNbAlts(); j++)
+      {
+        mapOfNewTermNames = new TypedHashMap(StringCast.instance,
+                                             StringCast.instance);
+
+        LinkedList listElems = inlineList(aParsed_alt.getElems(),
+                                          prod_to_inline.getAlternative(j).getElems(),
+                                          mapOfNewTermNames);
+        AAltTransform aAltTransform =
+          (AAltTransform)((AAltTransform)aParsed_alt.getAltTransform()).clone();
+        final Map currentMap = prod_to_inline.getAlternative(j).getProdTransform_AlTransformMap();
+
+        aAltTransform.apply(new DepthFirstAdapter()
+                            {
+                              public void caseASimpleTerm(ASimpleTerm node)
+                              {
+                                if(node.getId().getText().equals(alt_elem_info)  &&
+                                    !(node.getSpecifier() instanceof ATokenSpecifier) )
+                                {
+                                  String termTail;
+                                  if(node.getSimpleTermTail() != null)
+                                  {
+                                    termTail = node.getSimpleTermTail().getText();
+                                  }
+                                  else
+                                  {
+                                    termTail = prod_to_inline.getName();
+                                  }
+
+                                  PTerm term = (PTerm)((PTerm)currentMap.get(termTail)).clone();
+
+                                  if(currentMap.get(termTail) != null)
+                                  {
+                                    node.replaceBy(term);
+                                  }
+                                }
+                              }
+
+                              public void caseASimpleListTerm(final ASimpleListTerm node_)
+                              {
+                                if(node_.getId().getText().equals(alt_elem_info)  &&
+                                    !(node_.getSpecifier() instanceof ATokenSpecifier) )
+                                {
+                                  String termTail;
+                                  if(node_.getSimpleTermTail() != null)
+                                  {
+                                    termTail = node_.getSimpleTermTail().getText();
+                                  }
+                                  else
+                                  {
+                                    termTail = prod_to_inline.getName();
+                                  }
+
+                                  if(currentMap.get(termTail) != null)
+                                  {
+                                    PTerm term = (PTerm)currentMap.get(termTail);
+
+                                    if( !(currentMap.get(termTail) instanceof ANewListTerm) &&
+                                        !(currentMap.get(termTail) instanceof ASimpleListTerm)
+                                      )
+                                    {
+                                      term.apply(new DepthFirstAdapter()
+                                                 {
+                                                   public void caseANewTerm(ANewTerm node)
+                                                   {
+                                                     node_.replaceBy( new ANewListTerm(   (AProdName)node.getProdName().clone(),
+                                                                                          (TLPar)node.getLPar().clone(),
+                                                                                          (LinkedList)cloneList(node.getParams())
+                                                                                      )
+                                                                    );
+                                                   }
+
+                                                   public void caseASimpleTerm(ASimpleTerm node)
+                                                   {
+                                                     PSpecifier specifier = null;
+                                                     TId simpleTermTail = null;
+                                                     if(node.getSpecifier() != null)
+                                                     {
+                                                       specifier = (PSpecifier)node.getSpecifier().clone();
+                                                     }
+                                                     if(node.getSimpleTermTail() != null)
+                                                     {
+                                                       simpleTermTail = (TId)node.getSimpleTermTail().clone();
+                                                     }
+                                                     node_.replaceBy( new ASimpleListTerm(  specifier,
+                                                                                            (TId)node.getId().clone(),
+                                                                                            simpleTermTail
+                                                                                         )
+                                                                    );
+                                                   }
+
+                                                   public void caseNullTerm(ANullTerm node)
+                                                   {
+                                                     node_.replaceBy( null );
+                                                   }
+
+                                                   public void caseAListTerm(AListTerm node)
+                                                   {
+                                                     AListTerm parent = (AListTerm)node_.parent();
+                                                     LinkedList oldlistTerms = parent.getListTerms();
+                                                     LinkedList newlistTerms = new LinkedList();
+
+                                                     Object[] oldListTermsArray = (Object[]) oldlistTerms.toArray();
+                                                     for(int i=0; i<oldListTermsArray.length; i++)
+                                                     {
+                                                       if(oldListTermsArray[i] != node_)
+                                                       {
+                                                         if(oldListTermsArray[i] instanceof PTerm)
+                                                         {
+                                                           newlistTerms.add( ((PTerm)oldListTermsArray[i]).clone() );
+                                                         }
+                                                         else
+                                                         {
+                                                           newlistTerms.add( ((PListTerm)oldListTermsArray[i]).clone() );
+                                                         }
+                                                       }
+                                                       else
+                                                       {
+                                                         newlistTerms.addAll(cloneList(node.getListTerms()));
+                                                       }
+                                                     }
+                                                     parent.setListTerms(newlistTerms);
+                                                   }
+                                                 }
+                                                );
+                                    }
+                                    else
+                                    {
+                                      node_.replaceBy(term);
+                                    }
+                                  }
+                                }
+                              }
+                            }
+                           );
+
+        AAltTransform tmpaAltTransform = (AAltTransform)aAltTransform.clone();
+        fixSimpleTermOrSimpleListTermNames(tmpaAltTransform, mapOfNewTermNames);
+        String newAltName;
+        if(aParsed_alt.getAltName() != null)
+        {
+          newAltName = aParsed_alt.getAltName().getText()+ "$" +
+                       prod_to_inline.getAlternative(j).getName() + whichOccurence;
+        }
+        else
+        {
+          newAltName = prod_to_inline.getAlternative(j).getName() + whichOccurence;
+        }
+
+        resultList.add( new AAlt(new TId(newAltName),
+                                 listElems,
+                                 tmpaAltTransform)
+                      );
+      }
+    }
+    return resultList;
+  }
+
+  public LinkedList inlineList(LinkedList oldElemsList,
+                               AElem[] inliningProductionsElems,
+                               Map mapOfNewTermNames)
+  {
+    int position = 0;
+    AElem[] listElems = (AElem[]) oldElemsList.toArray(new AElem[0]);
+    for(int i=0; i<listElems.length; i++)
+    {
+      //We are looking for the position of the element inside the alternative.
+      if( listElems[i].getId().getText().equals(prod_to_inline.getName()) &&
+          !(listElems[i].getSpecifier() instanceof ATokenSpecifier) )
+      {
+        position = i;
+        if(listElems[i].getElemName() != null)
+        {
+          alt_elem_info = listElems[i].getElemName().getText();
+        }
+        else
+        {
+          alt_elem_info = listElems[i].getId().getText();
+        }
+        break;
+      }
+    }
+
+    LinkedList list = new LinkedList();
+    int elemPosition = 1;
+
+    //Before the inlined element (old alternative elements)
+    for(int i=0; i<position; i++)
+    {
+      list.add(((AElem)oldElemsList.get(i)).clone() );
+    }
+
+    // The inline element (new element added to the alternative)
+    for(int i=0; i<inliningProductionsElems.length; i++)
+    {
+      list.add(inliningProductionsElems[i].clone());
+    }
+
+    // After the inlined element (old alternative elements)
+    for(int i=position+1; i<listElems.length; i++)
+    {
+      list.add(((AElem)oldElemsList.get(i)).clone());
+    }
+
+    AElem[] listOfAltElems = (AElem[]) list.toArray(new AElem[0]);
+    for(int i=0; i<listOfAltElems.length; i++)
+    {
+      String old_name = listOfAltElems[i].getId().getText();
+      TId elemName = (TId)listOfAltElems[i].getElemName();
+      if(elemName != null)
+      {
+        elemName = (TId)elemName;
+        old_name = elemName.getText();
+      }
+
+      String elemNameString = (elemName != null ? elemName.getText() : "@elem@" );
+      elemNameString += (i+1);
+      listOfAltElems[i].setElemName(new TId(elemNameString));
+      mapOfNewTermNames.put(old_name, elemNameString);
+    }
+
+    return list;
+  }
+
+  private void fixSimpleTermOrSimpleListTermNames(AAltTransform tmpaAltTransform,
+      final Map mapOldNameNewNames)
+  {
+    tmpaAltTransform.apply(new DepthFirstAdapter()
+                           {
+                             public void caseASimpleTerm(ASimpleTerm node)
+                             {
+                               if(mapOldNameNewNames.get(node.getId().getText()) != null)
+                               {
+                                 node.setId(new TId( (String)mapOldNameNewNames.get(node.getId().getText()) ));
+                               }
+                             }
+
+                             public void caseASimpleListTerm(ASimpleListTerm node)
+                             {
+                               if(mapOldNameNewNames.get(node.getId().getText()) != null)
+                               {
+                                 node.setId(new TId( (String)mapOldNameNewNames.get(node.getId().getText()) ));
+                               }
+                             }
+                           }
+                          );
+  }
+
+  private List cloneList(List list)
+  {
+    List clone = new LinkedList();
+
+    for(Iterator i = list.iterator(); i.hasNext();)
+    {
+      clone.add(((Node) i.next()).clone());
+    }
+
+    return clone;
+  }
+
+  class BooleanEx
+  {
+    boolean value;
+
+    BooleanEx(boolean value)
+    {
+      this.value = value;
+    }
+
+    void setValue(boolean value)
+    {
+      this.value = value;
+    }
+
+    boolean getValue()
+    {
+      return value;
+    }
+  }
+
+}
diff --git a/src/org/sablecc/sablecc/IntSet.java b/src/org/sablecc/sablecc/IntSet.java
new file mode 100644
index 0000000..2c44fd3
--- /dev/null
+++ b/src/org/sablecc/sablecc/IntSet.java
@@ -0,0 +1,389 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+public class IntSet
+{
+  //    public static boolean DEBUG = false;
+  private int[] elements = new int[0];
+
+  public IntSet()
+  {}
+
+  private IntSet(IntSet set
+                  )
+  {
+    elements = (int[]) set.elements.clone();
+  }
+
+  public void and(IntSet set
+                   )
+  {
+    if(set
+        == this)
+    {
+      return;
+    }
+
+    int length = 0;
+
+    int l = 0;
+    int r = 0;
+    while((l < elements.length) && (r < set.elements.length))
+    {
+      if(elements[l] < set.elements[r])
+      {
+        l++;
+      }
+      else if(elements[l] == set.elements[r])
+      {
+        length++;
+        l++;
+        r++;
+      }
+      else
+      {
+        r++;
+      }
+    }
+
+    int[] old = elements;
+    elements = new int[length];
+
+    length = l = r = 0;
+    while((l < old.length) && (r < set.elements.length))
+    {
+      if(old[l] < set.elements[r])
+      {
+        l++;
+      }
+      else if(old[l] == set.elements[r])
+      {
+        elements[length++] = old[l];
+        l++;
+        r++;
+      }
+      else
+      {
+        r++;
+      }
+    }
+
+  }
+
+  public void clear(int  bit)
+  {
+    elements = new int[0];
+  }
+
+  public Object clone()
+  {
+    return new IntSet(this);
+  }
+
+  public boolean equals(Object  obj)
+  {
+    if(obj == null)
+    {
+      return false;
+    }
+
+    if(!(obj instanceof IntSet))
+    {
+      return false;
+    }
+
+    IntSet set
+      = (IntSet) obj;
+
+    if(elements.length != set.elements.length)
+    {
+      return false;
+    }
+
+    for(int i = 0; i < elements.length; i++)
+    {
+      if(elements[i] != set.elements[i])
+      {
+        return false;
+      }
+    }
+
+    return true;
+  }
+
+  public boolean get
+    (int  bit)
+  {
+    int low = 0;
+    int high = elements.length - 1;
+
+    while(low <= high)
+    {
+      int middle = (low + high) / 2;
+
+      if(bit < elements[middle])
+      {
+        high = middle - 1;
+      }
+      else if(bit == elements[middle])
+      {
+        return true;
+      }
+      else
+      {
+        low = middle + 1;
+      }
+    }
+
+    return false;
+  }
+
+  public int hashCode()
+  {
+    int result = 0;
+
+    for(int i = 0; i < elements.length; i++)
+    {
+      result += elements[i];
+    }
+
+    return result;
+  }
+
+  public void or(IntSet  set
+                  )
+  {
+    if(set
+        == this)
+    {
+      return;
+    }
+
+    //        if(DEBUG)
+    //        {
+    //            System.out.println(
+    //            " elements.length:" + elements.length +
+    //            " set.elements.length:" + set.elements.length);
+    //        }
+
+    int length = 0;
+
+    int l = 0;
+    int r = 0;
+    while((l < elements.length) || (r < set.elements.length))
+    {
+      //            if(DEBUG)
+      //            {
+      //                System.out.println(
+      //                " l:" + l +
+      //                " r:" + r +
+      //                " length:" + length);
+      //            }
+
+      if((r == set.elements.length) ||
+          ((l != elements.length) && (elements[l] < set.elements[r])))
+      {
+        length++;
+        l++;
+      }
+      else if((l == elements.length) ||
+              (elements[l] > set.elements[r]))
+      {
+        length++;
+        r++;
+      }
+      else
+      {
+        length++;
+        l++;
+        r++;
+      }
+    }
+
+    int[] old = elements;
+    elements = new int[length];
+
+    length = l = r = 0;
+    while((l < old.length) || (r < set.elements.length))
+    {
+      //            if(DEBUG)
+      //            {
+      //                System.out.println(
+      //                " l:" + l +
+      //                " r:" + r +
+      //                " length:" + length);
+      //            }
+
+      if((r == set.elements.length) ||
+          ((l != old.length) && (old[l] < set.elements[r])))
+      {
+        elements[length++] = old[l];
+        l++;
+      }
+      else if((l == old.length) ||
+              (old[l] > set.elements[r]))
+      {
+        elements[length++] = set.elements[r];
+        r++;
+      }
+      else
+      {
+        elements[length++] = old[l];
+        l++;
+        r++;
+      }
+    }
+
+  }
+
+  public void set
+    (int bit)
+  {
+    if(!get
+        (bit))
+    {
+      int[] old = elements;
+      elements = new int[old.length + 1];
+
+      int old_pos = 0;
+      boolean bit_inserted = false;
+      int pos = 0;
+
+      while(pos < elements.length)
+      {
+        if(!bit_inserted)
+        {
+          if(old_pos < old.length)
+          {
+            if(bit < old[old_pos])
+            {
+              elements[pos++] = bit;
+              bit_inserted = true;
+            }
+            else
+            {
+              elements[pos++] = old[old_pos++];
+            }
+          }
+          else
+          {
+            elements[pos++] = bit;
+            bit_inserted = true;
+          }
+        }
+        else
+        {
+          elements[pos++] = old[old_pos++];
+        }
+      }
+    }
+  }
+
+  public int size()
+  {
+    if(elements.length == 0)
+    {
+      return 0;
+    }
+
+    return elements[elements.length - 1] + 1;
+  }
+
+  public String toString()
+  {
+    StringBuffer s = new StringBuffer();
+
+    s.append("{");
+
+    boolean comma = false;
+
+    for(int i = 0; i < elements.length; i++)
+    {
+      if(comma)
+      {
+        s.append(", ");
+      }
+      else
+      {
+        comma = true;
+      }
+
+      s.append(elements[i]);
+    }
+    s.append("}");
+
+    return s.toString();
+  }
+
+  public void xor(IntSet  set
+                   )
+  {
+    if(set
+        == this)
+    {
+      set
+        = (IntSet) set.clone();
+    }
+
+    int length = 0;
+    int l = 0;
+    int r = 0;
+
+    while((l < elements.length) || (r < set.elements.length))
+    {
+      if((r == set.elements.length) ||
+          ((l != elements.length) && (elements[l] < set.elements[r])))
+      {
+        length++;
+        l++;
+      }
+      else if((l == elements.length) ||
+              (elements[l] > set.elements[r]))
+      {
+        length++;
+        r++;
+      }
+      else
+      {
+        l++;
+        r++;
+      }
+    }
+
+    int[] old = elements;
+    elements = new int[length];
+
+    length = l = r = 0;
+    while((l < old.length) || (r < set.elements.length))
+    {
+      if((r == set.elements.length) ||
+          ((l != old.length) && (old[l] < set.elements[r])))
+      {
+        elements[length++] = old[l];
+        l++;
+      }
+      else if((l == old.length) ||
+              (old[l] > set.elements[r]))
+      {
+        elements[length++] = set.elements[r];
+        r++;
+      }
+      else
+      {
+        l++;
+        r++;
+      }
+    }
+  }
+
+  public int[] elements()
+  {
+    return (int[]) elements/*.clone()*/;
+  }
+}
diff --git a/src/org/sablecc/sablecc/IntegerCast.java b/src/org/sablecc/sablecc/IntegerCast.java
new file mode 100644
index 0000000..a05df2d
--- /dev/null
+++ b/src/org/sablecc/sablecc/IntegerCast.java
@@ -0,0 +1,23 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+
+public class IntegerCast implements Cast
+{
+  public final static IntegerCast instance = new IntegerCast();
+
+  private IntegerCast()
+  {}
+
+  public  Object cast(Object o)
+  {
+    return (Integer) o;
+  }
+}
diff --git a/src/org/sablecc/sablecc/IntegerComparator.java b/src/org/sablecc/sablecc/IntegerComparator.java
new file mode 100644
index 0000000..ca5e9a2
--- /dev/null
+++ b/src/org/sablecc/sablecc/IntegerComparator.java
@@ -0,0 +1,23 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+
+public class IntegerComparator implements Comparator
+{
+  public final static IntegerComparator instance = new IntegerComparator();
+
+  private IntegerComparator()
+  {}
+
+  public int compare(Object o1, Object o2)
+  {
+    return ((Integer) o1).intValue() - ((Integer) o2).intValue();
+  }
+}
diff --git a/src/org/sablecc/sablecc/InternalTransformationsToGrammar.java b/src/org/sablecc/sablecc/InternalTransformationsToGrammar.java
new file mode 100644
index 0000000..2cd0a92
--- /dev/null
+++ b/src/org/sablecc/sablecc/InternalTransformationsToGrammar.java
@@ -0,0 +1,649 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+* Last Modification date : October, the 11th 2003
+* Goal of the modification : addition of specifier to
+* the generated production($prod) to handle list of element.
+*
+*
+*/
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.io.*;
+
+public class InternalTransformationsToGrammar extends DepthFirstAdapter
+{
+
+  private ResolveIds ids;
+  private ResolveAltIds altIds;
+  private ResolveTransformIds transformIds;
+  private String currentProd;
+  private int currentAlt;
+  private String currentAltName;
+  private boolean processingAst;
+  private boolean processingProdTransform;
+
+  static final int NONE = 0;
+  static final int STAR = 1;
+  static final int QMARK = 2;
+  static final int PLUS = 3;
+
+  int count;
+  int elem;
+
+  private LinkedList listSimpleTermTransform;
+
+  public final Map simpleTermTransform;
+  Map mapProductionTransformations;
+  Map simpleTermOrsimpleListTermTypes;
+
+  private Map isElementIsAlist = new TypedTreeMap(
+                                   StringComparator.instance,
+                                   StringCast.instance,
+                                   StringCast.instance);
+
+  private LinkedList listProd;
+
+  public InternalTransformationsToGrammar(ResolveIds ids, ResolveAltIds altIds,
+                                          ResolveTransformIds transformIds,
+                                          LinkedList listSimpleTermTransform,
+                                          Map simpleTermTransform,
+                                          Map mapProductionTransformations,
+                                          Map simpleTermOrsimpleListTermTypes)
+  {
+    this.ids = ids;
+    this.altIds = altIds;
+    this.transformIds = transformIds;
+    this.listSimpleTermTransform = listSimpleTermTransform;
+    this.simpleTermTransform = simpleTermTransform;
+    this.mapProductionTransformations = mapProductionTransformations;
+    this.simpleTermOrsimpleListTermTypes = simpleTermOrsimpleListTermTypes;
+  }
+
+  public void inAProductions(AProductions node)
+  {
+    listProd = node.getProds();
+  }
+
+  private LinkedList listOfAlts;
+
+  public void inAAst(AAst node)
+  {
+    processingAst = true;
+  }
+
+  public void outAAst(AAst node)
+  {
+    processingAst = false;
+  }
+
+  public void caseAProd(AProd node)
+  {
+    currentProd = (String) ids.names.get(node);
+    listOfAlts = new LinkedList();
+
+    Object[] list_alt = (Object[])node.getAlts().toArray();
+    for(int i=0; i<list_alt.length; i++)
+    {
+      ((PAlt) list_alt[i]).apply(this);
+    }
+
+    node.setAlts(listOfAlts);
+  }
+
+  private LinkedList listElems;
+  private AAlt aParsedAlt;
+  private LinkedList listElemsAltTransform;
+  private String currentNewAltName;
+
+  boolean countElementNecessary;
+
+  LinkedList listOfAlternativeElemsWHaveName;
+
+  public void caseAAlt(AAlt node)
+  {
+    count = 1;
+    currentAltName = (String) ids.names.get(node);
+
+    AAltTransform currentAltTransform = (AAltTransform)node.getAltTransform();
+
+    listOfAlternativeElemsWHaveName = new LinkedList();
+
+    node.apply(new DepthFirstAdapter()
+               {
+                 public void inAElem(AElem node)
+                 {
+                   InternalTransformationsToGrammar.this.setOut(node, new Integer(NONE));
+                 }
+
+                 public void caseAStarUnOp(AStarUnOp node)
+                 {
+                   count *= 2;
+                   InternalTransformationsToGrammar.this.setOut(node.parent(), new Integer(STAR));
+                 }
+
+                 public void caseAQMarkUnOp(AQMarkUnOp node)
+                 {
+                   count *= 2;
+                   InternalTransformationsToGrammar.this.setOut(node.parent(), new Integer(QMARK));
+                 }
+
+                 public void caseAPlusUnOp(APlusUnOp node)
+                 {
+                   InternalTransformationsToGrammar.this.setOut(node.parent(), new Integer(PLUS));
+                 }
+               }
+              );
+
+    if(count == 1)
+    {
+      listElems = new LinkedList();
+      listElemsAltTransform = new LinkedList();
+
+      countElementNecessary = false;
+
+      Object temp[] = node.getElems().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        Object obj = temp[i];
+
+        if( ((AElem)obj).getUnOp() != null &&
+            ( ((AElem)obj).getUnOp() instanceof AQMarkUnOp ||
+              ((AElem)obj).getUnOp() instanceof AStarUnOp )
+          )
+        {
+          if(!countElementNecessary)
+          {
+            countElementNecessary = true;
+          }
+        }
+      }
+
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PElem)temp[i]).apply(this);
+      }
+
+      TId nameOfAlt = null;
+
+      if(node.getAltName() != null)
+      {
+        nameOfAlt = (TId)node.getAltName().clone();
+      }
+
+      currentNewAltName = currentProd + "." + currentAltName.toLowerCase();
+      altIds.alts_elems.put(currentNewAltName, listElemsAltTransform);
+      altIds.alts_elems_list_elemName.put(currentNewAltName, listOfAlternativeElemsWHaveName);
+
+      AAltTransform altTransform = (AAltTransform)currentAltTransform.clone();
+
+      AltTransformAdapter altTransformAdapter =
+        new AltTransformAdapter(simpleTermTransform, listSimpleTermTransform,
+                                currentNewAltName, altIds,
+                                isElementIsAlist,
+                                simpleTermOrsimpleListTermTypes);
+
+      altTransform.apply(altTransformAdapter);
+
+      aParsedAlt = new AAlt(nameOfAlt, listElems, altTransform);
+
+      ids.names.put(aParsedAlt, ids.names.get(node));
+
+      listOfAlts.add(aParsedAlt);
+    }
+    else
+    {
+      int max = count;
+      AAltTransform altTransform;
+
+      for(count = 0; count < max; count++)
+      {
+        listElems = new LinkedList();
+        listElemsAltTransform = new LinkedList();
+
+        elem = 0;
+
+        currentNewAltName = currentProd + "." + currentAltName.toLowerCase()+(count + 1);
+
+        countElementNecessary = false;
+
+        Object temp[] = node.getElems().toArray();
+        for(int i = 0; i < temp.length; i++)
+        {
+          Object obj = temp[i];
+
+          if( ((AElem)obj).getUnOp() != null &&
+              ( ((AElem)obj).getUnOp() instanceof AQMarkUnOp ||
+                ((AElem)obj).getUnOp() instanceof AStarUnOp )
+            )
+          {
+            if(!countElementNecessary)
+            {
+              countElementNecessary = true;
+            }
+          }
+        }
+
+        for(int i = 0; i < temp.length; i++)
+        {
+          ((PElem)temp[i]).apply(this);
+        }
+
+        altIds.alts_elems.put(currentNewAltName, listElemsAltTransform);
+        altIds.alts_elems_list_elemName.put(currentNewAltName, listOfAlternativeElemsWHaveName);
+
+        altTransform = (AAltTransform)currentAltTransform.clone();
+
+        AltTransformAdapter altTransformAdapter =
+          new AltTransformAdapter(simpleTermTransform, listSimpleTermTransform,
+                                  currentNewAltName, altIds,
+                                  isElementIsAlist,
+                                  simpleTermOrsimpleListTermTypes);
+
+        altTransform.apply(altTransformAdapter);
+        aParsedAlt = new AAlt(new TId(currentAltName.toLowerCase()+(count + 1)), listElems, altTransform);
+
+        String currentAltInlining;
+        currentAltInlining = "A" + ids.name(aParsedAlt.getAltName().getText()) + currentProd;
+        ids.names.put(aParsedAlt, currentAltInlining);
+
+        listOfAlts.add(aParsedAlt);
+      }
+    }
+  }
+
+  LinkedList checkCreationOfXElem = new TypedLinkedList(StringCast.instance);
+
+  //It's also available for Ignored alternatives
+  public void caseAElem(AElem node)
+  {
+    if(!processingAst)
+    {
+      int op = ((Integer) getOut(node)).intValue();
+      String name = (String) ids.elemTypes.get(node);
+      String numero = (countElementNecessary == true ? ""+(count+1) : "" );
+      String qMarkOrPlusElemType;
+      String elemNameOfElem = null;
+
+      TId aElemName = null;
+      PSpecifier specifier = null;
+
+      if(node.getElemName() != null)
+      {
+        elemNameOfElem = node.getElemName().getText();
+        aElemName = new TId(elemNameOfElem);
+      }
+
+      if(node.getSpecifier() != null)
+      {
+        if(node.getSpecifier() instanceof ATokenSpecifier)
+        {
+          specifier = new ATokenSpecifier();
+        }
+        else
+        {
+          specifier = new AProductionSpecifier();
+        }
+      }
+
+      AElem aElem = null;
+      String elemName = node.getId().getText();
+      boolean ok = false;
+      boolean oklist = false;
+
+      switch(op)
+      {
+      case NONE:
+        {
+          aElem = new AElem(aElemName, specifier, new TId(elemName), null);
+          if(elemNameOfElem != null)
+          {
+            ids.names.put(aElem, ids.name(elemNameOfElem));
+          }
+          else
+          {
+            ids.names.put(aElem, ids.name(elemName));
+          }
+          ok = true;
+        }
+        break;
+      case STAR:
+        {
+
+          if((count & (1 << elem)) != 0)
+          {
+            qMarkOrPlusElemType = (String)ids.elemTypes.get(node);
+            LinkedList tmpProdTransform = (LinkedList)mapProductionTransformations.get(qMarkOrPlusElemType);
+
+            if(!checkCreationOfXElem.contains("$" + elemName))
+            {
+              checkCreationOfXElem.add("$" + elemName);
+              listProd.add( createXelemProduction("$" + elemName, qMarkOrPlusElemType,
+                                                  name, tmpProdTransform) );
+            }
+
+            elemName = "$" + elemName;
+            aElem = new AElem(aElemName, new AProductionSpecifier(), new TId(elemName), null);
+
+            if(elemNameOfElem != null)
+            {
+              ids.names.put(aElem, ids.name(elemNameOfElem));
+            }
+            else
+            {
+              ids.names.put(aElem, ids.name(elemName));
+            }
+
+            ok = true;
+            oklist = true;
+          }
+
+          elem++;
+        }
+        break;
+      case QMARK:
+        {
+          if((count & (1 << elem)) != 0)
+          {
+            aElem = new AElem(aElemName, specifier, new TId(elemName), null);
+
+            if(elemNameOfElem != null)
+            {
+              ids.names.put(aElem, ids.name(elemNameOfElem));
+            }
+            else
+            {
+              ids.names.put(aElem, ids.name(elemName));
+            }
+
+            ok = true;
+          }
+
+          elem++;
+        }
+        break;
+      case PLUS:
+        {
+          qMarkOrPlusElemType = (String)ids.elemTypes.get(node);
+          LinkedList tmpProdTransform = (LinkedList)mapProductionTransformations.get(qMarkOrPlusElemType);
+
+          if(!checkCreationOfXElem.contains("$" + elemName))
+          {
+            checkCreationOfXElem.add("$" + elemName);
+            listProd.add( createXelemProduction("$" + elemName, qMarkOrPlusElemType,
+                                                name, tmpProdTransform) );
+          }
+
+          elemName = "$" + elemName;
+          aElem = new AElem(aElemName, new AProductionSpecifier(), new TId(elemName), null);
+
+          if(elemNameOfElem != null)
+          {
+            ids.names.put(aElem, ids.name(elemNameOfElem));
+          }
+          else
+          {
+            ids.names.put(aElem, ids.name(elemName));
+          }
+
+          ok = true;
+          oklist = true;
+        }
+        break;
+      }
+
+      if(ok)
+      {
+        if(aElemName != null)
+        {
+          listElemsAltTransform.add(aElemName.getText());
+          if(oklist)
+          {
+            if(elemNameOfElem != null)
+            {
+              listOfAlternativeElemsWHaveName.add(elemNameOfElem);
+            }
+            isElementIsAlist.put(currentProd+"."+currentAltName.toLowerCase()+numero+aElemName.getText(),
+                                 node.getId().getText());
+          }
+        }
+        else
+        {
+          listElemsAltTransform.add(elemName);
+          if(oklist)
+          {
+            if(elemNameOfElem != null)
+            {
+              listOfAlternativeElemsWHaveName.add(elemNameOfElem);
+            }
+            isElementIsAlist.put(currentProd+"."+currentAltName.toLowerCase()+numero+node.getId().getText(),
+                                 node.getId().getText());
+          }
+        }
+      }
+
+      if(aElem != null)
+      {
+        listElems.add(aElem);
+      }
+    }
+  }
+
+  /*
+    This method creates the production for star(*) and plus(+) substitution in the grammar
+    elem* -> $elem |
+             elem
+    This creates the production ::
+                                   $elem                                   {-> elem* } 
+
+  		          = {nonTerminal} $elem elem       {-> [$elem.elem elem] }
+  			  | {terminal}    elem             {-> [elem] }
+  			  ;
+  */
+  public AProd createXelemProduction(final String name, final String elemTypeName,
+                                     String XproductionName,
+                                     LinkedList nodeProdTransform)
+  {
+    final String rname = name.substring(1);
+    LinkedList listOfAltsXelem = new LinkedList();
+
+    if(nodeProdTransform != null)
+    {
+      nodeProdTransform = (LinkedList)cloneList(nodeProdTransform);
+
+      //Creation of the production transformation for Xelem
+      //if the production transformation is introduced by the software
+      if(nodeProdTransform.size() == 1)
+      {
+        AElem elem = (AElem)nodeProdTransform.get(0);
+        if(elem.getUnOp() == null && elem.getId().getText().equals(rname))
+        {
+          LinkedList elemsProdTransform = new LinkedList();
+          elemsProdTransform.add( new AElem( null, new AProductionSpecifier(), new TId(rname), new AStarUnOp() ) );
+          nodeProdTransform = elemsProdTransform;
+        }
+      }
+
+    }
+    //That means elem is token type
+    else
+    {
+      String name_resolved = ids.name(name);
+
+      LinkedList elemsProdTransform = new LinkedList();
+      elemsProdTransform.add( new AElem( null, new ATokenSpecifier(), new TId(rname), new AStarUnOp() ) );
+      nodeProdTransform = elemsProdTransform;
+    }
+
+    final LinkedList listProdTransformationOfXelem = new LinkedList();
+
+    AElem []temp_listProdTransform = (AElem[])nodeProdTransform.toArray(new AElem[0]);
+    for(int i=0; i<temp_listProdTransform.length; i++)
+    {
+      temp_listProdTransform[i].apply( new DepthFirstAdapter()
+                                       {
+                                         public void caseAElem(AElem node)
+                                         {
+                                           //The production transformation needs to have a star operator.
+                                           node.setUnOp(new AStarUnOp(new TStar()));
+                                           if(node.getElemName() != null)
+                                           {
+                                             listProdTransformationOfXelem.add( node.getElemName().getText() );
+                                           }
+                                           else
+                                           {
+                                             listProdTransformationOfXelem.add( node.getId().getText() );
+                                           }
+                                         }
+                                       }
+                                     );
+    }
+
+    //creation of the first AltTransform node
+    AElem[] prodTransformElems = (AElem[]) nodeProdTransform.toArray(new AElem[0]);
+
+    final LinkedList listTerms_first = new LinkedList();
+
+    for(int i = 0; i < prodTransformElems.length; i++)
+    {
+      prodTransformElems[i].apply(new AnalysisAdapter()
+                                  {
+                                    public void caseAElem(AElem node)
+                                    {
+                                      String tmpNodeName = ( (node.getElemName() == null) ? node.getId().getText() :
+                                                             node.getElemName().getText() );
+                                      LinkedList listAListTerm_first = new LinkedList();
+
+                                      if(elemTypeName.startsWith("T"))
+                                      {
+                                        listAListTerm_first.add(new ASimpleListTerm(new ATokenSpecifier(),
+                                                                new TId(rname), null ));
+                                      }
+                                      else
+                                      {
+                                        listAListTerm_first.add(new ASimpleListTerm(new AProductionSpecifier(),
+                                                                new TId(rname),new TId(tmpNodeName) ) );
+                                      }
+                                      listTerms_first.add( new AListTerm(new TLBkt(), listAListTerm_first) );
+                                    }
+                                  }
+                                 );
+    }
+
+    AAltTransform aAltTransform = new AAltTransform(new TLBrace(), listTerms_first, new TRBrace());
+
+    //create the first list of elems  of an alternative
+    LinkedList elems = new LinkedList();
+    AElem aElemFirstTobeAdded;
+    //the elem is a token
+    if(elemTypeName.startsWith("T"))
+    {
+      aElemFirstTobeAdded = new AElem(null, new ATokenSpecifier(), new TId(rname), null);
+    }
+    else
+    {
+      aElemFirstTobeAdded = new AElem(null, new AProductionSpecifier(), new TId(rname), null);
+    }
+    elems.add(aElemFirstTobeAdded);
+
+    //creation of the first alternative
+    AAlt aParsedAlt = new AAlt(new TId("terminal"), elems, aAltTransform);
+    String terminal_altName = "ATerminal" + ids.name(name);
+
+    listOfAltsXelem.add(aParsedAlt);
+
+    //create the second AltTransform node
+    prodTransformElems = (AElem[]) nodeProdTransform.toArray(new AElem[0]);
+
+    final LinkedList listTerms_second = new LinkedList();
+
+    for(int i = 0; i < prodTransformElems.length; i++)
+    {
+      prodTransformElems[i].apply(new AnalysisAdapter()
+                                  {
+                                    public void caseAElem(AElem node)
+                                    {
+                                      String tmpNodeName = ( (node.getElemName() == null) ? node.getId().getText() :
+                                                             node.getElemName().getText() );
+
+                                      LinkedList listAListTerm_second = new LinkedList();
+
+                                      listAListTerm_second.add(new ASimpleListTerm(null, new TId(name),
+                                                               new TId(tmpNodeName)) );
+
+                                      if(elemTypeName.startsWith("T"))
+                                      {
+                                        listAListTerm_second.add(new ASimpleListTerm(new ATokenSpecifier(),
+                                                                 new TId(rname), null ));
+                                      }
+                                      else
+                                      {
+                                        listAListTerm_second.add(new ASimpleListTerm(new AProductionSpecifier(),
+                                                                 new TId(rname),
+                                                                 new TId(tmpNodeName) ) );
+                                      }
+                                      listTerms_second.add(new AListTerm(new TLBkt(), listAListTerm_second));
+                                    }
+                                  }
+                                 );
+    }
+
+    aAltTransform = new AAltTransform(new TLBrace(), listTerms_second, new TRBrace());
+
+    //creation of the second list of elems of an alternative :: two elems
+    elems = new LinkedList();
+
+    //first elem
+    AElem aElemSecondTobeAdded = new AElem(null, new AProductionSpecifier(), new TId(name), null);
+    elems.add(aElemSecondTobeAdded);
+
+    //second elem
+    if(elemTypeName.startsWith("T"))
+    {
+      aElemSecondTobeAdded = new AElem(null, new ATokenSpecifier(), new TId(rname), null);
+    }
+    else
+    {
+      aElemSecondTobeAdded = new AElem(null, new AProductionSpecifier(),  new TId(rname), null);
+    }
+    elems.add(aElemSecondTobeAdded);
+
+    aParsedAlt = new AAlt(new TId("non_terminal"), elems, aAltTransform);
+
+    String nonTerminal_altName = "ANonTerminal" + ids.name(name);
+
+    listOfAltsXelem.add(aParsedAlt);
+
+    AProd prodToReturn = new AProd(new TId(name), new TArrow(), nodeProdTransform, listOfAltsXelem);
+    prodToReturn.apply(ids);
+    prodToReturn.apply(transformIds.getProdTransformIds());
+
+    return prodToReturn;
+  }
+
+  private List cloneList(List list)
+  {
+    List clone = new LinkedList();
+
+    for(Iterator i = list.iterator(); i.hasNext();)
+    {
+      clone.add(((Node) i.next()).clone());
+    }
+    return clone;
+  }
+
+  private String xproductionType(String name)
+  {
+    return "P$" + name.substring(1).toLowerCase();
+  }
+
+}
diff --git a/src/org/sablecc/sablecc/LICENSE b/src/org/sablecc/sablecc/LICENSE
new file mode 100644
index 0000000..283bc3c
--- /dev/null
+++ b/src/org/sablecc/sablecc/LICENSE
@@ -0,0 +1,23 @@
+SableCC, an object-oriented compiler framework.
+Copyright (C) 1997-2003 Etienne M. Gagnon <etienne.gagnon at uqam.ca> and
+others.  All rights reserved.
+
+See the file "AUTHORS" for the name of all copyright holders.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as published
+by the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this program in the file "COPYING-LESSER"; if not,
+write to the Free Software Foundation, Inc., 59 Temple Place,
+Suite 330, Boston, MA  02111-1307  USA
+
+The SableCC web site is located at:
+http://www.sablecc.org/
diff --git a/src/org/sablecc/sablecc/LR0Collection.java b/src/org/sablecc/sablecc/LR0Collection.java
new file mode 100644
index 0000000..2dca7cd
--- /dev/null
+++ b/src/org/sablecc/sablecc/LR0Collection.java
@@ -0,0 +1,147 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import java.util.Vector;
+
+final class LR0Collection
+{
+  private final Vector sets = new Vector(0);
+  private final TreeMap setIndices = new TreeMap();
+  private final Vector GOTO = new Vector(0);
+  final Vector names = new Vector(0);
+
+  LR0Collection(LR0ItemSet set
+                 )
+  {
+    add
+      (set
+          , -1, null);
+
+    for(int i = 0; i < sets.size(); i++)
+    {
+      System.out.print(".");
+      Symbol[] symbols = Symbol.symbols();
+
+      for(int j = 0; j < symbols.length; j++)
+      {
+        addGoto(i, symbols[j], Grammar.GOTO(set
+                                            (i), symbols[j]));
+      }
+    }
+    System.out.println();
+  }
+
+  private int add
+    (LR0ItemSet set
+          , int from, Symbol symbol)
+    {
+      Integer result = set
+                         (set
+                         );
+
+      if(result == null)
+      {
+        result = new Integer(sets.size());
+
+        setIndices.put(set
+                       , result);
+        sets.addElement(set
+                       );
+        GOTO.addElement(new TreeMap());
+        if(from == -1)
+        {
+          names.addElement(" ");
+        }
+        else
+        {
+          names.addElement(names.elementAt(from) + "" + symbol + " ");
+        }
+      }
+
+      return result.intValue();
+    }
+
+  private static LR0ItemSet empty = new LR0ItemSet();
+
+  public static void reinit()
+  {
+    empty = new LR0ItemSet();
+  }
+
+  private void addGoto(int from, Symbol symbol, LR0ItemSet to)
+  {
+    if(!to.equals(empty))
+    {
+      ((TreeMap) GOTO.elementAt(from)).put(symbol, new Integer(add
+                                           (to, from, symbol)));
+    }
+  }
+
+  private Integer set
+    (LR0ItemSet set
+      )
+    {
+      return (Integer) setIndices.get(set
+                                     );
+    }
+
+  private LR0ItemSet set
+    (int index)
+  {
+    return (LR0ItemSet) sets.elementAt(index);
+  }
+
+  LR0ItemSet[] sets()
+  {
+    LR0ItemSet[] result = new LR0ItemSet[sets.size()];
+    sets.copyInto(result);
+
+    return result;
+  }
+
+  Integer GOTO(int set
+                 , Symbol symbol)
+  {
+    return (Integer) ((TreeMap) GOTO.elementAt(set
+                                              )).get(symbol);
+  }
+
+  public String toString()
+  {
+    StringBuffer result = new StringBuffer();
+
+    result.append("{[LR0ItemCollection]" + System.getProperty("line.separator"));
+    LR0ItemSet[] sets = sets();
+    Symbol[] symbols = Symbol.symbols();
+
+    for(int i = 0; i < sets.length; i++)
+    {
+      result.append(i + ":" + Grammar.CLOSURE(sets[i]));
+      result.append(System.getProperty("line.separator"));
+
+      for(int j = 0; j < symbols.length; j++)
+      {
+        if(GOTO(i, symbols[j]) != null)
+        {
+          result.append("[");
+          result.append(symbols[j]);
+          result.append(":");
+          result.append(GOTO(i, symbols[j]));
+          result.append("]");
+        }
+      }
+
+      result.append(System.getProperty("line.separator"));
+    }
+
+    result.append("}");
+    return result.toString();
+  }
+}
diff --git a/src/org/sablecc/sablecc/LR0Item.java b/src/org/sablecc/sablecc/LR0Item.java
new file mode 100644
index 0000000..a6f973b
--- /dev/null
+++ b/src/org/sablecc/sablecc/LR0Item.java
@@ -0,0 +1,98 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+
+final class LR0Item implements Cloneable, Comparable
+{
+  final int production;
+  final int position;
+
+  LR0Item(int production, int position)
+  {
+    this.production = production;
+    this.position = position;
+  }
+
+  public int compareTo(Object object)
+  {
+    LR0Item item = (LR0Item) object;
+
+    int result = production - item.production;
+
+    if(result == 0)
+    {
+      result = position - item.position;
+    }
+
+    return result;
+  }
+
+  public Object clone()
+  {
+    return new LR0Item(production, position);
+  }
+
+  public boolean equals(Object obj)
+  {
+    if((obj == null) ||
+        (obj.getClass() != this.getClass()))
+    {
+      return false;
+    }
+
+    LR0Item item = (LR0Item) obj;
+
+    return (item.production == production) &&
+           (item.position == position);
+  }
+
+  public int hashCode()
+  {
+    return (production * 13) ^ (position * 17);
+  }
+
+  public String toString()
+  {
+    StringBuffer result = new StringBuffer();
+    String prodStr = (Production.production(production)).toString();
+    int pos = 0;
+
+    StringTokenizer list = new StringTokenizer(prodStr, "= ");
+
+    // we know that there is at least one token (lhs)
+    result.append(list.nextToken());
+    result.append(" =");
+
+    while(list.hasMoreElements())
+    {
+      String tmp = list.nextToken();
+
+      if(pos == position)
+      {
+        result.append(" * ");
+        result.append(tmp);
+      }
+      else
+      {
+        result.append(" ");
+        result.append(tmp);
+      }
+
+      pos++;
+    }
+
+    if(pos == position)
+    {
+      result.append(" *");
+    }
+
+    return "[ " + result + " ]";
+  }
+}
diff --git a/src/org/sablecc/sablecc/LR0ItemAndSetPair.java b/src/org/sablecc/sablecc/LR0ItemAndSetPair.java
new file mode 100644
index 0000000..a411e58
--- /dev/null
+++ b/src/org/sablecc/sablecc/LR0ItemAndSetPair.java
@@ -0,0 +1,23 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+final class LR0ItemAndSetPair
+{
+  public final LR0Item item;
+  public final int set
+    ;
+
+  LR0ItemAndSetPair(LR0Item item, int set
+                     )
+  {
+    this.item = item;
+    this.set = set
+                 ;
+  }
+}
diff --git a/src/org/sablecc/sablecc/LR0ItemSet.java b/src/org/sablecc/sablecc/LR0ItemSet.java
new file mode 100644
index 0000000..d2ca512
--- /dev/null
+++ b/src/org/sablecc/sablecc/LR0ItemSet.java
@@ -0,0 +1,180 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+
+import java.util.Vector;
+
+final class LR0ItemSet implements Cloneable, Comparable
+{
+  private final TreeMap items;
+  private int hashCode;
+
+  LR0ItemSet()
+  {
+    items = new TreeMap();
+  }
+
+  private LR0ItemSet(LR0ItemSet set
+                      )
+  {
+    items = (TreeMap) set.items.clone();
+  }
+
+  void set
+    (LR0Item item)
+  {
+    if(items.put(item, item) == null)
+    {
+      hashCode += item.hashCode();
+      modified_ = true;
+    }
+  }
+
+  boolean get
+    (LR0Item item)
+  {
+    return items.get(item) != null;
+  }
+
+  LR0Item[] items_;
+  boolean modified_ = true;
+
+  private void computeArray()
+  {
+    Vector itemVector = new Vector(0);
+
+    for(Iterator e = items.keySet().iterator(); e.hasNext();)
+    {
+      itemVector.addElement(e.next());
+    }
+
+    items_ = new LR0Item[itemVector.size()];
+    itemVector.copyInto(items_);
+    modified_ = false;
+  }
+
+  LR0Item[] items()
+  {
+    if(modified_)
+    {
+      computeArray();
+    }
+
+    return items_;
+  }
+
+  public String toString()
+  {
+    StringBuffer result = new StringBuffer();
+    result.append("{");
+
+    Production[] productions = Production.productions();
+    boolean space = false;
+    for(int i = 0; i < productions.length; i++)
+    {
+      int rightsideLength = productions[i].rightside().length;
+
+      for(int j = 0; j <= rightsideLength; j++)
+      {
+        LR0Item item = new LR0Item(productions[i].index, j);
+        if(get
+            (item))
+        {
+          if(space)
+          {
+            result.append(",");
+          }
+          else
+          {
+            space = true;
+          }
+
+          result.append(item);
+        }
+      }
+
+    }
+
+    result.append("}");
+    return result.toString();
+  }
+
+  public Object clone()
+  {
+    return new LR0ItemSet(this);
+  }
+
+  public boolean equals(Object obj)
+  {
+    if((obj == null) ||
+        (obj.getClass() != this.getClass()))
+    {
+      return false;
+    }
+
+    LR0ItemSet set
+      = (LR0ItemSet) obj;
+
+    if(set.items.size() != items.size())
+    {
+      return false;
+    }
+
+    for(Iterator e = items.keySet().iterator(); e.hasNext();)
+    {
+      if(!set.get((LR0Item) e.next()))
+      {
+        return false;
+      }
+    }
+
+    return true;
+  }
+
+  public int hashCode()
+  {
+    return hashCode;
+  }
+
+  public int compareTo(Object object)
+  {
+    LR0ItemSet set
+      = (LR0ItemSet) object;
+
+    int result = items.size() - set.items.size();
+
+    if(result == 0)
+    {
+      Iterator e = items.keySet().iterator();
+      Iterator f = set.items.keySet().iterator();
+
+      while(e.hasNext() && f.hasNext() && (result == 0))
+      {
+        result = ((LR0Item) e.next()).compareTo(f.next());
+      }
+
+      if(result == 0)
+      {
+        if(e.hasNext())
+        {
+          return 1;
+        }
+
+        if(f.hasNext())
+        {
+          return -1;
+        }
+      }
+    }
+
+    return result;
+  }
+
+}
diff --git a/src/org/sablecc/sablecc/LR1Collection.java b/src/org/sablecc/sablecc/LR1Collection.java
new file mode 100644
index 0000000..cca9246
--- /dev/null
+++ b/src/org/sablecc/sablecc/LR1Collection.java
@@ -0,0 +1,183 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.Vector;
+import java.util.Enumeration;
+import java.util.*;
+
+final class LR1Collection
+{
+  final LR0Collection collection;
+  final TreeMap[] lookaheads;
+  private final TreeMap[] propagation;
+
+  LR1Collection(LR0ItemSet set
+                 )
+  {
+    collection = new LR0Collection(set
+                                  );
+
+    // Initialize lookaheads to nothing, propagation to nothing
+    LR0ItemSet[] sets = collection.sets();
+    lookaheads = new TreeMap[sets.length];
+    propagation = new TreeMap[sets.length];
+
+    for(int i = 0; i < sets.length; i++)
+    {
+      System.out.print(".");
+      lookaheads[i] = new TreeMap();
+      propagation[i] = new TreeMap();
+
+      LR0Item[] items = sets[i].items();
+      for(int j = 0; j < items.length; j++)
+      {
+        lookaheads[i].put(items[j], new SymbolSet());
+        propagation[i].put(items[j], new Vector(0));
+      }
+    }
+    System.out.println();
+
+    ((SymbolSet) lookaheads[0].get(set.items()[0])).setTerminal(Grammar.eof);
+
+    for(int i = 0; i < sets.length; i++)
+    {
+      System.out.print(".");
+      LR0Item[] items = sets[i].items();
+
+      for(int j = 0; j < items.length; j++)
+      {
+        LR1ItemSet lr1Set = new LR1ItemSet();
+        lr1Set.set(new LR1Item(items[j], Grammar.dummy));
+
+        LR1Item[] closure = Grammar.CLOSURE(lr1Set).items();
+
+        for(int k = 0; k < closure.length; k++)
+        {
+          if(closure[k].terminal != Grammar.dummy)
+          {
+            Symbol[] rightside = Production.
+                                 production(closure[k].lr0Item.production).
+                                 rightside();
+
+            if(closure[k].lr0Item.position < rightside.length)
+            {
+              Integer destination = collection.GOTO(i,
+                                                    rightside[closure[k].lr0Item.position]);
+
+              if(destination != null)
+              {
+
+                ((SymbolSet) lookaheads[destination.intValue()].
+                 get
+                   (new LR0Item(closure[k].lr0Item.production,
+                                closure[k].lr0Item.position + 1))).
+                  setTerminal(closure[k].terminal);
+
+                /*((SymbolSet) lookaheads[collection.GOTO(i,
+                Production.production(closure[k].lr0Item.production).
+                rightside(closure[k].lr0Item.position)).intValue()].
+                get(new LR0Item(closure[k].lr0Item.production,
+                closure[k].lr0Item.position + 1))).
+                setTerminal(closure[k].terminal);*/
+              }
+            }
+          }
+          else
+          {
+            Symbol[] rightside = Production.
+                                 production(closure[k].lr0Item.production).
+                                 rightside();
+
+            if(closure[k].lr0Item.position < rightside.length)
+            {
+              Integer destination = collection.GOTO(i,
+                                                    rightside[closure[k].lr0Item.position]);
+
+              if(destination != null)
+              {
+                ((Vector) propagation[i].get(items[j])).
+                addElement(new LR0ItemAndSetPair(
+                             new LR0Item(closure[k].lr0Item.production,
+                                         closure[k].lr0Item.position + 1),
+                             destination.intValue()));
+
+                /*((Vector) propagation[i].get(items[j])).
+                    addElement(new LR0ItemAndSetPair(
+                    new LR0Item(closure[k].lr0Item.production,
+                    closure[k].lr0Item.position + 1),
+                    collection.GOTO(i,
+                    Production.production(closure[k].lr0Item.production).
+                    rightside(closure[k].lr0Item.position)).intValue()));*/
+              }
+            }
+          }
+        }
+      }
+    }
+    System.out.println();
+
+    boolean changed;
+    do
+    {
+      System.out.print(".");
+      changed = false;
+      for(int i = 0; i < sets.length; i++)
+      {
+        LR0Item[] items = sets[i].items();
+
+        for(int j = 0; j < items.length; j++)
+        {
+          for(Enumeration e = ((Vector) propagation[i].get(items[j])).
+                              elements(); e.hasMoreElements();)
+          {
+            LR0ItemAndSetPair pair = (LR0ItemAndSetPair) e.nextElement();
+
+            SymbolSet before = (SymbolSet)
+                               ((SymbolSet) lookaheads[pair.set].get(pair.item)).clone();
+
+            ((SymbolSet) lookaheads[pair.set].get(pair.item)).
+            or((SymbolSet) lookaheads[i].get(items[j]));
+
+            if(!before.equals(lookaheads[pair.set].get(pair.item)))
+            {
+              changed = true;
+            }
+          }
+        }
+      }
+    }
+    while(changed);
+    System.out.println();
+  }
+
+  public String toString()
+  {
+    StringBuffer result = new StringBuffer();
+
+    result.append(collection);
+    result.append(System.getProperty("line.separator"));
+
+    result.append("Lookaheads" + System.getProperty("line.separator"));
+    LR0ItemSet[] sets = collection.sets();
+
+    for(int i = 0; i < sets.length; i++)
+    {
+      result.append(i + ":" + System.getProperty("line.separator"));
+      LR0Item[] items = sets[i].items();
+
+      for(int j = 0; j < items.length; j++)
+      {
+        result.append(items[j] + ":" + lookaheads[i].get(items[j]) +
+                      System.getProperty("line.separator"));
+      }
+    }
+
+    return result.toString();
+  }
+}
diff --git a/src/org/sablecc/sablecc/LR1Item.java b/src/org/sablecc/sablecc/LR1Item.java
new file mode 100644
index 0000000..9aadae7
--- /dev/null
+++ b/src/org/sablecc/sablecc/LR1Item.java
@@ -0,0 +1,99 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+
+final class LR1Item implements Cloneable, Comparable
+{
+  final LR0Item lr0Item;
+  final int terminal;
+
+  LR1Item(LR0Item lr0Item, int terminal)
+  {
+    this.lr0Item = lr0Item;
+    this.terminal = terminal;
+  }
+
+  public Object clone()
+  {
+    return new LR1Item(lr0Item, terminal);
+  }
+
+  public boolean equals(Object obj)
+  {
+    if((obj == null) ||
+        (obj.getClass() != this.getClass()))
+    {
+      return false;
+    }
+
+    LR1Item item = (LR1Item) obj;
+
+    return (item.lr0Item.equals(lr0Item)) &&
+           (item.terminal == terminal);
+  }
+
+  public int hashCode()
+  {
+    return lr0Item.hashCode() * (terminal + 1) * 37;
+  }
+
+  public String toString()
+  {
+    return lr0Item + ":" + Symbol.symbol(terminal, true);
+  }
+
+  public String toString(Symbol lookahead)
+  {
+    // two cases:
+    // (1) we are facing a reduction, and the lookahed
+    //     should match
+    // (2) we are in the middle of a production.  The
+    //     next element should match.
+
+    Symbol[] rightside = Production.production(lr0Item.production).rightside();
+
+    if(lr0Item.position == rightside.length)
+    {
+      Symbol term = Symbol.symbol(terminal, true);
+
+      if(term == lookahead)
+      {
+        return lr0Item + " followed by " + term + " (reduce)";
+      }
+      else
+      {
+        return null;
+      }
+    }
+
+    if(rightside[lr0Item.position] == lookahead)
+    {
+      return lr0Item + " (shift)";
+    }
+    else
+    {
+      return null;
+    }
+  }
+
+  public int compareTo(Object object)
+  {
+    LR1Item item = (LR1Item) object;
+
+    int result = lr0Item.compareTo(item.lr0Item);
+
+    if(result == 0)
+    {
+      result = terminal - item.terminal;
+    }
+
+    return result;
+  }
+}
diff --git a/src/org/sablecc/sablecc/LR1ItemSet.java b/src/org/sablecc/sablecc/LR1ItemSet.java
new file mode 100644
index 0000000..ba7114d
--- /dev/null
+++ b/src/org/sablecc/sablecc/LR1ItemSet.java
@@ -0,0 +1,233 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import java.util.Vector;
+
+final class LR1ItemSet implements Cloneable, Comparable
+{
+  private final TreeMap items;
+  private int hashCode = 0;
+
+  LR1ItemSet()
+  {
+    this.items = new TreeMap();
+  }
+
+  private LR1ItemSet(LR1ItemSet set
+                      )
+  {
+    this.items = (TreeMap) set.items.clone();
+    this.hashCode = set.hashCode;
+  }
+
+  void set
+    (LR1Item item)
+  {
+    if(items.put(item, item) == null)
+    {
+      hashCode += item.hashCode();
+      modified_ = true;
+    }
+  }
+
+  boolean get
+    (LR1Item item)
+  {
+    return items.get(item) != null;
+  }
+
+  LR1Item[] items_;
+  boolean modified_ = true;
+
+  private void computeArray()
+  {
+    Vector itemVector = new Vector(0);
+
+    for(Iterator e = items.keySet().iterator(); e.hasNext();)
+    {
+      itemVector.addElement(e.next());
+    }
+
+    items_ = new LR1Item[itemVector.size()];
+    itemVector.copyInto(items_);
+    modified_ = false;
+  }
+
+  LR1Item[] items()
+  {
+    if(modified_)
+    {
+      computeArray();
+    }
+
+    return items_;
+  }
+
+  public String toString()
+  {
+    String nl = System.getProperty("line.separator");
+
+    StringBuffer result = new StringBuffer();
+    result.append("{" + nl + "\t");
+
+    Production[] productions = Production.productions();
+    Symbol[] terminals = Symbol.terminals();
+    boolean comma = false;
+    for(int i = 0; i < productions.length; i++)
+    {
+      int rightsideLength = productions[i].rightside().length;
+
+      for(int j = 0; j <= rightsideLength; j++)
+      {
+        LR0Item lr0Item = new LR0Item(productions[i].index, j);
+
+        for(int k = 0; k < terminals.length; k++)
+        {
+          LR1Item item = new LR1Item(lr0Item, terminals[k].index);
+          if(get
+              (item))
+          {
+            if(comma)
+            {
+              result.append("," + nl + "\t");
+            }
+            else
+            {
+              comma = true;
+            }
+
+            result.append(item);
+          }
+        }
+      }
+    }
+
+    result.append(nl + "}");
+    return result.toString();
+  }
+
+  public String toString(Symbol lookahead)
+  {
+    String nl = System.getProperty("line.separator");
+
+    LR1Item[] items = items();
+    int length = items.length;
+
+    TreeSet strings = new TreeSet();
+
+    for(int i = 0; i < length; i++)
+    {
+
+      String s = items[i].toString(lookahead);
+      //System.out.println("s = " + s + " " + " items[i] : " + items[i] + " lookahead : " + lookahead);
+      if(s != null)
+      {
+        strings.add(s);
+      }
+    }
+
+    StringBuffer result = new StringBuffer();
+    result.append("{");
+
+    boolean colon = false;
+    for(Iterator i = strings.iterator(); i.hasNext(); )
+    {
+      if(colon)
+      {
+        result.append(",");
+        result.append(nl);
+      }
+      else
+      {
+        colon = true;
+        result.append(nl);
+      }
+
+      result.append("\t");
+      result.append(i.next());
+    }
+
+    result.append(nl);
+    result.append("}");
+
+    return result.toString();
+  }
+
+  public Object clone()
+  {
+    return new LR1ItemSet(this);
+  }
+
+  public boolean equals(Object obj)
+  {
+    if((obj == null) ||
+        (obj.getClass() != this.getClass()))
+    {
+      return false;
+    }
+
+    LR1ItemSet set
+      = (LR1ItemSet) obj;
+
+    if(set.items.size() != items.size())
+    {
+      return false;
+    }
+
+    for(Iterator e = items.keySet().iterator(); e.hasNext();)
+    {
+      if(!set.get((LR1Item) e.next()))
+      {
+        return false;
+      }
+    }
+
+    return true;
+  }
+
+  public int hashCode()
+  {
+    return hashCode;
+  }
+
+  public int compareTo(Object object)
+  {
+    LR1ItemSet set
+      = (LR1ItemSet) object;
+
+    int result = items.size() - set.items.size();
+
+    if(result == 0)
+    {
+      Iterator e = items.keySet().iterator();
+      Iterator f = set.items.keySet().iterator();
+
+      while(e.hasNext() && f.hasNext() && (result == 0))
+      {
+        result = ((LR1Item) e.next()).compareTo(f.next());
+      }
+
+      if(result == 0)
+      {
+        if(e.hasNext())
+        {
+          return 1;
+        }
+
+        if(f.hasNext())
+        {
+          return -1;
+        }
+      }
+    }
+
+    return result;
+  }
+}
diff --git a/src/org/sablecc/sablecc/ListCast.java b/src/org/sablecc/sablecc/ListCast.java
new file mode 100644
index 0000000..f66bd6d
--- /dev/null
+++ b/src/org/sablecc/sablecc/ListCast.java
@@ -0,0 +1,23 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+
+public class ListCast implements Cast
+{
+  public final static ListCast instance = new ListCast();
+
+  private ListCast()
+  {}
+
+  public Object cast(Object o)
+  {
+    return (List) o;
+  }
+}
diff --git a/src/org/sablecc/sablecc/MacroExpander.java b/src/org/sablecc/sablecc/MacroExpander.java
new file mode 100644
index 0000000..1cc8b66
--- /dev/null
+++ b/src/org/sablecc/sablecc/MacroExpander.java
@@ -0,0 +1,111 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.io.*;
+import java.util.*;
+
+public class MacroExpander
+{
+  private static final String MACRO = "Macro:";
+  private static final String lineSeparator = System.getProperty("line.separator");
+
+  private Map macros = new TypedTreeMap(
+                         StringComparator.instance,
+                         StringCast.instance,
+                         ListCast.instance);
+
+  public MacroExpander(Reader in) throws IOException
+  {
+    BufferedReader br = new BufferedReader(in);
+    while(readInMacro(br))
+      ;
+    in.close();
+  }
+
+  private boolean readInMacro(BufferedReader in) throws IOException
+  {
+    String line;
+    while((line = in.readLine()) != null)
+    {
+      if(line.startsWith(MACRO))
+      {
+        String name = line.substring(MACRO.length());
+        List macro = new TypedLinkedList(StringCast.instance);
+
+        while((line = in.readLine()) != null)
+        {
+          if(line.equals("$"))
+          {
+            macros.put(name, macro);
+            return true;
+          }
+
+          macro.add(line);
+        }
+
+        macros.put(name, macro);
+        return false;
+      }
+    }
+
+    return false;
+  }
+
+  public String toString()
+  {
+    return this.getClass().getName() + macros;
+  }
+
+  public void apply(BufferedWriter out, String macroName) throws IOException
+  {
+    apply(out, macroName, null);
+  }
+
+  public void apply(BufferedWriter out, String macroName, String[] arguments) throws IOException
+  {
+    List macro = (List) macros.get(macroName);
+
+    for(ListIterator li = macro.listIterator(); li.hasNext();)
+    {
+      if(li.nextIndex() != 0)
+      {
+        out.newLine();
+      }
+
+      String line = (String) li.next();
+      char c;
+
+      for(int i = 0; i < line.length(); i++)
+      {
+        if((c = line.charAt(i)) == '$')
+        {
+          StringBuffer index = new StringBuffer();
+
+          while((c = line.charAt(++i)) != '$')
+          {
+            index.append(c);
+          }
+
+          if(index.length() == 0)
+          {
+            out.write('$');
+          }
+          else
+          {
+            out.write(arguments[Integer.parseInt(index.toString())]);
+          }
+        }
+        else
+        {
+          out.write(c);
+        }
+      }
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/NFA.java b/src/org/sablecc/sablecc/NFA.java
new file mode 100644
index 0000000..8de83cf
--- /dev/null
+++ b/src/org/sablecc/sablecc/NFA.java
@@ -0,0 +1,355 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+
+public class NFA implements Cloneable
+{
+  public State[] states;
+
+  private NFA(int size)
+  {
+    System.out.print(".");
+    states = new State[size];
+  }
+
+  public NFA()
+  {
+    this(2);
+    states[0] = new State();
+    states[0].transitions[0] = new Transition(null, 1);
+    states[1] = new State();
+  }
+
+  public NFA(CharSet chars)
+  {
+    this(2);
+    states[0] = new State();
+    states[0].transitions[0] = new Transition(chars, 1);
+    states[1] = new State();
+  }
+
+  public NFA(String string)
+  {
+    this(string.length() + 1);
+
+    for(int i = 0; i < string.length(); i++)
+    {
+      states[i] = new State();
+      states[i].transitions[0] = new Transition(new CharSet(string.charAt(i)), i + 1);
+    }
+
+    states[string.length()] = new State();
+  }
+
+  private NFA(NFA nfa)
+  {
+    this(nfa.states.length);
+
+    for(int i = 0; i < nfa.states.length; i++)
+    {
+      states[i] = new State(nfa.states[i]);
+    }
+  }
+
+  public NFA zeroOrMore()
+  {
+    NFA nfa = new NFA(states.length + 2);
+    nfa.states[0] = new State();
+    nfa.states[0].transitions[0] = new Transition(null, 1);
+    nfa.states[0].transitions[1] = new Transition(null, states.length + 1);
+
+    for(int i = 0; i < states.length; i++)
+    {
+      nfa.states[i + 1] = new State(states[i]);
+
+      if(nfa.states[i + 1].transitions[0] != null)
+      {
+        nfa.states[i + 1].transitions[0].destination += 1;
+      }
+
+      if(nfa.states[i + 1].transitions[1] != null)
+      {
+        nfa.states[i + 1].transitions[1].destination += 1;
+      }
+    }
+
+    nfa.states[states.length].transitions[0] = new Transition(null, 1);
+    nfa.states[states.length].transitions[1] = new Transition(null, states.length + 1);
+
+    nfa.states[states.length + 1] = new State();
+
+    return nfa;
+  }
+
+  public NFA zeroOrOne()
+  {
+    NFA nfa = new NFA(states.length + 2);
+    nfa.states[0] = new State();
+    nfa.states[0].transitions[0] = new Transition(null, 1);
+    nfa.states[0].transitions[1] = new Transition(null, states.length + 1);
+
+    for(int i = 0; i < states.length; i++)
+    {
+      nfa.states[i + 1] = new State(states[i]);
+
+      if(nfa.states[i + 1].transitions[0] != null)
+      {
+        nfa.states[i + 1].transitions[0].destination += 1;
+      }
+
+      if(nfa.states[i + 1].transitions[1] != null)
+      {
+        nfa.states[i + 1].transitions[1].destination += 1;
+      }
+    }
+
+    nfa.states[states.length].transitions[1] = new Transition(null, states.length + 1);
+
+    nfa.states[states.length + 1] = new State();
+
+    return nfa;
+  }
+
+  public NFA oneOrMore()
+  {
+    NFA nfa = new NFA(states.length + 2);
+    nfa.states[0] = new State();
+    nfa.states[0].transitions[0] = new Transition(null, 1);
+
+    for(int i = 0; i < states.length; i++)
+    {
+      nfa.states[i + 1] = new State(states[i]);
+
+      if(nfa.states[i + 1].transitions[0] != null)
+      {
+        nfa.states[i + 1].transitions[0].destination += 1;
+      }
+
+      if(nfa.states[i + 1].transitions[1] != null)
+      {
+        nfa.states[i + 1].transitions[1].destination += 1;
+      }
+    }
+
+    nfa.states[states.length].transitions[0] = new Transition(null, 1);
+    nfa.states[states.length].transitions[1] = new Transition(null, states.length + 1);
+
+    nfa.states[states.length + 1] = new State();
+
+    return nfa;
+  }
+
+  public NFA concatenate(NFA next)
+  {
+    NFA nfa = new NFA(states.length + next.states.length - 1);
+
+    for(int i = 0; i < states.length - 1; i++)
+    {
+      nfa.states[i] = new State(states[i]);
+    }
+
+    for(int i = 0; i < next.states.length; i++)
+    {
+      nfa.states[states.length + i - 1] = new State(next.states[i]);
+
+      if(nfa.states[states.length + i - 1].transitions[0] != null)
+      {
+        nfa.states[states.length + i - 1].transitions[0].destination +=
+          states.length - 1;
+      }
+
+      if(nfa.states[states.length + i - 1].transitions[1] != null)
+      {
+        nfa.states[states.length + i - 1].transitions[1].destination +=
+          states.length - 1;
+      }
+    }
+
+    return nfa;
+  }
+
+  public NFA alternate(NFA next)
+  {
+    NFA nfa = new NFA(states.length + next.states.length + 2);
+
+    nfa.states[0] = new State();
+    nfa.states[0].transitions[0] = new Transition(null, 1);
+    nfa.states[0].transitions[1] = new Transition(null, states.length + 1);
+
+    for(int i = 0; i < states.length; i++)
+    {
+      nfa.states[i + 1] = new State(states[i]);
+
+      if(nfa.states[i + 1].transitions[0] != null)
+      {
+        nfa.states[i + 1].transitions[0].destination += 1;
+      }
+
+      if(nfa.states[i + 1].transitions[1] != null)
+      {
+        nfa.states[i + 1].transitions[1].destination += 1;
+      }
+    }
+
+    nfa.states[states.length].transitions[0] =
+      new Transition(null, states.length + next.states.length + 1);
+
+    for(int i = 0; i < next.states.length; i++)
+    {
+      nfa.states[states.length + i + 1] = new State(next.states[i]);
+
+      if(nfa.states[states.length + i + 1].transitions[0] != null)
+      {
+        nfa.states[states.length + i + 1].transitions[0].destination +=
+          states.length + 1;
+      }
+
+      if(nfa.states[states.length + i + 1].transitions[1] != null)
+      {
+        nfa.states[states.length + i + 1].transitions[1].destination +=
+          states.length + 1;
+      }
+    }
+
+    nfa.states[states.length + next.states.length].transitions[0] =
+      new Transition(null, states.length + next.states.length + 1);
+
+    nfa.states[states.length + next.states.length + 1] = new State();
+
+    return nfa;
+  }
+
+  public NFA merge(NFA next)
+  {
+    NFA nfa = new NFA(states.length + next.states.length + 1);
+
+    nfa.states[0] = new State();
+    nfa.states[0].transitions[0] = new Transition(null, 1);
+    nfa.states[0].transitions[1] = new Transition(null, states.length + 1);
+
+    for(int i = 0; i < states.length; i++)
+    {
+      nfa.states[i + 1] = new State(states[i]);
+
+      if(nfa.states[i + 1].transitions[0] != null)
+      {
+        nfa.states[i + 1].transitions[0].destination += 1;
+      }
+
+      if(nfa.states[i + 1].transitions[1] != null)
+      {
+        nfa.states[i + 1].transitions[1].destination += 1;
+      }
+    }
+
+    for(int i = 0; i < next.states.length; i++)
+    {
+      nfa.states[states.length + i + 1] = new State(next.states[i]);
+
+      if(nfa.states[states.length + i + 1].transitions[0] != null)
+      {
+        nfa.states[states.length + i + 1].transitions[0].destination +=
+          states.length + 1;
+      }
+
+      if(nfa.states[states.length + i + 1].transitions[1] != null)
+      {
+        nfa.states[states.length + i + 1].transitions[1].destination +=
+          states.length + 1;
+      }
+    }
+
+    return nfa;
+  }
+
+  public Object clone()
+  {
+    return new NFA(this);
+  }
+
+  public String toString()
+  {
+    StringBuffer result = new StringBuffer();
+    for(int i = 0; i < states.length; i++)
+    {
+      result.append(i + ":" + states[i] + System.getProperty("line.separator"));
+    }
+    return result.toString();
+  }
+
+  public static class State
+  {
+    public String accept;
+
+    public Transition[] transitions = new Transition[2];
+
+    public State()
+    {}
+
+    public State(State state)
+    {
+      if(state.accept != null)
+      {
+        accept = state.accept;
+      }
+
+      if(state.transitions[0] != null)
+      {
+        transitions[0] = new Transition(state.transitions[0]);
+      }
+
+      if(state.transitions[1] != null)
+      {
+        transitions[1] = new Transition(state.transitions[1]);
+      }
+    }
+
+    public String toString()
+    {
+      StringBuffer result = new StringBuffer();
+      if(accept != null)
+      {
+        result.append("(" + accept + ") ");
+      }
+      if(transitions[0] != null)
+      {
+        result.append(" " + transitions[0]);
+      }
+      if(transitions[1] != null)
+      {
+        result.append(" " + transitions[1]);
+      }
+      return result.toString();
+    }
+  }
+
+  public static class Transition
+  {
+    public CharSet chars;
+    public int destination;
+
+    public Transition(CharSet chars, int destination)
+    {
+      this.chars = chars;
+      this.destination = destination;
+    }
+
+    public Transition(Transition transition)
+    {
+      chars = transition.chars;
+      destination = transition.destination;
+    }
+
+    public String toString()
+    {
+      return destination + ":{" + chars + "}";
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/NoCast.java b/src/org/sablecc/sablecc/NoCast.java
new file mode 100644
index 0000000..0198130
--- /dev/null
+++ b/src/org/sablecc/sablecc/NoCast.java
@@ -0,0 +1,21 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+public class NoCast implements Cast
+{
+  public final static NoCast instance = new NoCast();
+
+  private NoCast()
+  {}
+
+  public Object cast(Object o)
+  {
+    return o;
+  }
+}
diff --git a/src/org/sablecc/sablecc/NodeCast.java b/src/org/sablecc/sablecc/NodeCast.java
new file mode 100644
index 0000000..202c84b
--- /dev/null
+++ b/src/org/sablecc/sablecc/NodeCast.java
@@ -0,0 +1,24 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import org.sablecc.sablecc.node.*;
+
+public class NodeCast implements Cast
+{
+  public final static NodeCast instance = new NodeCast();
+
+  private NodeCast()
+  {}
+
+  public Object cast(Object o)
+  {
+    return (Node) o;
+  }
+}
diff --git a/src/org/sablecc/sablecc/PrettyPrinter.java b/src/org/sablecc/sablecc/PrettyPrinter.java
new file mode 100644
index 0000000..43eb5cf
--- /dev/null
+++ b/src/org/sablecc/sablecc/PrettyPrinter.java
@@ -0,0 +1,300 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+
+public class PrettyPrinter extends DepthFirstAdapter
+{
+  public static String production_INDENT = "    " ;
+  public static String prod_transform_INDENT = "         ";
+  public static String alternative_INDENT = "     " ;
+  public static String alt_transform_INDENT = "         " ;
+
+  public void caseAProductions(AProductions node)
+  {
+    System.err.println("Productions \n");
+    AProd [] prods =
+      (AProd [])node.getProds().toArray(new AProd[0]);
+    for(int i = 0; i < prods.length; i++)
+    {
+      prods[i].apply(this);
+    }
+  }
+
+  public void caseAProd(AProd node)
+  {
+    System.err.print(production_INDENT + node.getId().getText());
+    String hasProdTransform = "=";
+    if(node.getArrow() == null)
+    {
+      hasProdTransform = "";
+      System.err.println(" = ");
+    }
+    System.err.println();
+
+    AElem[] elems = (AElem [])node.getProdTransform().toArray(new AElem[0]);
+
+    //if(node.getArrow() != null)
+    if(elems.length > 0)
+    {
+      System.err.print(prod_transform_INDENT + "{-> ");
+
+      for(int i=0; i<elems.length; i++)
+      {
+        //System.err.print(elems[i] + " ");
+        elems[i].apply(this);
+        System.err.print(" ");
+      }
+      System.err.println(" } " + hasProdTransform);
+    }
+
+    Object[] alts = (Object[])node.getAlts().toArray();
+    for(int i=0; i<alts.length-1; i++)
+    {
+      ((PAlt)alts[i]).apply(this);
+      System.err.println( " |");
+    }
+    ((PAlt)alts[alts.length-1]).apply(this);
+
+    System.err.println("\n" + alternative_INDENT + ";\n");
+  }
+
+  public void caseAAlt(AAlt node)
+  {
+    System.err.print("\n" + alternative_INDENT);
+
+    if(node.getAltName() != null)
+    {
+      System.err.print("{" + node.getAltName().getText()+"} ");
+    }
+
+    AElem[] listElems = (AElem[])node.getElems().toArray(new AElem[0]);
+    for(int i=0; i<listElems.length; i++)
+    {
+      //System.err.print(listElems[i]);
+      listElems[i].apply(this);
+      System.err.print(" ");
+    }
+
+    if(node.getAltTransform() != null)
+    {
+      node.getAltTransform().apply(this);
+    }
+  }
+
+  public void caseAAltTransform(AAltTransform node)
+  {
+    System.err.print("\n" + alt_transform_INDENT + "{-> ");
+
+    Object []terms = (Object[]) node.getTerms().toArray();
+    for(int i=0; i<terms.length; i++)
+    {
+      ((PTerm)terms[i]).apply(this);
+      System.err.print(" ");
+    }
+
+    System.err.print(" }  ");
+  }
+
+  public void caseAProdName(AProdName node)
+  {
+    System.err.print(node.getId().getText());
+    if(node.getProdNameTail() != null)
+    {
+      System.err.print("." + node.getProdNameTail().getText());
+    }
+  }
+
+  public void caseANewTerm(ANewTerm node)
+  {
+    System.err.print("New ");
+    node.getProdName().apply(this);
+    System.err.print(" (" );
+
+    Object []params = node.getParams().toArray();
+    if(params.length > 0)
+    {
+      for(int i=0; i<params.length-1; i++)
+      {
+        ((PTerm)params[i]).apply(this);
+        System.err.print(", ");
+      }
+      ((PTerm)params[params.length-1]).apply(this);
+    }
+    System.err.print(" )");
+  }
+
+  public void caseAListTerm(AListTerm node)
+  {
+    System.err.print("[ ");
+    Object []list_terms = node.getListTerms().toArray();
+
+    for(int i=0; i<list_terms.length; i++)
+    {
+      ((PListTerm)list_terms[i]).apply(this);
+    }
+    System.err.print(" ]");
+  }
+
+  public void caseASimpleTerm(ASimpleTerm node)
+  {
+    if(node.getSpecifier() != null)
+    {
+      if(node.getSpecifier() instanceof ATokenSpecifier)
+      {
+        System.err.print("T.");
+      }
+      else
+      {
+        System.err.print("P.");
+      }
+    }
+    System.err.print(node.getId().getText() );
+    if(node.getSimpleTermTail() != null)
+    {
+      System.err.print("." + node.getSimpleTermTail().getText());
+    }
+    System.err.print(" ");
+  }
+
+  public void caseANullTerm(ANullTerm node)
+  {
+    System.err.print("Null ");
+  }
+
+  public void caseANewListTerm(ANewListTerm node)
+  {
+    System.err.print("New ");
+    node.getProdName().apply(this);
+    System.err.print(" (" );
+
+    Object []params = node.getParams().toArray();
+    if(params.length > 0)
+    {
+      for(int i=0; i<params.length-1; i++)
+      {
+        ((PTerm)params[i]).apply(this);
+        System.err.print(", ");
+      }
+      ((PTerm)params[params.length-1]).apply(this);
+    }
+    System.err.print(" )");
+  }
+
+  public void caseASimpleListTerm(ASimpleListTerm node)
+  {
+    if(node.getSpecifier() != null)
+    {
+      if(node.getSpecifier() instanceof ATokenSpecifier)
+      {
+        System.err.print("T.");
+      }
+      else
+      {
+        System.err.print("P.");
+      }
+    }
+    System.err.print(node.getId().getText() );
+    if(node.getSimpleTermTail() != null)
+    {
+      System.err.print("." + node.getSimpleTermTail().getText());
+    }
+    System.err.print(" ");
+  }
+
+  public void caseAAst(AAst node)
+  {
+    System.err.print("Abstract Syntax Tree\n");
+
+    AAstProd [] prods =
+      (AAstProd [])node.getProds().toArray(new AAstProd[0]);
+    for(int i = 0; i < prods.length; i++)
+    {
+      prods[i].apply(this);
+    }
+  }
+
+  public void caseAAstProd(AAstProd node)
+  {
+    System.err.println(production_INDENT + node.getId().getText() + " =");
+
+    AAstAlt[] alts = (AAstAlt[])node.getAlts().toArray(new AAstAlt[0]);
+    for(int i=0; i<alts.length-1; i++)
+    {
+      alts[i].apply(this);
+      System.err.println( "| ");
+    }
+    alts[alts.length-1].apply(this);
+
+    System.err.println("\n" + alternative_INDENT + ";\n");
+  }
+
+  public void caseAAstAlt(AAstAlt node)
+  {
+    System.err.print(alternative_INDENT);
+
+    if(node.getAltName() != null)
+    {
+      System.err.print("{" + node.getAltName().getText()+"} ");
+    }
+
+    AElem[] listElems = (AElem[])node.getElems().toArray(new AElem[0]);
+    for(int i=0; i<listElems.length; i++)
+    {
+      //System.err.print(listElems[i]);
+      listElems[i].apply(this);
+      System.err.print(" ");
+    }
+  }
+
+  public void caseAElem(AElem node)
+  {
+    if(node.getElemName() != null)
+    {
+      System.err.print("[" + node.getElemName().getText() + "]: ");
+    }
+
+    if(node.getSpecifier() != null)
+    {
+      if(node.getSpecifier() instanceof ATokenSpecifier)
+      {
+        System.err.print("T.");
+      }
+      else
+      {
+        System.err.print("P.");
+      }
+    }
+
+    System.err.print(node.getId().getText());
+    if(node.getUnOp() != null)
+    {
+      node.getUnOp().apply(new DepthFirstAdapter()
+                           {
+                             public void caseAStarUnOp(AStarUnOp node)
+                             {
+                               System.err.print("*");
+                             }
+
+                             public void caseAQMarkUnOp(AQMarkUnOp node)
+                             {
+                               System.err.print("?");
+                             }
+
+                             public void caseAPlusUnOp(APlusUnOp node)
+                             {
+                               System.err.print("+");
+                             }
+                           }
+                          );
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/Production.java b/src/org/sablecc/sablecc/Production.java
new file mode 100644
index 0000000..9fb1cc1
--- /dev/null
+++ b/src/org/sablecc/sablecc/Production.java
@@ -0,0 +1,157 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import java.util.Vector;
+import java.util.Enumeration;
+
+final class Production
+{
+  final int leftside;
+  final int index;
+  final String name;
+
+  private final Vector rightside = new Vector();
+  private static final Vector productions = new Vector(0);
+  private static TreeMap alternatives_ = new TreeMap(IntegerComparator.instance);
+  private static boolean modified_ = true;
+  private static Production[] productions_;
+
+  public static void reinit()
+  {
+    productions.removeAllElements();
+    alternatives_ = new TreeMap(IntegerComparator.instance);
+    productions_ = null;
+    modified_ = true;
+    productions_ = null;
+  }
+
+  private static void computeArray_()
+  {
+    productions_ = new Production[productions.size()];
+    productions.copyInto(productions_);
+    modified_ = false;
+  }
+
+  private boolean modified = true;
+  private Symbol[] rightside_;
+
+  private void computeArray()
+  {
+    rightside_ = new Symbol[rightside.size()];
+    rightside.copyInto(rightside_);
+    modified = false;
+  }
+
+  Production(int leftside, String name)
+  {
+    productions.addElement(this);
+
+    this.name = name;
+    this.leftside = leftside;
+    this.index = productions.indexOf(this);
+    modified_ = true;
+  }
+
+  Symbol[] rightside()
+  {
+    if(modified)
+    {
+      computeArray();
+    }
+
+    return rightside_;
+  }
+
+  void addSymbol(Symbol s)
+  {
+    rightside.addElement(s);
+    modified = true;
+    modified_ = true;
+  }
+
+  Symbol rightside(int index)
+  {
+    return (Symbol) rightside.elementAt(index);
+  }
+
+  static Production production(int index)
+  {
+    return (Production) productions.elementAt(index);
+  }
+
+  static Production[] alternatives(int nonterminal)
+  {
+    if(modified_)
+    {
+      alternatives_ = new TreeMap(IntegerComparator.instance);
+    }
+
+    Production[] result = (Production[]) alternatives_.get(new Integer(nonterminal));
+
+    if(result == null)
+    {
+      Vector alternatives = new Vector(0);
+
+      for(Enumeration e = productions.elements(); e.hasMoreElements();)
+      {
+        Production production = (Production) e.nextElement();
+
+        if(production.leftside == nonterminal)
+        {
+          alternatives.addElement(production);
+        }
+      }
+
+      result = new Production[alternatives.size()];
+      alternatives.copyInto(result);
+
+      alternatives_.put(new Integer(nonterminal), result);
+    }
+
+    return result;
+  }
+
+  static Production[] productions()
+  {
+    if(modified_)
+    {
+      computeArray_();
+    }
+
+    return productions_;
+  }
+
+  public String toString()
+  {
+    StringBuffer result = new StringBuffer();
+
+    result.append(Symbol.symbol(leftside, false));
+
+    result.append(" = ");
+
+    Symbol[] symbols = rightside();
+    boolean space = false;
+    for(int i = 0; i < symbols.length; i++)
+    {
+      if(space)
+      {
+        result.append(" ");
+      }
+      else
+      {
+        space = true;
+      }
+
+      result.append(symbols[i]);
+    }
+
+    return result.toString();
+  }
+}
diff --git a/src/org/sablecc/sablecc/RecursiveProductionsDetections.java b/src/org/sablecc/sablecc/RecursiveProductionsDetections.java
new file mode 100644
index 0000000..c29276e
--- /dev/null
+++ b/src/org/sablecc/sablecc/RecursiveProductionsDetections.java
@@ -0,0 +1,70 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+
+public class RecursiveProductionsDetections extends DepthFirstAdapter
+{
+  public LinkedList listOfRecursiveProds = new TypedLinkedList(StringCast.instance);
+  private String currentProd;
+
+  public void caseAProd(AProd node)
+  {
+    currentProd = node.getId().getText();
+    if(!node.getId().getText().startsWith("$"))
+    {
+      Object []alts = node.getAlts().toArray();
+
+      for(int i=0; i<alts.length; i++)
+      {
+        ((PAlt)alts[i]).apply(this);
+      }
+    }
+    else
+    {
+      listOfRecursiveProds.add( ResolveIds.name(currentProd) );
+    }
+  }
+
+  public void caseAAlt(AAlt node)
+  {
+    Object temp[] = node.getElems().toArray();
+    for(int i = 0; i < temp.length; i++)
+    {
+      ((PElem) temp[i]).apply(this);
+    }
+  }
+  /*
+  public void caseAIgnoredAlt(AIgnoredAlt node)
+  {
+  Object temp[] = node.getElems().toArray();
+  for(int i = 0; i < temp.length; i++)
+  {
+    ((PElem) temp[i]).apply(this);
+  }
+  }
+  */
+
+  public void caseAElem(AElem node)
+  {
+    if(node.getId().getText().equals(currentProd))
+    {
+      if(node.getSpecifier() != null && node.getSpecifier() instanceof ATokenSpecifier)
+      {
+        return;
+      }
+      if( !listOfRecursiveProds.contains(ResolveIds.name(currentProd)) )
+      {
+        listOfRecursiveProds.add( ResolveIds.name(currentProd) );
+      }
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/ResolveAltIds.java b/src/org/sablecc/sablecc/ResolveAltIds.java
new file mode 100644
index 0000000..e6f42f0
--- /dev/null
+++ b/src/org/sablecc/sablecc/ResolveAltIds.java
@@ -0,0 +1,162 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/**
+ * Last Modification date : 03-11-2003
+ * Remove the checking of question mark and + operator
+ * for production tranformations
+ * I've commented out the method
+ * public void caseAProd(AProd node) { ... }
+ * Date : 15-01-2003 : 
+ * The method is now removed because it is not used anymore
+ */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+import java.io.*;
+
+/*
+ * ResolveAltIds
+ * 
+ * This class computes semantic verifications for AST alternatives
+ * section. The same thing is done by ResolveIds class for Productions
+ * section.
+ */
+
+public class ResolveAltIds extends DepthFirstAdapter
+{
+  public ResolveIds ids;
+
+  //Map of alternatives elements which are not list :
+  // ie not followed by * or + operator.
+  public Map alts_elems = new TypedTreeMap(
+                            StringComparator.instance,
+                            StringCast.instance,
+                            ListCast.instance);
+
+  //Map of only alternatives elements which are list :
+  //followed by * or + operator.
+  public Map alts_elems_list = new TypedTreeMap(
+                                 StringComparator.instance,
+                                 StringCast.instance,
+                                 ListCast.instance);
+
+  //Map of all alternatives elements. Elements name are stored
+  //if it is specified otherwise, it is its id.
+  //(elem = elem_name? specifier? id un_op?)
+  public Map alts_elemsGlobal = new TypedTreeMap(
+                                  StringComparator.instance,
+                                  StringCast.instance,
+                                  ListCast.instance);
+
+  //Map of all alternatives elements which have explicit name.
+  public Map alts_elems_list_elemName = new TypedTreeMap(
+                                          StringComparator.instance,
+                                          StringCast.instance,
+                                          ListCast.instance);
+
+  private LinkedList listElemsGlobal;
+  private LinkedList listElems;
+  private LinkedList listElemslist;
+
+  String currentAlt;
+
+  //This is true if the current elem is a list and false otherwise
+  private boolean blist;
+
+  public ResolveAltIds(ResolveIds ids)
+  {
+    this.ids = ids;
+  }
+
+  /*
+   * This method is checking if there is QMark or Plus Operator in in the 
+   * list of productions transformations elements
+   */
+
+  public void caseAProd(AProd node)
+  {
+    AElem []temp = (AElem[]) node.getProdTransform().toArray(new AElem[0]);
+
+    Object []list_alts = node.getAlts().toArray();
+    for(int j=0; j<list_alts.length; j++)
+    {
+      ((PAlt)list_alts[j]).apply(this);
+    }
+  }
+
+  /*
+   * Here, a map which associate the current alternative with the list of elems
+   * is created.
+   */
+  public void caseAAlt(AAlt alt)
+  {
+    //contains all the elements in the alternative, no matter if they are list or not
+    listElemsGlobal = new LinkedList();
+
+    //contains only single (without operator * or +) element of the alternative.
+    listElems = new LinkedList();
+
+    //contains only element of the alternative which are list(operator * or +).
+    listElemslist = new LinkedList();
+
+    currentAlt = (String)ids.names.get(alt);
+
+    AElem[] list_elems = (AElem[])alt.getElems().toArray(new AElem[0]);
+    for(int i=0; i<list_elems.length; i++)
+    {
+      list_elems[i].apply(this);
+    }
+
+    alts_elemsGlobal.put(currentAlt, listElemsGlobal);
+    alts_elems.put(currentAlt, listElems);
+    alts_elems_list.put(currentAlt, listElemslist);
+  }
+
+  public void caseAElem(final AElem elem)
+  {
+    blist = false;
+    if( (elem.getUnOp() != null) &&
+        ((elem.getUnOp() instanceof AStarUnOp) || (elem.getUnOp() instanceof APlusUnOp)) )
+    {
+      blist = true;
+    }
+
+    String elem_name = (elem.getElemName() != null ? elem.getElemName().getText() : elem.getId().getText() );
+    if(!blist)
+    {
+      listElems.add(elem_name);
+    }
+    else
+    {
+      listElemslist.add(elem_name);
+    }
+
+    listElemsGlobal.add(elem_name);
+  }
+
+  //This method is overriding in order to not allow ASt traversal to visit
+  //AST elements.
+  public void caseAAst(AAst node)
+  {}
+
+  public String toString()
+  {
+    StringBuffer s = new StringBuffer();
+    String nl = System.getProperty("line.separator");
+
+    s.append("Alternative elements : ");
+    s.append(nl);
+    s.append(alts_elems);
+    s.append(nl);
+
+    return s.toString();
+  }
+}
diff --git a/src/org/sablecc/sablecc/ResolveAstIds.java b/src/org/sablecc/sablecc/ResolveAstIds.java
new file mode 100644
index 0000000..a0613df
--- /dev/null
+++ b/src/org/sablecc/sablecc/ResolveAstIds.java
@@ -0,0 +1,349 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+import java.io.*;
+
+/*
+ * ResolveAstIds
+ * 
+ * This class computes basic semantic verifications for AST alternatives
+ * section. The same thing is done by ResolveIds class for Productions
+ * section. It makes sure that there is no conflictual names and it also
+ * constructs few symbol tables necessary in the rest of the code.
+ */
+
+/**
+ * Last Modification date : 18-10-2004
+ * correct AST alternative element error bug (error2()) 
+ * Now only tokens and AST section's productions can be used in
+ * AST alternatives
+ *
+ * 15-01-2004
+ * Remove comment method error1(...)
+ *
+ */
+
+public class ResolveAstIds extends DepthFirstAdapter
+{
+  //Map of AST productions. The AST production node can be obtained
+  //by giving the name of this production
+  // Example :: PAstProd is the name of the declared the following productions
+  //            ast_prod = id equal [alts]:ast_alt* semicolon;
+  public final Map ast_prods = new TypedTreeMap(
+                                 StringComparator.instance,
+                                 StringCast.instance,
+                                 NodeCast.instance);
+  //Same thing that above for AST alternatives.
+  public final Map ast_alts = new TypedTreeMap(
+                                StringComparator.instance,
+                                StringCast.instance,
+                                NodeCast.instance);
+  //Same thing that above for AST alternatives elements.
+  public final Map ast_elems = new TypedTreeMap(
+                                 StringComparator.instance,
+                                 StringCast.instance,
+                                 NodeCast.instance);
+  //Map of all names of AST productions.
+  //They are essentially used to generate AST node classes.
+  public final Map ast_names = new TypedHashMap(
+                                 NodeCast.instance,
+                                 StringCast.instance);
+  public final Map ast_elemTypes = new TypedHashMap(
+                                     NodeCast.instance,
+                                     StringCast.instance);
+  public ResolveIds astIds;
+
+  private String firstAstProduction;
+  private String currentProd;
+  private String currentAlt;
+  private int lastLine;
+  private int lastPos;
+
+  public ResolveAstIds(ResolveIds ids)
+  {
+    astIds = ids;
+  }
+
+  public String getFirstAstProduction()
+  {
+    return firstAstProduction;
+  }
+
+  public void inAAst(AAst node)
+  {
+    LinkedList listProds = node.getProds();
+    if(listProds.size() > 0)
+    {
+      AAstProd firstAstProd = (AAstProd)listProds.getFirst();
+      firstAstProduction = "P" + astIds.name(firstAstProd.getId().getText());
+    }
+  }
+
+  public void inAAstProd(AAstProd node)
+  {
+    currentProd = astIds.name(node.getId().getText());
+
+    String name = "P" + currentProd;
+
+    if(ast_prods.put(name, node) != null)
+    {
+      error(node.getId(), name);
+    }
+    ast_names.put(node, name);
+  }
+
+  public void inAAstAlt(final AAstAlt alt)
+  {
+    if(alt.getAltName() != null)
+    {
+      currentAlt =
+        "A" +
+        astIds.name(alt.getAltName().getText()) +
+        currentProd;
+
+      if(ast_alts.put(currentAlt, alt) != null)
+      {
+        error(alt.getAltName(), currentAlt);
+      }
+      ast_names.put(alt, currentAlt);
+    }
+    else
+    {
+      currentAlt = "A" + currentProd;
+
+      if(ast_alts.put(currentAlt, alt) != null)
+      {
+        error(currentAlt);
+      }
+      ast_names.put(alt, currentAlt);
+    }
+  }
+
+  //Only Abstract Syntax Tree section is concerned by the visitor here.
+  public void caseAProductions(AProductions node)
+  {}
+
+  public void caseAElem(final AElem elem)
+  {
+    String name;
+    String elem_name;
+    TId tid;
+    if(elem.getElemName() != null)
+    {
+      tid = elem.getElemName();
+    }
+    else
+    {
+      tid = elem.getId();
+    }
+
+    elem_name = tid.getText();
+    name = currentAlt + "." + astIds.name(elem_name);
+
+    if(ast_elems.put(name, elem) != null)
+    {
+      error(tid, name);
+    }
+
+    if(elem_name.equals("class"))
+    {
+      error5(tid);
+    }
+
+    ast_names.put(elem, astIds.name(elem_name));
+  }
+
+  public void outAAstProd(AAstProd prod)
+  {
+    prod.apply(new DepthFirstAdapter()
+               {
+                 public void caseAElem(AElem node)
+                 {
+                   String name = astIds.name(node.getId().getText());
+
+                   if(node.getSpecifier() != null)
+                   {
+                     if(node.getSpecifier() instanceof ATokenSpecifier)
+                     {
+                       ast_elemTypes.put(node, "T" + name);
+                     }
+                     else
+                     {
+                       ast_elemTypes.put(node, "P" + name);
+                     }
+                   }
+                   else
+                   {
+                     Object token = astIds.tokens.get("T" + name);
+
+                     if(token != null)
+                     {
+                       ast_elemTypes.put(node, "T" + name);
+                     }
+                     else
+                     {
+                       ast_elemTypes.put(node, "P" + name);
+                     }
+                   }
+                 }
+               }
+              );
+  }
+
+  public void outAAst(AAst prod)
+  {
+    prod.apply(new DepthFirstAdapter()
+               {
+                 public void caseAElem(AElem node)
+                 {
+                   String name = astIds.name(node.getId().getText());
+
+                   if(node.getSpecifier() != null)
+                   {
+                     if(node.getSpecifier() instanceof ATokenSpecifier)
+                     {
+                       if(astIds.tokens.get("T" + name) == null)
+                       {
+                         error2(node.getId(), "T" + name);
+                       }
+
+                       if(astIds.ignTokens.get("T" + name) != null)
+                       {
+                         error3(node.getId(), "T" + name);
+                       }
+
+                       ast_elemTypes.put(node, "T" + name);
+                     }
+                     else
+                     {
+                       if(ast_prods.get("P" + name) == null)
+                       {
+                         error2(node.getId(), "P" + name);
+                       }
+                       ast_elemTypes.put(node, "P" + name);
+                     }
+                   }
+                   else
+                   {
+                     Object token = astIds.tokens.get("T" + name);
+                     Object ignToken = astIds.ignTokens.get("T" + name);
+                     //Object production = astIds.prods.get("P" + name);
+                     Object ast_production = ast_prods.get("P" + name);
+                     //if()
+                     if((token == null) && (ast_production == null))
+                     {
+                       error2(node.getId(), "P" + name + " and T" + name );
+                     }
+
+                     //if the alternative element is a token
+                     if(token != null)
+                     {
+                       //and also appears to be a valid production, there is an ambiguity
+                       if( ast_production != null )
+                       {
+                         error4(node.getId(), "P" + name + " and T" + name);
+                       }
+
+                       //it should not be an ignored token
+                       if(ignToken != null)
+                       {
+                         error3(node.getId(), "T" + name);
+                       }
+
+                       ast_elemTypes.put(node, "T" + name);
+                     }
+                     //the alternative element is a production and everything is fine
+                     else
+                     {
+                       ast_elemTypes.put(node, "P" + name);
+                     }
+                   }
+                 }
+               }
+              );
+  }
+
+  public void defaultcase(Node node)
+  {
+    if(node instanceof Token)
+    {
+      Token t = (Token) node;
+      lastLine = t.getLine();
+      lastPos = t.getPos() + t.getText().length();
+    }
+  }
+
+  private static void error(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "Redefinition of " + name + ".");
+  }
+
+  private void error(String name)
+  {
+    throw new RuntimeException(
+      "[" + lastLine + "," + lastPos + "] " +
+      "Redefinition of " + name + ".");
+  }
+
+  private static void error2(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      name + " undefined. If it is a production, It should be defined in AST section");
+  }
+
+  private static void error3(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      name + " is ignored.");
+  }
+
+  private static void error4(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "ambiguous " + name + ".");
+  }
+
+  private static void error5(Token token)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "class is an invalid element name.");
+  }
+
+  public String toString()
+  {
+    StringBuffer s = new StringBuffer();
+    String nl = System.getProperty("line.separator");
+
+    s.append("Productions:");
+    s.append(nl);
+    s.append(ast_prods);
+    s.append(nl);
+
+    s.append("Alternatives:");
+    s.append(nl);
+    s.append(ast_alts);
+    s.append(nl);
+
+    s.append("Elements:");
+    s.append(nl);
+    s.append(ast_elems);
+    s.append(nl);
+
+    return s.toString();
+  }
+}
diff --git a/src/org/sablecc/sablecc/ResolveIds.java b/src/org/sablecc/sablecc/ResolveIds.java
new file mode 100644
index 0000000..cfc4256
--- /dev/null
+++ b/src/org/sablecc/sablecc/ResolveIds.java
@@ -0,0 +1,672 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+import java.io.*;
+
+public class ResolveIds extends DepthFirstAdapter
+{
+  public final Map helpers = new TypedTreeMap(
+                               StringComparator.instance,
+                               StringCast.instance,
+                               NodeCast.instance);
+  public final Map states = new TypedTreeMap(
+                              StringComparator.instance,
+                              StringCast.instance,
+                              NodeCast.instance);
+  public final Map tokens = new TypedTreeMap(
+                              StringComparator.instance,
+                              StringCast.instance,
+                              NodeCast.instance);
+  public final Map ignTokens = new TypedTreeMap(
+                                 StringComparator.instance,
+                                 StringCast.instance,
+                                 NodeCast.instance);
+  public final Map prods = new TypedTreeMap(
+                             StringComparator.instance,
+                             StringCast.instance,
+                             NodeCast.instance);
+
+  public final Map alts = new TypedHashMap(
+                            StringCast.instance,
+                            NodeCast.instance);
+
+  public final Map elems = new TypedHashMap(
+                             StringCast.instance,
+                             NodeCast.instance);
+
+  public final Map names = new TypedHashMap(
+                             NodeCast.instance,
+                             StringCast.instance);
+
+  public final Map errorNames = new TypedHashMap(
+                                  NodeCast.instance,
+                                  StringCast.instance);
+  public final Map elemTypes = new TypedHashMap(
+                                 NodeCast.instance,
+                                 StringCast.instance);
+
+  public final Map altsElemNameTypes = new TypedHashMap(
+                                         StringCast.instance,
+                                         StringCast.instance);
+
+  // This map will serve for simpleTerm and simplelistTerm type within an altTransform
+  // Inside an altTransform, one would look at this map to know its type. (P... or T...)
+  public final Map altsElemTypes = new TypedHashMap(
+                                     StringCast.instance,
+                                     StringCast.instance);
+
+  public final Map fixedTokens = new TypedHashMap(
+                                   NodeCast.instance,
+                                   BooleanCast.instance);
+
+  public final List tokenList = new TypedLinkedList(StringCast.instance);
+  public final LinkedList stateList = new TypedLinkedList(StringCast.instance);
+  public File pkgDir;
+  public String pkgName = "";
+
+  private boolean processingStates;
+  private boolean processingIgnTokens;
+
+  String currentProd;
+  String currentAlt;
+  private int lastLine;
+  private int lastPos;
+
+  public ResolveIds(File currentDir)
+  {
+    pkgDir = currentDir;
+  }
+
+  public void inAGrammar(AGrammar node)
+  {
+    TPkgId[] temp = (TPkgId []) node.getPackage().toArray(new TPkgId[0]);
+    if(temp.length > 0)
+    {
+      pkgName = temp[0].getText();
+      pkgDir = new File(pkgDir, temp[0].getText());
+
+      for(int i=1; i<temp.length; i++)
+      {
+        pkgName += "." + temp[i].getText();
+        pkgDir = new File(pkgDir, temp[i].getText());
+      }
+
+      if(!pkgDir.exists())
+      {
+        if(!pkgDir.mkdirs())
+        {
+          throw new RuntimeException("Unable to create " + pkgDir.getAbsolutePath());
+        }
+      }
+    }
+  }
+
+  public void caseAProd(AProd node)
+  {
+    //inAProd code.
+    currentProd = name(node.getId().getText());
+    String name = "P" + currentProd;
+
+    if(prods.put(name, node) != null)
+    {
+      error(node.getId(), name);
+    }
+
+    names.put(node, name);
+
+    //list of inAAlt code.
+    Object []list_alt = (Object [])node.getAlts().toArray();
+    for(int i = 0; i< list_alt.length; i++)
+    {
+      ((PAlt)list_alt[i]).apply(this);
+    }
+  }
+
+  public void caseAIdBasic(AIdBasic node)
+  {
+    String name = node.getId().getText();
+
+    // Only helpers can be used inside tokens definition
+    if(helpers.get(name) == null)
+    {
+      error2(node.getId(), name);
+    }
+  }
+
+  public void outAHelperDef(AHelperDef node)
+  {
+    String name = node.getId().getText();
+
+    // If another helper is used within the current helper,
+    // it should have been defined before the current one
+    if(helpers.put(name, node) != null)
+    {
+      error(node.getId(), name);
+    }
+
+    names.put(node, name);
+  }
+
+  public void outATokenDef(ATokenDef node)
+  {
+    String name = "T" + name(node.getId().getText());
+    String errorName = errorName(node.getId().getText());
+
+    //We are making sure that this token is not yet defined.
+    if(tokens.put(name, node) != null)
+    {
+      error(node.getId(), name);
+    }
+
+    names.put(node, name);
+    errorNames.put(node, errorName);
+    tokenList.add(name);
+
+    if(node.getLookAhead() != null)
+    {
+      Token token = (Token) node.getSlash();
+      throw new RuntimeException(
+        "[" + token.getLine() + "," + token.getPos() + "] " +
+        "Look ahead not yet supported.");
+    }
+  }
+
+  public void inAStates(AStates node)
+  {
+    Object [] list_id = (Object[]) node.getListId().toArray();
+    String name;
+
+    for(int i=0; i<list_id.length; i++)
+    {
+      name = ((TId)list_id[i]).getText().toUpperCase();
+
+      if(states.put(name, list_id[i]) != null)
+      {
+        error((TId)list_id[i], name);
+      }
+
+      names.put(list_id[i], name);
+      stateList.add(name);
+    }
+  }
+
+  public void inAIgnTokens(AIgnTokens node)
+  {
+    Object [] list_id = (Object[]) node.getListId().toArray();
+    String name;
+
+    for(int i=0; i<list_id.length; i++)
+    {
+      name = "T" + name(((TId)list_id[i]).getText());
+
+      if(tokens.get(name) == null)
+      {
+        error2((TId)list_id[i], name);
+      }
+
+      if(ignTokens.put(name, list_id[i]) != null)
+      {
+        error((TId)list_id[i], name);
+      }
+      names.put(list_id[i], name);
+    }
+  }
+
+  private Map stateMap;
+
+  public void inAStateList(AStateList node)
+  {
+    stateMap = new TypedTreeMap(
+                 StringComparator.instance,
+                 StringCast.instance,
+                 NodeCast.instance);
+
+    String name = node.getId().getText().toUpperCase();
+
+    if(states.get(name) == null)
+    {
+      error2(node.getId(), name);
+    }
+
+    if(stateMap.put(name, node) != null)
+    {
+      error(node.getId(), name);
+    }
+  }
+
+  public void outAStateList(AStateList node)
+  {
+    stateMap = null;
+  }
+
+  public void inAStateListTail(AStateListTail node)
+  {
+    String name = node.getId().getText().toUpperCase();
+
+    if(states.get(name) == null)
+    {
+      error2(node.getId(), name);
+    }
+
+    if(stateMap.put(name, node) != null)
+    {
+      error(node.getId(), name);
+    }
+  }
+
+  public void inATransition(ATransition node)
+  {
+    String name = node.getId().getText().toUpperCase();
+
+    if(states.get(name) == null)
+    {
+      error2(node.getId(), name);
+    }
+  }
+
+  public void caseAAlt(final AAlt alt)
+  {
+    if(alt.getAltName() != null)
+    {
+      currentAlt =
+        "A" +
+        name(alt.getAltName().getText()) +
+        currentProd;
+
+      if(alts.put(currentAlt, alt) != null)
+      {
+        error(alt.getAltName(), currentAlt);
+      }
+
+      names.put(alt, currentAlt);
+    }
+    else
+    {
+
+      currentAlt = "A" + currentProd;
+
+      if(alts.put(currentAlt, alt) != null)
+      {
+        error(currentAlt);
+      }
+      names.put(alt, currentAlt);
+    }
+
+    AElem list_elem[] = (AElem[]) alt.getElems().toArray(new AElem[0]);
+    for(int i=0; i<list_elem.length;i++)
+    {
+      list_elem[i].apply(this);
+    }
+
+  }
+
+  public void defaultcase(Node node)
+  {
+    if(node instanceof Token)
+    {
+      Token t = (Token) node;
+      lastLine = t.getLine();
+      lastPos = t.getPos() + t.getText().length();
+    }
+  }
+
+  public void caseAAst(AAst node)
+  {}
+
+  public void caseAElem(final AElem elem)
+  {
+    if(elem.getElemName() != null)
+    {
+      String name = currentAlt + "." +
+                    name(elem.getElemName().getText());
+
+      if(elems.put(name, elem) != null)
+      {
+        error(elem.getElemName(), name);
+      }
+
+      if(elem.getElemName().getText().equals("class"))
+      {
+        error5(elem.getElemName());
+      }
+
+      names.put(elem, name(elem.getElemName().getText()) );
+    }
+    else
+    {
+      String name = currentAlt + "." +
+                    name(elem.getId().getText());
+
+      if(elems.put(name, elem) != null)
+      {
+        error(elem.getId(), name);
+      }
+
+      if(elem.getId().getText().equals("class"))
+      {
+        error5(elem.getId());
+      }
+
+      names.put(elem, name(elem.getId().getText()));
+    }
+  }
+
+  public void outAProductions(AProductions prod)
+  {
+    prod.apply(new DepthFirstAdapter()
+               {
+                 public void caseAProd(AProd node)
+                 {
+                   //inAProd code.
+                   currentProd = name(node.getId().getText());
+
+                   //list of inAAlt code.
+                   Object []list_alt = (Object [])node.getAlts().toArray();
+                   for(int i = 0; i< list_alt.length; i++)
+                   {
+                     ((PAlt)list_alt[i]).apply(this);
+                   }
+                 }
+
+                 public void caseAAlt(final AAlt alt)
+                 {
+                   if(alt.getAltName() != null)
+                   {
+                     currentAlt = "A" + name(alt.getAltName().getText()) + currentProd;
+                   }
+                   else
+                   {
+                     currentAlt = "A" + currentProd;
+                   }
+
+                   AElem[] list_elem = (AElem[]) alt.getElems().toArray(new AElem[0]);
+                   for(int i=0; i<list_elem.length;i++)
+                   {
+                     list_elem[i].apply(this);
+                   }
+                 }
+
+                 public void caseAElem(AElem node)
+                 {
+                   String name = name(node.getId().getText());
+                   String nameOfElem;
+
+                   if(node.getElemName() != null)
+                   {
+                     nameOfElem = node.getElemName().getText();
+                   }
+                   else
+                   {
+                     nameOfElem = node.getId().getText();
+                   }
+
+                   if(node.getSpecifier() != null)
+                   {
+                     if(node.getSpecifier() instanceof ATokenSpecifier)
+                     {
+                       if(tokens.get("T" + name) == null)
+                       {
+                         error2(node.getId(), "T" + name);
+                       }
+
+                       if(ignTokens.get("T" + name) != null)
+                       {
+                         error3(node.getId(), "T" + name);
+                       }
+
+                       elemTypes.put(node, "T" + name);
+
+                       if(node.getElemName() != null)
+                       {
+                         altsElemNameTypes.put(currentAlt+"." + node.getElemName().getText(), "T" + name);
+                       }
+
+                       String type_name = name;
+                       if(node.getUnOp() instanceof AStarUnOp || node.getUnOp() instanceof AQMarkUnOp)
+                       {
+                         type_name += "?";
+                       }
+                       altsElemTypes.put(currentAlt+"." + nameOfElem, "T" + type_name);
+                     }
+                     else
+                     {
+                       if(prods.get("P" + name) == null)
+                       {
+                         error2(node.getId(), "P" + name);
+                       }
+
+                       elemTypes.put(node, "P" + name);
+
+                       if(node.getElemName() != null)
+                       {
+                         altsElemNameTypes.put(currentAlt+"." + node.getElemName().getText(), "P" + name);
+                       }
+                       //altsElemTypes.put(currentAlt+"." + nameOfElem, "P" + name);
+                       String type_name = name;
+                       if(node.getUnOp() instanceof AStarUnOp || node.getUnOp() instanceof AQMarkUnOp)
+                       {
+                         type_name += "?";
+                       }
+                       altsElemTypes.put(currentAlt+"." + nameOfElem, "P" + type_name);
+                     }
+                   }
+                   else
+                   {
+                     Object token = tokens.get("T" + name);
+                     Object ignToken = ignTokens.get("T" + name);
+                     Object production = prods.get("P" + name);
+
+                     if((token == null) && (production == null))
+                     {
+                       error2(node.getId(), "P" + name + " and T" + name);
+                     }
+
+                     if(token != null)
+                     {
+                       if(production != null)
+                       {
+                         error4(node.getId(), "P" + name + " and T" + name);
+                       }
+
+                       if(ignToken != null)
+                       {
+                         error3(node.getId(), "T" + name);
+                       }
+
+                       elemTypes.put(node, "T" + name);
+
+                       if(node.getElemName() != null)
+                       {
+                         altsElemNameTypes.put(currentAlt+"." + node.getElemName().getText(), "T" + name);
+                       }
+                       String type_name = name;
+                       if(node.getUnOp() instanceof AStarUnOp || node.getUnOp() instanceof AQMarkUnOp)
+                       {
+                         type_name += "?";
+                       }
+                       altsElemTypes.put(currentAlt+"." + nameOfElem, "T" + type_name);
+                     }
+                     else
+                     {
+                       elemTypes.put(node, "P" + name);
+
+                       if(node.getElemName() != null)
+                       {
+                         altsElemNameTypes.put(currentAlt+"." + node.getElemName().getText(), "P" + name);
+                       }
+                       String type_name = name;
+                       if(node.getUnOp() instanceof AStarUnOp || node.getUnOp() instanceof AQMarkUnOp)
+                       {
+                         type_name += "?";
+                       }
+                       altsElemTypes.put(currentAlt+"." + nameOfElem, "P" + type_name);
+                     }
+                   }
+                 }
+               }
+              );
+  }
+
+  public static String name(String s)
+  {
+    StringBuffer result = new StringBuffer();
+    boolean upcase = true;
+    int length = s.length();
+    char c;
+
+    for(int i = 0; i < length; i++)
+    {
+      c = s.charAt(i);
+      switch(c)
+      {
+      case '_':
+        upcase = true;
+        break;
+      case '$':
+        result.append(c);
+        upcase = true;
+        break;
+      default:
+        if(upcase)
+        {
+          result.append(Character.toUpperCase(c));
+          upcase = false;
+        }
+        else
+        {
+          result.append(c);
+        }
+        break;
+      }
+    }
+
+    return result.toString();
+  }
+
+  public static String errorName(String s)
+  {
+    StringBuffer result = new StringBuffer();
+    int length = s.length();
+    char c;
+
+    for(int i = 0; i < length; i++)
+    {
+      c = s.charAt(i);
+      switch(c)
+      {
+      case '_':
+        {
+          result.append(' ');
+        }
+        break;
+      default:
+        {
+          result.append(c);
+        }
+        break;
+      }
+    }
+
+    return result.toString();
+  }
+
+  public void reinit()
+  {
+    names.clear();
+    elemTypes.clear();
+  }
+
+  private static void error(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "Redefinition of " + name + ".");
+  }
+
+  private void error(String name)
+  {
+    throw new RuntimeException(
+      "[" + lastLine + "," + lastPos + "] " +
+      "Redefinition of " + name + ".");
+  }
+
+  private static void error2(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      name + " undefined.");
+  }
+
+  private static void error3(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      name + " is ignored.");
+  }
+
+  private static void error4(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "ambiguous " + name + ".");
+  }
+
+  private static void error5(Token token)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "class is an invalid element name.");
+  }
+
+  public String toString()
+  {
+    StringBuffer s = new StringBuffer();
+    String nl = System.getProperty("line.separator");
+
+    s.append("Helpers:");
+    s.append(nl);
+    s.append(helpers);
+    s.append(nl);
+
+    s.append("States:");
+    s.append(nl);
+    s.append(states);
+    s.append(nl);
+
+    s.append("Tokens:");
+    s.append(nl);
+    s.append(tokens);
+    s.append(nl);
+
+    s.append("Ignored Tokens:");
+    s.append(nl);
+    s.append(ignTokens);
+    s.append(nl);
+
+    s.append("Productions:");
+    s.append(nl);
+    s.append(prods);
+    s.append(nl);
+
+    s.append("Alternatives:");
+    s.append(nl);
+    s.append(alts);
+    s.append(nl);
+
+    s.append("Elements:");
+    s.append(nl);
+    s.append(elems);
+    s.append(nl);
+
+    return s.toString();
+  }
+}
diff --git a/src/org/sablecc/sablecc/ResolveProdTransformIds.java b/src/org/sablecc/sablecc/ResolveProdTransformIds.java
new file mode 100644
index 0000000..ab242d1
--- /dev/null
+++ b/src/org/sablecc/sablecc/ResolveProdTransformIds.java
@@ -0,0 +1,357 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+import java.io.*;
+
+/*
+ * ResolveProdTransformIds
+ * 
+ * This class computes semantic verifications for production transformations
+ * in Production section. It makes sure that all transformations specified
+ * for a production(prod {-> prod_transform1 prod_transform2 prod_transform3...}) 
+ * are defined as production in the section Abstract Syntax Tree.
+ */
+
+public class ResolveProdTransformIds extends DepthFirstAdapter
+{
+  private ResolveAstIds transformIds;
+
+  private LinkedList listElems;
+
+  private String prod_name;
+
+  public LinkedList listProdTransformList = new LinkedList();
+  private LinkedList listProdTransformContainsList;
+
+  //Map of production transformation element type. The key of this map
+  //is the node of this element in the AST.
+  public final Map prodTransformElemTypes = new TypedHashMap(
+        NoCast.instance,
+        StringCast.instance);
+
+  //This map contains the same information as the other one just above.
+  //But the keys for this map are String ("ProdName.ElemTransformationName")
+  public final Map prodTransformElemTypesString = new TypedHashMap(
+        StringCast.instance,
+        StringCast.instance);
+
+  //Map of Productions which transformations contains list elements.
+  public Map mapProdTransformContainsList = new TypedTreeMap(
+        StringComparator.instance,
+        StringCast.instance,
+        ListCast.instance);
+
+  //Map of all Production transformations elements.
+  public final Map prod_transforms = new TypedTreeMap(
+                                       StringComparator.instance,
+                                       StringCast.instance,
+                                       NoCast.instance);
+
+  public ResolveProdTransformIds(ResolveAstIds ids)
+  {
+    transformIds = ids;
+  }
+
+  public void caseAProd(final AProd production)
+  {
+    prod_name = (String)transformIds.astIds.names.get(production);
+
+    AElem temp[] =
+      (AElem [])production.getProdTransform().toArray(new AElem[0]);
+
+    listProdTransformContainsList = new LinkedList();
+
+    listElems = new LinkedList();
+
+    if( temp.length > 1 )
+    {
+      listProdTransformList.add(prod_name);
+    }
+
+    for(int i=0; i<temp.length; i++)
+    {
+      ((PElem) temp[i]).apply(new DepthFirstAdapter()
+                              {
+                                public void caseAElem(AElem node)
+                                {
+                                  String rname = node.getId().getText();
+                                  String name = ResolveIds.name(rname);
+                                  String elemName = null;
+
+                                  if(node.getElemName() != null)
+                                  {
+                                    elemName = node.getElemName().getText();
+                                    if( listElems.contains(elemName) )
+                                    {
+                                      error(node.getElemName(), elemName);
+                                    }
+                                    listElems.add(elemName);
+                                  }
+                                  else
+                                  {
+                                    if(listElems.contains(rname))
+                                    {
+                                      error(node.getId(), rname);
+                                    }
+
+                                    listElems.add(rname);
+                                  }
+
+                                  if( (node.getUnOp() != null) &&
+                                      ( (node.getUnOp() instanceof AStarUnOp) ||
+                                        (node.getUnOp() instanceof APlusUnOp) ) )
+                                  {
+
+                                    listProdTransformList.add(prod_name);
+
+                                    if(node.getElemName() != null)
+                                    {
+                                      listProdTransformContainsList.add(elemName);
+                                    }
+                                    else
+                                    {
+                                      listProdTransformContainsList.add(node.getId().getText());
+                                    }
+                                  }
+
+                                  if(node.getSpecifier() != null)
+                                  {
+                                    if(node.getSpecifier() instanceof ATokenSpecifier)
+                                    {
+                                      if(transformIds.astIds.tokens.get("T" + name) == null)
+                                      {
+                                        error2(node.getId(), "T" + name);
+                                      }
+
+                                      if(transformIds.astIds.ignTokens.get("T" + name) != null)
+                                      {
+                                        error3(node.getId(), "T" + name);
+                                      }
+
+                                      /*****************************************************/
+                                      String type_name = name;
+                                      if( (node.getUnOp() instanceof AStarUnOp) ||
+                                          (node.getUnOp() instanceof AQMarkUnOp) )
+                                      {
+                                        type_name += "?";
+                                      }
+
+                                      if( (node.getUnOp() instanceof AStarUnOp) ||
+                                          (node.getUnOp() instanceof APlusUnOp) )
+                                      {
+                                        prodTransformElemTypes.put(node, "LT" + type_name);
+                                        if(elemName != null)
+                                        {
+                                          prodTransformElemTypesString.put(prod_name+"."+elemName, "LT" + type_name);
+                                        }
+                                        else
+                                        {
+                                          prodTransformElemTypesString.put(prod_name+"."+rname, "LT" + type_name);
+                                        }
+                                      }
+                                      else
+                                      {
+                                        prodTransformElemTypes.put(node, "T" + type_name);
+                                        if(elemName != null)
+                                        {
+                                          prodTransformElemTypesString.put(prod_name+"."+elemName, "T" + type_name);
+                                        }
+                                        else
+                                        {
+                                          prodTransformElemTypesString.put(prod_name+"."+rname, "T" + type_name);
+                                        }
+                                      }
+                                    }
+                                    else
+                                    {
+                                      if(transformIds.ast_prods.get("P" + name) == null)
+                                      {
+                                        error5(node.getId(), "P" + name);
+                                      }
+
+                                      /*****************************************************/
+                                      String type_name = name;
+                                      if( (node.getUnOp() instanceof AStarUnOp) ||
+                                          (node.getUnOp() instanceof AQMarkUnOp) )
+                                      {
+                                        type_name += "?";
+                                      }
+
+                                      if( (node.getUnOp() instanceof AStarUnOp) ||
+                                          (node.getUnOp() instanceof APlusUnOp) )
+                                      {
+                                        prodTransformElemTypes.put(node, "LP" + type_name);
+                                        if(elemName != null)
+                                        {
+                                          prodTransformElemTypesString.put(prod_name+"."+elemName, "LP" + type_name);
+                                        }
+                                        else
+                                        {
+                                          prodTransformElemTypesString.put(prod_name+"."+rname, "LP" + type_name);
+                                        }
+                                      }
+                                      else
+                                      {
+                                        prodTransformElemTypes.put(node, "P" + type_name);
+                                        if(elemName != null)
+                                        {
+                                          prodTransformElemTypesString.put(prod_name+"."+elemName, "P" + type_name);
+                                        }
+                                        else
+                                        {
+                                          prodTransformElemTypesString.put(prod_name+"."+rname, "P" + type_name);
+                                        }
+                                      }
+                                    }
+                                  }
+                                  else
+                                  {
+                                    Object token = transformIds.astIds.tokens.get("T" + name);
+                                    Object ignToken = transformIds.astIds.ignTokens.get("T" + name);
+                                    Object production = transformIds.astIds.prods.get("P" + name);
+                                    Object ast_production = transformIds.ast_prods.get("P" + name);
+
+                                    if((token == null) && (ast_production == null) && (production == null))
+                                    {
+                                      error2(node.getId(), "P" + name + " and T" + name );
+                                    }
+
+                                    //it seems to be a token
+                                    if(token != null)
+                                    {
+                                      boolean bast_production = false;
+                                      //if it's also a ast_production
+                                      if(ast_production != null)
+                                      {
+                                        error4(node.getId(), "P" + name + " and T" + name);
+                                      }
+
+                                      /*****************************************************/
+                                      String type_name = name;
+                                      if( (node.getUnOp() instanceof AStarUnOp) ||
+                                          (node.getUnOp() instanceof AQMarkUnOp) )
+                                      {
+                                        type_name += "?";
+                                      }
+
+                                      if( (node.getUnOp() instanceof AStarUnOp) ||
+                                          (node.getUnOp() instanceof APlusUnOp) )
+                                      {
+                                        prodTransformElemTypes.put(node, "LT" + type_name);
+                                        if(elemName != null)
+                                        {
+                                          prodTransformElemTypesString.put(prod_name+"."+elemName, "LT" + type_name);
+                                        }
+                                        else
+                                        {
+                                          prodTransformElemTypesString.put(prod_name+"."+rname, "LT" + type_name);
+                                        }
+                                      }
+                                      else
+                                      {
+                                        prodTransformElemTypes.put(node, "T" + type_name);
+                                        if(elemName != null)
+                                        {
+                                          prodTransformElemTypesString.put(prod_name+"."+elemName, "T" + type_name);
+                                        }
+                                        else
+                                        {
+                                          prodTransformElemTypesString.put(prod_name+"."+rname, "T" + type_name);
+                                        }
+                                      }
+                                    }
+                                    // The element is supposed to be a Production in section AST
+                                    else
+                                    {
+                                      if(ast_production == null)
+                                      {
+                                        error5(node.getId(), node.getId().getText());
+                                      }
+
+                                      /*****************************************************/
+                                      String type_name = name;
+                                      if( (node.getUnOp() instanceof AStarUnOp) ||
+                                          (node.getUnOp() instanceof AQMarkUnOp) )
+                                      {
+                                        type_name += "?";
+                                      }
+
+                                      if( (node.getUnOp() instanceof AStarUnOp) ||
+                                          (node.getUnOp() instanceof APlusUnOp) )
+                                      {
+                                        prodTransformElemTypes.put(node, "LP" + type_name);
+                                        if(elemName != null)
+                                        {
+                                          prodTransformElemTypesString.put(prod_name+"."+elemName, "LP" + type_name);
+                                        }
+                                        else
+                                        {
+                                          prodTransformElemTypesString.put(prod_name+"."+rname, "LP" + type_name);
+                                        }
+                                      }
+                                      else
+                                      {
+                                        prodTransformElemTypes.put(node, "P" + type_name);
+                                        if(elemName != null)
+                                        {
+                                          prodTransformElemTypesString.put(prod_name+"."+elemName, "P" + type_name);
+                                        }
+                                        else
+                                        {
+                                          prodTransformElemTypesString.put(prod_name+"."+rname, "P" + type_name);
+                                        }
+                                      }
+                                    }
+                                  }
+                                }
+                              }
+                             );
+    }
+    prod_transforms.put(prod_name, listElems);
+    mapProdTransformContainsList.put(prod_name, listProdTransformContainsList);
+  }
+
+  private static void error(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "Redefinition of " + name + ".");
+  }
+
+  private static void error2(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      name + " undefined.");
+  }
+
+  private static void error3(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      name + " is ignored.");
+  }
+
+  private static void error4(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "ambiguous " + name + ".");
+  }
+
+  private static void error5(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      name+ " must be a production defined in section AST.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/ResolveTransformIds.java b/src/org/sablecc/sablecc/ResolveTransformIds.java
new file mode 100644
index 0000000..d7089fc
--- /dev/null
+++ b/src/org/sablecc/sablecc/ResolveTransformIds.java
@@ -0,0 +1,1094 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Last Modification date 17-11-2003
+ * Addition of type checking for operators
+ */
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+import java.io.*;
+
+/*
+ * ResolveTransformIds
+ * 
+ * This class computes semantic verifications for alternative transformations
+ * in Production section. It makes sure that all transformations specified
+ * for an alternative match with their corresponding prod_transform but also
+ * the alternative transformation is itself correct.
+ */
+
+public class ResolveTransformIds extends DepthFirstAdapter
+{
+
+  private ResolveAstIds transformIds;
+  private ResolveAltIds altIds;
+  private ResolveProdTransformIds prodTransformIds;
+
+  private int nbTransformAlt = 0;
+  private int nbTransformProd = 0;
+  private String currentAstAlt;
+  private String currentAstProd;
+  private String currentProd;
+  private String currentAlt;
+  private String currentAstProdName;
+
+  //This Map contains the type of any term of alternative transformation(altTransform)
+  public final Map altTransformElemTypes = new TypedHashMap(
+        NodeCast.instance,
+        StringCast.instance);
+
+  public final Map mapSimpleTermProdTransformation = new TypedHashMap(
+        StringCast.instance,
+        ListCast.instance);
+
+  public final Map simpleTermOrsimpleListTermTypes = new TypedHashMap(
+        NodeCast.instance,
+        StringCast.instance);
+
+  public ResolveTransformIds(ResolveAstIds ast_ids, ResolveAltIds alt_ids, ResolveProdTransformIds p_ids)
+  {
+    transformIds = ast_ids;
+    altIds = alt_ids;
+    prodTransformIds = p_ids;
+  }
+
+  public ResolveProdTransformIds getProdTransformIds()
+  {
+    return prodTransformIds;
+  }
+
+  public void inAProd(final AProd production)
+  {
+    nbTransformProd = 0;
+    currentProd = (String)altIds.ids.names.get(production);
+
+    if(production.getArrow() != null)
+    {
+      nbTransformProd = production.getProdTransform().size();
+    }
+  }
+
+  private LinkedList listCurrentAltGlobal;
+  private LinkedList listCurrentAlt;
+  private LinkedList listOfListCurrentAlt;
+
+  public void inAAlt(AAlt nodeAlt)
+  {
+    nbTransformAlt = 0;
+
+    currentAlt = (String)altIds.ids.names.get(nodeAlt);
+    listCurrentAltGlobal = (LinkedList)((LinkedList)altIds.alts_elemsGlobal.get(currentAlt)).clone();
+    listCurrentAlt = (LinkedList)((LinkedList)altIds.alts_elems.get(currentAlt)).clone();
+    listOfListCurrentAlt = (LinkedList)((LinkedList)altIds.alts_elems_list.get(currentAlt)).clone();
+  }
+
+  public void inAAltTransform(AAltTransform node)
+  {
+    if(node.getTerms().size() == 0)
+    {
+      altTransformElemTypes.put(node, "nothing");
+    }
+    else
+    {
+      nbTransformAlt = node.getTerms().size();
+    }
+  }
+
+  public void outAAltTransform(AAltTransform node)
+  {
+    if(nbTransformAlt != nbTransformProd)
+    {
+      error2( node.getRBrace() );
+    }
+  }
+
+  public void outAAlt(AAlt node)
+  {
+    lastSimpleTerm = null;
+
+    listCurrentAltGlobal = null;
+    listCurrentAlt = null;
+    listOfListCurrentAlt = null;
+    mapSimpleTermProdTransformation.clear();
+  }
+
+  public void outANewTerm(ANewTerm node)
+  {
+    LinkedList list = (LinkedList)prodTransformIds.prod_transforms.get(currentProd);
+    AProdName prodNameNode = (AProdName)node.getProdName();
+
+    currentAstProd = "P" + ResolveIds.name(prodNameNode.getId().getText());
+    currentAstProdName = prodNameNode.getId().getText();
+
+    if(prodNameNode.getProdNameTail() != null)
+    {
+      TId prodNameTailNode = prodNameNode.getProdNameTail();
+      currentAstAlt = "A" + ResolveIds.name(prodNameTailNode.getText()) + ResolveIds.name(prodNameNode.getId().getText());
+    }
+    else
+    {
+      currentAstAlt = "A" + ResolveIds.name(prodNameNode.getId().getText());
+    }
+
+    String currentAstProdName_no_specifier;
+    if(currentAstProdName.startsWith("P."))
+    {
+      currentAstProdName_no_specifier = currentAstProdName.substring(2);
+    }
+    else
+    {
+      currentAstProdName_no_specifier = currentAstProdName;
+    }
+
+    if(transformIds.ast_prods.get(currentAstProd) == null)
+    {
+      error7(((AProdName)node.getProdName()).getId(), ((AProdName)node.getProdName()).getId().getText());
+    }
+
+    if(transformIds.ast_alts.get(currentAstAlt) == null)
+    {
+      error6( ((AProdName)node.getProdName()).getId(), currentAstAlt);
+    }
+
+    int sizeNewTerm = 0;
+    if(node.getParams().size() > 0)
+    {
+      sizeNewTerm = node.getParams().size();
+    }
+
+    int sizeAstAlt = 0;
+    if( ((AAstAlt)transformIds.ast_alts.get(currentAstAlt) ).getElems() != null)
+    {
+      sizeAstAlt = ( (LinkedList)((AAstAlt)transformIds.ast_alts.get(currentAstAlt) ).getElems()).size();
+    }
+
+    if(sizeNewTerm != sizeAstAlt)
+    {
+      error8( ((AProdName)node.getProdName()).getId(), currentAstAlt);
+    }
+
+    AProdName aProdName = (AProdName)node.getProdName();
+
+    String type = "P" + ResolveIds.name(aProdName.getId().getText());
+
+    altTransformElemTypes.put(node, type);
+
+    AAstAlt astAlt = (AAstAlt)transformIds.ast_alts.get(currentAstAlt);
+
+    if(node.getParams().size() > 0 && astAlt.getElems().size() > 0)
+    {
+      Object elemsTable[] = astAlt.getElems().toArray();
+      Object paramsTable[] = node.getParams().toArray();
+
+      String termType, elemType;
+
+      //here, we're checking the type compabitlity between for a new node creation
+      for(int j=0; j<elemsTable.length; j++)
+      {
+        termType = (String)altTransformElemTypes.get(paramsTable[j]);
+        elemType = (String)transformIds.ast_elemTypes.get(elemsTable[j]);
+
+        PUnOp eventual_ast_alt_elemOperator = ((AElem)elemsTable[j]).getUnOp();
+
+        checkTypeCompability(elemType, termType, eventual_ast_alt_elemOperator, node.getLPar());
+        /*
+        if( !checkTypeCompabilityWithStar(elemType, termType, eventual_ast_alt_elemOperator) )
+               {
+        error10(node.getLPar(), elemType, termType);
+        }
+        */
+      }
+    }
+
+  }
+
+  public void outANewListTerm(ANewListTerm node)
+  {
+    LinkedList list = (LinkedList)prodTransformIds.prod_transforms.get(currentProd);
+    AProdName prodNameNode = (AProdName)node.getProdName();
+
+    currentAstProdName = prodNameNode.getId().getText();
+    currentAstProd = "P" + ResolveIds.name(currentAstProdName);
+
+    if(prodNameNode.getProdNameTail() != null)
+    {
+      TId prodNameTailNode = prodNameNode.getProdNameTail();
+      currentAstAlt = "A" + ResolveIds.name(prodNameTailNode.getText()) + ResolveIds.name(prodNameNode.getId().getText());
+    }
+    else
+    {
+      currentAstAlt = "A" + ResolveIds.name(prodNameNode.getId().getText());
+    }
+
+    String currentAstProdName_no_specifier;
+    if(currentAstProdName.startsWith("P."))
+    {
+      currentAstProdName_no_specifier = currentAstProdName.substring(2);
+    }
+    else
+    {
+      currentAstProdName_no_specifier = currentAstProdName;
+    }
+
+    if(transformIds.ast_prods.get(currentAstProd) == null)
+    {
+      error7(((AProdName)node.getProdName()).getId(), ((AProdName)node.getProdName()).getId().getText());
+    }
+
+    if(transformIds.ast_alts.get(currentAstAlt) == null)
+    {
+      error6( ((AProdName)node.getProdName()).getId(), currentAstAlt);
+    }
+
+    int sizeNewTerm = 0;
+    if(node.getParams().size() > 0)
+    {
+      sizeNewTerm = node.getParams().size();
+    }
+
+    int sizeAstAlt = 0;
+    if( ((AAstAlt)transformIds.ast_alts.get(currentAstAlt) ).getElems() != null)
+    {
+      sizeAstAlt = ( (LinkedList)((AAstAlt)transformIds.ast_alts.get(currentAstAlt) ).getElems()).size();
+    }
+
+    if(sizeNewTerm != sizeAstAlt)
+    {
+      error8( ((AProdName)node.getProdName()).getId(), currentAstAlt);
+    }
+
+    AProdName aProdName = (AProdName)node.getProdName();
+
+    String type = "P" + ResolveIds.name(aProdName.getId().getText());
+
+    altTransformElemTypes.put(node, type);
+
+    AAstAlt astAlt = (AAstAlt)transformIds.ast_alts.get(currentAstAlt);
+
+    if(node.getParams().size() > 0 && astAlt.getElems().size() > 0)
+    {
+      Object elemsTable[] = astAlt.getElems().toArray();
+      Object paramsTable[] = node.getParams().toArray();
+
+      String termType, elemType;
+
+      //here, we're checking the type compabitlity between for a new node creation
+      for(int j=0; j<elemsTable.length; j++)
+      {
+        termType = (String)altTransformElemTypes.get(paramsTable[j]);
+        elemType = (String)transformIds.ast_elemTypes.get(elemsTable[j]);
+
+        PUnOp elemOp = ((AElem)elemsTable[j]).getUnOp();
+
+        checkTypeCompability(elemType, termType, elemOp, node.getLPar());
+        /*
+        if( !checkTypeCompability(elemType, termType, elemOp) )
+               {
+                 error10(node.getLPar(), elemType, termType);
+        }
+        */
+
+      }
+    }
+  }
+
+  public void outAListTerm(AListTerm node)
+  {
+    if( (node.getListTerms() != null) && (node.getListTerms().size() != 0) )
+    {
+      Object temp[] = node.getListTerms().toArray();
+      String firstTermType = (String)altTransformElemTypes.get(temp[0]);
+      if(firstTermType.endsWith("?"))
+      {
+        firstTermType = firstTermType.substring(0, firstTermType.length()-1);
+      }
+
+      for(int i=1; i<temp.length; i++)
+      {
+        String termType = (String)altTransformElemTypes.get(temp[i]);
+        if(termType.endsWith("?"))
+        {
+          termType = termType.substring(0, termType.length()-1);
+        }
+
+        if(!termType.equals(firstTermType))
+        {
+          error9(node.getLBkt());
+        }
+      }
+
+      if(!firstTermType.startsWith("L"))
+      {
+        altTransformElemTypes.put(node, "L" + firstTermType);
+      }
+      else
+      {
+        altTransformElemTypes.put(node, firstTermType);
+      }
+    }
+    else
+    {
+      altTransformElemTypes.put(node, "LNull");
+    }
+  }
+
+  private LinkedList listL;
+  private LinkedList listP;
+  private String lastSimpleTerm;
+
+  public void inASimpleTerm(ASimpleTerm node)
+  {
+    String name = node.getId().getText();
+    String typeOfExplicitElemName = (String)transformIds.astIds.altsElemNameTypes.get( currentAlt+"."+node.getId().getText() );
+    String alternativeElemType = (String)transformIds.astIds.altsElemTypes.get( currentAlt+"."+node.getId().getText() );
+
+    boolean okTermtail = false;
+    String tmpName = name;
+
+    if( (listCurrentAltGlobal == null) || !listCurrentAltGlobal.contains(name) )
+    {
+      error3(node.getId(), name);
+    }
+    else
+    {
+      ListIterator iter = null;
+      iter = listCurrentAltGlobal.listIterator();
+
+      while(iter.hasNext())
+      {
+        if( name.equals((String)iter.next()) )
+        {
+          if( node.getSimpleTermTail() == null )
+          {
+            iter.remove();
+          }
+          break;
+        }
+      }
+    }
+
+    if( (listCurrentAlt == null) || !listCurrentAlt.contains(name) )
+    {
+      error3(node.getId(), name);
+    }
+    else
+    {
+      ListIterator iter = null;
+      iter = listCurrentAlt.listIterator();
+
+      while(iter.hasNext())
+      {
+        if( name.equals((String)iter.next()) )
+        {
+          if( node.getSimpleTermTail() == null )
+          {
+            iter.remove();
+          }
+          break;
+        }
+      }
+    }
+
+    int position = 0;
+
+    String type;
+
+    if(alternativeElemType.startsWith("T"))
+    {
+      if(node.getSimpleTermTail() != null)
+      {
+        error4(node.getId());
+      }
+
+      altTransformElemTypes.put(node, alternativeElemType);
+      position = 0;
+    }
+    //The element is a production
+    else
+    {
+      listL = null;
+
+      name = "P" + ResolveIds.name(node.getId().getText());
+
+      if(!name.equals(lastSimpleTerm) )
+      {
+        if(typeOfExplicitElemName != null)
+        {
+          if( mapSimpleTermProdTransformation.get(currentAlt+"."+tmpName) == null)
+          {
+            if(prodTransformIds.prod_transforms.get(typeOfExplicitElemName) != null)
+            {
+              listL = (LinkedList)((LinkedList)prodTransformIds.prod_transforms.get(typeOfExplicitElemName)).clone();
+              mapSimpleTermProdTransformation.put(currentAlt+"."+tmpName, listL);
+            }
+          }
+          else
+          {
+            listL = (LinkedList)mapSimpleTermProdTransformation.get(currentAlt+"."+tmpName);
+          }
+        }
+        if( mapSimpleTermProdTransformation.get(currentAlt+".P"+tmpName) == null )
+        {
+          listP = (LinkedList)prodTransformIds.prod_transforms.get(name);
+          if(prodTransformIds.prod_transforms.get(name) != null)
+          {
+            listP = (LinkedList)((LinkedList)prodTransformIds.prod_transforms.get(name)).clone();
+            mapSimpleTermProdTransformation.put(currentAlt+".P"+tmpName, listP);
+          }
+        }
+        else
+        {
+          listP = (LinkedList)mapSimpleTermProdTransformation.get(currentAlt+".P"+tmpName);
+        }
+
+        listCurrentAlt.remove(lastSimpleTerm);
+      }
+
+      boolean blistL = false;
+
+      if( ( (typeOfExplicitElemName != null) && (listL!= null) && (listL.size()==1) && ResolveIds.name((String)listL.getFirst()).equals(typeOfExplicitElemName.substring(1)) ) ||
+          ( (typeOfExplicitElemName == null) && (listP!= null) && (listP.size()==1) && listP.contains(node.getId().getText()) ) )
+      {
+        blistL = true;
+      }
+
+      //the production is transformed but it appears without a term tail.
+      if( (node.getSimpleTermTail() == null) &&
+          ( (listL != null) || (listP != null) ) && !blistL )
+      {
+        if(typeOfExplicitElemName != null)
+        {
+          error1(node.getId(), typeOfExplicitElemName);
+        }
+        else
+        {
+          error1(node.getId(), node.getId().getText());
+        }
+      }
+
+      //simpletermtail doesn't appear in the production transformation
+      if( node.getSimpleTermTail() != null )
+      {
+        okTermtail = true;
+        String strTermTail = node.getSimpleTermTail().getText();
+
+        if( ( (listL == null) || !listL.contains(strTermTail) ) &&
+            ( (listP == null) || !listP.contains(strTermTail) ) )
+        {
+          error5(node.getId(), node.getId().getText(), strTermTail);
+        }
+        else
+        {
+          ListIterator iter = null;
+
+          if(listL != null)
+          {
+            iter = listL.listIterator();
+
+            position = listL.indexOf(strTermTail);
+
+            while(iter.hasNext())
+            {
+              if( strTermTail.equals((String)iter.next()) )
+              {
+                iter.remove();
+                break;
+              }
+            }
+          }
+
+          if(listP != null)
+          {
+            iter = listP.listIterator();
+
+            position = listP.indexOf(strTermTail);
+
+            while(iter.hasNext())
+            {
+              if( strTermTail.equals((String)iter.next()) )
+              {
+                iter.remove();
+                break;
+              }
+            }
+          }
+
+        }
+      }
+
+      if(node.getSimpleTermTail() != null)
+      {
+        String termtail = node.getSimpleTermTail().getText();
+        LinkedList listProdContains = null;
+        if(typeOfExplicitElemName != null)
+        {
+          listProdContains = (LinkedList)prodTransformIds.mapProdTransformContainsList.get(typeOfExplicitElemName);
+        }
+        else
+        {
+          listProdContains = (LinkedList)prodTransformIds.mapProdTransformContainsList.get("P" + ResolveIds.name(node.getId().getText()));
+        }
+      }
+      //The Type of the element without his eventual termtail (term.termtail :: (type of term))
+      if(typeOfExplicitElemName != null)
+      {
+        simpleTermOrsimpleListTermTypes.put(node, typeOfExplicitElemName);
+      }
+      else
+      {
+        simpleTermOrsimpleListTermTypes.put(node, "P" + ResolveIds.name(node.getId().getText()));
+      }
+
+      if(node.getSimpleTermTail() == null)
+      {
+        altTransformElemTypes.put(node, alternativeElemType);
+        position = 0;
+      }
+      else
+      {
+        String termTail = node.getSimpleTermTail().getText();
+        //This boolean is used to ensures that optional operator is properly propagate.
+        boolean qmark_op = false;
+        if(alternativeElemType.endsWith("?"))
+        {
+          alternativeElemType = alternativeElemType.substring(0, alternativeElemType.length()-1);
+          qmark_op = true;
+        }
+        String typeOfTerm = (String)prodTransformIds.prodTransformElemTypesString.get(alternativeElemType+"."+termTail);
+
+        // The substring is done because we want to ensures that lists term should be wrapped by square brackets
+        if(typeOfTerm.startsWith("L"))
+        {
+          typeOfTerm = typeOfTerm.substring(1);
+        }
+        if(qmark_op && !typeOfTerm.endsWith("?"))
+        {
+          typeOfTerm += "?";
+        }
+        altTransformElemTypes.put(node, typeOfTerm);
+      }
+    }
+  }
+
+  public void caseANullTerm(ANullTerm node)
+  {
+    altTransformElemTypes.put(node, "Null");
+  }
+
+  public void inASimpleListTerm(ASimpleListTerm node)
+  {
+    String name = node.getId().getText();
+    String  typeOfExplicitElemName = (String)transformIds.astIds.altsElemNameTypes.get( currentAlt+"."+node.getId().getText() );
+    String alternativeElemType = (String)transformIds.astIds.altsElemTypes.get( currentAlt+"."+node.getId().getText() );
+    String strTermTail;
+    String tmpName = name;
+
+    if( (listCurrentAltGlobal == null) || !listCurrentAltGlobal.contains(name) )
+    {
+      error3(node.getId(), name);
+    }
+    else
+    {
+      ListIterator iter = null;
+      iter = listCurrentAltGlobal.listIterator();
+
+      while(iter.hasNext())
+      {
+        if( name.equals((String)iter.next()) )
+        {
+          if( node.getSimpleTermTail() == null )
+          {
+            iter.remove();
+          }
+          break;
+        }
+      }
+    }
+
+    if( ((listCurrentAlt == null) || !listCurrentAlt.contains(name)) && ((listOfListCurrentAlt == null) || !listOfListCurrentAlt.contains(name)) )
+    {
+      error3(node.getId(), name);
+    }
+    else
+    {
+      ListIterator iter = null;
+      if( (listCurrentAlt != null) && listCurrentAlt.contains(name) )
+      {
+        iter = listCurrentAlt.listIterator();
+      }
+      else if( (listOfListCurrentAlt != null) && listOfListCurrentAlt.contains(name) )
+      {
+        iter = listOfListCurrentAlt.listIterator();
+      }
+
+      while(iter.hasNext())
+      {
+        if( name.equals((String)iter.next()) )
+        {
+          if( node.getSimpleTermTail() == null )
+          {
+            iter.remove();
+          }
+          break;
+        }
+      }
+    }
+
+    int position = 0;
+
+    String type;
+    if(alternativeElemType.startsWith("T"))
+    {
+      //A token can't have term tail
+      if(node.getSimpleTermTail() != null)
+      {
+        error4(node.getId());
+      }
+
+      altTransformElemTypes.put(node, alternativeElemType);
+      position = 0;
+    }
+    //it seems to be a production without a specifier
+    else
+    {
+      name = "P" + ResolveIds.name(node.getId().getText());
+
+      if(!name.equals(lastSimpleTerm) )
+      {
+        if(typeOfExplicitElemName != null)
+        {
+          if( mapSimpleTermProdTransformation.get(currentAlt+"."+tmpName) == null)
+          {
+            if(prodTransformIds.prod_transforms.get(typeOfExplicitElemName) != null)
+            {
+              listL = (LinkedList)((LinkedList)prodTransformIds.prod_transforms.get(typeOfExplicitElemName)).clone();
+              mapSimpleTermProdTransformation.put(currentAlt+"."+tmpName, listL);
+            }
+          }
+          else
+          {
+            listL = (LinkedList)mapSimpleTermProdTransformation.get(currentAlt+"."+tmpName);
+          }
+        }
+        if( mapSimpleTermProdTransformation.get(currentAlt+".P"+tmpName) == null )
+        {
+          listP = (LinkedList)prodTransformIds.prod_transforms.get(name);
+          if(prodTransformIds.prod_transforms.get(name) != null)
+          {
+            listP = (LinkedList)((LinkedList)prodTransformIds.prod_transforms.get(name)).clone();
+            mapSimpleTermProdTransformation.put(currentAlt+".P"+tmpName, listP);
+          }
+        }
+        else
+        {
+          listP = (LinkedList)mapSimpleTermProdTransformation.get(currentAlt+".P"+tmpName);
+        }
+
+        listCurrentAlt.remove(lastSimpleTerm);
+      }
+
+      boolean blistL = false;
+
+      if( ( (typeOfExplicitElemName != null) && (listL!= null) && (listL.size()==1) && ResolveIds.name((String)listL.getFirst()).equals(typeOfExplicitElemName.substring(1)) ) ||
+          ( (typeOfExplicitElemName == null) && (listP!= null) && (listP.size()==1) && listP.contains(node.getId().getText()) ) )
+      {
+        blistL = true;
+      }
+
+      //the production is transformed but it appears without a term tail.
+      if( (node.getSimpleTermTail() == null) &&
+          ( (listL != null) || (listP != null) ) && !blistL )
+      {
+        if(typeOfExplicitElemName != null)
+        {
+          error1(node.getId(), typeOfExplicitElemName);
+        }
+        else
+        {
+          error1(node.getId(), node.getId().getText());
+        }
+      }
+
+      //the production is not transformed but it appears with a term tail.
+      if(node.getSimpleTermTail() != null)
+      {
+        strTermTail = node.getSimpleTermTail().getText();
+
+        if( ( (listL == null) || !listL.contains(strTermTail) ) &&
+            ( (listP == null) || !listP.contains(strTermTail) ) )
+        {
+          error5(node.getId(), node.getId().getText(), node.getSimpleTermTail().getText() );
+        }
+        else
+        {
+          ListIterator iter = null;
+
+          if(listL != null)
+          {
+            iter = listL.listIterator();
+
+            position = listL.indexOf(strTermTail);
+
+            while(iter.hasNext())
+            {
+              if( strTermTail.equals((String)iter.next()) )
+              {
+                iter.remove();
+                break;
+              }
+            }
+          }
+
+          if(listP != null)
+          {
+            iter = listP.listIterator();
+
+            position = listP.indexOf(strTermTail);
+
+            while(iter.hasNext())
+            {
+              if( strTermTail.equals((String)iter.next()) )
+              {
+                iter.remove();
+                break;
+              }
+            }
+          }
+        }
+      }
+
+      if(node.getSimpleTermTail() != null)
+      {
+        String termtail = node.getSimpleTermTail().getText();
+        LinkedList listProdContains = null;
+        LinkedList prodContains = null;
+        if(typeOfExplicitElemName != null)
+        {
+          listProdContains = (LinkedList)prodTransformIds.mapProdTransformContainsList.get(typeOfExplicitElemName);
+          prodContains = (LinkedList)prodTransformIds.prod_transforms.get(typeOfExplicitElemName);
+        }
+        else
+        {
+          listProdContains = (LinkedList)prodTransformIds.mapProdTransformContainsList.get("P" + ResolveIds.name(node.getId().getText()));
+          prodContains = (LinkedList)prodTransformIds.prod_transforms.get("P" + ResolveIds.name(node.getId().getText()));
+        }
+
+        LinkedList lst = (LinkedList)altIds.alts_elems_list.get(currentAlt);
+      }
+
+      //The Type of the element without his eventual termtail (term.termtail :: (type of term))
+
+      if(typeOfExplicitElemName != null)
+      {
+        simpleTermOrsimpleListTermTypes.put(node, typeOfExplicitElemName);
+      }
+      else
+      {
+        simpleTermOrsimpleListTermTypes.put(node, "P" + ResolveIds.name(node.getId().getText()));
+      }
+
+      if(node.getSimpleTermTail() == null)
+      {
+        altTransformElemTypes.put(node, alternativeElemType);
+        position = 0;
+      }
+      else
+      {
+        String termTail = node.getSimpleTermTail().getText();
+        //This boolean is used to ensures that optional operator is properly propagate.
+        boolean qmark_op = false;
+        if(alternativeElemType.endsWith("?"))
+        {
+          alternativeElemType = alternativeElemType.substring(0, alternativeElemType.length()-1);
+          qmark_op = true;
+        }
+        String typeOfTerm = (String)prodTransformIds.prodTransformElemTypesString.get(alternativeElemType+"."+termTail);
+
+        // The substring is done because we want to ensures that lists term should be wrapped by square brackets
+        if(typeOfTerm.startsWith("L"))
+        {
+          typeOfTerm = typeOfTerm.substring(1);
+        }
+        if(qmark_op && !typeOfTerm.endsWith("?"))
+        {
+          typeOfTerm += "?";
+        }
+        altTransformElemTypes.put(node, typeOfTerm);
+      }
+    }
+  }
+
+  private Object curr_prodTransformElems[];
+  private boolean curr_prod_has_prodTransform;
+  private boolean firstProduction = false;
+
+  public void outAProductions(AProductions node)
+  {
+    LinkedList list = node.getProds();
+    AProd prod = (AProd)list.getFirst();
+    firstProduction = true;
+
+    if( prodTransformIds.listProdTransformList.contains("P"+ ResolveIds.name( prod.getId().getText()) ) )
+    {
+      error_0(prod.getId());
+    }
+
+    Object temp[] = node.getProds().toArray();
+    for(int i = 0; i < temp.length; i++)
+    {
+
+      ((PProd) temp[i]).apply(new DepthFirstAdapter()
+                              {
+                                public void inAProd(AProd production)
+                                {
+                                  LinkedList prodTransform = production.getProdTransform();
+                                  String prodTransformElemType = "";
+                                  curr_prodTransformElems = null;
+                                  curr_prod_has_prodTransform = false;
+
+                                  if(production.getArrow() != null && prodTransform.size() >= 1)
+                                  {
+                                    curr_prod_has_prodTransform = true;
+                                    curr_prodTransformElems = prodTransform.toArray();
+                                    prodTransformElemType = (String)prodTransformIds.prodTransformElemTypes.get(curr_prodTransformElems[0]);
+                                  }
+                                  else if(production.getArrow() == null)
+                                  {
+                                    curr_prod_has_prodTransform = false;
+                                    String []tab = new String[1];
+                                    tab[0] = "P" + ResolveIds.name(production.getId().getText());
+                                    curr_prodTransformElems = (Object[])tab;
+                                    prodTransformElemType = (String)curr_prodTransformElems[0];
+                                  }
+                                  else
+                                  {
+                                    curr_prod_has_prodTransform = false;
+                                    String []tab = new String[1];
+                                    tab[0] = "nothing";
+                                    curr_prodTransformElems = (Object[])tab;
+                                    prodTransformIds.prodTransformElemTypes.put(prodTransform, "nothing");
+                                    prodTransformElemType = (String)curr_prodTransformElems[0];
+                                  }
+
+                                  if(firstProduction)
+                                  {
+                                    if( !prodTransformElemType.equals(transformIds.getFirstAstProduction()) )
+                                    {
+                                      error11();
+                                    }
+                                    firstProduction = false;
+                                  }
+                                }
+
+                                public void inAAltTransform(AAltTransform node)
+                                {
+                                  Object curr_altTransformTerms[] = node.getTerms().toArray();
+
+                                  for(int k = 0; k < curr_altTransformTerms.length; k++)
+                                  {
+                                    String prodTransformElemType, altTransformTermType;
+
+                                    if(curr_prod_has_prodTransform)
+                                    {
+                                      prodTransformElemType = (String)prodTransformIds.prodTransformElemTypes.get(curr_prodTransformElems[k]);
+                                    }
+                                    else
+                                    {
+                                      prodTransformElemType = (String)curr_prodTransformElems[k];
+                                    }
+                                    altTransformTermType = (String)altTransformElemTypes.get(curr_altTransformTerms[k]);
+
+                                    PUnOp elemOp = ((AElem)curr_prodTransformElems[k]).getUnOp();
+
+                                    checkTypeCompability(prodTransformElemType, altTransformTermType, elemOp, node.getLBrace());
+                                    /*
+                                    if( !checkTypeCompability(prodTransformElemType, altTransformTermType, elemOp) )
+                                    {
+                                      error10(node.getLBrace(), prodTransformElemType, altTransformTermType);
+                                    }
+                                    */
+
+                                  }
+
+                                  if(curr_altTransformTerms.length == 0)
+                                  {
+                                    String prodTransformElemType = (String)curr_prodTransformElems[0];
+                                    String altTransformTermType = (String)altTransformElemTypes.get(node);
+                                    if(!prodTransformElemType.equals(altTransformTermType))
+                                    {
+                                      error10(node.getLBrace(), prodTransformElemType, altTransformTermType);
+                                    }
+                                  }
+                                }
+
+                              }
+                             );
+    }
+  }
+
+  private void checkTypeCompability(String elemType, String termType, PUnOp elemOp, Token token)
+  {
+    if( elemOp != null )
+    {
+      if( elemOp instanceof AStarUnOp)
+      {
+        if(!elemType.startsWith("L") )
+        {
+          elemType = "L" + elemType;
+        }
+        if(!elemType.endsWith("?"))
+        {
+          elemType = elemType + "?";
+        }
+      }
+      else if( elemOp instanceof APlusUnOp)
+      {
+        if(!elemType.startsWith("L"))
+        {
+          elemType = "L" + elemType;
+        }
+      }
+      else
+      {
+        if(!elemType.endsWith("?"))
+        {
+          elemType = elemType + "?";
+        }
+      }
+    }
+    boolean result;
+    if(!elemType.endsWith("?"))
+    {
+      result = termType.equals(elemType);
+    }
+    //elemType ends with a ?
+    else
+    {
+      //the elem type is a list. (elem type is the excpecting type)
+      if(elemType.startsWith("L"))
+      {
+        result = termType.equals(elemType) ||
+                 termType.equals(elemType.substring(0, elemType.length()-1)) ||
+                 termType.equals("LNull") ;
+      }
+      else
+      {
+        result = termType.equals(elemType) ||
+                 termType.equals(elemType.substring(0, elemType.length()-1)) ||
+                 termType.equals("Null") ;
+      }
+    }
+    if(!result)
+    {
+      error10(token, elemType, termType);
+    }
+  }
+
+  private static void error1(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "production " + name + " was transformed, and may not appear here undecorated.");
+  }
+
+  private  void error2(Token token)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "this alternative transformation is incorrect because the number of "+
+      " production transformations and alternatives don't match" );
+  }
+
+  private static void error3(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      name + " must be one of the elements on the left side of the arrow "+
+      " or is already refered to in this alternative" );
+  }
+
+  private static void error4(Token token)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "tokens are never transformed. This syntax is incorrect");
+  }
+
+  private static void error5(Token token, String prod_name, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "production " + prod_name + " was never transformed to "+name+
+      " or #"+name+"# cannot be refered by #" + prod_name + "# twice in the same alternative");
+  }
+
+  private static void error6(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "alternative "+ name +" doesn't exist in section AST");
+  }
+
+  private static void error7(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "Production "+ name + " doesn't exist in section AST");
+  }
+
+  private static void error8(Token token, String name)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "The number of parameters request for this alternative in "+
+      "section AST doesn't match");
+  }
+
+  private static void error9(Token token)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "All the elements within a list must have the same type");
+  }
+
+  private static void error10(Token token, String prodName, String altName)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "expecting #" + prodName + "# when #" + altName + "# was found");
+  }
+
+  private static void error11()
+  {
+    throw new RuntimeException(
+      "The first production transformation must refered to the first production in section AST"
+    );
+  }
+
+  private static void error_0(Token token)
+  {
+    throw new RuntimeException(
+      "[" + token.getLine() + "," + token.getPos() + "] " +
+      "The first production's transformation must be only one elements without an operator.");
+  }
+
+  public String toString()
+  {
+    StringBuffer s = new StringBuffer();
+    String nl = System.getProperty("line.separator");
+
+    s.append("ast_elems");
+    s.append(nl);
+    s.append(nl);
+
+    return s.toString();
+  }
+}
diff --git a/src/org/sablecc/sablecc/SableCC.java b/src/org/sablecc/sablecc/SableCC.java
new file mode 100644
index 0000000..ba82c54
--- /dev/null
+++ b/src/org/sablecc/sablecc/SableCC.java
@@ -0,0 +1,288 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.io.*;
+import java.awt.*;
+import java.util.*;
+import org.sablecc.sablecc.node.*;
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.lexer.*;
+import org.sablecc.sablecc.parser.*;
+import java.util.Vector;
+
+public class SableCC
+{
+  private static boolean processInlining = true;
+  static int inliningMaxAlts = 20;
+  private static boolean prettyPrinting = false;
+
+  private static final String OPT_LICENSE = "--license";
+  private static final String OPT_D = "-d";
+  private static final String OPT_NO_INLINE = "--no-inline";
+  private static final String OPT_INLINE_MAX_ALTS = "--inline-max-alts";
+  private static final String OPT_PRETTY_PRINT = "--pretty-print";
+
+  private static void displayCopyright()
+  {
+    System.out.println();
+    System.out.println("SableCC version " + Version.VERSION);
+    System.out.println("Copyright (C) 1997-2003 Etienne M. Gagnon <etienne.gagnon at uqam.ca> and");
+    System.out.println("others.  All rights reserved.");
+    System.out.println();
+    System.out.println("This software comes with ABSOLUTELY NO WARRANTY.  This is free software,");
+    System.out.println("and you are welcome to redistribute it under certain conditions.");
+    System.out.println();
+    System.out.println("Type 'sablecc -license' to view");
+    System.out.println("the complete copyright notice and license.");
+    System.out.println();
+  }
+
+  private static void displayUsage()
+  {
+    System.out.println("Usage:");
+    System.out.println("  sablecc [" +
+                       OPT_D + " destination] [" +
+                       OPT_NO_INLINE + "] [" +
+                       OPT_INLINE_MAX_ALTS + " number] [" +
+                       OPT_PRETTY_PRINT + "] filename [filename]...");
+    System.out.println("  sablecc " + OPT_LICENSE);
+  }
+
+  public static void main(String[] arguments)
+  {
+    String d_option = null;
+    Vector filename = new Vector();
+
+    if(arguments.length == 0)
+    {
+      displayCopyright();
+      displayUsage();
+      System.exit(1);
+    }
+
+    if((arguments.length == 1) && (arguments[0].equals(OPT_LICENSE)))
+    {
+      new DisplayLicense();
+      System.exit(0);
+    }
+
+    displayCopyright();
+
+    {
+      int arg = 0;
+      while(arg < arguments.length)
+      {
+        if(arguments[arg].equals(OPT_D))
+        {
+          if((d_option == null) && (++arg < arguments.length))
+          {
+            d_option = arguments[arg];
+          }
+          else
+          {
+            displayUsage();
+            System.exit(1);
+          }
+        }
+        else if(arguments[arg].equals(OPT_NO_INLINE))
+        {
+          processInlining = false;
+        }
+        /* A production is not inlined if it has more than
+         * inliningMaxAlts alternatives.  The default value is 20. */
+        else if(arguments[arg].equals(OPT_INLINE_MAX_ALTS))
+        {
+          try
+          {
+            inliningMaxAlts = Integer.parseInt(arguments[++arg]);
+          }
+          catch(Exception e)
+          {
+            displayUsage();
+            System.exit(1);
+          }
+        }
+        /*
+          if prettyprint flag is set to true, only the transformed
+          grammar is printed on standard output
+        */
+        else if(arguments[arg].equals(OPT_PRETTY_PRINT))
+        {
+          prettyPrinting = true;
+        }
+        else
+        {
+          filename.addElement(arguments[arg]);
+        }
+        arg++;
+      }
+
+      if(filename.size() == 0)
+      {
+        displayUsage();
+        System.exit(1);
+      }
+    }
+
+    try
+    {
+      for(int i=0; i<filename.size(); i++)
+      {
+        processGrammar((String)filename.elementAt(i), d_option);
+      }
+    }
+    catch(Exception e)
+    {
+      e.printStackTrace();
+      System.exit(1);
+    }
+    System.exit(0);
+  }
+
+  /**
+   * The main method for processing grammar file and generating the parser/lexer.
+   * @param grammar input grammar file name
+   * @param destDir output directory name
+   */
+  public static void processGrammar(String grammar, String destDir) throws Exception
+  {
+    File in;
+    File dir;
+
+    in = new File(grammar);
+    in = new File(in.getAbsolutePath());
+
+    if(destDir == null)
+    {
+      dir = new File(in.getParent());
+    }
+    else
+    {
+      dir = new File(destDir);
+      dir = new File(dir.getAbsolutePath());
+    }
+
+    processGrammar(in, dir);
+  }
+
+  /**
+   * The main method for processing grammar file and generating the parser/lexer.
+   * @param in input grammar file
+   * @param dir output directory
+   */
+  public static void processGrammar(File in,  File dir) throws Exception
+  {
+    if(!in.exists())
+    {
+      System.out.println("ERROR: grammar file "+in.getName()+" does not exist.");
+      System.exit(1);
+    }
+    if(!dir.exists())
+    {
+      System.out.println("ERROR: destination directory "+dir.getName()+" does not exist.");
+      System.exit(1);
+    }
+
+    // re-initialize all static structures in the engine
+    LR0Collection.reinit();
+    Symbol.reinit();
+    Production.reinit();
+    Grammar.reinit();
+
+    System.out.println("\n -- Generating parser for "+in.getName()+" in "+dir.getPath());
+
+    FileReader temp = new FileReader(in);
+
+    // Build the AST
+    Start tree = new Parser(new Lexer(new PushbackReader(
+                                        temp = new FileReader(in), 1000))).parse();
+
+    temp.close();
+
+    boolean hasTransformations = false;
+
+    if( ((AGrammar)tree.getPGrammar()).getAst() == null )
+    {
+      System.out.println("Adding productions and alternative of section AST.");
+      //AddAstProductions astProductions = new AddAstProductions();
+      tree.apply(new AddAstProductions());
+    }
+    else
+    {
+      hasTransformations = true;
+    }
+
+    System.out.println("Verifying identifiers.");
+    ResolveIds ids = new ResolveIds(dir);
+    tree.apply(ids);
+
+    System.out.println("Verifying ast identifiers.");
+    ResolveAstIds ast_ids = new ResolveAstIds(ids);
+    tree.apply(ast_ids);
+
+    System.out.println("Adding empty productions and empty alternative transformation if necessary.");
+    tree.apply( new AddEventualEmptyTransformationToProductions(ids, ast_ids) );
+
+    System.out.println("Adding productions and alternative transformation if necessary.");
+    AddProdTransformAndAltTransform adds = new AddProdTransformAndAltTransform();
+    tree.apply(adds);
+    /*
+    System.out.println("Replacing AST + operator by * and removing ? operator if necessary");
+    tree.apply( new AstTransformations() );
+    */
+    System.out.println("computing alternative symbol table identifiers.");
+    ResolveAltIds alt_ids = new ResolveAltIds(ids);
+    tree.apply(alt_ids);
+
+    System.out.println("Verifying production transform identifiers.");
+    ResolveProdTransformIds ptransform_ids = new ResolveProdTransformIds(ast_ids);
+    tree.apply(ptransform_ids);
+
+    System.out.println("Verifying ast alternatives transform identifiers.");
+    ResolveTransformIds transform_ids = new ResolveTransformIds(ast_ids, alt_ids, ptransform_ids);
+    tree.apply(transform_ids);
+
+    System.out.println("Generating token classes.");
+    tree.apply(new GenTokens(ids));
+
+    System.out.println("Generating production classes.");
+    tree.apply(new GenProds(ast_ids));
+
+    System.out.println("Generating alternative classes.");
+    tree.apply(new GenAlts(ast_ids));
+
+    System.out.println("Generating analysis classes.");
+    tree.apply(new GenAnalyses(ast_ids));
+
+    System.out.println("Generating utility classes.");
+    tree.apply(new GenUtils(ast_ids));
+
+    try
+    {
+      System.out.println("Generating the lexer.");
+      tree.apply(new GenLexer(ids));
+    }
+    catch(Exception e)
+    {
+      System.out.println(e.getMessage());
+      throw e;
+    }
+
+    try
+    {
+      System.out.println("Generating the parser.");
+      tree.apply(new GenParser(ids, alt_ids, transform_ids, ast_ids.getFirstAstProduction(), processInlining, prettyPrinting, hasTransformations) );
+    }
+    catch(Exception e)
+    {
+      System.out.println(e.getMessage());
+      throw e;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/StringCast.java b/src/org/sablecc/sablecc/StringCast.java
new file mode 100644
index 0000000..63c9a86
--- /dev/null
+++ b/src/org/sablecc/sablecc/StringCast.java
@@ -0,0 +1,23 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+
+public class StringCast implements Cast
+{
+  public final static StringCast instance = new StringCast();
+
+  private StringCast()
+  {}
+
+  public  Object cast(Object o)
+  {
+    return (String) o;
+  }
+}
diff --git a/src/org/sablecc/sablecc/StringComparator.java b/src/org/sablecc/sablecc/StringComparator.java
new file mode 100644
index 0000000..ab7fb2f
--- /dev/null
+++ b/src/org/sablecc/sablecc/StringComparator.java
@@ -0,0 +1,23 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+
+public class StringComparator implements Comparator
+{
+  public final static StringComparator instance = new StringComparator();
+
+  private StringComparator()
+  {}
+
+  public int compare(Object o1, Object o2)
+  {
+    return ((String) o1).compareTo((String) o2);
+  }
+}
diff --git a/src/org/sablecc/sablecc/Symbol.java b/src/org/sablecc/sablecc/Symbol.java
new file mode 100644
index 0000000..bc10c42
--- /dev/null
+++ b/src/org/sablecc/sablecc/Symbol.java
@@ -0,0 +1,151 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import java.util.Vector;
+
+final class Symbol implements Comparable
+{
+  private static Vector terminals;
+  private static Vector nonterminals;
+  private static TreeMap names;
+
+  private static boolean modified_ = true;
+  private static Symbol[] symbols_;
+  private static Symbol[] terminals_;
+  private static Symbol[] nonterminals_;
+
+  final String name;
+  final String errorName;
+  final boolean terminal;
+  final int index;
+
+  static {
+    reinit();
+  }
+
+  Symbol(String name, String errorName, boolean terminal)
+  {
+    if(names.get(name) != null)
+    {
+      throw new IllegalArgumentException("The symbol " + name + " aready exists.");
+    }
+
+    if(terminal)
+    {
+      terminals.addElement(this);
+      this.index = terminals.indexOf(this);
+    }
+    else
+    {
+      nonterminals.addElement(this);
+      this.index = nonterminals.indexOf(this);
+    }
+
+    this.name = name;
+    this.errorName = errorName;
+    this.terminal = terminal;
+    names.put(name, this);
+    modified_ = true;
+  }
+
+  public static void reinit()
+  {
+    terminals = new Vector();
+    nonterminals = new Vector();
+    names = new TreeMap(StringComparator.instance);
+    modified_ = true;
+    symbols_ = null;
+    terminals_ = null;
+    nonterminals_ = null;
+  }
+
+  static Symbol symbol(String name)
+  {
+    return (Symbol) names.get(name);
+  }
+
+  static Symbol symbol(int index, boolean terminal)
+  {
+    if(terminal)
+    {
+      return (Symbol) terminals.elementAt(index);
+    }
+    else
+    {
+      return (Symbol) nonterminals.elementAt(index);
+    }
+  }
+
+  private static void computeArrays()
+  {
+    symbols_ = new Symbol[terminals.size() + nonterminals.size()];
+    terminals_ = new Symbol[terminals.size()];
+    nonterminals_ = new Symbol[nonterminals.size()];
+
+    terminals.copyInto(terminals_);
+    nonterminals.copyInto(nonterminals_);
+    System.arraycopy(terminals_, 0, symbols_, 0, terminals_.length);
+    System.arraycopy(nonterminals_, 0, symbols_, terminals_.length, nonterminals_.length);
+
+    modified_ = false;
+  }
+
+  static Symbol[] symbols()
+  {
+    if(modified_)
+    {
+      computeArrays();
+    }
+
+    return symbols_;
+  }
+
+  static Symbol[] terminals()
+  {
+    if(modified_)
+    {
+      computeArrays();
+    }
+
+    return terminals_;
+  }
+
+  static Symbol[] nonterminals()
+  {
+    if(modified_)
+    {
+      computeArrays();
+    }
+
+    return nonterminals_;
+  }
+
+  public String toString()
+  {
+    return name;
+  }
+
+  public int compareTo(Object object)
+  {
+    Symbol symbol = (Symbol) object;
+
+    if(terminal ^ symbol.terminal)
+    {
+      if(terminal)
+      {
+        return 1;
+      }
+
+      return -1;
+    }
+
+    return index - symbol.index;
+  }
+}
diff --git a/src/org/sablecc/sablecc/SymbolSet.java b/src/org/sablecc/sablecc/SymbolSet.java
new file mode 100644
index 0000000..f46e113
--- /dev/null
+++ b/src/org/sablecc/sablecc/SymbolSet.java
@@ -0,0 +1,207 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+import java.util.Vector;
+
+final class SymbolSet implements Cloneable
+{
+  private final IntSet terminals;
+  private final IntSet nonterminals;
+  private boolean empty;
+
+  private boolean modified = true;
+  private Symbol[] symbols;
+
+  private void computeArray()
+  {
+    Vector symbols = new Vector(0);
+
+    int[] elements = terminals.elements();
+    for(int i = 0; i < elements.length; i++)
+    {
+      symbols.addElement(Symbol.symbol(elements[i], true));
+    }
+
+    elements = nonterminals.elements();
+    for(int i = 0; i < elements.length; i++)
+    {
+      symbols.addElement(Symbol.symbol(elements[i], false));
+    }
+
+    this.symbols = new Symbol[symbols.size()];
+    symbols.copyInto(this.symbols);
+
+    modified = false;
+  }
+
+  SymbolSet()
+  {
+    this.terminals = new IntSet();
+    this.nonterminals= new IntSet();
+  }
+
+  private SymbolSet(SymbolSet set
+                     )
+  {
+    this.terminals = (IntSet) set.terminals.clone();
+    this.nonterminals = (IntSet) set.nonterminals.clone();
+    this.empty = set.empty;
+  }
+
+  void setTerminal(int terminal)
+  {
+    terminals.set(terminal);
+    modified = true;
+  }
+
+  void clearTerminal(int terminal)
+  {
+    terminals.clear(terminal);
+    modified = true;
+  }
+
+  boolean getTerminal(int terminal)
+  {
+    return terminals.get(terminal);
+  }
+
+  void setNonterminal(int nonterminal)
+  {
+    nonterminals.set(nonterminal);
+    modified = true;
+  }
+
+  void clearNonterminal(int nonterminal)
+  {
+    nonterminals.clear(nonterminal);
+    modified = true;
+  }
+
+  boolean getNonterminal(int nonterminal)
+  {
+    return nonterminals.get(nonterminal);
+  }
+
+  void setEmpty()
+  {
+    empty = true;
+    modified = true;
+  }
+
+  void clearEmpty()
+  {
+    empty = false;
+    modified = true;
+  }
+
+  boolean getEmpty()
+  {
+    return empty;
+  }
+
+  void and(SymbolSet s)
+  {
+    terminals.and(s.terminals);
+    nonterminals.and(s.nonterminals);
+    empty &= s.empty;
+    modified = true;
+  }
+
+  void or(SymbolSet s)
+  {
+    terminals.or(s.terminals);
+    nonterminals.or(s.nonterminals);
+    empty |= s.empty;
+    modified = true;
+  }
+
+  void xor(SymbolSet s)
+  {
+    terminals.xor(s.terminals);
+    nonterminals.xor(s.nonterminals);
+    empty ^= s.empty;
+    modified = true;
+  }
+
+  public int hashCode()
+  {
+    return terminals.hashCode() + nonterminals.hashCode() + new Boolean(empty).hashCode();
+  }
+
+  public boolean equals(Object obj)
+  {
+    if((obj == null) ||
+        (obj.getClass() != this.getClass()))
+    {
+      return false;
+    }
+
+    SymbolSet s = (SymbolSet) obj;
+
+    return terminals.equals(s.terminals) &&
+           nonterminals.equals(s.nonterminals) &&
+           (empty == s.empty);
+  }
+
+  Symbol[] getSymbols()
+  {
+    if(modified)
+    {
+      computeArray();
+    }
+
+    return symbols;
+  }
+
+  public String toString()
+  {
+    StringBuffer result = new StringBuffer();
+    result.append("{");
+
+    Symbol[] symbols = getSymbols();
+    boolean comma = false;
+    for(int i = 0; i < symbols.length; i++)
+    {
+      if(comma)
+      {
+        result.append(",");
+      }
+      else
+      {
+        comma = true;
+      }
+
+      result.append(symbols[i]);
+    }
+
+    if(empty)
+    {
+      if(comma)
+      {
+        result.append(",");
+      }
+      else
+      {
+        comma = true;
+      }
+
+      result.append("*empty*");
+    }
+
+    result.append("}");
+
+    return result.toString();
+  }
+
+  public Object clone()
+  {
+    return new SymbolSet(this);
+  }
+}
diff --git a/src/org/sablecc/sablecc/Transitions.java b/src/org/sablecc/sablecc/Transitions.java
new file mode 100644
index 0000000..817c754
--- /dev/null
+++ b/src/org/sablecc/sablecc/Transitions.java
@@ -0,0 +1,84 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+
+public class Transitions extends DepthFirstAdapter
+{
+  public final Map tokenStates = new TypedHashMap(
+                                   NodeCast.instance,
+                                   NoCast.instance);
+
+  private String state;
+  private String transition;
+  private Map map;
+
+  public void caseAStateList(AStateList node)
+  {
+    inAStateList(node);
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    if(node.getTransition() != null)
+    {
+      node.getTransition().apply(this);
+    }
+
+    outAStateList(node);  // We moved this...
+
+    {
+      Object temp[] = node.getStateLists().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PStateListTail) temp[i]).apply(this);
+      }
+    }
+  }
+
+  public void inATokenDef(ATokenDef node)
+  {
+    map = new TypedTreeMap(
+            StringComparator.instance,
+            StringCast.instance,
+            StringCast.instance);
+  }
+
+  public void inAStateList(AStateList node)
+  {
+    state = transition = node.getId().getText().toUpperCase();
+  }
+
+  public void inAStateListTail(AStateListTail node)
+  {
+    state = transition = node.getId().getText().toUpperCase();
+  }
+
+  public void outATransition(ATransition node)
+  {
+    transition = node.getId().getText().toUpperCase();
+  }
+
+  public void outAStateList(AStateList node)
+  {
+    map.put(state, transition);
+  }
+
+  public void outAStateListTail(AStateListTail node)
+  {
+    map.put(state, transition);
+  }
+
+  public void outATokenDef(ATokenDef node)
+  {
+    tokenStates.put(node, map);
+  }
+}
diff --git a/src/org/sablecc/sablecc/TypedHashMap.java b/src/org/sablecc/sablecc/TypedHashMap.java
new file mode 100644
index 0000000..0a20b3f
--- /dev/null
+++ b/src/org/sablecc/sablecc/TypedHashMap.java
@@ -0,0 +1,175 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+
+public class TypedHashMap extends HashMap
+{
+  private Cast keyCast;
+  private Cast valueCast;
+  private Set entries;
+
+  public TypedHashMap()
+  {
+    super();
+
+    keyCast = NoCast.instance;
+    valueCast = NoCast.instance;
+  }
+
+  public TypedHashMap(int initialCapacity, Cast keyCast, Cast valueCast)
+  {
+    super(initialCapacity);
+
+    this.keyCast = keyCast;
+    this.valueCast = valueCast;
+  }
+
+  public TypedHashMap(Map map)
+  {
+    super();
+
+    keyCast = NoCast.instance;
+    valueCast = NoCast.instance;
+
+    Map.Entry[] entries = (Map.Entry[]) map.entrySet().toArray(new Map.Entry[0]);
+    for(int i = 0; i < entries.length; i++)
+    {
+      this.put(entries[i].getKey(),entries[i].getValue());
+    }
+
+  }
+
+  public TypedHashMap(Cast keyCast, Cast valueCast)
+  {
+    super();
+
+    this.keyCast = keyCast;
+    this.valueCast = valueCast;
+  }
+
+  public Object clone()
+  {
+    return new TypedHashMap(this, keyCast, valueCast);
+  }
+
+  public TypedHashMap(Map map, Cast keyCast, Cast valueCast)
+  {
+    super();
+
+    this.keyCast = keyCast;
+    this.valueCast = valueCast;
+
+    Map.Entry[] entries = (Map.Entry[]) map.entrySet().toArray(new Map.Entry[0]);
+    for(int i = 0; i < entries.length; i++)
+    {
+      this.put(entries[i].getKey(),entries[i].getValue());
+    }
+
+  }
+
+  public Cast getKeyCast()
+  {
+    return keyCast;
+  }
+
+  public Cast getValueCast()
+  {
+    return valueCast;
+  }
+
+  public Set entrySet()
+  {
+    if(entries == null)
+    {
+      entries = new EntrySet(super.entrySet());
+    }
+
+    return entries;
+  }
+
+  public Object put(Object key, Object value)
+  {
+    return super.put(keyCast.cast(key), valueCast.cast(value));
+  }
+
+  private class EntrySet extends AbstractSet
+  {
+    private Set set
+      ;
+
+    EntrySet(Set set
+              )
+    {
+      this.set = set
+                   ;
+    }
+
+    public int size()
+    {
+      return set.size();
+    }
+
+    public Iterator iterator()
+    {
+      return new EntryIterator(set.iterator());
+    }
+  }
+
+  private class EntryIterator implements Iterator
+  {
+    private Iterator iterator;
+
+    EntryIterator(Iterator iterator)
+    {
+      this.iterator = iterator;
+    }
+
+    public boolean hasNext()
+    {
+      return iterator.hasNext();
+    }
+
+    public Object next()
+    {
+      return new TypedEntry((Map.Entry) iterator.next());
+    }
+
+    public void remove
+      ()
+    {
+      iterator.remove();
+    }
+  }
+
+  private class TypedEntry implements Map.Entry
+  {
+    private Map.Entry entry;
+
+    TypedEntry(Map.Entry entry)
+    {
+      this.entry = entry;
+    }
+
+    public Object getKey()
+    {
+      return entry.getKey();
+    }
+
+    public Object getValue()
+    {
+      return entry.getValue();
+    }
+
+    public Object setValue(Object value)
+    {
+      return entry.setValue(valueCast.cast(value));
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/TypedLinkedList.java b/src/org/sablecc/sablecc/TypedLinkedList.java
new file mode 100644
index 0000000..2e1494b
--- /dev/null
+++ b/src/org/sablecc/sablecc/TypedLinkedList.java
@@ -0,0 +1,121 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+
+public class TypedLinkedList extends LinkedList
+{
+  Cast cast;
+
+  public TypedLinkedList()
+  {
+    super();
+
+    cast = NoCast.instance;
+  }
+
+  public TypedLinkedList(Collection c)
+  {
+    super(c);
+
+    cast = NoCast.instance;
+  }
+
+  public TypedLinkedList(Cast cast)
+  {
+    super();
+
+    this.cast = cast;
+  }
+
+  public TypedLinkedList(Collection c, Cast cast)
+  {
+    super(c);
+
+    this.cast = cast;
+  }
+
+  public Cast getCast()
+  {
+    return cast;
+  }
+
+  public void addFirst(Object o)
+  {
+    super.addFirst(cast.cast(o));
+  }
+
+  public void addLast(Object o)
+  {
+    super.addLast(cast.cast(o));
+  }
+
+  public ListIterator listIterator(int index)
+  {
+    return new TypedLinkedListIterator(super.listIterator(index));
+  }
+
+  private class TypedLinkedListIterator implements ListIterator
+  {
+    ListIterator iterator;
+
+    TypedLinkedListIterator(ListIterator iterator)
+    {
+      this.iterator = iterator;
+    }
+
+    public boolean hasNext()
+    {
+      return iterator.hasNext();
+    }
+
+    public Object next()
+    {
+      return iterator.next();
+    }
+
+    public boolean hasPrevious()
+    {
+      return iterator.hasPrevious();
+    }
+
+    public Object previous()
+    {
+      return iterator.previous();
+    }
+
+    public int nextIndex()
+    {
+      return iterator.nextIndex();
+    }
+
+    public int previousIndex()
+    {
+      return iterator.previousIndex();
+    }
+
+    public void remove
+      ()
+    {
+      iterator.remove();
+    }
+
+    public void set
+      (Object o)
+    {
+      iterator.set(cast.cast(o));
+    }
+
+    public void add
+      (Object o)
+    {
+      iterator.add(cast.cast(o));
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/TypedTreeMap.java b/src/org/sablecc/sablecc/TypedTreeMap.java
new file mode 100644
index 0000000..e0b3ec2
--- /dev/null
+++ b/src/org/sablecc/sablecc/TypedTreeMap.java
@@ -0,0 +1,251 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc;
+
+import java.util.*;
+
+public class TypedTreeMap extends TreeMap
+{
+  private Cast keyCast;
+  private Cast valueCast;
+  private Set entries;
+
+  public TypedTreeMap()
+  {
+    super();
+
+    keyCast = NoCast.instance;
+    valueCast = NoCast.instance;
+  }
+
+  public TypedTreeMap(Comparator comparator)
+  {
+    super(comparator);
+
+    keyCast = NoCast.instance;
+    valueCast = NoCast.instance;
+  }
+
+  public TypedTreeMap(Map map)
+  {
+    super();
+
+    keyCast = NoCast.instance;
+    valueCast = NoCast.instance;
+
+    Map.Entry[] entries = (Map.Entry[])map.entrySet().toArray(new Map.Entry[0]);
+    for(int i=0; i < entries.length; i++)
+    {
+      this.put(entries[i].getKey(),entries[i].getValue());
+    }
+  }
+
+  /*
+  public TypedTreeMap(Map map)
+  {
+    super(map);
+
+    keyCast = NoCast.instance;
+    valueCast = NoCast.instance;
+  }
+  */
+
+  public TypedTreeMap(SortedMap smap)
+  {
+    super(smap.comparator());
+
+    keyCast = NoCast.instance;
+    valueCast = NoCast.instance;
+
+    Map.Entry[] entries = (Map.Entry[])smap.entrySet().toArray(new Map.Entry[0]);
+    for(int i=0; i < entries.length; i++)
+    {
+      this.put(entries[i].getKey(),entries[i].getValue());
+    }
+
+  }
+  /*
+  public TypedTreeMap(SortedMap smap)
+  {
+    super(smap);
+
+    keyCast = NoCast.instance;
+    valueCast = NoCast.instance;
+  }
+  */
+
+  public TypedTreeMap(Cast keyCast, Cast valueCast)
+  {
+    super();
+
+    this.keyCast = keyCast;
+    this.valueCast = valueCast;
+  }
+
+  public TypedTreeMap(Comparator comparator, Cast keyCast, Cast valueCast)
+  {
+    super(comparator);
+
+    this.keyCast = keyCast;
+    this.valueCast = valueCast;
+  }
+
+  public Object clone()
+  {
+    return new TypedTreeMap(this, keyCast, valueCast);
+  }
+
+  public TypedTreeMap(Map map, Cast keyCast, Cast valueCast)
+  {
+    super();
+
+    this.keyCast = keyCast;
+    this.valueCast = valueCast;
+
+    Map.Entry[] entries = (Map.Entry[])map.entrySet().toArray(new Map.Entry[0]);
+    for(int i=0; i < entries.length; i++)
+    {
+      this.put(entries[i].getKey(),entries[i].getValue());
+    }
+
+  }
+
+  /*
+    public TypedTreeMap(Map map, Cast keyCast, Cast valueCast)
+    {
+      super(map);
+
+      this.keyCast = keyCast;
+      this.valueCast = valueCast;
+    }
+  */
+
+  public TypedTreeMap(SortedMap smap, Cast keyCast, Cast valueCast)
+  {
+    super(smap.comparator());
+
+    this.keyCast = keyCast;
+    this.valueCast = valueCast;
+
+    Map.Entry[] entries = (Map.Entry[])smap.entrySet().toArray(new Map.Entry[0]);
+    for(int i=0; i < entries.length; i++)
+    {
+      this.put(entries[i].getKey(),entries[i].getValue());
+    }
+
+  }
+
+  /*
+  public TypedTreeMap(SortedMap smap, Cast keyCast, Cast valueCast)
+  {
+    super(smap);
+
+    this.keyCast = keyCast;
+    this.valueCast = valueCast;
+  }
+  */
+
+  public Cast getKeyCast()
+  {
+    return keyCast;
+  }
+
+  public Cast getValueCast()
+  {
+    return valueCast;
+  }
+
+  public Set entrySet()
+  {
+    if(entries == null)
+    {
+      entries = new EntrySet(super.entrySet());
+    }
+
+    return entries;
+  }
+
+  public Object put(Object key, Object value)
+  {
+    return super.put(keyCast.cast(key), valueCast.cast(value));
+  }
+
+  private class EntrySet extends AbstractSet
+  {
+    private Set set
+      ;
+
+    EntrySet(Set set
+              )
+    {
+      this.set = set
+                   ;
+    }
+
+    public int size()
+    {
+      return set.size();
+    }
+
+    public Iterator iterator()
+    {
+      return new EntryIterator(set.iterator());
+    }
+  }
+
+  private class EntryIterator implements Iterator
+  {
+    private Iterator iterator;
+
+    EntryIterator(Iterator iterator)
+    {
+      this.iterator = iterator;
+    }
+
+    public boolean hasNext()
+    {
+      return iterator.hasNext();
+    }
+
+    public Object next()
+    {
+      return new TypedEntry((Map.Entry) iterator.next());
+    }
+
+    public void remove
+      ()
+    {
+      iterator.remove();
+    }
+  }
+
+  private class TypedEntry implements Map.Entry
+  {
+    private Map.Entry entry;
+
+    TypedEntry(Map.Entry entry)
+    {
+      this.entry = entry;
+    }
+
+    public Object getKey()
+    {
+      return entry.getKey();
+    }
+
+    public Object getValue()
+    {
+      return entry.getValue();
+    }
+
+    public Object setValue(Object value)
+    {
+      return entry.setValue(valueCast.cast(value));
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/Version.java b/src/org/sablecc/sablecc/Version.java
new file mode 100644
index 0000000..c835fb3
--- /dev/null
+++ b/src/org/sablecc/sablecc/Version.java
@@ -0,0 +1,6 @@
+package org.sablecc.sablecc;
+
+public class Version
+{
+  public static final String VERSION = "3.2";
+}
diff --git a/src/org/sablecc/sablecc/alternatives.txt b/src/org/sablecc/sablecc/alternatives.txt
new file mode 100644
index 0000000..8714aa5
--- /dev/null
+++ b/src/org/sablecc/sablecc/alternatives.txt
@@ -0,0 +1,273 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+Macro:AlternativeHeader1
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+
+$
+
+Macro:AlternativeHeaderList
+import java.util.*;
+
+$
+
+Macro:AlternativeHeader2
+import $0$.*;
+
+ at SuppressWarnings("nls")
+public final class $1$ extends $2$
+{
+
+$
+
+Macro:NodeElement
+    private $0$ _$1$_;
+
+$
+
+Macro:ListElement
+    private final LinkedList<$0$> _$1$_ = new LinkedList<$0$>();
+
+$
+
+Macro:ConstructorHeader
+
+    public $0$(
+$
+
+Macro:ConstructorHeaderDeclNode
+
+        @SuppressWarnings("hiding") $0$ _$1$_$2$
+$
+
+Macro:ConstructorHeaderDeclList
+
+        @SuppressWarnings("hiding") List<$0$> _$1$_$2$
+$
+
+Macro:ConstructorBodyHeader
+)
+    {
+        // Constructor
+
+$
+
+Macro:ConstructorBodyNode
+        set$0$(_$1$_);
+
+
+$
+
+Macro:ConstructorBodyList
+        set$0$(_$1$_);
+
+
+$
+
+Macro:ConstructorBodyTail
+    }
+
+$
+
+Macro:CloneHeader
+
+    @Override
+    public Object clone()
+    {
+        return new $0$(
+$
+
+Macro:CloneBodyNode
+
+            cloneNode(this._$1$_)$2$
+$
+
+Macro:CloneBodyList
+
+            cloneList(this._$0$_)$1$
+$
+
+Macro:CloneTail
+);
+    }
+
+$
+
+Macro:Apply
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).case$0$(this);
+    }
+
+$
+
+Macro:GetSetNode
+
+    public $0$ get$1$()
+    {
+        return this._$2$_;
+    }
+
+    public void set$1$($0$ node)
+    {
+        if(this._$2$_ != null)
+        {
+            this._$2$_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._$2$_ = node;
+    }
+
+$
+
+Macro:GetSetList
+
+    public LinkedList<$2$> get$0$()
+    {
+        return this._$1$_;
+    }
+
+    public void set$0$(List<$2$> list)
+    {
+        this._$1$_.clear();
+        this._$1$_.addAll(list);
+        for($2$ e : list)
+        {
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
+
+            e.parent(this);
+        }
+    }
+
+$
+
+Macro:ToStringHeader
+
+    @Override
+    public String toString()
+    {
+        return ""
+$
+
+Macro:ToStringBodyNode
+
+            + toString(this._$0$_)
+$
+
+Macro:ToStringBodyList
+
+            + toString(this._$0$_)
+$
+
+Macro:ToStringTail
+;
+    }
+
+$
+
+Macro:RemoveChildHeader
+
+    @Override
+    void removeChild(@SuppressWarnings("unused") Node child)
+    {
+        // Remove child
+
+$
+
+Macro:RemoveChildNode
+        if(this._$0$_ == child)
+        {
+            this._$0$_ = null;
+            return;
+        }
+
+
+$
+
+Macro:RemoveChildList
+        if(this._$0$_.remove(child))
+        {
+            return;
+        }
+
+
+$
+
+Macro:RemoveChildTail
+        throw new RuntimeException("Not a child.");
+    }
+
+$
+
+Macro:ReplaceChildHeader
+
+    @Override
+    void replaceChild(@SuppressWarnings("unused") Node oldChild, @SuppressWarnings("unused") Node newChild)
+    {
+        // Replace child
+
+$
+
+Macro:ReplaceChildNode
+        if(this._$0$_ == oldChild)
+        {
+            set$1$(($2$) newChild);
+            return;
+        }
+
+
+$
+
+Macro:ReplaceChildList
+        for(ListIterator<$1$> i = this._$0$_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set(($1$) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
+
+
+$
+
+Macro:ReplaceChildTail
+        throw new RuntimeException("Not a child.");
+    }
+
+$
+
+Macro:AlternativeTail
+}
+
+$
diff --git a/src/org/sablecc/sablecc/analyses.txt b/src/org/sablecc/sablecc/analyses.txt
new file mode 100644
index 0000000..949fb5b
--- /dev/null
+++ b/src/org/sablecc/sablecc/analyses.txt
@@ -0,0 +1,287 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+Macro:AnalysisHeader
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import $1$.*;
+
+public interface Analysis extends Switch
+{
+    Object getIn(Node node);
+    void setIn(Node node, Object o);
+    Object getOut(Node node);
+    void setOut(Node node, Object o);
+
+
+$
+Macro:AnalysisStart
+    void caseStart(Start node);
+
+$
+
+Macro:AnalysisBody
+    void case$0$($0$ node);
+
+$
+
+Macro:AnalysisTail
+    void caseEOF(EOF node);
+}
+
+$
+
+Macro:AnalysisAdapterHeader
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import java.util.*;
+import $1$.*;
+
+public class AnalysisAdapter implements Analysis
+{
+    private Hashtable<Node,Object> in;
+    private Hashtable<Node,Object> out;
+
+    public Object getIn(Node node)
+    {
+        if(this.in == null)
+        {
+            return null;
+        }
+
+        return this.in.get(node);
+    }
+
+    public void setIn(Node node, Object o)
+    {
+        if(this.in == null)
+        {
+            this.in = new Hashtable<Node,Object>(1);
+        }
+
+        if(o != null)
+        {
+            this.in.put(node, o);
+        }
+        else
+        {
+            this.in.remove(node);
+        }
+    }
+
+    public Object getOut(Node node)
+    {
+        if(this.out == null)
+        {
+            return null;
+        }
+
+        return this.out.get(node);
+    }
+
+    public void setOut(Node node, Object o)
+    {
+        if(this.out == null)
+        {
+            this.out = new Hashtable<Node,Object>(1);
+        }
+
+        if(o != null)
+        {
+            this.out.put(node, o);
+        }
+        else
+        {
+            this.out.remove(node);
+        }
+    }
+
+$
+
+Macro:AnalysisAdapterStart
+
+    public void caseStart(Start node)
+    {
+        defaultCase(node);
+    }
+
+$
+
+Macro:AnalysisAdapterBody
+
+    public void case$0$($0$ node)
+    {
+        defaultCase(node);
+    }
+
+$
+
+Macro:AnalysisAdapterTail
+
+    public void caseEOF(EOF node)
+    {
+        defaultCase(node);
+    }
+
+    public void defaultCase(@SuppressWarnings("unused") Node node)
+    {
+        // do nothing
+    }
+}
+
+$
+
+Macro:DepthFirstAdapterHeader
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import java.util.*;
+import $1$.*;
+
+public class DepthFirstAdapter extends AnalysisAdapter
+{
+    public void inStart(Start node)
+    {
+        defaultIn(node);
+    }
+
+    public void outStart(Start node)
+    {
+        defaultOut(node);
+    }
+
+    public void defaultIn(@SuppressWarnings("unused") Node node)
+    {
+        // Do nothing
+    }
+
+    public void defaultOut(@SuppressWarnings("unused") Node node)
+    {
+        // Do nothing
+    }
+
+    @Override
+    public void caseStart(Start node)
+    {
+        inStart(node);
+        node.get$2$().apply(this);
+        node.getEOF().apply(this);
+        outStart(node);
+    }
+
+$
+
+Macro:ReversedDepthFirstAdapterHeader
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import java.util.*;
+import $1$.*;
+
+public class ReversedDepthFirstAdapter extends AnalysisAdapter
+{
+    public void inStart(Start node)
+    {
+        defaultIn(node);
+    }
+
+    public void outStart(Start node)
+    {
+        defaultOut(node);
+    }
+
+    public void defaultIn(@SuppressWarnings("unused") Node node)
+    {
+        // Do nothing
+    }
+
+    public void defaultOut(@SuppressWarnings("unused") Node node)
+    {
+        // Do nothing
+    }
+
+    @Override
+    public void caseStart(Start node)
+    {
+        inStart(node);
+        node.getEOF().apply(this);
+        node.get$2$().apply(this);
+        outStart(node);
+    }
+
+$
+
+Macro:DepthFirstAdapterInOut
+
+    public void in$0$($0$ node)
+    {
+        defaultIn(node);
+    }
+
+    public void out$0$($0$ node)
+    {
+        defaultOut(node);
+    }
+
+$
+
+Macro:DepthFirstAdapterCaseHeader
+
+    @Override
+    public void case$0$($0$ node)
+    {
+        in$0$(node);
+
+$
+
+Macro:DepthFirstAdapterCaseBodyNode
+        if(node.get$0$() != null)
+        {
+            node.get$0$().apply(this);
+        }
+
+$
+
+Macro:DepthFirstAdapterCaseBodyList
+        {
+            List<$1$> copy = new ArrayList<$1$>(node.get$0$());
+            for($1$ e : copy)
+            {
+                e.apply(this);
+            }
+        }
+
+$
+
+Macro:ReversedDepthFirstAdapterCaseBodyList
+        {
+            List<$1$> copy = new ArrayList<$1$>(node.get$0$());
+            Collections.reverse(copy);
+            for($1$ e : copy)
+            {
+                e.apply(this);
+            }
+        }
+
+$
+
+Macro:DepthFirstAdapterCaseTail
+        out$0$(node);
+    }
+
+$
+
+Macro:DepthFirstAdapterTail
+}
+
+$
diff --git a/src/org/sablecc/sablecc/analysis/Analysis.java b/src/org/sablecc/sablecc/analysis/Analysis.java
new file mode 100644
index 0000000..ebd3638
--- /dev/null
+++ b/src/org/sablecc/sablecc/analysis/Analysis.java
@@ -0,0 +1,102 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.analysis;
+
+import org.sablecc.sablecc.node.*;
+
+public interface Analysis extends Switch
+{
+  Object getIn(Node node);
+  void setIn(Node node, Object in);
+  Object getOut(Node node);
+  void setOut(Node node, Object out);
+
+  void caseStart(Start node);
+  void caseAGrammar(AGrammar node);
+  void caseAHelpers(AHelpers node);
+  void caseAHelperDef(AHelperDef node);
+  void caseAStates(AStates node);
+  void caseATokens(ATokens node);
+  void caseATokenDef(ATokenDef node);
+  void caseAStateList(AStateList node);
+  void caseAStateListTail(AStateListTail node);
+  void caseATransition(ATransition node);
+  void caseAIgnTokens(AIgnTokens node);
+  void caseARegExp(ARegExp node);
+  void caseAConcat(AConcat node);
+  void caseAUnExp(AUnExp node);
+  void caseACharBasic(ACharBasic node);
+  void caseASetBasic(ASetBasic node);
+  void caseAStringBasic(AStringBasic node);
+  void caseAIdBasic(AIdBasic node);
+  void caseARegExpBasic(ARegExpBasic node);
+  void caseACharChar(ACharChar node);
+  void caseADecChar(ADecChar node);
+  void caseAHexChar(AHexChar node);
+  void caseAOperationSet(AOperationSet node);
+  void caseAIntervalSet(AIntervalSet node);
+  void caseAStarUnOp(AStarUnOp node);
+  void caseAQMarkUnOp(AQMarkUnOp node);
+  void caseAPlusUnOp(APlusUnOp node);
+  void caseAPlusBinOp(APlusBinOp node);
+  void caseAMinusBinOp(AMinusBinOp node);
+  void caseAProductions(AProductions node);
+  void caseAProd(AProd node);
+  void caseAAlt(AAlt node);
+  void caseAAltTransform(AAltTransform node);
+  void caseANewTerm(ANewTerm node);
+  void caseAListTerm(AListTerm node);
+  void caseASimpleTerm(ASimpleTerm node);
+  void caseANullTerm(ANullTerm node);
+  void caseANewListTerm(ANewListTerm node);
+  void caseASimpleListTerm(ASimpleListTerm node);
+  void caseAProdName(AProdName node);
+  void caseAElem(AElem node);
+  void caseATokenSpecifier(ATokenSpecifier node);
+  void caseAProductionSpecifier(AProductionSpecifier node);
+  void caseAAst(AAst node);
+  void caseAAstProd(AAstProd node);
+  void caseAAstAlt(AAstAlt node);
+
+  void caseTPkgId(TPkgId node);
+  void caseTPackage(TPackage node);
+  void caseTStates(TStates node);
+  void caseTHelpers(THelpers node);
+  void caseTTokens(TTokens node);
+  void caseTIgnored(TIgnored node);
+  void caseTProductions(TProductions node);
+  void caseTAbstract(TAbstract node);
+  void caseTSyntax(TSyntax node);
+  void caseTTree(TTree node);
+  void caseTNew(TNew node);
+  void caseTNull(TNull node);
+  void caseTTokenSpecifier(TTokenSpecifier node);
+  void caseTProductionSpecifier(TProductionSpecifier node);
+  void caseTDot(TDot node);
+  void caseTDDot(TDDot node);
+  void caseTSemicolon(TSemicolon node);
+  void caseTEqual(TEqual node);
+  void caseTLBkt(TLBkt node);
+  void caseTRBkt(TRBkt node);
+  void caseTLPar(TLPar node);
+  void caseTRPar(TRPar node);
+  void caseTLBrace(TLBrace node);
+  void caseTRBrace(TRBrace node);
+  void caseTPlus(TPlus node);
+  void caseTMinus(TMinus node);
+  void caseTQMark(TQMark node);
+  void caseTStar(TStar node);
+  void caseTBar(TBar node);
+  void caseTComma(TComma node);
+  void caseTSlash(TSlash node);
+  void caseTArrow(TArrow node);
+  void caseTColon(TColon node);
+  void caseTId(TId node);
+  void caseTChar(TChar node);
+  void caseTDecChar(TDecChar node);
+  void caseTHexChar(THexChar node);
+  void caseTString(TString node);
+  void caseTBlank(TBlank node);
+  void caseTComment(TComment node);
+  void caseEOF(EOF node);
+}
diff --git a/src/org/sablecc/sablecc/analysis/AnalysisAdapter.java b/src/org/sablecc/sablecc/analysis/AnalysisAdapter.java
new file mode 100644
index 0000000..b128fdf
--- /dev/null
+++ b/src/org/sablecc/sablecc/analysis/AnalysisAdapter.java
@@ -0,0 +1,503 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.analysis;
+
+import java.util.*;
+import org.sablecc.sablecc.node.*;
+
+public class AnalysisAdapter implements Analysis
+{
+  private Hashtable in;
+  private Hashtable out;
+
+  public Object getIn(Node node)
+  {
+    if(in == null)
+    {
+      return null;
+    }
+
+    return in.get(node);
+  }
+
+  public void setIn(Node node, Object in)
+  {
+    if(this.in == null)
+    {
+      this.in = new Hashtable(1);
+    }
+
+    if(in != null)
+    {
+      this.in.put(node, in);
+    }
+    else
+    {
+      this.in.remove(node);
+    }
+  }
+
+  public Object getOut(Node node)
+  {
+    if(out == null)
+    {
+      return null;
+    }
+
+    return out.get(node);
+  }
+
+  public void setOut(Node node, Object out)
+  {
+    if(this.out == null)
+    {
+      this.out = new Hashtable(1);
+    }
+
+    if(out != null)
+    {
+      this.out.put(node, out);
+    }
+    else
+    {
+      this.out.remove(node);
+    }
+  }
+  public void caseStart(Start node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAGrammar(AGrammar node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAHelpers(AHelpers node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAHelperDef(AHelperDef node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAStates(AStates node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseATokens(ATokens node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseATokenDef(ATokenDef node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAStateList(AStateList node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAStateListTail(AStateListTail node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseATransition(ATransition node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAIgnTokens(AIgnTokens node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseARegExp(ARegExp node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAConcat(AConcat node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAUnExp(AUnExp node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseACharBasic(ACharBasic node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseASetBasic(ASetBasic node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAStringBasic(AStringBasic node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAIdBasic(AIdBasic node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseARegExpBasic(ARegExpBasic node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseACharChar(ACharChar node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseADecChar(ADecChar node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAHexChar(AHexChar node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAOperationSet(AOperationSet node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAIntervalSet(AIntervalSet node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAStarUnOp(AStarUnOp node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAQMarkUnOp(AQMarkUnOp node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAPlusUnOp(APlusUnOp node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAPlusBinOp(APlusBinOp node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAMinusBinOp(AMinusBinOp node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAProductions(AProductions node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAProd(AProd node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAAlt(AAlt node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAAltTransform(AAltTransform node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseANewTerm(ANewTerm node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAListTerm(AListTerm node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseASimpleTerm(ASimpleTerm node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseANullTerm(ANullTerm node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseANewListTerm(ANewListTerm node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseASimpleListTerm(ASimpleListTerm node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAProdName(AProdName node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAElem(AElem node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseATokenSpecifier(ATokenSpecifier node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAProductionSpecifier(AProductionSpecifier node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAAst(AAst node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAAstProd(AAstProd node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseAAstAlt(AAstAlt node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTPkgId(TPkgId node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTPackage(TPackage node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTStates(TStates node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTHelpers(THelpers node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTTokens(TTokens node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTIgnored(TIgnored node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTProductions(TProductions node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTAbstract(TAbstract node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTSyntax(TSyntax node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTTree(TTree node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTNew(TNew node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTNull(TNull node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTTokenSpecifier(TTokenSpecifier node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTProductionSpecifier(TProductionSpecifier node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTDot(TDot node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTDDot(TDDot node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTSemicolon(TSemicolon node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTEqual(TEqual node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTLBkt(TLBkt node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTRBkt(TRBkt node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTLPar(TLPar node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTRPar(TRPar node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTLBrace(TLBrace node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTRBrace(TRBrace node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTPlus(TPlus node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTMinus(TMinus node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTQMark(TQMark node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTStar(TStar node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTBar(TBar node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTComma(TComma node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTSlash(TSlash node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTArrow(TArrow node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTColon(TColon node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTId(TId node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTChar(TChar node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTDecChar(TDecChar node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTHexChar(THexChar node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTString(TString node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTBlank(TBlank node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseTComment(TComment node)
+  {
+    defaultCase(node);
+  }
+
+  public void caseEOF(EOF node)
+  {
+    defaultCase(node);
+  }
+
+  public void defaultCase(Node node)
+  {}
+}
diff --git a/src/org/sablecc/sablecc/analysis/DepthFirstAdapter.java b/src/org/sablecc/sablecc/analysis/DepthFirstAdapter.java
new file mode 100644
index 0000000..156967d
--- /dev/null
+++ b/src/org/sablecc/sablecc/analysis/DepthFirstAdapter.java
@@ -0,0 +1,1130 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.analysis;
+
+import java.util.*;
+import org.sablecc.sablecc.node.*;
+
+public class DepthFirstAdapter extends AnalysisAdapter
+{
+  public void inStart(Start node)
+  {
+    defaultIn(node);
+  }
+
+  public void outStart(Start node)
+  {
+    defaultOut(node);
+  }
+
+  public void defaultIn(Node node)
+  {}
+
+  public void defaultOut(Node node)
+  {}
+
+  public void caseStart(Start node)
+  {
+    inStart(node);
+    node.getPGrammar().apply(this);
+    node.getEOF().apply(this);
+    outStart(node);
+  }
+
+  public void inAGrammar(AGrammar node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAGrammar(AGrammar node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAGrammar(AGrammar node)
+  {
+    inAGrammar(node);
+    {
+      Object temp[] = node.getPackage().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((TPkgId) temp[i]).apply(this);
+      }
+    }
+    if(node.getHelpers() != null)
+    {
+      node.getHelpers().apply(this);
+    }
+    if(node.getStates() != null)
+    {
+      node.getStates().apply(this);
+    }
+    if(node.getTokens() != null)
+    {
+      node.getTokens().apply(this);
+    }
+    if(node.getIgnTokens() != null)
+    {
+      node.getIgnTokens().apply(this);
+    }
+    if(node.getProductions() != null)
+    {
+      node.getProductions().apply(this);
+    }
+    if(node.getAst() != null)
+    {
+      node.getAst().apply(this);
+    }
+    outAGrammar(node);
+  }
+
+  public void inAHelpers(AHelpers node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAHelpers(AHelpers node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAHelpers(AHelpers node)
+  {
+    inAHelpers(node);
+    {
+      Object temp[] = node.getHelperDefs().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PHelperDef) temp[i]).apply(this);
+      }
+    }
+    outAHelpers(node);
+  }
+
+  public void inAHelperDef(AHelperDef node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAHelperDef(AHelperDef node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAHelperDef(AHelperDef node)
+  {
+    inAHelperDef(node);
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    if(node.getRegExp() != null)
+    {
+      node.getRegExp().apply(this);
+    }
+    outAHelperDef(node);
+  }
+
+  public void inAStates(AStates node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAStates(AStates node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAStates(AStates node)
+  {
+    inAStates(node);
+    {
+      Object temp[] = node.getListId().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((TId) temp[i]).apply(this);
+      }
+    }
+    outAStates(node);
+  }
+
+  public void inATokens(ATokens node)
+  {
+    defaultIn(node);
+  }
+
+  public void outATokens(ATokens node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseATokens(ATokens node)
+  {
+    inATokens(node);
+    {
+      Object temp[] = node.getTokenDefs().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PTokenDef) temp[i]).apply(this);
+      }
+    }
+    outATokens(node);
+  }
+
+  public void inATokenDef(ATokenDef node)
+  {
+    defaultIn(node);
+  }
+
+  public void outATokenDef(ATokenDef node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseATokenDef(ATokenDef node)
+  {
+    inATokenDef(node);
+    if(node.getStateList() != null)
+    {
+      node.getStateList().apply(this);
+    }
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    if(node.getRegExp() != null)
+    {
+      node.getRegExp().apply(this);
+    }
+    if(node.getSlash() != null)
+    {
+      node.getSlash().apply(this);
+    }
+    if(node.getLookAhead() != null)
+    {
+      node.getLookAhead().apply(this);
+    }
+    outATokenDef(node);
+  }
+
+  public void inAStateList(AStateList node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAStateList(AStateList node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAStateList(AStateList node)
+  {
+    inAStateList(node);
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    if(node.getTransition() != null)
+    {
+      node.getTransition().apply(this);
+    }
+    {
+      Object temp[] = node.getStateLists().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PStateListTail) temp[i]).apply(this);
+      }
+    }
+    outAStateList(node);
+  }
+
+  public void inAStateListTail(AStateListTail node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAStateListTail(AStateListTail node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAStateListTail(AStateListTail node)
+  {
+    inAStateListTail(node);
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    if(node.getTransition() != null)
+    {
+      node.getTransition().apply(this);
+    }
+    outAStateListTail(node);
+  }
+
+  public void inATransition(ATransition node)
+  {
+    defaultIn(node);
+  }
+
+  public void outATransition(ATransition node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseATransition(ATransition node)
+  {
+    inATransition(node);
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    outATransition(node);
+  }
+
+  public void inAIgnTokens(AIgnTokens node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAIgnTokens(AIgnTokens node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAIgnTokens(AIgnTokens node)
+  {
+    inAIgnTokens(node);
+    {
+      Object temp[] = node.getListId().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((TId) temp[i]).apply(this);
+      }
+    }
+    outAIgnTokens(node);
+  }
+
+  public void inARegExp(ARegExp node)
+  {
+    defaultIn(node);
+  }
+
+  public void outARegExp(ARegExp node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseARegExp(ARegExp node)
+  {
+    inARegExp(node);
+    {
+      Object temp[] = node.getConcats().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PConcat) temp[i]).apply(this);
+      }
+    }
+    outARegExp(node);
+  }
+
+  public void inAConcat(AConcat node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAConcat(AConcat node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAConcat(AConcat node)
+  {
+    inAConcat(node);
+    {
+      Object temp[] = node.getUnExps().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PUnExp) temp[i]).apply(this);
+      }
+    }
+    outAConcat(node);
+  }
+
+  public void inAUnExp(AUnExp node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAUnExp(AUnExp node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAUnExp(AUnExp node)
+  {
+    inAUnExp(node);
+    if(node.getBasic() != null)
+    {
+      node.getBasic().apply(this);
+    }
+    if(node.getUnOp() != null)
+    {
+      node.getUnOp().apply(this);
+    }
+    outAUnExp(node);
+  }
+
+  public void inACharBasic(ACharBasic node)
+  {
+    defaultIn(node);
+  }
+
+  public void outACharBasic(ACharBasic node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseACharBasic(ACharBasic node)
+  {
+    inACharBasic(node);
+    if(node.getChar() != null)
+    {
+      node.getChar().apply(this);
+    }
+    outACharBasic(node);
+  }
+
+  public void inASetBasic(ASetBasic node)
+  {
+    defaultIn(node);
+  }
+
+  public void outASetBasic(ASetBasic node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseASetBasic(ASetBasic node)
+  {
+    inASetBasic(node);
+    if(node.getSet() != null)
+    {
+      node.getSet().apply(this);
+    }
+    outASetBasic(node);
+  }
+
+  public void inAStringBasic(AStringBasic node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAStringBasic(AStringBasic node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAStringBasic(AStringBasic node)
+  {
+    inAStringBasic(node);
+    if(node.getString() != null)
+    {
+      node.getString().apply(this);
+    }
+    outAStringBasic(node);
+  }
+
+  public void inAIdBasic(AIdBasic node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAIdBasic(AIdBasic node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAIdBasic(AIdBasic node)
+  {
+    inAIdBasic(node);
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    outAIdBasic(node);
+  }
+
+  public void inARegExpBasic(ARegExpBasic node)
+  {
+    defaultIn(node);
+  }
+
+  public void outARegExpBasic(ARegExpBasic node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseARegExpBasic(ARegExpBasic node)
+  {
+    inARegExpBasic(node);
+    if(node.getRegExp() != null)
+    {
+      node.getRegExp().apply(this);
+    }
+    outARegExpBasic(node);
+  }
+
+  public void inACharChar(ACharChar node)
+  {
+    defaultIn(node);
+  }
+
+  public void outACharChar(ACharChar node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseACharChar(ACharChar node)
+  {
+    inACharChar(node);
+    if(node.getChar() != null)
+    {
+      node.getChar().apply(this);
+    }
+    outACharChar(node);
+  }
+
+  public void inADecChar(ADecChar node)
+  {
+    defaultIn(node);
+  }
+
+  public void outADecChar(ADecChar node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseADecChar(ADecChar node)
+  {
+    inADecChar(node);
+    if(node.getDecChar() != null)
+    {
+      node.getDecChar().apply(this);
+    }
+    outADecChar(node);
+  }
+
+  public void inAHexChar(AHexChar node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAHexChar(AHexChar node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAHexChar(AHexChar node)
+  {
+    inAHexChar(node);
+    if(node.getHexChar() != null)
+    {
+      node.getHexChar().apply(this);
+    }
+    outAHexChar(node);
+  }
+
+  public void inAOperationSet(AOperationSet node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAOperationSet(AOperationSet node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAOperationSet(AOperationSet node)
+  {
+    inAOperationSet(node);
+    if(node.getLeft() != null)
+    {
+      node.getLeft().apply(this);
+    }
+    if(node.getBinOp() != null)
+    {
+      node.getBinOp().apply(this);
+    }
+    if(node.getRight() != null)
+    {
+      node.getRight().apply(this);
+    }
+    outAOperationSet(node);
+  }
+
+  public void inAIntervalSet(AIntervalSet node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAIntervalSet(AIntervalSet node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAIntervalSet(AIntervalSet node)
+  {
+    inAIntervalSet(node);
+    if(node.getLeft() != null)
+    {
+      node.getLeft().apply(this);
+    }
+    if(node.getRight() != null)
+    {
+      node.getRight().apply(this);
+    }
+    outAIntervalSet(node);
+  }
+
+  public void inAStarUnOp(AStarUnOp node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAStarUnOp(AStarUnOp node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAStarUnOp(AStarUnOp node)
+  {
+    inAStarUnOp(node);
+    if(node.getStar() != null)
+    {
+      node.getStar().apply(this);
+    }
+    outAStarUnOp(node);
+  }
+
+  public void inAQMarkUnOp(AQMarkUnOp node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAQMarkUnOp(AQMarkUnOp node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAQMarkUnOp(AQMarkUnOp node)
+  {
+    inAQMarkUnOp(node);
+    if(node.getQMark() != null)
+    {
+      node.getQMark().apply(this);
+    }
+    outAQMarkUnOp(node);
+  }
+
+  public void inAPlusUnOp(APlusUnOp node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAPlusUnOp(APlusUnOp node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAPlusUnOp(APlusUnOp node)
+  {
+    inAPlusUnOp(node);
+    if(node.getPlus() != null)
+    {
+      node.getPlus().apply(this);
+    }
+    outAPlusUnOp(node);
+  }
+
+  public void inAPlusBinOp(APlusBinOp node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAPlusBinOp(APlusBinOp node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAPlusBinOp(APlusBinOp node)
+  {
+    inAPlusBinOp(node);
+    outAPlusBinOp(node);
+  }
+
+  public void inAMinusBinOp(AMinusBinOp node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAMinusBinOp(AMinusBinOp node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAMinusBinOp(AMinusBinOp node)
+  {
+    inAMinusBinOp(node);
+    outAMinusBinOp(node);
+  }
+
+  public void inAProductions(AProductions node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAProductions(AProductions node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAProductions(AProductions node)
+  {
+    inAProductions(node);
+    {
+      Object temp[] = node.getProds().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PProd) temp[i]).apply(this);
+      }
+    }
+    outAProductions(node);
+  }
+
+  public void inAProd(AProd node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAProd(AProd node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAProd(AProd node)
+  {
+    inAProd(node);
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    if(node.getArrow() != null)
+    {
+      node.getArrow().apply(this);
+    }
+    {
+      Object temp[] = node.getProdTransform().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PElem) temp[i]).apply(this);
+      }
+    }
+    {
+      Object temp[] = node.getAlts().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PAlt) temp[i]).apply(this);
+      }
+    }
+    outAProd(node);
+  }
+
+  public void inAAlt(AAlt node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAAlt(AAlt node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAAlt(AAlt node)
+  {
+    inAAlt(node);
+    if(node.getAltName() != null)
+    {
+      node.getAltName().apply(this);
+    }
+    {
+      Object temp[] = node.getElems().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PElem) temp[i]).apply(this);
+      }
+    }
+    if(node.getAltTransform() != null)
+    {
+      node.getAltTransform().apply(this);
+    }
+    outAAlt(node);
+  }
+
+  public void inAAltTransform(AAltTransform node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAAltTransform(AAltTransform node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAAltTransform(AAltTransform node)
+  {
+    inAAltTransform(node);
+    if(node.getLBrace() != null)
+    {
+      node.getLBrace().apply(this);
+    }
+    {
+      Object temp[] = node.getTerms().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PTerm) temp[i]).apply(this);
+      }
+    }
+    if(node.getRBrace() != null)
+    {
+      node.getRBrace().apply(this);
+    }
+    outAAltTransform(node);
+  }
+
+  public void inANewTerm(ANewTerm node)
+  {
+    defaultIn(node);
+  }
+
+  public void outANewTerm(ANewTerm node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseANewTerm(ANewTerm node)
+  {
+    inANewTerm(node);
+    if(node.getProdName() != null)
+    {
+      node.getProdName().apply(this);
+    }
+    if(node.getLPar() != null)
+    {
+      node.getLPar().apply(this);
+    }
+    {
+      Object temp[] = node.getParams().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PTerm) temp[i]).apply(this);
+      }
+    }
+    outANewTerm(node);
+  }
+
+  public void inAListTerm(AListTerm node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAListTerm(AListTerm node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAListTerm(AListTerm node)
+  {
+    inAListTerm(node);
+    if(node.getLBkt() != null)
+    {
+      node.getLBkt().apply(this);
+    }
+    {
+      Object temp[] = node.getListTerms().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PListTerm) temp[i]).apply(this);
+      }
+    }
+    outAListTerm(node);
+  }
+
+  public void inASimpleTerm(ASimpleTerm node)
+  {
+    defaultIn(node);
+  }
+
+  public void outASimpleTerm(ASimpleTerm node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseASimpleTerm(ASimpleTerm node)
+  {
+    inASimpleTerm(node);
+    if(node.getSpecifier() != null)
+    {
+      node.getSpecifier().apply(this);
+    }
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    if(node.getSimpleTermTail() != null)
+    {
+      node.getSimpleTermTail().apply(this);
+    }
+    outASimpleTerm(node);
+  }
+
+  public void inANullTerm(ANullTerm node)
+  {
+    defaultIn(node);
+  }
+
+  public void outANullTerm(ANullTerm node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseANullTerm(ANullTerm node)
+  {
+    inANullTerm(node);
+    outANullTerm(node);
+  }
+
+  public void inANewListTerm(ANewListTerm node)
+  {
+    defaultIn(node);
+  }
+
+  public void outANewListTerm(ANewListTerm node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseANewListTerm(ANewListTerm node)
+  {
+    inANewListTerm(node);
+    if(node.getProdName() != null)
+    {
+      node.getProdName().apply(this);
+    }
+    if(node.getLPar() != null)
+    {
+      node.getLPar().apply(this);
+    }
+    {
+      Object temp[] = node.getParams().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PTerm) temp[i]).apply(this);
+      }
+    }
+    outANewListTerm(node);
+  }
+
+  public void inASimpleListTerm(ASimpleListTerm node)
+  {
+    defaultIn(node);
+  }
+
+  public void outASimpleListTerm(ASimpleListTerm node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseASimpleListTerm(ASimpleListTerm node)
+  {
+    inASimpleListTerm(node);
+    if(node.getSpecifier() != null)
+    {
+      node.getSpecifier().apply(this);
+    }
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    if(node.getSimpleTermTail() != null)
+    {
+      node.getSimpleTermTail().apply(this);
+    }
+    outASimpleListTerm(node);
+  }
+
+  public void inAProdName(AProdName node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAProdName(AProdName node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAProdName(AProdName node)
+  {
+    inAProdName(node);
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    if(node.getProdNameTail() != null)
+    {
+      node.getProdNameTail().apply(this);
+    }
+    outAProdName(node);
+  }
+
+  public void inAElem(AElem node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAElem(AElem node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAElem(AElem node)
+  {
+    inAElem(node);
+    if(node.getElemName() != null)
+    {
+      node.getElemName().apply(this);
+    }
+    if(node.getSpecifier() != null)
+    {
+      node.getSpecifier().apply(this);
+    }
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    if(node.getUnOp() != null)
+    {
+      node.getUnOp().apply(this);
+    }
+    outAElem(node);
+  }
+
+  public void inATokenSpecifier(ATokenSpecifier node)
+  {
+    defaultIn(node);
+  }
+
+  public void outATokenSpecifier(ATokenSpecifier node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseATokenSpecifier(ATokenSpecifier node)
+  {
+    inATokenSpecifier(node);
+    outATokenSpecifier(node);
+  }
+
+  public void inAProductionSpecifier(AProductionSpecifier node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAProductionSpecifier(AProductionSpecifier node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAProductionSpecifier(AProductionSpecifier node)
+  {
+    inAProductionSpecifier(node);
+    outAProductionSpecifier(node);
+  }
+
+  public void inAAst(AAst node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAAst(AAst node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAAst(AAst node)
+  {
+    inAAst(node);
+    {
+      Object temp[] = node.getProds().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PAstProd) temp[i]).apply(this);
+      }
+    }
+    outAAst(node);
+  }
+
+  public void inAAstProd(AAstProd node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAAstProd(AAstProd node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAAstProd(AAstProd node)
+  {
+    inAAstProd(node);
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    {
+      Object temp[] = node.getAlts().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PAstAlt) temp[i]).apply(this);
+      }
+    }
+    outAAstProd(node);
+  }
+
+  public void inAAstAlt(AAstAlt node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAAstAlt(AAstAlt node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAAstAlt(AAstAlt node)
+  {
+    inAAstAlt(node);
+    if(node.getAltName() != null)
+    {
+      node.getAltName().apply(this);
+    }
+    {
+      Object temp[] = node.getElems().toArray();
+      for(int i = 0; i < temp.length; i++)
+      {
+        ((PElem) temp[i]).apply(this);
+      }
+    }
+    outAAstAlt(node);
+  }
+}
diff --git a/src/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java b/src/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java
new file mode 100644
index 0000000..b5401eb
--- /dev/null
+++ b/src/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java
@@ -0,0 +1,1129 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.analysis;
+
+import org.sablecc.sablecc.node.*;
+
+public class ReversedDepthFirstAdapter extends AnalysisAdapter
+{
+  public void inStart(Start node)
+  {
+    defaultIn(node);
+  }
+
+  public void outStart(Start node)
+  {
+    defaultOut(node);
+  }
+
+  public void defaultIn(Node node)
+  {}
+
+  public void defaultOut(Node node)
+  {}
+
+  public void caseStart(Start node)
+  {
+    inStart(node);
+    node.getEOF().apply(this);
+    node.getPGrammar().apply(this);
+    outStart(node);
+  }
+
+  public void inAGrammar(AGrammar node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAGrammar(AGrammar node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAGrammar(AGrammar node)
+  {
+    inAGrammar(node);
+    if(node.getAst() != null)
+    {
+      node.getAst().apply(this);
+    }
+    if(node.getProductions() != null)
+    {
+      node.getProductions().apply(this);
+    }
+    if(node.getIgnTokens() != null)
+    {
+      node.getIgnTokens().apply(this);
+    }
+    if(node.getTokens() != null)
+    {
+      node.getTokens().apply(this);
+    }
+    if(node.getStates() != null)
+    {
+      node.getStates().apply(this);
+    }
+    if(node.getHelpers() != null)
+    {
+      node.getHelpers().apply(this);
+    }
+    {
+      Object temp[] = node.getPackage().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((TPkgId) temp[i]).apply(this);
+      }
+    }
+    outAGrammar(node);
+  }
+
+  public void inAHelpers(AHelpers node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAHelpers(AHelpers node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAHelpers(AHelpers node)
+  {
+    inAHelpers(node);
+    {
+      Object temp[] = node.getHelperDefs().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((PHelperDef) temp[i]).apply(this);
+      }
+    }
+    outAHelpers(node);
+  }
+
+  public void inAHelperDef(AHelperDef node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAHelperDef(AHelperDef node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAHelperDef(AHelperDef node)
+  {
+    inAHelperDef(node);
+    if(node.getRegExp() != null)
+    {
+      node.getRegExp().apply(this);
+    }
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    outAHelperDef(node);
+  }
+
+  public void inAStates(AStates node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAStates(AStates node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAStates(AStates node)
+  {
+    inAStates(node);
+    {
+      Object temp[] = node.getListId().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((TId) temp[i]).apply(this);
+      }
+    }
+    outAStates(node);
+  }
+
+  public void inATokens(ATokens node)
+  {
+    defaultIn(node);
+  }
+
+  public void outATokens(ATokens node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseATokens(ATokens node)
+  {
+    inATokens(node);
+    {
+      Object temp[] = node.getTokenDefs().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((PTokenDef) temp[i]).apply(this);
+      }
+    }
+    outATokens(node);
+  }
+
+  public void inATokenDef(ATokenDef node)
+  {
+    defaultIn(node);
+  }
+
+  public void outATokenDef(ATokenDef node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseATokenDef(ATokenDef node)
+  {
+    inATokenDef(node);
+    if(node.getLookAhead() != null)
+    {
+      node.getLookAhead().apply(this);
+    }
+    if(node.getSlash() != null)
+    {
+      node.getSlash().apply(this);
+    }
+    if(node.getRegExp() != null)
+    {
+      node.getRegExp().apply(this);
+    }
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    if(node.getStateList() != null)
+    {
+      node.getStateList().apply(this);
+    }
+    outATokenDef(node);
+  }
+
+  public void inAStateList(AStateList node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAStateList(AStateList node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAStateList(AStateList node)
+  {
+    inAStateList(node);
+    {
+      Object temp[] = node.getStateLists().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((PStateListTail) temp[i]).apply(this);
+      }
+    }
+    if(node.getTransition() != null)
+    {
+      node.getTransition().apply(this);
+    }
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    outAStateList(node);
+  }
+
+  public void inAStateListTail(AStateListTail node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAStateListTail(AStateListTail node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAStateListTail(AStateListTail node)
+  {
+    inAStateListTail(node);
+    if(node.getTransition() != null)
+    {
+      node.getTransition().apply(this);
+    }
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    outAStateListTail(node);
+  }
+
+  public void inATransition(ATransition node)
+  {
+    defaultIn(node);
+  }
+
+  public void outATransition(ATransition node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseATransition(ATransition node)
+  {
+    inATransition(node);
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    outATransition(node);
+  }
+
+  public void inAIgnTokens(AIgnTokens node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAIgnTokens(AIgnTokens node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAIgnTokens(AIgnTokens node)
+  {
+    inAIgnTokens(node);
+    {
+      Object temp[] = node.getListId().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((TId) temp[i]).apply(this);
+      }
+    }
+    outAIgnTokens(node);
+  }
+
+  public void inARegExp(ARegExp node)
+  {
+    defaultIn(node);
+  }
+
+  public void outARegExp(ARegExp node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseARegExp(ARegExp node)
+  {
+    inARegExp(node);
+    {
+      Object temp[] = node.getConcats().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((PConcat) temp[i]).apply(this);
+      }
+    }
+    outARegExp(node);
+  }
+
+  public void inAConcat(AConcat node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAConcat(AConcat node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAConcat(AConcat node)
+  {
+    inAConcat(node);
+    {
+      Object temp[] = node.getUnExps().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((PUnExp) temp[i]).apply(this);
+      }
+    }
+    outAConcat(node);
+  }
+
+  public void inAUnExp(AUnExp node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAUnExp(AUnExp node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAUnExp(AUnExp node)
+  {
+    inAUnExp(node);
+    if(node.getUnOp() != null)
+    {
+      node.getUnOp().apply(this);
+    }
+    if(node.getBasic() != null)
+    {
+      node.getBasic().apply(this);
+    }
+    outAUnExp(node);
+  }
+
+  public void inACharBasic(ACharBasic node)
+  {
+    defaultIn(node);
+  }
+
+  public void outACharBasic(ACharBasic node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseACharBasic(ACharBasic node)
+  {
+    inACharBasic(node);
+    if(node.getChar() != null)
+    {
+      node.getChar().apply(this);
+    }
+    outACharBasic(node);
+  }
+
+  public void inASetBasic(ASetBasic node)
+  {
+    defaultIn(node);
+  }
+
+  public void outASetBasic(ASetBasic node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseASetBasic(ASetBasic node)
+  {
+    inASetBasic(node);
+    if(node.getSet() != null)
+    {
+      node.getSet().apply(this);
+    }
+    outASetBasic(node);
+  }
+
+  public void inAStringBasic(AStringBasic node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAStringBasic(AStringBasic node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAStringBasic(AStringBasic node)
+  {
+    inAStringBasic(node);
+    if(node.getString() != null)
+    {
+      node.getString().apply(this);
+    }
+    outAStringBasic(node);
+  }
+
+  public void inAIdBasic(AIdBasic node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAIdBasic(AIdBasic node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAIdBasic(AIdBasic node)
+  {
+    inAIdBasic(node);
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    outAIdBasic(node);
+  }
+
+  public void inARegExpBasic(ARegExpBasic node)
+  {
+    defaultIn(node);
+  }
+
+  public void outARegExpBasic(ARegExpBasic node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseARegExpBasic(ARegExpBasic node)
+  {
+    inARegExpBasic(node);
+    if(node.getRegExp() != null)
+    {
+      node.getRegExp().apply(this);
+    }
+    outARegExpBasic(node);
+  }
+
+  public void inACharChar(ACharChar node)
+  {
+    defaultIn(node);
+  }
+
+  public void outACharChar(ACharChar node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseACharChar(ACharChar node)
+  {
+    inACharChar(node);
+    if(node.getChar() != null)
+    {
+      node.getChar().apply(this);
+    }
+    outACharChar(node);
+  }
+
+  public void inADecChar(ADecChar node)
+  {
+    defaultIn(node);
+  }
+
+  public void outADecChar(ADecChar node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseADecChar(ADecChar node)
+  {
+    inADecChar(node);
+    if(node.getDecChar() != null)
+    {
+      node.getDecChar().apply(this);
+    }
+    outADecChar(node);
+  }
+
+  public void inAHexChar(AHexChar node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAHexChar(AHexChar node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAHexChar(AHexChar node)
+  {
+    inAHexChar(node);
+    if(node.getHexChar() != null)
+    {
+      node.getHexChar().apply(this);
+    }
+    outAHexChar(node);
+  }
+
+  public void inAOperationSet(AOperationSet node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAOperationSet(AOperationSet node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAOperationSet(AOperationSet node)
+  {
+    inAOperationSet(node);
+    if(node.getRight() != null)
+    {
+      node.getRight().apply(this);
+    }
+    if(node.getBinOp() != null)
+    {
+      node.getBinOp().apply(this);
+    }
+    if(node.getLeft() != null)
+    {
+      node.getLeft().apply(this);
+    }
+    outAOperationSet(node);
+  }
+
+  public void inAIntervalSet(AIntervalSet node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAIntervalSet(AIntervalSet node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAIntervalSet(AIntervalSet node)
+  {
+    inAIntervalSet(node);
+    if(node.getRight() != null)
+    {
+      node.getRight().apply(this);
+    }
+    if(node.getLeft() != null)
+    {
+      node.getLeft().apply(this);
+    }
+    outAIntervalSet(node);
+  }
+
+  public void inAStarUnOp(AStarUnOp node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAStarUnOp(AStarUnOp node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAStarUnOp(AStarUnOp node)
+  {
+    inAStarUnOp(node);
+    if(node.getStar() != null)
+    {
+      node.getStar().apply(this);
+    }
+    outAStarUnOp(node);
+  }
+
+  public void inAQMarkUnOp(AQMarkUnOp node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAQMarkUnOp(AQMarkUnOp node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAQMarkUnOp(AQMarkUnOp node)
+  {
+    inAQMarkUnOp(node);
+    if(node.getQMark() != null)
+    {
+      node.getQMark().apply(this);
+    }
+    outAQMarkUnOp(node);
+  }
+
+  public void inAPlusUnOp(APlusUnOp node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAPlusUnOp(APlusUnOp node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAPlusUnOp(APlusUnOp node)
+  {
+    inAPlusUnOp(node);
+    if(node.getPlus() != null)
+    {
+      node.getPlus().apply(this);
+    }
+    outAPlusUnOp(node);
+  }
+
+  public void inAPlusBinOp(APlusBinOp node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAPlusBinOp(APlusBinOp node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAPlusBinOp(APlusBinOp node)
+  {
+    inAPlusBinOp(node);
+    outAPlusBinOp(node);
+  }
+
+  public void inAMinusBinOp(AMinusBinOp node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAMinusBinOp(AMinusBinOp node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAMinusBinOp(AMinusBinOp node)
+  {
+    inAMinusBinOp(node);
+    outAMinusBinOp(node);
+  }
+
+  public void inAProductions(AProductions node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAProductions(AProductions node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAProductions(AProductions node)
+  {
+    inAProductions(node);
+    {
+      Object temp[] = node.getProds().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((PProd) temp[i]).apply(this);
+      }
+    }
+    outAProductions(node);
+  }
+
+  public void inAProd(AProd node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAProd(AProd node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAProd(AProd node)
+  {
+    inAProd(node);
+    {
+      Object temp[] = node.getAlts().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((PAlt) temp[i]).apply(this);
+      }
+    }
+    {
+      Object temp[] = node.getProdTransform().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((PElem) temp[i]).apply(this);
+      }
+    }
+    if(node.getArrow() != null)
+    {
+      node.getArrow().apply(this);
+    }
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    outAProd(node);
+  }
+
+  public void inAAlt(AAlt node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAAlt(AAlt node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAAlt(AAlt node)
+  {
+    inAAlt(node);
+    if(node.getAltTransform() != null)
+    {
+      node.getAltTransform().apply(this);
+    }
+    {
+      Object temp[] = node.getElems().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((PElem) temp[i]).apply(this);
+      }
+    }
+    if(node.getAltName() != null)
+    {
+      node.getAltName().apply(this);
+    }
+    outAAlt(node);
+  }
+
+  public void inAAltTransform(AAltTransform node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAAltTransform(AAltTransform node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAAltTransform(AAltTransform node)
+  {
+    inAAltTransform(node);
+    if(node.getRBrace() != null)
+    {
+      node.getRBrace().apply(this);
+    }
+    {
+      Object temp[] = node.getTerms().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((PTerm) temp[i]).apply(this);
+      }
+    }
+    if(node.getLBrace() != null)
+    {
+      node.getLBrace().apply(this);
+    }
+    outAAltTransform(node);
+  }
+
+  public void inANewTerm(ANewTerm node)
+  {
+    defaultIn(node);
+  }
+
+  public void outANewTerm(ANewTerm node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseANewTerm(ANewTerm node)
+  {
+    inANewTerm(node);
+    {
+      Object temp[] = node.getParams().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((PTerm) temp[i]).apply(this);
+      }
+    }
+    if(node.getLPar() != null)
+    {
+      node.getLPar().apply(this);
+    }
+    if(node.getProdName() != null)
+    {
+      node.getProdName().apply(this);
+    }
+    outANewTerm(node);
+  }
+
+  public void inAListTerm(AListTerm node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAListTerm(AListTerm node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAListTerm(AListTerm node)
+  {
+    inAListTerm(node);
+    {
+      Object temp[] = node.getListTerms().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((PListTerm) temp[i]).apply(this);
+      }
+    }
+    if(node.getLBkt() != null)
+    {
+      node.getLBkt().apply(this);
+    }
+    outAListTerm(node);
+  }
+
+  public void inASimpleTerm(ASimpleTerm node)
+  {
+    defaultIn(node);
+  }
+
+  public void outASimpleTerm(ASimpleTerm node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseASimpleTerm(ASimpleTerm node)
+  {
+    inASimpleTerm(node);
+    if(node.getSimpleTermTail() != null)
+    {
+      node.getSimpleTermTail().apply(this);
+    }
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    if(node.getSpecifier() != null)
+    {
+      node.getSpecifier().apply(this);
+    }
+    outASimpleTerm(node);
+  }
+
+  public void inANullTerm(ANullTerm node)
+  {
+    defaultIn(node);
+  }
+
+  public void outANullTerm(ANullTerm node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseANullTerm(ANullTerm node)
+  {
+    inANullTerm(node);
+    outANullTerm(node);
+  }
+
+  public void inANewListTerm(ANewListTerm node)
+  {
+    defaultIn(node);
+  }
+
+  public void outANewListTerm(ANewListTerm node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseANewListTerm(ANewListTerm node)
+  {
+    inANewListTerm(node);
+    {
+      Object temp[] = node.getParams().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((PTerm) temp[i]).apply(this);
+      }
+    }
+    if(node.getLPar() != null)
+    {
+      node.getLPar().apply(this);
+    }
+    if(node.getProdName() != null)
+    {
+      node.getProdName().apply(this);
+    }
+    outANewListTerm(node);
+  }
+
+  public void inASimpleListTerm(ASimpleListTerm node)
+  {
+    defaultIn(node);
+  }
+
+  public void outASimpleListTerm(ASimpleListTerm node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseASimpleListTerm(ASimpleListTerm node)
+  {
+    inASimpleListTerm(node);
+    if(node.getSimpleTermTail() != null)
+    {
+      node.getSimpleTermTail().apply(this);
+    }
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    if(node.getSpecifier() != null)
+    {
+      node.getSpecifier().apply(this);
+    }
+    outASimpleListTerm(node);
+  }
+
+  public void inAProdName(AProdName node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAProdName(AProdName node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAProdName(AProdName node)
+  {
+    inAProdName(node);
+    if(node.getProdNameTail() != null)
+    {
+      node.getProdNameTail().apply(this);
+    }
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    outAProdName(node);
+  }
+
+  public void inAElem(AElem node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAElem(AElem node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAElem(AElem node)
+  {
+    inAElem(node);
+    if(node.getUnOp() != null)
+    {
+      node.getUnOp().apply(this);
+    }
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    if(node.getSpecifier() != null)
+    {
+      node.getSpecifier().apply(this);
+    }
+    if(node.getElemName() != null)
+    {
+      node.getElemName().apply(this);
+    }
+    outAElem(node);
+  }
+
+  public void inATokenSpecifier(ATokenSpecifier node)
+  {
+    defaultIn(node);
+  }
+
+  public void outATokenSpecifier(ATokenSpecifier node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseATokenSpecifier(ATokenSpecifier node)
+  {
+    inATokenSpecifier(node);
+    outATokenSpecifier(node);
+  }
+
+  public void inAProductionSpecifier(AProductionSpecifier node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAProductionSpecifier(AProductionSpecifier node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAProductionSpecifier(AProductionSpecifier node)
+  {
+    inAProductionSpecifier(node);
+    outAProductionSpecifier(node);
+  }
+
+  public void inAAst(AAst node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAAst(AAst node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAAst(AAst node)
+  {
+    inAAst(node);
+    {
+      Object temp[] = node.getProds().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((PAstProd) temp[i]).apply(this);
+      }
+    }
+    outAAst(node);
+  }
+
+  public void inAAstProd(AAstProd node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAAstProd(AAstProd node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAAstProd(AAstProd node)
+  {
+    inAAstProd(node);
+    {
+      Object temp[] = node.getAlts().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((PAstAlt) temp[i]).apply(this);
+      }
+    }
+    if(node.getId() != null)
+    {
+      node.getId().apply(this);
+    }
+    outAAstProd(node);
+  }
+
+  public void inAAstAlt(AAstAlt node)
+  {
+    defaultIn(node);
+  }
+
+  public void outAAstAlt(AAstAlt node)
+  {
+    defaultOut(node);
+  }
+
+  public void caseAAstAlt(AAstAlt node)
+  {
+    inAAstAlt(node);
+    {
+      Object temp[] = node.getElems().toArray();
+      for(int i = temp.length - 1; i >= 0; i--)
+      {
+        ((PElem) temp[i]).apply(this);
+      }
+    }
+    if(node.getAltName() != null)
+    {
+      node.getAltName().apply(this);
+    }
+    outAAstAlt(node);
+  }
+}
diff --git a/src/org/sablecc/sablecc/lexer.txt b/src/org/sablecc/sablecc/lexer.txt
new file mode 100644
index 0000000..f02d14c
--- /dev/null
+++ b/src/org/sablecc/sablecc/lexer.txt
@@ -0,0 +1,423 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+Macro:LexerException
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+ at SuppressWarnings("serial")
+public class LexerException extends Exception
+{
+    public LexerException(String message)
+    {
+        super(message);
+    }
+}
+
+$
+
+Macro:LexerHeader
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import java.io.*;
+import $1$.*;
+
+ at SuppressWarnings("nls")
+public class Lexer
+{
+    protected Token token;
+    protected State state = State.$2$;
+
+    private PushbackReader in;
+    private int line;
+    private int pos;
+    private boolean cr;
+    private boolean eof;
+    private final StringBuffer text = new StringBuffer();
+
+    @SuppressWarnings("unused")
+    protected void filter() throws LexerException, IOException
+    {
+        // Do nothing
+    }
+
+    public Lexer(@SuppressWarnings("hiding") PushbackReader in)
+    {
+        this.in = in;
+    }
+ 
+    public Token peek() throws LexerException, IOException
+    {
+        while(this.token == null)
+        {
+            this.token = getToken();
+            filter();
+        }
+
+        return this.token;
+    }
+
+    public Token next() throws LexerException, IOException
+    {
+        while(this.token == null)
+        {
+            this.token = getToken();
+            filter();
+        }
+
+        Token result = this.token;
+        this.token = null;
+        return result;
+    }
+
+    protected Token getToken() throws IOException, LexerException
+    {
+        int dfa_state = 0;
+
+        int start_pos = this.pos;
+        int start_line = this.line;
+
+        int accept_state = -1;
+        int accept_token = -1;
+        int accept_length = -1;
+        int accept_pos = -1;
+        int accept_line = -1;
+
+        @SuppressWarnings("hiding") int[][][] gotoTable = Lexer.gotoTable[this.state.id()];
+        @SuppressWarnings("hiding") int[] accept = Lexer.accept[this.state.id()];
+        this.text.setLength(0);
+
+        while(true)
+        {
+            int c = getChar();
+
+            if(c != -1)
+            {
+                switch(c)
+                {
+                case 10:
+                    if(this.cr)
+                    {
+                        this.cr = false;
+                    }
+                    else
+                    {
+                        this.line++;
+                        this.pos = 0;
+                    }
+                    break;
+                case 13:
+                    this.line++;
+                    this.pos = 0;
+                    this.cr = true;
+                    break;
+                default:
+                    this.pos++;
+                    this.cr = false;
+                    break;
+                }
+
+                this.text.append((char) c);
+
+                do
+                {
+                    int oldState = (dfa_state < -1) ? (-2 -dfa_state) : dfa_state;
+
+                    dfa_state = -1;
+
+                    int[][] tmp1 =  gotoTable[oldState];
+                    int low = 0;
+                    int high = tmp1.length - 1;
+
+                    while(low <= high)
+                    {
+                        int middle = (low + high) / 2;
+                        int[] tmp2 = tmp1[middle];
+
+                        if(c < tmp2[0])
+                        {
+                            high = middle - 1;
+                        }
+                        else if(c > tmp2[1])
+                        {
+                            low = middle + 1;
+                        }
+                        else
+                        {
+                            dfa_state = tmp2[2];
+                            break;
+                        }
+                    }
+                }while(dfa_state < -1);
+            }
+            else
+            {
+                dfa_state = -1;
+            }
+
+            if(dfa_state >= 0)
+            {
+                if(accept[dfa_state] != -1)
+                {
+                    accept_state = dfa_state;
+                    accept_token = accept[dfa_state];
+                    accept_length = this.text.length();
+                    accept_pos = this.pos;
+                    accept_line = this.line;
+                }
+            }
+            else
+            {
+                if(accept_state != -1)
+                {
+                    switch(accept_token)
+                    {
+
+$
+
+Macro:LexerVariableToken
+                    case $0$:
+                        {
+                            @SuppressWarnings("hiding") Token token = new$0$(
+                                getText(accept_length),
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+
+$
+
+Macro:LexerFixedToken
+                    case $0$:
+                        {
+                            @SuppressWarnings("hiding") Token token = new$0$(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+
+$
+
+Macro:TokenSwitchHeader
+                            switch(state.id())
+                            {
+
+$
+
+Macro:TokenCase
+                                case $0$: state = State.$1$; break;
+
+$
+
+Macro:TokenSwitchTail
+                            }
+
+$
+
+Macro:LexerTokenTail
+                            return token;
+                        }
+
+$
+
+Macro:LexerBody1
+                    }
+                }
+                else
+                {
+                    if(this.text.length() > 0)
+                    {
+                        throw new LexerException(
+                            "[" + (start_line + 1) + "," + (start_pos + 1) + "]" +
+                            " Unknown token: " + this.text);
+                    }
+
+                    @SuppressWarnings("hiding") EOF token = new EOF(
+                        start_line + 1,
+                        start_pos + 1);
+                    return token;
+                }
+            }
+        }
+    }
+
+
+$
+
+Macro:LexerNewVariableToken
+    Token new$0$(@SuppressWarnings("hiding") String text, @SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new $1$(text, line, pos); }
+
+$
+
+Macro:LexerNewFixedToken
+    Token new$0$(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new $1$(line, pos); }
+
+$
+
+Macro:LexerBody2
+
+    private int getChar() throws IOException
+    {
+        if(this.eof)
+        {
+            return -1;
+        }
+
+        int result = this.in.read();
+
+        if(result == -1)
+        {
+            this.eof = true;
+        }
+
+        return result;
+    }
+
+    private void pushBack(int acceptLength) throws IOException
+    {
+        int length = this.text.length();
+        for(int i = length - 1; i >= acceptLength; i--)
+        {
+            this.eof = false;
+
+            this.in.unread(this.text.charAt(i));
+        }
+    }
+
+    protected void unread(@SuppressWarnings("hiding") Token token) throws IOException
+    {
+        @SuppressWarnings("hiding") String text = token.getText();
+        int length = text.length();
+
+        for(int i = length - 1; i >= 0; i--)
+        {
+            this.eof = false;
+
+            this.in.unread(text.charAt(i));
+        }
+
+        this.pos = token.getPos() - 1;
+        this.line = token.getLine() - 1;
+    }
+
+    private String getText(int acceptLength)
+    {
+        StringBuffer s = new StringBuffer(acceptLength);
+        for(int i = 0; i < acceptLength; i++)
+        {
+            s.append(this.text.charAt(i));
+        }
+
+        return s.toString();
+    }
+
+    private static int[][][][] gotoTable;
+/*  {
+
+$
+
+Macro:LexerAcceptHeader
+    };*/
+
+    private static int[][] accept;
+/*  {
+
+$
+
+Macro:LexerAcceptTail
+    };*/
+
+
+$
+
+Macro:LexerStateHeader
+    public static class State
+    {
+
+$
+
+Macro:LexerStateBody
+        public final static State $0$ = new State($1$);
+
+$
+
+Macro:LexerStateTail
+
+        private int id;
+
+        private State(@SuppressWarnings("hiding") int id)
+        {
+            this.id = id;
+        }
+
+        public int id()
+        {
+            return this.id;
+        }
+    }
+
+$
+
+Macro:LexerTail
+
+    static 
+    {
+        try
+        {
+            DataInputStream s = new DataInputStream(
+                new BufferedInputStream(
+                Lexer.class.getResourceAsStream("lexer.dat")));
+
+            // read gotoTable
+            int length = s.readInt();
+            gotoTable = new int[length][][][];
+            for(int i = 0; i < gotoTable.length; i++)
+            {
+                length = s.readInt();
+                gotoTable[i] = new int[length][][];
+                for(int j = 0; j < gotoTable[i].length; j++)
+                {
+                    length = s.readInt();
+                    gotoTable[i][j] = new int[length][3];
+                    for(int k = 0; k < gotoTable[i][j].length; k++)
+                    {
+                        for(int l = 0; l < 3; l++)
+                        {
+                            gotoTable[i][j][k][l] = s.readInt();
+                        }
+                    }
+                }
+            }
+
+            // read accept
+            length = s.readInt();
+            accept = new int[length][];
+            for(int i = 0; i < accept.length; i++)
+            {
+                length = s.readInt();
+                accept[i] = new int[length];
+                for(int j = 0; j < accept[i].length; j++)
+                {
+                    accept[i][j] = s.readInt();
+                }
+            }
+
+            s.close();
+        }
+        catch(Exception e)
+        {
+            throw new RuntimeException("The file \"lexer.dat\" is either missing or corrupted.");
+        }
+    }
+}
+
+$
diff --git a/src/org/sablecc/sablecc/lexer/Lexer.java b/src/org/sablecc/sablecc/lexer/Lexer.java
new file mode 100644
index 0000000..d2de0b5
--- /dev/null
+++ b/src/org/sablecc/sablecc/lexer/Lexer.java
@@ -0,0 +1,1151 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.lexer;
+
+import java.io.*;
+import java.util.*;
+import org.sablecc.sablecc.node.*;
+
+public class Lexer
+{
+  protected Token token;
+  protected State state = State.NORMAL;
+
+  private PushbackReader in;
+  private int line;
+  private int pos;
+  private boolean cr;
+  private boolean eof;
+  private final StringBuffer text = new StringBuffer();
+
+  protected void filter() throws LexerException, IOException
+    {}
+
+  public Lexer(PushbackReader in)
+  {
+    this.in = in;
+  }
+
+  public Token peek() throws LexerException, IOException
+  {
+    while(token == null)
+    {
+      token = getToken();
+      filter();
+    }
+
+    return token;
+  }
+
+  public Token next() throws LexerException, IOException
+  {
+    while(token == null)
+    {
+      token = getToken();
+      filter();
+    }
+
+    Token result = token;
+    token = null;
+    return result;
+  }
+
+  protected Token getToken() throws IOException, LexerException
+  {
+    int dfa_state = 0;
+
+    int start_pos = pos;
+    int start_line = line;
+
+    int accept_state = -1;
+    int accept_token = -1;
+    int accept_length = -1;
+    int accept_pos = -1;
+    int accept_line = -1;
+
+    int[][][] gotoTable = this.gotoTable[state.id()];
+    int[] accept = this.accept[state.id()];
+    text.setLength(0);
+
+    while(true)
+    {
+      int c = getChar();
+
+      if(c != -1)
+      {
+        switch(c)
+        {
+        case 10:
+          if(cr)
+          {
+            cr = false;
+          }
+          else
+          {
+            line++;
+            pos = 0;
+          }
+          break;
+        case 13:
+          line++;
+          pos = 0;
+          cr = true;
+          break;
+        default:
+          pos++;
+          cr = false;
+          break;
+        };
+
+        text.append((char) c);
+
+        do
+        {
+          int oldState = (dfa_state < -1) ? (-2 -dfa_state) : dfa_state;
+
+          dfa_state = -1;
+
+          int[][] tmp1 =  gotoTable[oldState];
+          int low = 0;
+          int high = tmp1.length - 1;
+
+          while(low <= high)
+          {
+            int middle = (low + high) / 2;
+            int[] tmp2 = tmp1[middle];
+
+            if(c < tmp2[0])
+            {
+              high = middle - 1;
+            }
+            else if(c > tmp2[1])
+            {
+              low = middle + 1;
+            }
+            else
+            {
+              dfa_state = tmp2[2];
+              break;
+            }
+          }
+        }
+        while(dfa_state < -1);
+      }
+      else
+      {
+        dfa_state = -1;
+      }
+
+      if(dfa_state >= 0)
+      {
+        if(accept[dfa_state] != -1)
+        {
+          accept_state = dfa_state;
+          accept_token = accept[dfa_state];
+          accept_length = text.length();
+          accept_pos = pos;
+          accept_line = line;
+        }
+      }
+      else
+      {
+        if(accept_state != -1)
+        {
+          switch(accept_token)
+          {
+          case 0:
+            {
+              Token token = new0(
+                              getText(accept_length),
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              switch(state.id())
+              {
+              case 1:
+                state = State.PACKAGE;
+                break;
+              }
+              return token;
+            }
+          case 1:
+            {
+              Token token = new1(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              switch(state.id())
+              {
+              case 0:
+                state = State.PACKAGE;
+                break;
+              }
+              return token;
+            }
+          case 2:
+            {
+              Token token = new2(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 3:
+            {
+              Token token = new3(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 4:
+            {
+              Token token = new4(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 5:
+            {
+              Token token = new5(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 6:
+            {
+              Token token = new6(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 7:
+            {
+              Token token = new7(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 8:
+            {
+              Token token = new8(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 9:
+            {
+              Token token = new9(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 10:
+            {
+              Token token = new10(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 11:
+            {
+              Token token = new11(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 12:
+            {
+              Token token = new12(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 13:
+            {
+              Token token = new13(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 14:
+            {
+              Token token = new14(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 15:
+            {
+              Token token = new15(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 16:
+            {
+              Token token = new16(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              switch(state.id())
+              {
+              case 0:
+                state = State.NORMAL;
+                break;
+              case 1:
+                state = State.NORMAL;
+                break;
+              }
+              return token;
+            }
+          case 17:
+            {
+              Token token = new17(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 18:
+            {
+              Token token = new18(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 19:
+            {
+              Token token = new19(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 20:
+            {
+              Token token = new20(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 21:
+            {
+              Token token = new21(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 22:
+            {
+              Token token = new22(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 23:
+            {
+              Token token = new23(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 24:
+            {
+              Token token = new24(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 25:
+            {
+              Token token = new25(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 26:
+            {
+              Token token = new26(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 27:
+            {
+              Token token = new27(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 28:
+            {
+              Token token = new28(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 29:
+            {
+              Token token = new29(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 30:
+            {
+              Token token = new30(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 31:
+            {
+              Token token = new31(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 32:
+            {
+              Token token = new32(
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 33:
+            {
+              Token token = new33(
+                              getText(accept_length),
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 34:
+            {
+              Token token = new34(
+                              getText(accept_length),
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 35:
+            {
+              Token token = new35(
+                              getText(accept_length),
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 36:
+            {
+              Token token = new36(
+                              getText(accept_length),
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 37:
+            {
+              Token token = new37(
+                              getText(accept_length),
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 38:
+            {
+              Token token = new38(
+                              getText(accept_length),
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          case 39:
+            {
+              Token token = new39(
+                              getText(accept_length),
+                              start_line + 1,
+                              start_pos + 1);
+              pushBack(accept_length);
+              pos = accept_pos;
+              line = accept_line;
+              return token;
+            }
+          }
+        }
+        else
+        {
+          if(text.length() > 0)
+          {
+            throw new LexerException(
+              "[" + (start_line + 1) + "," + (start_pos + 1) + "]" +
+              " Unknown token: " + text);
+          }
+          else
+          {
+            EOF token = new EOF(
+                          start_line + 1,
+                          start_pos + 1);
+            return token;
+          }
+        }
+      }
+    }
+  }
+
+  Token new0(String text, int line, int pos)
+  {
+    return new TPkgId(text, line, pos);
+  }
+  Token new1(int line, int pos)
+  {
+    return new TPackage(line, pos);
+  }
+  Token new2(int line, int pos)
+  {
+    return new TStates(line, pos);
+  }
+  Token new3(int line, int pos)
+  {
+    return new THelpers(line, pos);
+  }
+  Token new4(int line, int pos)
+  {
+    return new TTokens(line, pos);
+  }
+  Token new5(int line, int pos)
+  {
+    return new TIgnored(line, pos);
+  }
+  Token new6(int line, int pos)
+  {
+    return new TProductions(line, pos);
+  }
+  Token new7(int line, int pos)
+  {
+    return new TAbstract(line, pos);
+  }
+  Token new8(int line, int pos)
+  {
+    return new TSyntax(line, pos);
+  }
+  Token new9(int line, int pos)
+  {
+    return new TTree(line, pos);
+  }
+  Token new10(int line, int pos)
+  {
+    return new TNew(line, pos);
+  }
+  Token new11(int line, int pos)
+  {
+    return new TNull(line, pos);
+  }
+  Token new12(int line, int pos)
+  {
+    return new TTokenSpecifier(line, pos);
+  }
+  Token new13(int line, int pos)
+  {
+    return new TProductionSpecifier(line, pos);
+  }
+  Token new14(int line, int pos)
+  {
+    return new TDot(line, pos);
+  }
+  Token new15(int line, int pos)
+  {
+    return new TDDot(line, pos);
+  }
+  Token new16(int line, int pos)
+  {
+    return new TSemicolon(line, pos);
+  }
+  Token new17(int line, int pos)
+  {
+    return new TEqual(line, pos);
+  }
+  Token new18(int line, int pos)
+  {
+    return new TLBkt(line, pos);
+  }
+  Token new19(int line, int pos)
+  {
+    return new TRBkt(line, pos);
+  }
+  Token new20(int line, int pos)
+  {
+    return new TLPar(line, pos);
+  }
+  Token new21(int line, int pos)
+  {
+    return new TRPar(line, pos);
+  }
+  Token new22(int line, int pos)
+  {
+    return new TLBrace(line, pos);
+  }
+  Token new23(int line, int pos)
+  {
+    return new TRBrace(line, pos);
+  }
+  Token new24(int line, int pos)
+  {
+    return new TPlus(line, pos);
+  }
+  Token new25(int line, int pos)
+  {
+    return new TMinus(line, pos);
+  }
+  Token new26(int line, int pos)
+  {
+    return new TQMark(line, pos);
+  }
+  Token new27(int line, int pos)
+  {
+    return new TStar(line, pos);
+  }
+  Token new28(int line, int pos)
+  {
+    return new TBar(line, pos);
+  }
+  Token new29(int line, int pos)
+  {
+    return new TComma(line, pos);
+  }
+  Token new30(int line, int pos)
+  {
+    return new TSlash(line, pos);
+  }
+  Token new31(int line, int pos)
+  {
+    return new TArrow(line, pos);
+  }
+  Token new32(int line, int pos)
+  {
+    return new TColon(line, pos);
+  }
+  Token new33(String text, int line, int pos)
+  {
+    return new TId(text, line, pos);
+  }
+  Token new34(String text, int line, int pos)
+  {
+    return new TChar(text, line, pos);
+  }
+  Token new35(String text, int line, int pos)
+  {
+    return new TDecChar(text, line, pos);
+  }
+  Token new36(String text, int line, int pos)
+  {
+    return new THexChar(text, line, pos);
+  }
+  Token new37(String text, int line, int pos)
+  {
+    return new TString(text, line, pos);
+  }
+  Token new38(String text, int line, int pos)
+  {
+    return new TBlank(text, line, pos);
+  }
+  Token new39(String text, int line, int pos)
+  {
+    return new TComment(text, line, pos);
+  }
+
+  private int getChar() throws IOException
+  {
+    if(eof)
+    {
+      return -1;
+    }
+
+    int result = in.read();
+
+    if(result == -1)
+    {
+      eof = true;
+    }
+
+    return result;
+  }
+
+  private void pushBack(int acceptLength) throws IOException
+  {
+    int length = text.length();
+    for(int i = length - 1; i >= acceptLength; i--)
+    {
+      eof = false;
+
+      in.unread(text.charAt(i));
+    }
+  }
+
+  protected void unread(Token token) throws IOException
+  {
+    String text = token.getText();
+    int length = text.length();
+
+    for(int i = length - 1; i >= 0; i--)
+    {
+      eof = false;
+
+      in.unread(text.charAt(i));
+    }
+
+    pos = token.getPos() - 1;
+    line = token.getLine() - 1;
+  }
+
+  private String getText(int acceptLength)
+  {
+    StringBuffer s = new StringBuffer(acceptLength);
+    for(int i = 0; i < acceptLength; i++)
+    {
+      s.append(text.charAt(i));
+    }
+
+    return s.toString();
+  }
+
+  private static int[][][][] gotoTable;
+  /*  {
+          { // NORMAL
+              {{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, {39, 39, 5}, {40, 40, 6}, {41, 41, 7}, {42, 42, 8}, {43, 43, 9}, {44, 44, 10}, {45, 45, 11}, {46, 46, 12}, {47, 47, 13}, {48, 48, 14}, {49, 57, 15}, {58, 58, 16}, {59, 59, 17}, {61, 61, 18}, {63, 63, 19}, {65, 65, 20}, {72, 72, 21}, {73, 73, 22}, {78, 78, 23}, {80, 80, 24}, {83, 83, 25}, {84, 84, 26}, {91, 91, 27}, {93, 93, 28}, {97, 122, 29}, {123, 123, 30}, {124, 124, 31}, {125, 125, 32}, },
+              {{9, 32, -2}, },
+              {{9, 32, -2}, },
+              {{9, 9, 1}, {10, 10, 33}, {13, 32, -2}, },
+              {{9, 32, -2}, },
+              {{0, 9, 34}, {11, 12, 34}, {14, 38, 34}, {39, 39, 35}, {40, 65535, 34}, },
+              {},
+              {},
+              {},
+              {},
+              {},
+              {{62, 62, 36}, },
+              {{46, 46, 37}, },
+              {{42, 42, 38}, {47, 47, 39}, },
+              {{48, 57, 15}, {88, 88, 40}, {120, 120, 41}, },
+              {{48, 57, 15}, },
+              {},
+              {},
+              {},
+              {},
+              {{98, 98, 42}, },
+              {{101, 101, 43}, },
+              {{103, 103, 44}, },
+              {{101, 101, 45}, {117, 117, 46}, },
+              {{97, 97, 47}, {114, 114, 48}, },
+              {{116, 116, 49}, {121, 121, 50}, },
+              {{111, 111, 51}, {114, 114, 52}, },
+              {},
+              {},
+              {{48, 57, 53}, {95, 95, 54}, {97, 122, 55}, },
+              {},
+              {},
+              {},
+              {{9, 32, -2}, },
+              {{0, 9, 56}, {11, 12, 56}, {14, 38, 56}, {39, 39, 57}, {40, 65535, 56}, },
+              {{39, 39, 58}, },
+              {},
+              {},
+              {{0, 41, 59}, {42, 42, 60}, {43, 65535, 59}, },
+              {{0, 9, 61}, {10, 10, 62}, {11, 12, 61}, {13, 13, 63}, {14, 65535, 61}, },
+              {{48, 57, 64}, {65, 70, 64}, {97, 102, 64}, },
+              {{48, 102, -42}, },
+              {{115, 115, 65}, },
+              {{108, 108, 66}, },
+              {{110, 110, 67}, },
+              {{119, 119, 68}, },
+              {{108, 108, 69}, },
+              {{99, 99, 70}, },
+              {{111, 111, 71}, },
+              {{97, 97, 72}, },
+              {{110, 110, 73}, },
+              {{107, 107, 74}, },
+              {{101, 101, 75}, },
+              {{48, 122, -31}, },
+              {{97, 122, 76}, },
+              {{48, 122, -31}, },
+              {{0, 38, -36}, {39, 39, 77}, {40, 65535, 56}, },
+              {},
+              {},
+              {{0, 65535, -40}, },
+              {{0, 41, 78}, {42, 42, 60}, {43, 46, 78}, {47, 47, 79}, {48, 65535, 78}, },
+              {{0, 65535, -41}, },
+              {},
+              {{10, 10, 80}, },
+              {{48, 102, -42}, },
+              {{116, 116, 81}, },
+              {{112, 112, 82}, },
+              {{111, 111, 83}, },
+              {},
+              {{108, 108, 84}, },
+              {{107, 107, 85}, },
+              {{100, 100, 86}, },
+              {{116, 116, 87}, },
+              {{116, 116, 88}, },
+              {{101, 101, 89}, },
+              {{101, 101, 90}, },
+              {{48, 57, 91}, {95, 95, 54}, {97, 122, 92}, },
+              {},
+              {{0, 41, 93}, {42, 42, 94}, {43, 65535, 93}, },
+              {},
+              {},
+              {{114, 114, 95}, },
+              {{101, 101, 96}, },
+              {{114, 114, 97}, },
+              {},
+              {{97, 97, 98}, },
+              {{117, 117, 99}, },
+              {{101, 101, 100}, },
+              {{97, 97, 101}, },
+              {{110, 110, 102}, },
+              {},
+              {{48, 122, -78}, },
+              {{48, 122, -78}, },
+              {{0, 65535, -80}, },
+              {{0, 41, 78}, {42, 42, 94}, {43, 65535, -62}, },
+              {{97, 97, 103}, },
+              {{114, 114, 104}, },
+              {{101, 101, 105}, },
+              {{103, 103, 106}, },
+              {{99, 99, 107}, },
+              {{115, 115, 108}, },
+              {{120, 120, 109}, },
+              {{115, 115, 110}, },
+              {{99, 99, 111}, },
+              {{115, 115, 112}, },
+              {{100, 100, 113}, },
+              {{101, 101, 114}, },
+              {{116, 116, 115}, },
+              {},
+              {},
+              {},
+              {{116, 116, 116}, },
+              {},
+              {},
+              {},
+              {{105, 105, 117}, },
+              {},
+              {{111, 111, 118}, },
+              {{110, 110, 119}, },
+              {{115, 115, 120}, },
+              {},
+          }
+          { // PACKAGE
+              {{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, {36, 36, 5}, {39, 39, 6}, {40, 40, 7}, {41, 41, 8}, {42, 42, 9}, {43, 43, 10}, {44, 44, 11}, {45, 45, 12}, {46, 46, 13}, {47, 47, 14}, {48, 48, 15}, {49, 57, 16}, {58, 58, 17}, {59, 59, 18}, {61, 61, 19}, {63, 63, 20}, {65, 65, 21}, {66, 71, 22}, {72, 72, 23}, {73, 73, 24}, {74, 77, 22}, {78, 78, 25}, {79, 79, 22}, {80, 80, 26}, {81, 82, 22}, {83, 83, 27}, {84, 84, 28}, {85, 90, 22}, {91, 91, 29}, {93, 93, 30}, {95, 95, 31} [...]
+              {{9, 32, -2}, },
+              {{9, 32, -2}, },
+              {{9, 9, 1}, {10, 10, 36}, {13, 32, -2}, },
+              {{9, 32, -2}, },
+              {{36, 36, 37}, {48, 57, 38}, {65, 90, 39}, {95, 95, 40}, {97, 122, 41}, },
+              {{0, 9, 42}, {11, 12, 42}, {14, 38, 42}, {39, 39, 43}, {40, 65535, 42}, },
+              {},
+              {},
+              {},
+              {},
+              {},
+              {{62, 62, 44}, },
+              {{46, 46, 45}, },
+              {{42, 42, 46}, {47, 47, 47}, },
+              {{48, 57, 16}, {88, 88, 48}, {120, 120, 49}, },
+              {{48, 57, 16}, },
+              {},
+              {},
+              {},
+              {},
+              {{36, 95, -7}, {97, 97, 41}, {98, 98, 50}, {99, 122, 41}, },
+              {{36, 122, -7}, },
+              {{36, 95, -7}, {97, 100, 41}, {101, 101, 51}, {102, 122, 41}, },
+              {{36, 95, -7}, {97, 102, 41}, {103, 103, 52}, {104, 122, 41}, },
+              {{36, 100, -25}, {101, 101, 53}, {102, 116, 41}, {117, 117, 54}, {118, 122, 41}, },
+              {{36, 95, -7}, {97, 113, 41}, {114, 114, 55}, {115, 122, 41}, },
+              {{36, 95, -7}, {97, 115, 41}, {116, 116, 56}, {117, 120, 41}, {121, 121, 57}, {122, 122, 41}, },
+              {{36, 95, -7}, {97, 110, 41}, {111, 111, 58}, {112, 113, 41}, {114, 114, 59}, {115, 122, 41}, },
+              {},
+              {},
+              {{36, 122, -7}, },
+              {{36, 36, 37}, {48, 57, 60}, {65, 90, 39}, {95, 95, 61}, {97, 122, 62}, },
+              {},
+              {},
+              {},
+              {{9, 32, -2}, },
+              {{36, 122, -7}, },
+              {{36, 122, -7}, },
+              {{36, 122, -7}, },
+              {{36, 122, -7}, },
+              {{36, 122, -7}, },
+              {{0, 9, 63}, {11, 12, 63}, {14, 38, 63}, {39, 39, 64}, {40, 65535, 63}, },
+              {{39, 39, 65}, },
+              {},
+              {},
+              {{0, 41, 66}, {42, 42, 67}, {43, 65535, 66}, },
+              {{0, 9, 68}, {10, 10, 69}, {11, 12, 68}, {13, 13, 70}, {14, 65535, 68}, },
+              {{48, 57, 71}, {65, 70, 71}, {97, 102, 71}, },
+              {{48, 102, -50}, },
+              {{36, 95, -7}, {97, 114, 41}, {115, 115, 72}, {116, 122, 41}, },
+              {{36, 95, -7}, {97, 107, 41}, {108, 108, 73}, {109, 122, 41}, },
+              {{36, 95, -7}, {97, 109, 41}, {110, 110, 74}, {111, 122, 41}, },
+              {{36, 95, -7}, {97, 118, 41}, {119, 119, 75}, {120, 122, 41}, },
+              {{36, 107, -53}, {108, 108, 76}, {109, 122, 41}, },
+              {{36, 110, -30}, {111, 111, 77}, {112, 122, 41}, },
+              {{36, 95, -7}, {97, 97, 78}, {98, 122, 41}, },
+              {{36, 109, -54}, {110, 110, 79}, {111, 122, 41}, },
+              {{36, 95, -7}, {97, 106, 41}, {107, 107, 80}, {108, 122, 41}, },
+              {{36, 100, -25}, {101, 101, 81}, {102, 122, 41}, },
+              {{36, 122, -34}, },
+              {{36, 95, -7}, {97, 122, 82}, },
+              {{36, 122, -34}, },
+              {{0, 38, -44}, {39, 39, 83}, {40, 65535, 63}, },
+              {},
+              {},
+              {{0, 65535, -48}, },
+              {{0, 41, 84}, {42, 42, 67}, {43, 46, 84}, {47, 47, 85}, {48, 65535, 84}, },
+              {{0, 65535, -49}, },
+              {},
+              {{10, 10, 86}, },
+              {{48, 102, -50}, },
+              {{36, 115, -29}, {116, 116, 87}, {117, 122, 41}, },
+              {{36, 95, -7}, {97, 111, 41}, {112, 112, 88}, {113, 122, 41}, },
+              {{36, 110, -30}, {111, 111, 89}, {112, 122, 41}, },
+              {{36, 122, -7}, },
+              {{36, 107, -53}, {108, 108, 90}, {109, 122, 41}, },
+              {{36, 95, -7}, {97, 99, 41}, {100, 100, 91}, {101, 122, 41}, },
+              {{36, 115, -29}, {116, 116, 92}, {117, 122, 41}, },
+              {{36, 115, -29}, {116, 116, 93}, {117, 122, 41}, },
+              {{36, 100, -25}, {101, 101, 94}, {102, 122, 41}, },
+              {{36, 100, -25}, {101, 101, 95}, {102, 122, 41}, },
+              {{36, 36, 37}, {48, 57, 96}, {65, 95, -34}, {97, 122, 97}, },
+              {},
+              {{0, 41, 98}, {42, 42, 99}, {43, 65535, 98}, },
+              {},
+              {},
+              {{36, 113, -28}, {114, 114, 100}, {115, 122, 41}, },
+              {{36, 100, -25}, {101, 101, 101}, {102, 122, 41}, },
+              {{36, 113, -28}, {114, 114, 102}, {115, 122, 41}, },
+              {{36, 122, -7}, },
+              {{36, 95, -7}, {97, 116, 41}, {117, 117, 103}, {118, 122, 41}, },
+              {{36, 100, -25}, {101, 101, 104}, {102, 122, 41}, },
+              {{36, 95, -7}, {97, 97, 105}, {98, 122, 41}, },
+              {{36, 109, -54}, {110, 110, 106}, {111, 122, 41}, },
+              {{36, 122, -7}, },
+              {{36, 122, -84}, },
+              {{36, 122, -84}, },
+              {{0, 65535, -86}, },
+              {{0, 41, 84}, {42, 42, 99}, {43, 65535, -69}, },
+              {{36, 95, -7}, {97, 97, 107}, {98, 122, 41}, },
+              {{36, 113, -28}, {114, 114, 108}, {115, 122, 41}, },
+              {{36, 100, -25}, {101, 101, 109}, {102, 122, 41}, },
+              {{36, 95, -7}, {97, 98, 41}, {99, 99, 110}, {100, 122, 41}, },
+              {{36, 114, -52}, {115, 115, 111}, {116, 122, 41}, },
+              {{36, 95, -7}, {97, 119, 41}, {120, 120, 112}, {121, 122, 41}, },
+              {{36, 114, -52}, {115, 115, 113}, {116, 122, 41}, },
+              {{36, 98, -105}, {99, 99, 114}, {100, 122, 41}, },
+              {{36, 114, -52}, {115, 115, 115}, {116, 122, 41}, },
+              {{36, 99, -79}, {100, 100, 116}, {101, 122, 41}, },
+              {{36, 115, -29}, {116, 116, 117}, {117, 122, 41}, },
+              {{36, 122, -7}, },
+              {{36, 122, -7}, },
+              {{36, 122, -7}, },
+              {{36, 115, -29}, {116, 116, 118}, {117, 122, 41}, },
+              {{36, 122, -7}, },
+              {{36, 122, -7}, },
+              {{36, 95, -7}, {97, 104, 41}, {105, 105, 119}, {106, 122, 41}, },
+              {{36, 122, -7}, },
+              {{36, 110, -30}, {111, 111, 120}, {112, 122, 41}, },
+              {{36, 109, -54}, {110, 110, 121}, {111, 122, 41}, },
+              {{36, 114, -52}, {115, 115, 122}, {116, 122, 41}, },
+              {{36, 122, -7}, },
+          }
+      };*/
+
+  private static int[][] accept;
+  /*  {
+          // NORMAL
+          {-1, 38, 38, 38, 38, -1, 20, 21, 27, 24, 29, 25, 14, 30, 35, 35, 32, 16, 17, 26, -1, -1, -1, -1, 13, -1, 12, 18, 19, 33, 22, 28, 23, 38, -1, -1, 31, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, 33, -1, 34, 34, -1, -1, -1, 39, 39, 36, -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, -1, 33, 37, -1, 39, 39, -1, -1, -1, 11, -1, -1, -1, -1, -1, 9, 33, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 8, 4, -1, 3, 5, 1, -1, 7, -1, -1, -1, 6, },
+          // PACKAGE
+          {-1, 38, 38, 38, 38, 0, -1, 20, 21, 27, 24, 29, 25, 14, 30, 35, 35, 32, 16, 17, 26, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 0, 0, 22, 28, 23, 38, 0, 0, 0, 0, 0, -1, -1, 31, 15, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 34, 34, -1, -1, -1, 39, 39, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, -1, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+   
+      };*/
+
+  public static class State
+  {
+    public final static State NORMAL = new State(0);
+    public final static State PACKAGE = new State(1);
+
+    private int id;
+
+    private State(int id)
+    {
+      this.id = id;
+    }
+
+    public int id()
+    {
+      return id;
+    }
+  }
+
+  static
+  {
+    try
+    {
+      DataInputStream s = new DataInputStream(
+                            new BufferedInputStream(
+                              Lexer.class.getResourceAsStream("lexer.dat")));
+
+      // read gotoTable
+      int length = s.readInt();
+      gotoTable = new int[length][][][];
+      for(int i = 0; i < gotoTable.length; i++)
+      {
+        length = s.readInt();
+        gotoTable[i] = new int[length][][];
+        for(int j = 0; j < gotoTable[i].length; j++)
+        {
+          length = s.readInt();
+          gotoTable[i][j] = new int[length][3];
+          for(int k = 0; k < gotoTable[i][j].length; k++)
+          {
+            for(int l = 0; l < 3; l++)
+            {
+              gotoTable[i][j][k][l] = s.readInt();
+            }
+          }
+        }
+      }
+
+      // read accept
+      length = s.readInt();
+      accept = new int[length][];
+      for(int i = 0; i < accept.length; i++)
+      {
+        length = s.readInt();
+        accept[i] = new int[length];
+        for(int j = 0; j < accept[i].length; j++)
+        {
+          accept[i][j] = s.readInt();
+        }
+      }
+
+      s.close();
+    }
+    catch(Exception e)
+    {
+      throw new RuntimeException("The file \"lexer.dat\" is either missing or corrupted.");
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/lexer/LexerException.java b/src/org/sablecc/sablecc/lexer/LexerException.java
new file mode 100644
index 0000000..3e888e4
--- /dev/null
+++ b/src/org/sablecc/sablecc/lexer/LexerException.java
@@ -0,0 +1,11 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.lexer;
+
+public class LexerException extends Exception
+{
+  public LexerException(String message)
+  {
+    super(message);
+  }
+}
diff --git a/src/org/sablecc/sablecc/lexer/lexer.dat b/src/org/sablecc/sablecc/lexer/lexer.dat
new file mode 100644
index 0000000..a5f45e3
Binary files /dev/null and b/src/org/sablecc/sablecc/lexer/lexer.dat differ
diff --git a/src/org/sablecc/sablecc/node/AAlt.java b/src/org/sablecc/sablecc/node/AAlt.java
new file mode 100644
index 0000000..97b1e8c
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AAlt.java
@@ -0,0 +1,189 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AAlt extends PAlt
+{
+  private TId _altName_;
+  private final LinkedList _elems_ = new TypedLinkedList(new Elems_Cast());
+  private PAltTransform _altTransform_;
+
+  public AAlt()
+  {}
+
+  public AAlt(
+    TId _altName_,
+    List _elems_,
+    PAltTransform _altTransform_)
+  {
+    setAltName(_altName_);
+
+    {
+      this._elems_.clear();
+      this._elems_.addAll(_elems_);
+    }
+
+    setAltTransform(_altTransform_);
+
+  }
+  public Object clone()
+  {
+    return new AAlt(
+             (TId) cloneNode(_altName_),
+             cloneList(_elems_),
+             (PAltTransform) cloneNode(_altTransform_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAAlt(this);
+  }
+
+  public TId getAltName()
+  {
+    return _altName_;
+  }
+
+  public void setAltName(TId node)
+  {
+    if(_altName_ != null)
+    {
+      _altName_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _altName_ = node;
+  }
+
+  public LinkedList getElems()
+  {
+    return _elems_;
+  }
+
+  public void setElems(List list)
+  {
+    _elems_.clear();
+    _elems_.addAll(list);
+  }
+
+  public PAltTransform getAltTransform()
+  {
+    return _altTransform_;
+  }
+
+  public void setAltTransform(PAltTransform node)
+  {
+    if(_altTransform_ != null)
+    {
+      _altTransform_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _altTransform_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_altName_)
+           + toString(_elems_)
+           + toString(_altTransform_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_altName_ == child)
+    {
+      _altName_ = null;
+      return;
+    }
+
+    if(_elems_.remove(child))
+    {
+      return;
+    }
+
+    if(_altTransform_ == child)
+    {
+      _altTransform_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_altName_ == oldChild)
+    {
+      setAltName((TId) newChild);
+      return;
+    }
+
+    for(ListIterator i = _elems_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+    if(_altTransform_ == oldChild)
+    {
+      setAltTransform((PAltTransform) newChild);
+      return;
+    }
+
+  }
+
+  private class Elems_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      PElem node = (PElem) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != AAlt.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != AAlt.this))
+      {
+        node.parent(AAlt.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AAltTransform.java b/src/org/sablecc/sablecc/node/AAltTransform.java
new file mode 100644
index 0000000..2cd658d
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AAltTransform.java
@@ -0,0 +1,189 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AAltTransform extends PAltTransform
+{
+  private TLBrace _lBrace_;
+  private final LinkedList _terms_ = new TypedLinkedList(new Terms_Cast());
+  private TRBrace _rBrace_;
+
+  public AAltTransform()
+  {}
+
+  public AAltTransform(
+    TLBrace _lBrace_,
+    List _terms_,
+    TRBrace _rBrace_)
+  {
+    setLBrace(_lBrace_);
+
+    {
+      this._terms_.clear();
+      this._terms_.addAll(_terms_);
+    }
+
+    setRBrace(_rBrace_);
+
+  }
+  public Object clone()
+  {
+    return new AAltTransform(
+             (TLBrace) cloneNode(_lBrace_),
+             cloneList(_terms_),
+             (TRBrace) cloneNode(_rBrace_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAAltTransform(this);
+  }
+
+  public TLBrace getLBrace()
+  {
+    return _lBrace_;
+  }
+
+  public void setLBrace(TLBrace node)
+  {
+    if(_lBrace_ != null)
+    {
+      _lBrace_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _lBrace_ = node;
+  }
+
+  public LinkedList getTerms()
+  {
+    return _terms_;
+  }
+
+  public void setTerms(List list)
+  {
+    _terms_.clear();
+    _terms_.addAll(list);
+  }
+
+  public TRBrace getRBrace()
+  {
+    return _rBrace_;
+  }
+
+  public void setRBrace(TRBrace node)
+  {
+    if(_rBrace_ != null)
+    {
+      _rBrace_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _rBrace_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_lBrace_)
+           + toString(_terms_)
+           + toString(_rBrace_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_lBrace_ == child)
+    {
+      _lBrace_ = null;
+      return;
+    }
+
+    if(_terms_.remove(child))
+    {
+      return;
+    }
+
+    if(_rBrace_ == child)
+    {
+      _rBrace_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_lBrace_ == oldChild)
+    {
+      setLBrace((TLBrace) newChild);
+      return;
+    }
+
+    for(ListIterator i = _terms_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+    if(_rBrace_ == oldChild)
+    {
+      setRBrace((TRBrace) newChild);
+      return;
+    }
+
+  }
+
+  private class Terms_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      PTerm node = (PTerm) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != AAltTransform.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != AAltTransform.this))
+      {
+        node.parent(AAltTransform.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AAst.java b/src/org/sablecc/sablecc/node/AAst.java
new file mode 100644
index 0000000..a7b682b
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AAst.java
@@ -0,0 +1,103 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AAst extends PAst
+{
+  private final LinkedList _prods_ = new TypedLinkedList(new Prods_Cast());
+
+  public AAst()
+  {}
+
+  public AAst(
+    List _prods_)
+  {
+    {
+      this._prods_.clear();
+      this._prods_.addAll(_prods_);
+    }
+
+  }
+  public Object clone()
+  {
+    return new AAst(
+             cloneList(_prods_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAAst(this);
+  }
+
+  public LinkedList getProds()
+  {
+    return _prods_;
+  }
+
+  public void setProds(List list)
+  {
+    _prods_.clear();
+    _prods_.addAll(list);
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_prods_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_prods_.remove(child))
+    {
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    for(ListIterator i = _prods_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+  }
+
+  private class Prods_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      PAstProd node = (PAstProd) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != AAst.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != AAst.this))
+      {
+        node.parent(AAst.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AAstAlt.java b/src/org/sablecc/sablecc/node/AAstAlt.java
new file mode 100644
index 0000000..d47495f
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AAstAlt.java
@@ -0,0 +1,146 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AAstAlt extends PAstAlt
+{
+  private TId _altName_;
+  private final LinkedList _elems_ = new TypedLinkedList(new Elems_Cast());
+
+  public AAstAlt()
+  {}
+
+  public AAstAlt(
+    TId _altName_,
+    List _elems_)
+  {
+    setAltName(_altName_);
+
+    {
+      this._elems_.clear();
+      this._elems_.addAll(_elems_);
+    }
+
+  }
+  public Object clone()
+  {
+    return new AAstAlt(
+             (TId) cloneNode(_altName_),
+             cloneList(_elems_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAAstAlt(this);
+  }
+
+  public TId getAltName()
+  {
+    return _altName_;
+  }
+
+  public void setAltName(TId node)
+  {
+    if(_altName_ != null)
+    {
+      _altName_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _altName_ = node;
+  }
+
+  public LinkedList getElems()
+  {
+    return _elems_;
+  }
+
+  public void setElems(List list)
+  {
+    _elems_.clear();
+    _elems_.addAll(list);
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_altName_)
+           + toString(_elems_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_altName_ == child)
+    {
+      _altName_ = null;
+      return;
+    }
+
+    if(_elems_.remove(child))
+    {
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_altName_ == oldChild)
+    {
+      setAltName((TId) newChild);
+      return;
+    }
+
+    for(ListIterator i = _elems_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+  }
+
+  private class Elems_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      PElem node = (PElem) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != AAstAlt.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != AAstAlt.this))
+      {
+        node.parent(AAstAlt.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AAstProd.java b/src/org/sablecc/sablecc/node/AAstProd.java
new file mode 100644
index 0000000..85ee56f
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AAstProd.java
@@ -0,0 +1,146 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AAstProd extends PAstProd
+{
+  private TId _id_;
+  private final LinkedList _alts_ = new TypedLinkedList(new Alts_Cast());
+
+  public AAstProd()
+  {}
+
+  public AAstProd(
+    TId _id_,
+    List _alts_)
+  {
+    setId(_id_);
+
+    {
+      this._alts_.clear();
+      this._alts_.addAll(_alts_);
+    }
+
+  }
+  public Object clone()
+  {
+    return new AAstProd(
+             (TId) cloneNode(_id_),
+             cloneList(_alts_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAAstProd(this);
+  }
+
+  public TId getId()
+  {
+    return _id_;
+  }
+
+  public void setId(TId node)
+  {
+    if(_id_ != null)
+    {
+      _id_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _id_ = node;
+  }
+
+  public LinkedList getAlts()
+  {
+    return _alts_;
+  }
+
+  public void setAlts(List list)
+  {
+    _alts_.clear();
+    _alts_.addAll(list);
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_id_)
+           + toString(_alts_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_id_ == child)
+    {
+      _id_ = null;
+      return;
+    }
+
+    if(_alts_.remove(child))
+    {
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_id_ == oldChild)
+    {
+      setId((TId) newChild);
+      return;
+    }
+
+    for(ListIterator i = _alts_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+  }
+
+  private class Alts_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      PAstAlt node = (PAstAlt) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != AAstProd.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != AAstProd.this))
+      {
+        node.parent(AAstProd.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/ACharBasic.java b/src/org/sablecc/sablecc/node/ACharBasic.java
new file mode 100644
index 0000000..e0c320a
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/ACharBasic.java
@@ -0,0 +1,82 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class ACharBasic extends PBasic
+{
+  private PChar _char_;
+
+  public ACharBasic()
+  {}
+
+  public ACharBasic(
+    PChar _char_)
+  {
+    setChar(_char_);
+
+  }
+  public Object clone()
+  {
+    return new ACharBasic(
+             (PChar) cloneNode(_char_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseACharBasic(this);
+  }
+
+  public PChar getChar()
+  {
+    return _char_;
+  }
+
+  public void setChar(PChar node)
+  {
+    if(_char_ != null)
+    {
+      _char_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _char_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_char_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_char_ == child)
+    {
+      _char_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_char_ == oldChild)
+    {
+      setChar((PChar) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/ACharChar.java b/src/org/sablecc/sablecc/node/ACharChar.java
new file mode 100644
index 0000000..e7cd222
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/ACharChar.java
@@ -0,0 +1,82 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class ACharChar extends PChar
+{
+  private TChar _char_;
+
+  public ACharChar()
+  {}
+
+  public ACharChar(
+    TChar _char_)
+  {
+    setChar(_char_);
+
+  }
+  public Object clone()
+  {
+    return new ACharChar(
+             (TChar) cloneNode(_char_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseACharChar(this);
+  }
+
+  public TChar getChar()
+  {
+    return _char_;
+  }
+
+  public void setChar(TChar node)
+  {
+    if(_char_ != null)
+    {
+      _char_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _char_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_char_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_char_ == child)
+    {
+      _char_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_char_ == oldChild)
+    {
+      setChar((TChar) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AConcat.java b/src/org/sablecc/sablecc/node/AConcat.java
new file mode 100644
index 0000000..41a8d0b
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AConcat.java
@@ -0,0 +1,103 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AConcat extends PConcat
+{
+  private final LinkedList _unExps_ = new TypedLinkedList(new UnExps_Cast());
+
+  public AConcat()
+  {}
+
+  public AConcat(
+    List _unExps_)
+  {
+    {
+      this._unExps_.clear();
+      this._unExps_.addAll(_unExps_);
+    }
+
+  }
+  public Object clone()
+  {
+    return new AConcat(
+             cloneList(_unExps_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAConcat(this);
+  }
+
+  public LinkedList getUnExps()
+  {
+    return _unExps_;
+  }
+
+  public void setUnExps(List list)
+  {
+    _unExps_.clear();
+    _unExps_.addAll(list);
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_unExps_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_unExps_.remove(child))
+    {
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    for(ListIterator i = _unExps_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+  }
+
+  private class UnExps_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      PUnExp node = (PUnExp) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != AConcat.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != AConcat.this))
+      {
+        node.parent(AConcat.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/ADecChar.java b/src/org/sablecc/sablecc/node/ADecChar.java
new file mode 100644
index 0000000..6807187
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/ADecChar.java
@@ -0,0 +1,82 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class ADecChar extends PChar
+{
+  private TDecChar _decChar_;
+
+  public ADecChar()
+  {}
+
+  public ADecChar(
+    TDecChar _decChar_)
+  {
+    setDecChar(_decChar_);
+
+  }
+  public Object clone()
+  {
+    return new ADecChar(
+             (TDecChar) cloneNode(_decChar_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseADecChar(this);
+  }
+
+  public TDecChar getDecChar()
+  {
+    return _decChar_;
+  }
+
+  public void setDecChar(TDecChar node)
+  {
+    if(_decChar_ != null)
+    {
+      _decChar_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _decChar_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_decChar_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_decChar_ == child)
+    {
+      _decChar_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_decChar_ == oldChild)
+    {
+      setDecChar((TDecChar) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AElem.java b/src/org/sablecc/sablecc/node/AElem.java
new file mode 100644
index 0000000..891d0b6
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AElem.java
@@ -0,0 +1,211 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AElem extends PElem
+{
+  private TId _elemName_;
+  private PSpecifier _specifier_;
+  private TId _id_;
+  private PUnOp _unOp_;
+
+  public AElem()
+  {}
+
+  public AElem(
+    TId _elemName_,
+    PSpecifier _specifier_,
+    TId _id_,
+    PUnOp _unOp_)
+  {
+    setElemName(_elemName_);
+
+    setSpecifier(_specifier_);
+
+    setId(_id_);
+
+    setUnOp(_unOp_);
+
+  }
+  public Object clone()
+  {
+    return new AElem(
+             (TId) cloneNode(_elemName_),
+             (PSpecifier) cloneNode(_specifier_),
+             (TId) cloneNode(_id_),
+             (PUnOp) cloneNode(_unOp_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAElem(this);
+  }
+
+  public TId getElemName()
+  {
+    return _elemName_;
+  }
+
+  public void setElemName(TId node)
+  {
+    if(_elemName_ != null)
+    {
+      _elemName_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _elemName_ = node;
+  }
+
+  public PSpecifier getSpecifier()
+  {
+    return _specifier_;
+  }
+
+  public void setSpecifier(PSpecifier node)
+  {
+    if(_specifier_ != null)
+    {
+      _specifier_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _specifier_ = node;
+  }
+
+  public TId getId()
+  {
+    return _id_;
+  }
+
+  public void setId(TId node)
+  {
+    if(_id_ != null)
+    {
+      _id_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _id_ = node;
+  }
+
+  public PUnOp getUnOp()
+  {
+    return _unOp_;
+  }
+
+  public void setUnOp(PUnOp node)
+  {
+    if(_unOp_ != null)
+    {
+      _unOp_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _unOp_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_elemName_)
+           + toString(_specifier_)
+           + toString(_id_)
+           + toString(_unOp_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_elemName_ == child)
+    {
+      _elemName_ = null;
+      return;
+    }
+
+    if(_specifier_ == child)
+    {
+      _specifier_ = null;
+      return;
+    }
+
+    if(_id_ == child)
+    {
+      _id_ = null;
+      return;
+    }
+
+    if(_unOp_ == child)
+    {
+      _unOp_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_elemName_ == oldChild)
+    {
+      setElemName((TId) newChild);
+      return;
+    }
+
+    if(_specifier_ == oldChild)
+    {
+      setSpecifier((PSpecifier) newChild);
+      return;
+    }
+
+    if(_id_ == oldChild)
+    {
+      setId((TId) newChild);
+      return;
+    }
+
+    if(_unOp_ == oldChild)
+    {
+      setUnOp((PUnOp) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AGrammar.java b/src/org/sablecc/sablecc/node/AGrammar.java
new file mode 100644
index 0000000..c8b4fb3
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AGrammar.java
@@ -0,0 +1,361 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AGrammar extends PGrammar
+{
+  private final LinkedList _package_ = new TypedLinkedList(new Package_Cast());
+  private PHelpers _helpers_;
+  private PStates _states_;
+  private PTokens _tokens_;
+  private PIgnTokens _ignTokens_;
+  private PProductions _productions_;
+  private PAst _ast_;
+
+  public AGrammar()
+  {}
+
+  public AGrammar(
+    List _package_,
+    PHelpers _helpers_,
+    PStates _states_,
+    PTokens _tokens_,
+    PIgnTokens _ignTokens_,
+    PProductions _productions_,
+    PAst _ast_)
+  {
+    {
+      this._package_.clear();
+      this._package_.addAll(_package_);
+    }
+
+    setHelpers(_helpers_);
+
+    setStates(_states_);
+
+    setTokens(_tokens_);
+
+    setIgnTokens(_ignTokens_);
+
+    setProductions(_productions_);
+
+    setAst(_ast_);
+
+  }
+  public Object clone()
+  {
+    return new AGrammar(
+             cloneList(_package_),
+             (PHelpers) cloneNode(_helpers_),
+             (PStates) cloneNode(_states_),
+             (PTokens) cloneNode(_tokens_),
+             (PIgnTokens) cloneNode(_ignTokens_),
+             (PProductions) cloneNode(_productions_),
+             (PAst) cloneNode(_ast_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAGrammar(this);
+  }
+
+  public LinkedList getPackage()
+  {
+    return _package_;
+  }
+
+  public void setPackage(List list)
+  {
+    _package_.clear();
+    _package_.addAll(list);
+  }
+
+  public PHelpers getHelpers()
+  {
+    return _helpers_;
+  }
+
+  public void setHelpers(PHelpers node)
+  {
+    if(_helpers_ != null)
+    {
+      _helpers_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _helpers_ = node;
+  }
+
+  public PStates getStates()
+  {
+    return _states_;
+  }
+
+  public void setStates(PStates node)
+  {
+    if(_states_ != null)
+    {
+      _states_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _states_ = node;
+  }
+
+  public PTokens getTokens()
+  {
+    return _tokens_;
+  }
+
+  public void setTokens(PTokens node)
+  {
+    if(_tokens_ != null)
+    {
+      _tokens_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _tokens_ = node;
+  }
+
+  public PIgnTokens getIgnTokens()
+  {
+    return _ignTokens_;
+  }
+
+  public void setIgnTokens(PIgnTokens node)
+  {
+    if(_ignTokens_ != null)
+    {
+      _ignTokens_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _ignTokens_ = node;
+  }
+
+  public PProductions getProductions()
+  {
+    return _productions_;
+  }
+
+  public void setProductions(PProductions node)
+  {
+    if(_productions_ != null)
+    {
+      _productions_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _productions_ = node;
+  }
+
+  public PAst getAst()
+  {
+    return _ast_;
+  }
+
+  public void setAst(PAst node)
+  {
+    if(_ast_ != null)
+    {
+      _ast_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _ast_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_package_)
+           + toString(_helpers_)
+           + toString(_states_)
+           + toString(_tokens_)
+           + toString(_ignTokens_)
+           + toString(_productions_)
+           + toString(_ast_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_package_.remove(child))
+    {
+      return;
+    }
+
+    if(_helpers_ == child)
+    {
+      _helpers_ = null;
+      return;
+    }
+
+    if(_states_ == child)
+    {
+      _states_ = null;
+      return;
+    }
+
+    if(_tokens_ == child)
+    {
+      _tokens_ = null;
+      return;
+    }
+
+    if(_ignTokens_ == child)
+    {
+      _ignTokens_ = null;
+      return;
+    }
+
+    if(_productions_ == child)
+    {
+      _productions_ = null;
+      return;
+    }
+
+    if(_ast_ == child)
+    {
+      _ast_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    for(ListIterator i = _package_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+    if(_helpers_ == oldChild)
+    {
+      setHelpers((PHelpers) newChild);
+      return;
+    }
+
+    if(_states_ == oldChild)
+    {
+      setStates((PStates) newChild);
+      return;
+    }
+
+    if(_tokens_ == oldChild)
+    {
+      setTokens((PTokens) newChild);
+      return;
+    }
+
+    if(_ignTokens_ == oldChild)
+    {
+      setIgnTokens((PIgnTokens) newChild);
+      return;
+    }
+
+    if(_productions_ == oldChild)
+    {
+      setProductions((PProductions) newChild);
+      return;
+    }
+
+    if(_ast_ == oldChild)
+    {
+      setAst((PAst) newChild);
+      return;
+    }
+
+  }
+
+  private class Package_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      TPkgId node = (TPkgId) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != AGrammar.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != AGrammar.this))
+      {
+        node.parent(AGrammar.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AHelperDef.java b/src/org/sablecc/sablecc/node/AHelperDef.java
new file mode 100644
index 0000000..d9cff12
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AHelperDef.java
@@ -0,0 +1,125 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AHelperDef extends PHelperDef
+{
+  private TId _id_;
+  private PRegExp _regExp_;
+
+  public AHelperDef()
+  {}
+
+  public AHelperDef(
+    TId _id_,
+    PRegExp _regExp_)
+  {
+    setId(_id_);
+
+    setRegExp(_regExp_);
+
+  }
+  public Object clone()
+  {
+    return new AHelperDef(
+             (TId) cloneNode(_id_),
+             (PRegExp) cloneNode(_regExp_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAHelperDef(this);
+  }
+
+  public TId getId()
+  {
+    return _id_;
+  }
+
+  public void setId(TId node)
+  {
+    if(_id_ != null)
+    {
+      _id_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _id_ = node;
+  }
+
+  public PRegExp getRegExp()
+  {
+    return _regExp_;
+  }
+
+  public void setRegExp(PRegExp node)
+  {
+    if(_regExp_ != null)
+    {
+      _regExp_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _regExp_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_id_)
+           + toString(_regExp_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_id_ == child)
+    {
+      _id_ = null;
+      return;
+    }
+
+    if(_regExp_ == child)
+    {
+      _regExp_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_id_ == oldChild)
+    {
+      setId((TId) newChild);
+      return;
+    }
+
+    if(_regExp_ == oldChild)
+    {
+      setRegExp((PRegExp) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AHelpers.java b/src/org/sablecc/sablecc/node/AHelpers.java
new file mode 100644
index 0000000..0b9caec
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AHelpers.java
@@ -0,0 +1,103 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AHelpers extends PHelpers
+{
+  private final LinkedList _helperDefs_ = new TypedLinkedList(new HelperDefs_Cast());
+
+  public AHelpers()
+  {}
+
+  public AHelpers(
+    List _helperDefs_)
+  {
+    {
+      this._helperDefs_.clear();
+      this._helperDefs_.addAll(_helperDefs_);
+    }
+
+  }
+  public Object clone()
+  {
+    return new AHelpers(
+             cloneList(_helperDefs_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAHelpers(this);
+  }
+
+  public LinkedList getHelperDefs()
+  {
+    return _helperDefs_;
+  }
+
+  public void setHelperDefs(List list)
+  {
+    _helperDefs_.clear();
+    _helperDefs_.addAll(list);
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_helperDefs_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_helperDefs_.remove(child))
+    {
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    for(ListIterator i = _helperDefs_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+  }
+
+  private class HelperDefs_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      PHelperDef node = (PHelperDef) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != AHelpers.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != AHelpers.this))
+      {
+        node.parent(AHelpers.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AHexChar.java b/src/org/sablecc/sablecc/node/AHexChar.java
new file mode 100644
index 0000000..8d047cf
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AHexChar.java
@@ -0,0 +1,82 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AHexChar extends PChar
+{
+  private THexChar _hexChar_;
+
+  public AHexChar()
+  {}
+
+  public AHexChar(
+    THexChar _hexChar_)
+  {
+    setHexChar(_hexChar_);
+
+  }
+  public Object clone()
+  {
+    return new AHexChar(
+             (THexChar) cloneNode(_hexChar_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAHexChar(this);
+  }
+
+  public THexChar getHexChar()
+  {
+    return _hexChar_;
+  }
+
+  public void setHexChar(THexChar node)
+  {
+    if(_hexChar_ != null)
+    {
+      _hexChar_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _hexChar_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_hexChar_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_hexChar_ == child)
+    {
+      _hexChar_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_hexChar_ == oldChild)
+    {
+      setHexChar((THexChar) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AIdBasic.java b/src/org/sablecc/sablecc/node/AIdBasic.java
new file mode 100644
index 0000000..a3ea1f7
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AIdBasic.java
@@ -0,0 +1,82 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AIdBasic extends PBasic
+{
+  private TId _id_;
+
+  public AIdBasic()
+  {}
+
+  public AIdBasic(
+    TId _id_)
+  {
+    setId(_id_);
+
+  }
+  public Object clone()
+  {
+    return new AIdBasic(
+             (TId) cloneNode(_id_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAIdBasic(this);
+  }
+
+  public TId getId()
+  {
+    return _id_;
+  }
+
+  public void setId(TId node)
+  {
+    if(_id_ != null)
+    {
+      _id_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _id_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_id_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_id_ == child)
+    {
+      _id_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_id_ == oldChild)
+    {
+      setId((TId) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AIgnTokens.java b/src/org/sablecc/sablecc/node/AIgnTokens.java
new file mode 100644
index 0000000..872eb27
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AIgnTokens.java
@@ -0,0 +1,103 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AIgnTokens extends PIgnTokens
+{
+  private final LinkedList _listId_ = new TypedLinkedList(new ListId_Cast());
+
+  public AIgnTokens()
+  {}
+
+  public AIgnTokens(
+    List _listId_)
+  {
+    {
+      this._listId_.clear();
+      this._listId_.addAll(_listId_);
+    }
+
+  }
+  public Object clone()
+  {
+    return new AIgnTokens(
+             cloneList(_listId_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAIgnTokens(this);
+  }
+
+  public LinkedList getListId()
+  {
+    return _listId_;
+  }
+
+  public void setListId(List list)
+  {
+    _listId_.clear();
+    _listId_.addAll(list);
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_listId_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_listId_.remove(child))
+    {
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    for(ListIterator i = _listId_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+  }
+
+  private class ListId_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      TId node = (TId) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != AIgnTokens.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != AIgnTokens.this))
+      {
+        node.parent(AIgnTokens.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AIntervalSet.java b/src/org/sablecc/sablecc/node/AIntervalSet.java
new file mode 100644
index 0000000..d9c40f9
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AIntervalSet.java
@@ -0,0 +1,125 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AIntervalSet extends PSet
+{
+  private PChar _left_;
+  private PChar _right_;
+
+  public AIntervalSet()
+  {}
+
+  public AIntervalSet(
+    PChar _left_,
+    PChar _right_)
+  {
+    setLeft(_left_);
+
+    setRight(_right_);
+
+  }
+  public Object clone()
+  {
+    return new AIntervalSet(
+             (PChar) cloneNode(_left_),
+             (PChar) cloneNode(_right_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAIntervalSet(this);
+  }
+
+  public PChar getLeft()
+  {
+    return _left_;
+  }
+
+  public void setLeft(PChar node)
+  {
+    if(_left_ != null)
+    {
+      _left_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _left_ = node;
+  }
+
+  public PChar getRight()
+  {
+    return _right_;
+  }
+
+  public void setRight(PChar node)
+  {
+    if(_right_ != null)
+    {
+      _right_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _right_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_left_)
+           + toString(_right_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_left_ == child)
+    {
+      _left_ = null;
+      return;
+    }
+
+    if(_right_ == child)
+    {
+      _right_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_left_ == oldChild)
+    {
+      setLeft((PChar) newChild);
+      return;
+    }
+
+    if(_right_ == oldChild)
+    {
+      setRight((PChar) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AListTerm.java b/src/org/sablecc/sablecc/node/AListTerm.java
new file mode 100644
index 0000000..7a0a593
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AListTerm.java
@@ -0,0 +1,146 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AListTerm extends PTerm
+{
+  private TLBkt _lBkt_;
+  private final LinkedList _listTerms_ = new TypedLinkedList(new ListTerms_Cast());
+
+  public AListTerm()
+  {}
+
+  public AListTerm(
+    TLBkt _lBkt_,
+    List _listTerms_)
+  {
+    setLBkt(_lBkt_);
+
+    {
+      this._listTerms_.clear();
+      this._listTerms_.addAll(_listTerms_);
+    }
+
+  }
+  public Object clone()
+  {
+    return new AListTerm(
+             (TLBkt) cloneNode(_lBkt_),
+             cloneList(_listTerms_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAListTerm(this);
+  }
+
+  public TLBkt getLBkt()
+  {
+    return _lBkt_;
+  }
+
+  public void setLBkt(TLBkt node)
+  {
+    if(_lBkt_ != null)
+    {
+      _lBkt_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _lBkt_ = node;
+  }
+
+  public LinkedList getListTerms()
+  {
+    return _listTerms_;
+  }
+
+  public void setListTerms(List list)
+  {
+    _listTerms_.clear();
+    _listTerms_.addAll(list);
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_lBkt_)
+           + toString(_listTerms_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_lBkt_ == child)
+    {
+      _lBkt_ = null;
+      return;
+    }
+
+    if(_listTerms_.remove(child))
+    {
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_lBkt_ == oldChild)
+    {
+      setLBkt((TLBkt) newChild);
+      return;
+    }
+
+    for(ListIterator i = _listTerms_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+  }
+
+  private class ListTerms_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      PListTerm node = (PListTerm) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != AListTerm.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != AListTerm.this))
+      {
+        node.parent(AListTerm.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AMinusBinOp.java b/src/org/sablecc/sablecc/node/AMinusBinOp.java
new file mode 100644
index 0000000..b79f005
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AMinusBinOp.java
@@ -0,0 +1,33 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AMinusBinOp extends PBinOp
+{
+
+  public AMinusBinOp()
+  {}
+  public Object clone()
+  {
+    return new AMinusBinOp();
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAMinusBinOp(this);
+  }
+
+  public String toString()
+  {
+    return "";
+  }
+
+  void removeChild(Node child)
+  {}
+
+  void replaceChild(Node oldChild, Node newChild)
+  {}
+}
diff --git a/src/org/sablecc/sablecc/node/ANewListTerm.java b/src/org/sablecc/sablecc/node/ANewListTerm.java
new file mode 100644
index 0000000..82e42e7
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/ANewListTerm.java
@@ -0,0 +1,189 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class ANewListTerm extends PListTerm
+{
+  private PProdName _prodName_;
+  private TLPar _lPar_;
+  private final LinkedList _params_ = new TypedLinkedList(new Params_Cast());
+
+  public ANewListTerm()
+  {}
+
+  public ANewListTerm(
+    PProdName _prodName_,
+    TLPar _lPar_,
+    List _params_)
+  {
+    setProdName(_prodName_);
+
+    setLPar(_lPar_);
+
+    {
+      this._params_.clear();
+      this._params_.addAll(_params_);
+    }
+
+  }
+  public Object clone()
+  {
+    return new ANewListTerm(
+             (PProdName) cloneNode(_prodName_),
+             (TLPar) cloneNode(_lPar_),
+             cloneList(_params_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseANewListTerm(this);
+  }
+
+  public PProdName getProdName()
+  {
+    return _prodName_;
+  }
+
+  public void setProdName(PProdName node)
+  {
+    if(_prodName_ != null)
+    {
+      _prodName_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _prodName_ = node;
+  }
+
+  public TLPar getLPar()
+  {
+    return _lPar_;
+  }
+
+  public void setLPar(TLPar node)
+  {
+    if(_lPar_ != null)
+    {
+      _lPar_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _lPar_ = node;
+  }
+
+  public LinkedList getParams()
+  {
+    return _params_;
+  }
+
+  public void setParams(List list)
+  {
+    _params_.clear();
+    _params_.addAll(list);
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_prodName_)
+           + toString(_lPar_)
+           + toString(_params_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_prodName_ == child)
+    {
+      _prodName_ = null;
+      return;
+    }
+
+    if(_lPar_ == child)
+    {
+      _lPar_ = null;
+      return;
+    }
+
+    if(_params_.remove(child))
+    {
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_prodName_ == oldChild)
+    {
+      setProdName((PProdName) newChild);
+      return;
+    }
+
+    if(_lPar_ == oldChild)
+    {
+      setLPar((TLPar) newChild);
+      return;
+    }
+
+    for(ListIterator i = _params_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+  }
+
+  private class Params_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      PTerm node = (PTerm) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != ANewListTerm.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != ANewListTerm.this))
+      {
+        node.parent(ANewListTerm.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/ANewTerm.java b/src/org/sablecc/sablecc/node/ANewTerm.java
new file mode 100644
index 0000000..bf8afbb
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/ANewTerm.java
@@ -0,0 +1,189 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class ANewTerm extends PTerm
+{
+  private PProdName _prodName_;
+  private TLPar _lPar_;
+  private final LinkedList _params_ = new TypedLinkedList(new Params_Cast());
+
+  public ANewTerm()
+  {}
+
+  public ANewTerm(
+    PProdName _prodName_,
+    TLPar _lPar_,
+    List _params_)
+  {
+    setProdName(_prodName_);
+
+    setLPar(_lPar_);
+
+    {
+      this._params_.clear();
+      this._params_.addAll(_params_);
+    }
+
+  }
+  public Object clone()
+  {
+    return new ANewTerm(
+             (PProdName) cloneNode(_prodName_),
+             (TLPar) cloneNode(_lPar_),
+             cloneList(_params_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseANewTerm(this);
+  }
+
+  public PProdName getProdName()
+  {
+    return _prodName_;
+  }
+
+  public void setProdName(PProdName node)
+  {
+    if(_prodName_ != null)
+    {
+      _prodName_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _prodName_ = node;
+  }
+
+  public TLPar getLPar()
+  {
+    return _lPar_;
+  }
+
+  public void setLPar(TLPar node)
+  {
+    if(_lPar_ != null)
+    {
+      _lPar_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _lPar_ = node;
+  }
+
+  public LinkedList getParams()
+  {
+    return _params_;
+  }
+
+  public void setParams(List list)
+  {
+    _params_.clear();
+    _params_.addAll(list);
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_prodName_)
+           + toString(_lPar_)
+           + toString(_params_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_prodName_ == child)
+    {
+      _prodName_ = null;
+      return;
+    }
+
+    if(_lPar_ == child)
+    {
+      _lPar_ = null;
+      return;
+    }
+
+    if(_params_.remove(child))
+    {
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_prodName_ == oldChild)
+    {
+      setProdName((PProdName) newChild);
+      return;
+    }
+
+    if(_lPar_ == oldChild)
+    {
+      setLPar((TLPar) newChild);
+      return;
+    }
+
+    for(ListIterator i = _params_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+  }
+
+  private class Params_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      PTerm node = (PTerm) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != ANewTerm.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != ANewTerm.this))
+      {
+        node.parent(ANewTerm.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/ANullTerm.java b/src/org/sablecc/sablecc/node/ANullTerm.java
new file mode 100644
index 0000000..cc08054
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/ANullTerm.java
@@ -0,0 +1,33 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class ANullTerm extends PTerm
+{
+
+  public ANullTerm()
+  {}
+  public Object clone()
+  {
+    return new ANullTerm();
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseANullTerm(this);
+  }
+
+  public String toString()
+  {
+    return "";
+  }
+
+  void removeChild(Node child)
+  {}
+
+  void replaceChild(Node oldChild, Node newChild)
+  {}
+}
diff --git a/src/org/sablecc/sablecc/node/AOperationSet.java b/src/org/sablecc/sablecc/node/AOperationSet.java
new file mode 100644
index 0000000..722a3d1
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AOperationSet.java
@@ -0,0 +1,168 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AOperationSet extends PSet
+{
+  private PBasic _left_;
+  private PBinOp _binOp_;
+  private PBasic _right_;
+
+  public AOperationSet()
+  {}
+
+  public AOperationSet(
+    PBasic _left_,
+    PBinOp _binOp_,
+    PBasic _right_)
+  {
+    setLeft(_left_);
+
+    setBinOp(_binOp_);
+
+    setRight(_right_);
+
+  }
+  public Object clone()
+  {
+    return new AOperationSet(
+             (PBasic) cloneNode(_left_),
+             (PBinOp) cloneNode(_binOp_),
+             (PBasic) cloneNode(_right_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAOperationSet(this);
+  }
+
+  public PBasic getLeft()
+  {
+    return _left_;
+  }
+
+  public void setLeft(PBasic node)
+  {
+    if(_left_ != null)
+    {
+      _left_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _left_ = node;
+  }
+
+  public PBinOp getBinOp()
+  {
+    return _binOp_;
+  }
+
+  public void setBinOp(PBinOp node)
+  {
+    if(_binOp_ != null)
+    {
+      _binOp_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _binOp_ = node;
+  }
+
+  public PBasic getRight()
+  {
+    return _right_;
+  }
+
+  public void setRight(PBasic node)
+  {
+    if(_right_ != null)
+    {
+      _right_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _right_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_left_)
+           + toString(_binOp_)
+           + toString(_right_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_left_ == child)
+    {
+      _left_ = null;
+      return;
+    }
+
+    if(_binOp_ == child)
+    {
+      _binOp_ = null;
+      return;
+    }
+
+    if(_right_ == child)
+    {
+      _right_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_left_ == oldChild)
+    {
+      setLeft((PBasic) newChild);
+      return;
+    }
+
+    if(_binOp_ == oldChild)
+    {
+      setBinOp((PBinOp) newChild);
+      return;
+    }
+
+    if(_right_ == oldChild)
+    {
+      setRight((PBasic) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/APlusBinOp.java b/src/org/sablecc/sablecc/node/APlusBinOp.java
new file mode 100644
index 0000000..047de4f
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/APlusBinOp.java
@@ -0,0 +1,33 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class APlusBinOp extends PBinOp
+{
+
+  public APlusBinOp()
+  {}
+  public Object clone()
+  {
+    return new APlusBinOp();
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAPlusBinOp(this);
+  }
+
+  public String toString()
+  {
+    return "";
+  }
+
+  void removeChild(Node child)
+  {}
+
+  void replaceChild(Node oldChild, Node newChild)
+  {}
+}
diff --git a/src/org/sablecc/sablecc/node/APlusUnOp.java b/src/org/sablecc/sablecc/node/APlusUnOp.java
new file mode 100644
index 0000000..1daee86
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/APlusUnOp.java
@@ -0,0 +1,82 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class APlusUnOp extends PUnOp
+{
+  private TPlus _plus_;
+
+  public APlusUnOp()
+  {}
+
+  public APlusUnOp(
+    TPlus _plus_)
+  {
+    setPlus(_plus_);
+
+  }
+  public Object clone()
+  {
+    return new APlusUnOp(
+             (TPlus) cloneNode(_plus_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAPlusUnOp(this);
+  }
+
+  public TPlus getPlus()
+  {
+    return _plus_;
+  }
+
+  public void setPlus(TPlus node)
+  {
+    if(_plus_ != null)
+    {
+      _plus_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _plus_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_plus_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_plus_ == child)
+    {
+      _plus_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_plus_ == oldChild)
+    {
+      setPlus((TPlus) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AProd.java b/src/org/sablecc/sablecc/node/AProd.java
new file mode 100644
index 0000000..53c37b6
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AProd.java
@@ -0,0 +1,253 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AProd extends PProd
+{
+  private TId _id_;
+  private TArrow _arrow_;
+  private final LinkedList _prodTransform_ = new TypedLinkedList(new ProdTransform_Cast());
+  private final LinkedList _alts_ = new TypedLinkedList(new Alts_Cast());
+
+  public AProd()
+  {}
+
+  public AProd(
+    TId _id_,
+    TArrow _arrow_,
+    List _prodTransform_,
+    List _alts_)
+  {
+    setId(_id_);
+
+    setArrow(_arrow_);
+
+    {
+      this._prodTransform_.clear();
+      this._prodTransform_.addAll(_prodTransform_);
+    }
+
+    {
+      this._alts_.clear();
+      this._alts_.addAll(_alts_);
+    }
+
+  }
+  public Object clone()
+  {
+    return new AProd(
+             (TId) cloneNode(_id_),
+             (TArrow) cloneNode(_arrow_),
+             cloneList(_prodTransform_),
+             cloneList(_alts_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAProd(this);
+  }
+
+  public TId getId()
+  {
+    return _id_;
+  }
+
+  public void setId(TId node)
+  {
+    if(_id_ != null)
+    {
+      _id_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _id_ = node;
+  }
+
+  public TArrow getArrow()
+  {
+    return _arrow_;
+  }
+
+  public void setArrow(TArrow node)
+  {
+    if(_arrow_ != null)
+    {
+      _arrow_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _arrow_ = node;
+  }
+
+  public LinkedList getProdTransform()
+  {
+    return _prodTransform_;
+  }
+
+  public void setProdTransform(List list)
+  {
+    _prodTransform_.clear();
+    _prodTransform_.addAll(list);
+  }
+
+  public LinkedList getAlts()
+  {
+    return _alts_;
+  }
+
+  public void setAlts(List list)
+  {
+    _alts_.clear();
+    _alts_.addAll(list);
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_id_)
+           + toString(_arrow_)
+           + toString(_prodTransform_)
+           + toString(_alts_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_id_ == child)
+    {
+      _id_ = null;
+      return;
+    }
+
+    if(_arrow_ == child)
+    {
+      _arrow_ = null;
+      return;
+    }
+
+    if(_prodTransform_.remove(child))
+    {
+      return;
+    }
+
+    if(_alts_.remove(child))
+    {
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_id_ == oldChild)
+    {
+      setId((TId) newChild);
+      return;
+    }
+
+    if(_arrow_ == oldChild)
+    {
+      setArrow((TArrow) newChild);
+      return;
+    }
+
+    for(ListIterator i = _prodTransform_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+    for(ListIterator i = _alts_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+  }
+
+  private class ProdTransform_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      PElem node = (PElem) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != AProd.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != AProd.this))
+      {
+        node.parent(AProd.this);
+      }
+
+      return node;
+    }
+  }
+
+  private class Alts_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      PAlt node = (PAlt) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != AProd.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != AProd.this))
+      {
+        node.parent(AProd.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AProdName.java b/src/org/sablecc/sablecc/node/AProdName.java
new file mode 100644
index 0000000..03a3fa1
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AProdName.java
@@ -0,0 +1,125 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AProdName extends PProdName
+{
+  private TId _id_;
+  private TId _prodNameTail_;
+
+  public AProdName()
+  {}
+
+  public AProdName(
+    TId _id_,
+    TId _prodNameTail_)
+  {
+    setId(_id_);
+
+    setProdNameTail(_prodNameTail_);
+
+  }
+  public Object clone()
+  {
+    return new AProdName(
+             (TId) cloneNode(_id_),
+             (TId) cloneNode(_prodNameTail_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAProdName(this);
+  }
+
+  public TId getId()
+  {
+    return _id_;
+  }
+
+  public void setId(TId node)
+  {
+    if(_id_ != null)
+    {
+      _id_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _id_ = node;
+  }
+
+  public TId getProdNameTail()
+  {
+    return _prodNameTail_;
+  }
+
+  public void setProdNameTail(TId node)
+  {
+    if(_prodNameTail_ != null)
+    {
+      _prodNameTail_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _prodNameTail_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_id_)
+           + toString(_prodNameTail_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_id_ == child)
+    {
+      _id_ = null;
+      return;
+    }
+
+    if(_prodNameTail_ == child)
+    {
+      _prodNameTail_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_id_ == oldChild)
+    {
+      setId((TId) newChild);
+      return;
+    }
+
+    if(_prodNameTail_ == oldChild)
+    {
+      setProdNameTail((TId) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AProductionSpecifier.java b/src/org/sablecc/sablecc/node/AProductionSpecifier.java
new file mode 100644
index 0000000..75b2c2d
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AProductionSpecifier.java
@@ -0,0 +1,33 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AProductionSpecifier extends PSpecifier
+{
+
+  public AProductionSpecifier()
+  {}
+  public Object clone()
+  {
+    return new AProductionSpecifier();
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAProductionSpecifier(this);
+  }
+
+  public String toString()
+  {
+    return "";
+  }
+
+  void removeChild(Node child)
+  {}
+
+  void replaceChild(Node oldChild, Node newChild)
+  {}
+}
diff --git a/src/org/sablecc/sablecc/node/AProductions.java b/src/org/sablecc/sablecc/node/AProductions.java
new file mode 100644
index 0000000..f3d9fc8
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AProductions.java
@@ -0,0 +1,103 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AProductions extends PProductions
+{
+  private final LinkedList _prods_ = new TypedLinkedList(new Prods_Cast());
+
+  public AProductions()
+  {}
+
+  public AProductions(
+    List _prods_)
+  {
+    {
+      this._prods_.clear();
+      this._prods_.addAll(_prods_);
+    }
+
+  }
+  public Object clone()
+  {
+    return new AProductions(
+             cloneList(_prods_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAProductions(this);
+  }
+
+  public LinkedList getProds()
+  {
+    return _prods_;
+  }
+
+  public void setProds(List list)
+  {
+    _prods_.clear();
+    _prods_.addAll(list);
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_prods_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_prods_.remove(child))
+    {
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    for(ListIterator i = _prods_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+  }
+
+  private class Prods_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      PProd node = (PProd) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != AProductions.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != AProductions.this))
+      {
+        node.parent(AProductions.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AQMarkUnOp.java b/src/org/sablecc/sablecc/node/AQMarkUnOp.java
new file mode 100644
index 0000000..497cdf4
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AQMarkUnOp.java
@@ -0,0 +1,82 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AQMarkUnOp extends PUnOp
+{
+  private TQMark _qMark_;
+
+  public AQMarkUnOp()
+  {}
+
+  public AQMarkUnOp(
+    TQMark _qMark_)
+  {
+    setQMark(_qMark_);
+
+  }
+  public Object clone()
+  {
+    return new AQMarkUnOp(
+             (TQMark) cloneNode(_qMark_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAQMarkUnOp(this);
+  }
+
+  public TQMark getQMark()
+  {
+    return _qMark_;
+  }
+
+  public void setQMark(TQMark node)
+  {
+    if(_qMark_ != null)
+    {
+      _qMark_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _qMark_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_qMark_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_qMark_ == child)
+    {
+      _qMark_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_qMark_ == oldChild)
+    {
+      setQMark((TQMark) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/ARegExp.java b/src/org/sablecc/sablecc/node/ARegExp.java
new file mode 100644
index 0000000..d07a142
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/ARegExp.java
@@ -0,0 +1,103 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class ARegExp extends PRegExp
+{
+  private final LinkedList _concats_ = new TypedLinkedList(new Concats_Cast());
+
+  public ARegExp()
+  {}
+
+  public ARegExp(
+    List _concats_)
+  {
+    {
+      this._concats_.clear();
+      this._concats_.addAll(_concats_);
+    }
+
+  }
+  public Object clone()
+  {
+    return new ARegExp(
+             cloneList(_concats_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseARegExp(this);
+  }
+
+  public LinkedList getConcats()
+  {
+    return _concats_;
+  }
+
+  public void setConcats(List list)
+  {
+    _concats_.clear();
+    _concats_.addAll(list);
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_concats_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_concats_.remove(child))
+    {
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    for(ListIterator i = _concats_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+  }
+
+  private class Concats_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      PConcat node = (PConcat) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != ARegExp.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != ARegExp.this))
+      {
+        node.parent(ARegExp.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/ARegExpBasic.java b/src/org/sablecc/sablecc/node/ARegExpBasic.java
new file mode 100644
index 0000000..208d45a
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/ARegExpBasic.java
@@ -0,0 +1,82 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class ARegExpBasic extends PBasic
+{
+  private PRegExp _regExp_;
+
+  public ARegExpBasic()
+  {}
+
+  public ARegExpBasic(
+    PRegExp _regExp_)
+  {
+    setRegExp(_regExp_);
+
+  }
+  public Object clone()
+  {
+    return new ARegExpBasic(
+             (PRegExp) cloneNode(_regExp_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseARegExpBasic(this);
+  }
+
+  public PRegExp getRegExp()
+  {
+    return _regExp_;
+  }
+
+  public void setRegExp(PRegExp node)
+  {
+    if(_regExp_ != null)
+    {
+      _regExp_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _regExp_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_regExp_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_regExp_ == child)
+    {
+      _regExp_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_regExp_ == oldChild)
+    {
+      setRegExp((PRegExp) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/ASetBasic.java b/src/org/sablecc/sablecc/node/ASetBasic.java
new file mode 100644
index 0000000..eb4ad7f
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/ASetBasic.java
@@ -0,0 +1,82 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class ASetBasic extends PBasic
+{
+  private PSet _set_;
+
+  public ASetBasic()
+  {}
+
+  public ASetBasic(
+    PSet _set_)
+  {
+    setSet(_set_);
+
+  }
+  public Object clone()
+  {
+    return new ASetBasic(
+             (PSet) cloneNode(_set_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseASetBasic(this);
+  }
+
+  public PSet getSet()
+  {
+    return _set_;
+  }
+
+  public void setSet(PSet node)
+  {
+    if(_set_ != null)
+    {
+      _set_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _set_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_set_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_set_ == child)
+    {
+      _set_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_set_ == oldChild)
+    {
+      setSet((PSet) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/ASimpleListTerm.java b/src/org/sablecc/sablecc/node/ASimpleListTerm.java
new file mode 100644
index 0000000..c97addb
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/ASimpleListTerm.java
@@ -0,0 +1,168 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class ASimpleListTerm extends PListTerm
+{
+  private PSpecifier _specifier_;
+  private TId _id_;
+  private TId _simpleTermTail_;
+
+  public ASimpleListTerm()
+  {}
+
+  public ASimpleListTerm(
+    PSpecifier _specifier_,
+    TId _id_,
+    TId _simpleTermTail_)
+  {
+    setSpecifier(_specifier_);
+
+    setId(_id_);
+
+    setSimpleTermTail(_simpleTermTail_);
+
+  }
+  public Object clone()
+  {
+    return new ASimpleListTerm(
+             (PSpecifier) cloneNode(_specifier_),
+             (TId) cloneNode(_id_),
+             (TId) cloneNode(_simpleTermTail_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseASimpleListTerm(this);
+  }
+
+  public PSpecifier getSpecifier()
+  {
+    return _specifier_;
+  }
+
+  public void setSpecifier(PSpecifier node)
+  {
+    if(_specifier_ != null)
+    {
+      _specifier_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _specifier_ = node;
+  }
+
+  public TId getId()
+  {
+    return _id_;
+  }
+
+  public void setId(TId node)
+  {
+    if(_id_ != null)
+    {
+      _id_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _id_ = node;
+  }
+
+  public TId getSimpleTermTail()
+  {
+    return _simpleTermTail_;
+  }
+
+  public void setSimpleTermTail(TId node)
+  {
+    if(_simpleTermTail_ != null)
+    {
+      _simpleTermTail_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _simpleTermTail_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_specifier_)
+           + toString(_id_)
+           + toString(_simpleTermTail_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_specifier_ == child)
+    {
+      _specifier_ = null;
+      return;
+    }
+
+    if(_id_ == child)
+    {
+      _id_ = null;
+      return;
+    }
+
+    if(_simpleTermTail_ == child)
+    {
+      _simpleTermTail_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_specifier_ == oldChild)
+    {
+      setSpecifier((PSpecifier) newChild);
+      return;
+    }
+
+    if(_id_ == oldChild)
+    {
+      setId((TId) newChild);
+      return;
+    }
+
+    if(_simpleTermTail_ == oldChild)
+    {
+      setSimpleTermTail((TId) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/ASimpleTerm.java b/src/org/sablecc/sablecc/node/ASimpleTerm.java
new file mode 100644
index 0000000..2b03fb3
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/ASimpleTerm.java
@@ -0,0 +1,168 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class ASimpleTerm extends PTerm
+{
+  private PSpecifier _specifier_;
+  private TId _id_;
+  private TId _simpleTermTail_;
+
+  public ASimpleTerm()
+  {}
+
+  public ASimpleTerm(
+    PSpecifier _specifier_,
+    TId _id_,
+    TId _simpleTermTail_)
+  {
+    setSpecifier(_specifier_);
+
+    setId(_id_);
+
+    setSimpleTermTail(_simpleTermTail_);
+
+  }
+  public Object clone()
+  {
+    return new ASimpleTerm(
+             (PSpecifier) cloneNode(_specifier_),
+             (TId) cloneNode(_id_),
+             (TId) cloneNode(_simpleTermTail_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseASimpleTerm(this);
+  }
+
+  public PSpecifier getSpecifier()
+  {
+    return _specifier_;
+  }
+
+  public void setSpecifier(PSpecifier node)
+  {
+    if(_specifier_ != null)
+    {
+      _specifier_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _specifier_ = node;
+  }
+
+  public TId getId()
+  {
+    return _id_;
+  }
+
+  public void setId(TId node)
+  {
+    if(_id_ != null)
+    {
+      _id_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _id_ = node;
+  }
+
+  public TId getSimpleTermTail()
+  {
+    return _simpleTermTail_;
+  }
+
+  public void setSimpleTermTail(TId node)
+  {
+    if(_simpleTermTail_ != null)
+    {
+      _simpleTermTail_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _simpleTermTail_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_specifier_)
+           + toString(_id_)
+           + toString(_simpleTermTail_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_specifier_ == child)
+    {
+      _specifier_ = null;
+      return;
+    }
+
+    if(_id_ == child)
+    {
+      _id_ = null;
+      return;
+    }
+
+    if(_simpleTermTail_ == child)
+    {
+      _simpleTermTail_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_specifier_ == oldChild)
+    {
+      setSpecifier((PSpecifier) newChild);
+      return;
+    }
+
+    if(_id_ == oldChild)
+    {
+      setId((TId) newChild);
+      return;
+    }
+
+    if(_simpleTermTail_ == oldChild)
+    {
+      setSimpleTermTail((TId) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AStarUnOp.java b/src/org/sablecc/sablecc/node/AStarUnOp.java
new file mode 100644
index 0000000..2488d76
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AStarUnOp.java
@@ -0,0 +1,82 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AStarUnOp extends PUnOp
+{
+  private TStar _star_;
+
+  public AStarUnOp()
+  {}
+
+  public AStarUnOp(
+    TStar _star_)
+  {
+    setStar(_star_);
+
+  }
+  public Object clone()
+  {
+    return new AStarUnOp(
+             (TStar) cloneNode(_star_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAStarUnOp(this);
+  }
+
+  public TStar getStar()
+  {
+    return _star_;
+  }
+
+  public void setStar(TStar node)
+  {
+    if(_star_ != null)
+    {
+      _star_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _star_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_star_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_star_ == child)
+    {
+      _star_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_star_ == oldChild)
+    {
+      setStar((TStar) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AStateList.java b/src/org/sablecc/sablecc/node/AStateList.java
new file mode 100644
index 0000000..1e87a23
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AStateList.java
@@ -0,0 +1,189 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AStateList extends PStateList
+{
+  private TId _id_;
+  private PTransition _transition_;
+  private final LinkedList _stateLists_ = new TypedLinkedList(new StateLists_Cast());
+
+  public AStateList()
+  {}
+
+  public AStateList(
+    TId _id_,
+    PTransition _transition_,
+    List _stateLists_)
+  {
+    setId(_id_);
+
+    setTransition(_transition_);
+
+    {
+      this._stateLists_.clear();
+      this._stateLists_.addAll(_stateLists_);
+    }
+
+  }
+  public Object clone()
+  {
+    return new AStateList(
+             (TId) cloneNode(_id_),
+             (PTransition) cloneNode(_transition_),
+             cloneList(_stateLists_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAStateList(this);
+  }
+
+  public TId getId()
+  {
+    return _id_;
+  }
+
+  public void setId(TId node)
+  {
+    if(_id_ != null)
+    {
+      _id_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _id_ = node;
+  }
+
+  public PTransition getTransition()
+  {
+    return _transition_;
+  }
+
+  public void setTransition(PTransition node)
+  {
+    if(_transition_ != null)
+    {
+      _transition_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _transition_ = node;
+  }
+
+  public LinkedList getStateLists()
+  {
+    return _stateLists_;
+  }
+
+  public void setStateLists(List list)
+  {
+    _stateLists_.clear();
+    _stateLists_.addAll(list);
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_id_)
+           + toString(_transition_)
+           + toString(_stateLists_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_id_ == child)
+    {
+      _id_ = null;
+      return;
+    }
+
+    if(_transition_ == child)
+    {
+      _transition_ = null;
+      return;
+    }
+
+    if(_stateLists_.remove(child))
+    {
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_id_ == oldChild)
+    {
+      setId((TId) newChild);
+      return;
+    }
+
+    if(_transition_ == oldChild)
+    {
+      setTransition((PTransition) newChild);
+      return;
+    }
+
+    for(ListIterator i = _stateLists_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+  }
+
+  private class StateLists_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      PStateListTail node = (PStateListTail) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != AStateList.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != AStateList.this))
+      {
+        node.parent(AStateList.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AStateListTail.java b/src/org/sablecc/sablecc/node/AStateListTail.java
new file mode 100644
index 0000000..c46e0bd
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AStateListTail.java
@@ -0,0 +1,125 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AStateListTail extends PStateListTail
+{
+  private TId _id_;
+  private PTransition _transition_;
+
+  public AStateListTail()
+  {}
+
+  public AStateListTail(
+    TId _id_,
+    PTransition _transition_)
+  {
+    setId(_id_);
+
+    setTransition(_transition_);
+
+  }
+  public Object clone()
+  {
+    return new AStateListTail(
+             (TId) cloneNode(_id_),
+             (PTransition) cloneNode(_transition_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAStateListTail(this);
+  }
+
+  public TId getId()
+  {
+    return _id_;
+  }
+
+  public void setId(TId node)
+  {
+    if(_id_ != null)
+    {
+      _id_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _id_ = node;
+  }
+
+  public PTransition getTransition()
+  {
+    return _transition_;
+  }
+
+  public void setTransition(PTransition node)
+  {
+    if(_transition_ != null)
+    {
+      _transition_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _transition_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_id_)
+           + toString(_transition_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_id_ == child)
+    {
+      _id_ = null;
+      return;
+    }
+
+    if(_transition_ == child)
+    {
+      _transition_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_id_ == oldChild)
+    {
+      setId((TId) newChild);
+      return;
+    }
+
+    if(_transition_ == oldChild)
+    {
+      setTransition((PTransition) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AStates.java b/src/org/sablecc/sablecc/node/AStates.java
new file mode 100644
index 0000000..ecbadc8
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AStates.java
@@ -0,0 +1,103 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AStates extends PStates
+{
+  private final LinkedList _listId_ = new TypedLinkedList(new ListId_Cast());
+
+  public AStates()
+  {}
+
+  public AStates(
+    List _listId_)
+  {
+    {
+      this._listId_.clear();
+      this._listId_.addAll(_listId_);
+    }
+
+  }
+  public Object clone()
+  {
+    return new AStates(
+             cloneList(_listId_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAStates(this);
+  }
+
+  public LinkedList getListId()
+  {
+    return _listId_;
+  }
+
+  public void setListId(List list)
+  {
+    _listId_.clear();
+    _listId_.addAll(list);
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_listId_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_listId_.remove(child))
+    {
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    for(ListIterator i = _listId_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+  }
+
+  private class ListId_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      TId node = (TId) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != AStates.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != AStates.this))
+      {
+        node.parent(AStates.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AStringBasic.java b/src/org/sablecc/sablecc/node/AStringBasic.java
new file mode 100644
index 0000000..2d8f988
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AStringBasic.java
@@ -0,0 +1,82 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AStringBasic extends PBasic
+{
+  private TString _string_;
+
+  public AStringBasic()
+  {}
+
+  public AStringBasic(
+    TString _string_)
+  {
+    setString(_string_);
+
+  }
+  public Object clone()
+  {
+    return new AStringBasic(
+             (TString) cloneNode(_string_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAStringBasic(this);
+  }
+
+  public TString getString()
+  {
+    return _string_;
+  }
+
+  public void setString(TString node)
+  {
+    if(_string_ != null)
+    {
+      _string_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _string_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_string_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_string_ == child)
+    {
+      _string_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_string_ == oldChild)
+    {
+      setString((TString) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/ATokenDef.java b/src/org/sablecc/sablecc/node/ATokenDef.java
new file mode 100644
index 0000000..c52f52f
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/ATokenDef.java
@@ -0,0 +1,254 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class ATokenDef extends PTokenDef
+{
+  private PStateList _stateList_;
+  private TId _id_;
+  private PRegExp _regExp_;
+  private TSlash _slash_;
+  private PRegExp _lookAhead_;
+
+  public ATokenDef()
+  {}
+
+  public ATokenDef(
+    PStateList _stateList_,
+    TId _id_,
+    PRegExp _regExp_,
+    TSlash _slash_,
+    PRegExp _lookAhead_)
+  {
+    setStateList(_stateList_);
+
+    setId(_id_);
+
+    setRegExp(_regExp_);
+
+    setSlash(_slash_);
+
+    setLookAhead(_lookAhead_);
+
+  }
+  public Object clone()
+  {
+    return new ATokenDef(
+             (PStateList) cloneNode(_stateList_),
+             (TId) cloneNode(_id_),
+             (PRegExp) cloneNode(_regExp_),
+             (TSlash) cloneNode(_slash_),
+             (PRegExp) cloneNode(_lookAhead_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseATokenDef(this);
+  }
+
+  public PStateList getStateList()
+  {
+    return _stateList_;
+  }
+
+  public void setStateList(PStateList node)
+  {
+    if(_stateList_ != null)
+    {
+      _stateList_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _stateList_ = node;
+  }
+
+  public TId getId()
+  {
+    return _id_;
+  }
+
+  public void setId(TId node)
+  {
+    if(_id_ != null)
+    {
+      _id_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _id_ = node;
+  }
+
+  public PRegExp getRegExp()
+  {
+    return _regExp_;
+  }
+
+  public void setRegExp(PRegExp node)
+  {
+    if(_regExp_ != null)
+    {
+      _regExp_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _regExp_ = node;
+  }
+
+  public TSlash getSlash()
+  {
+    return _slash_;
+  }
+
+  public void setSlash(TSlash node)
+  {
+    if(_slash_ != null)
+    {
+      _slash_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _slash_ = node;
+  }
+
+  public PRegExp getLookAhead()
+  {
+    return _lookAhead_;
+  }
+
+  public void setLookAhead(PRegExp node)
+  {
+    if(_lookAhead_ != null)
+    {
+      _lookAhead_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _lookAhead_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_stateList_)
+           + toString(_id_)
+           + toString(_regExp_)
+           + toString(_slash_)
+           + toString(_lookAhead_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_stateList_ == child)
+    {
+      _stateList_ = null;
+      return;
+    }
+
+    if(_id_ == child)
+    {
+      _id_ = null;
+      return;
+    }
+
+    if(_regExp_ == child)
+    {
+      _regExp_ = null;
+      return;
+    }
+
+    if(_slash_ == child)
+    {
+      _slash_ = null;
+      return;
+    }
+
+    if(_lookAhead_ == child)
+    {
+      _lookAhead_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_stateList_ == oldChild)
+    {
+      setStateList((PStateList) newChild);
+      return;
+    }
+
+    if(_id_ == oldChild)
+    {
+      setId((TId) newChild);
+      return;
+    }
+
+    if(_regExp_ == oldChild)
+    {
+      setRegExp((PRegExp) newChild);
+      return;
+    }
+
+    if(_slash_ == oldChild)
+    {
+      setSlash((TSlash) newChild);
+      return;
+    }
+
+    if(_lookAhead_ == oldChild)
+    {
+      setLookAhead((PRegExp) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/ATokenSpecifier.java b/src/org/sablecc/sablecc/node/ATokenSpecifier.java
new file mode 100644
index 0000000..0828026
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/ATokenSpecifier.java
@@ -0,0 +1,33 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class ATokenSpecifier extends PSpecifier
+{
+
+  public ATokenSpecifier()
+  {}
+  public Object clone()
+  {
+    return new ATokenSpecifier();
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseATokenSpecifier(this);
+  }
+
+  public String toString()
+  {
+    return "";
+  }
+
+  void removeChild(Node child)
+  {}
+
+  void replaceChild(Node oldChild, Node newChild)
+  {}
+}
diff --git a/src/org/sablecc/sablecc/node/ATokens.java b/src/org/sablecc/sablecc/node/ATokens.java
new file mode 100644
index 0000000..918c9c8
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/ATokens.java
@@ -0,0 +1,103 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class ATokens extends PTokens
+{
+  private final LinkedList _tokenDefs_ = new TypedLinkedList(new TokenDefs_Cast());
+
+  public ATokens()
+  {}
+
+  public ATokens(
+    List _tokenDefs_)
+  {
+    {
+      this._tokenDefs_.clear();
+      this._tokenDefs_.addAll(_tokenDefs_);
+    }
+
+  }
+  public Object clone()
+  {
+    return new ATokens(
+             cloneList(_tokenDefs_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseATokens(this);
+  }
+
+  public LinkedList getTokenDefs()
+  {
+    return _tokenDefs_;
+  }
+
+  public void setTokenDefs(List list)
+  {
+    _tokenDefs_.clear();
+    _tokenDefs_.addAll(list);
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_tokenDefs_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_tokenDefs_.remove(child))
+    {
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    for(ListIterator i = _tokenDefs_.listIterator(); i.hasNext();)
+    {
+      if(i.next() == oldChild)
+      {
+        if(newChild != null)
+        {
+          i.set(newChild);
+          oldChild.parent(null);
+          return;
+        }
+
+        i.remove();
+        oldChild.parent(null);
+        return;
+      }
+    }
+
+  }
+
+  private class TokenDefs_Cast implements Cast
+  {
+    public Object cast(Object o)
+    {
+      PTokenDef node = (PTokenDef) o;
+
+      if((node.parent() != null) &&
+          (node.parent() != ATokens.this))
+      {
+        node.parent().removeChild(node);
+      }
+
+      if((node.parent() == null) ||
+          (node.parent() != ATokens.this))
+      {
+        node.parent(ATokens.this);
+      }
+
+      return node;
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/ATransition.java b/src/org/sablecc/sablecc/node/ATransition.java
new file mode 100644
index 0000000..ac6157f
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/ATransition.java
@@ -0,0 +1,82 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class ATransition extends PTransition
+{
+  private TId _id_;
+
+  public ATransition()
+  {}
+
+  public ATransition(
+    TId _id_)
+  {
+    setId(_id_);
+
+  }
+  public Object clone()
+  {
+    return new ATransition(
+             (TId) cloneNode(_id_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseATransition(this);
+  }
+
+  public TId getId()
+  {
+    return _id_;
+  }
+
+  public void setId(TId node)
+  {
+    if(_id_ != null)
+    {
+      _id_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _id_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_id_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_id_ == child)
+    {
+      _id_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_id_ == oldChild)
+    {
+      setId((TId) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/AUnExp.java b/src/org/sablecc/sablecc/node/AUnExp.java
new file mode 100644
index 0000000..b3ad503
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/AUnExp.java
@@ -0,0 +1,125 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public final class AUnExp extends PUnExp
+{
+  private PBasic _basic_;
+  private PUnOp _unOp_;
+
+  public AUnExp()
+  {}
+
+  public AUnExp(
+    PBasic _basic_,
+    PUnOp _unOp_)
+  {
+    setBasic(_basic_);
+
+    setUnOp(_unOp_);
+
+  }
+  public Object clone()
+  {
+    return new AUnExp(
+             (PBasic) cloneNode(_basic_),
+             (PUnOp) cloneNode(_unOp_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseAUnExp(this);
+  }
+
+  public PBasic getBasic()
+  {
+    return _basic_;
+  }
+
+  public void setBasic(PBasic node)
+  {
+    if(_basic_ != null)
+    {
+      _basic_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _basic_ = node;
+  }
+
+  public PUnOp getUnOp()
+  {
+    return _unOp_;
+  }
+
+  public void setUnOp(PUnOp node)
+  {
+    if(_unOp_ != null)
+    {
+      _unOp_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _unOp_ = node;
+  }
+
+  public String toString()
+  {
+    return ""
+           + toString(_basic_)
+           + toString(_unOp_);
+  }
+
+  void removeChild(Node child)
+  {
+    if(_basic_ == child)
+    {
+      _basic_ = null;
+      return;
+    }
+
+    if(_unOp_ == child)
+    {
+      _unOp_ = null;
+      return;
+    }
+
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_basic_ == oldChild)
+    {
+      setBasic((PBasic) newChild);
+      return;
+    }
+
+    if(_unOp_ == oldChild)
+    {
+      setUnOp((PUnOp) newChild);
+      return;
+    }
+
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/Cast.java b/src/org/sablecc/sablecc/node/Cast.java
new file mode 100644
index 0000000..920b94b
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/Cast.java
@@ -0,0 +1,8 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public interface Cast
+{
+  Object cast(Object o);
+}
diff --git a/src/org/sablecc/sablecc/node/EOF.java b/src/org/sablecc/sablecc/node/EOF.java
new file mode 100644
index 0000000..0133752
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/EOF.java
@@ -0,0 +1,30 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class EOF extends Token
+{
+  public EOF()
+  {
+    setText("");
+  }
+
+  public EOF(int line, int pos)
+  {
+    setText("");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new EOF(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseEOF(this);
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/NoCast.java b/src/org/sablecc/sablecc/node/NoCast.java
new file mode 100644
index 0000000..1678661
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/NoCast.java
@@ -0,0 +1,16 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public class NoCast implements Cast
+{
+  public final static NoCast instance = new NoCast();
+
+  private NoCast()
+  {}
+
+  public Object cast(Object o)
+  {
+    return o;
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/Node.java b/src/org/sablecc/sablecc/node/Node.java
new file mode 100644
index 0000000..e554520
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/Node.java
@@ -0,0 +1,78 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+import org.sablecc.sablecc.analysis.*;
+
+public abstract class Node implements Switchable, Cloneable
+{
+  private Node parent;
+
+  public abstract Object clone();
+
+  public Node parent()
+  {
+    return parent;
+  }
+
+  void parent(Node parent)
+  {
+    this.parent = parent;
+  }
+
+  abstract void removeChild(Node child);
+  abstract void replaceChild(Node oldChild, Node newChild);
+
+  public void replaceBy(Node node)
+  {
+    if(parent != null)
+    {
+      parent.replaceChild(this, node);
+    }
+  }
+
+  protected String toString(Node node)
+  {
+    if(node != null)
+    {
+      return node.toString();
+    }
+
+    return "";
+  }
+
+  protected String toString(List list)
+  {
+    StringBuffer s = new StringBuffer();
+
+    for(Iterator i = list.iterator(); i.hasNext();)
+    {
+      s.append(i.next());
+    }
+
+    return s.toString();
+  }
+
+  protected Node cloneNode(Node node)
+  {
+    if(node != null)
+    {
+      return (Node) node.clone();
+    }
+
+    return null;
+  }
+
+  protected List cloneList(List list)
+  {
+    List clone = new LinkedList();
+
+    for(Iterator i = list.iterator(); i.hasNext();)
+    {
+      clone.add(((Node) i.next()).clone());
+    }
+
+    return clone;
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/NodeCast.java b/src/org/sablecc/sablecc/node/NodeCast.java
new file mode 100644
index 0000000..9ee7fc3
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/NodeCast.java
@@ -0,0 +1,16 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public class NodeCast implements Cast
+{
+  public final static NodeCast instance = new NodeCast();
+
+  private NodeCast()
+  {}
+
+  public Object cast(Object o)
+  {
+    return (Node) o;
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/PAlt.java b/src/org/sablecc/sablecc/node/PAlt.java
new file mode 100644
index 0000000..765b8b0
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PAlt.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PAlt extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PAltTransform.java b/src/org/sablecc/sablecc/node/PAltTransform.java
new file mode 100644
index 0000000..58b590e
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PAltTransform.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PAltTransform extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PAst.java b/src/org/sablecc/sablecc/node/PAst.java
new file mode 100644
index 0000000..aa65dd7
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PAst.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PAst extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PAstAlt.java b/src/org/sablecc/sablecc/node/PAstAlt.java
new file mode 100644
index 0000000..edabab5
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PAstAlt.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PAstAlt extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PAstProd.java b/src/org/sablecc/sablecc/node/PAstProd.java
new file mode 100644
index 0000000..7ca1e78
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PAstProd.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PAstProd extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PBasic.java b/src/org/sablecc/sablecc/node/PBasic.java
new file mode 100644
index 0000000..cbd72e5
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PBasic.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PBasic extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PBinOp.java b/src/org/sablecc/sablecc/node/PBinOp.java
new file mode 100644
index 0000000..a2286b4
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PBinOp.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PBinOp extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PChar.java b/src/org/sablecc/sablecc/node/PChar.java
new file mode 100644
index 0000000..70fdd12
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PChar.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PChar extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PConcat.java b/src/org/sablecc/sablecc/node/PConcat.java
new file mode 100644
index 0000000..c97f5d9
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PConcat.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PConcat extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PElem.java b/src/org/sablecc/sablecc/node/PElem.java
new file mode 100644
index 0000000..66dbb70
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PElem.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PElem extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PGrammar.java b/src/org/sablecc/sablecc/node/PGrammar.java
new file mode 100644
index 0000000..2e4f19f
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PGrammar.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PGrammar extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PHelperDef.java b/src/org/sablecc/sablecc/node/PHelperDef.java
new file mode 100644
index 0000000..8a2b109
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PHelperDef.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PHelperDef extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PHelpers.java b/src/org/sablecc/sablecc/node/PHelpers.java
new file mode 100644
index 0000000..1553c87
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PHelpers.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PHelpers extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PIgnTokens.java b/src/org/sablecc/sablecc/node/PIgnTokens.java
new file mode 100644
index 0000000..253de6e
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PIgnTokens.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PIgnTokens extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PListTerm.java b/src/org/sablecc/sablecc/node/PListTerm.java
new file mode 100644
index 0000000..35837af
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PListTerm.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PListTerm extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PProd.java b/src/org/sablecc/sablecc/node/PProd.java
new file mode 100644
index 0000000..2c72802
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PProd.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PProd extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PProdName.java b/src/org/sablecc/sablecc/node/PProdName.java
new file mode 100644
index 0000000..7da2e3d
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PProdName.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PProdName extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PProductions.java b/src/org/sablecc/sablecc/node/PProductions.java
new file mode 100644
index 0000000..f5f954b
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PProductions.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PProductions extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PRegExp.java b/src/org/sablecc/sablecc/node/PRegExp.java
new file mode 100644
index 0000000..6d1e436
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PRegExp.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PRegExp extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PSet.java b/src/org/sablecc/sablecc/node/PSet.java
new file mode 100644
index 0000000..cbddf9a
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PSet.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PSet extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PSpecifier.java b/src/org/sablecc/sablecc/node/PSpecifier.java
new file mode 100644
index 0000000..99cb14e
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PSpecifier.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PSpecifier extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PStateList.java b/src/org/sablecc/sablecc/node/PStateList.java
new file mode 100644
index 0000000..6bc1132
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PStateList.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PStateList extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PStateListTail.java b/src/org/sablecc/sablecc/node/PStateListTail.java
new file mode 100644
index 0000000..d34ca70
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PStateListTail.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PStateListTail extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PStates.java b/src/org/sablecc/sablecc/node/PStates.java
new file mode 100644
index 0000000..c01e872
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PStates.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PStates extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PTerm.java b/src/org/sablecc/sablecc/node/PTerm.java
new file mode 100644
index 0000000..49feaaf
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PTerm.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PTerm extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PTokenDef.java b/src/org/sablecc/sablecc/node/PTokenDef.java
new file mode 100644
index 0000000..c9e7f2d
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PTokenDef.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PTokenDef extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PTokens.java b/src/org/sablecc/sablecc/node/PTokens.java
new file mode 100644
index 0000000..0539578
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PTokens.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PTokens extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PTransition.java b/src/org/sablecc/sablecc/node/PTransition.java
new file mode 100644
index 0000000..e651f5e
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PTransition.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PTransition extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PUnExp.java b/src/org/sablecc/sablecc/node/PUnExp.java
new file mode 100644
index 0000000..e16b6e9
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PUnExp.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PUnExp extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/PUnOp.java b/src/org/sablecc/sablecc/node/PUnOp.java
new file mode 100644
index 0000000..48e2582
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/PUnOp.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class PUnOp extends Node
+  {}
diff --git a/src/org/sablecc/sablecc/node/Start.java b/src/org/sablecc/sablecc/node/Start.java
new file mode 100644
index 0000000..0806caa
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/Start.java
@@ -0,0 +1,121 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class Start extends Node
+{
+  private PGrammar _pGrammar_;
+  private EOF _eof_;
+
+  public Start()
+  {}
+
+  public Start(
+    PGrammar _pGrammar_,
+    EOF _eof_)
+  {
+    setPGrammar(_pGrammar_);
+    setEOF(_eof_);
+  }
+
+  public Object clone()
+  {
+    return new Start(
+             (PGrammar) cloneNode(_pGrammar_),
+             (EOF) cloneNode(_eof_));
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseStart(this);
+  }
+
+  public PGrammar getPGrammar()
+  {
+    return _pGrammar_;
+  }
+
+  public void setPGrammar(PGrammar node)
+  {
+    if(_pGrammar_ != null)
+    {
+      _pGrammar_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _pGrammar_ = node;
+  }
+
+  public EOF getEOF()
+  {
+    return _eof_;
+  }
+
+  public void setEOF(EOF node)
+  {
+    if(_eof_ != null)
+    {
+      _eof_.parent(null);
+    }
+
+    if(node != null)
+    {
+      if(node.parent() != null)
+      {
+        node.parent().removeChild(node);
+      }
+
+      node.parent(this);
+    }
+
+    _eof_ = node;
+  }
+
+  void removeChild(Node child)
+  {
+    if(_pGrammar_ == child)
+    {
+      _pGrammar_ = null;
+      return;
+    }
+
+    if(_eof_ == child)
+    {
+      _eof_ = null;
+      return;
+    }
+  }
+
+  void replaceChild(Node oldChild, Node newChild)
+  {
+    if(_pGrammar_ == oldChild)
+    {
+      setPGrammar((PGrammar) newChild);
+      return;
+    }
+
+    if(_eof_ == oldChild)
+    {
+      setEOF((EOF) newChild);
+      return;
+    }
+  }
+
+  public String toString()
+  {
+    return "" +
+           toString(_pGrammar_) +
+           toString(_eof_);
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/Switch.java b/src/org/sablecc/sablecc/node/Switch.java
new file mode 100644
index 0000000..8cadd36
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/Switch.java
@@ -0,0 +1,6 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public interface Switch
+  {}
diff --git a/src/org/sablecc/sablecc/node/Switchable.java b/src/org/sablecc/sablecc/node/Switchable.java
new file mode 100644
index 0000000..6e0ef86
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/Switchable.java
@@ -0,0 +1,8 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public interface Switchable
+{
+  void apply(Switch sw);
+}
diff --git a/src/org/sablecc/sablecc/node/TAbstract.java b/src/org/sablecc/sablecc/node/TAbstract.java
new file mode 100644
index 0000000..754a507
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TAbstract.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TAbstract extends Token
+{
+  public TAbstract()
+  {
+    super.setText("Abstract");
+  }
+
+  public TAbstract(int line, int pos)
+  {
+    super.setText("Abstract");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TAbstract(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTAbstract(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TAbstract text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TArrow.java b/src/org/sablecc/sablecc/node/TArrow.java
new file mode 100644
index 0000000..dcfedee
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TArrow.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TArrow extends Token
+{
+  public TArrow()
+  {
+    super.setText("->");
+  }
+
+  public TArrow(int line, int pos)
+  {
+    super.setText("->");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TArrow(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTArrow(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TArrow text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TBar.java b/src/org/sablecc/sablecc/node/TBar.java
new file mode 100644
index 0000000..507ae38
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TBar.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TBar extends Token
+{
+  public TBar()
+  {
+    super.setText("|");
+  }
+
+  public TBar(int line, int pos)
+  {
+    super.setText("|");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TBar(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTBar(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TBar text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TBlank.java b/src/org/sablecc/sablecc/node/TBlank.java
new file mode 100644
index 0000000..585bca2
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TBlank.java
@@ -0,0 +1,30 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TBlank extends Token
+{
+  public TBlank(String text)
+  {
+    setText(text);
+  }
+
+  public TBlank(String text, int line, int pos)
+  {
+    setText(text);
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TBlank(getText(), getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTBlank(this);
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TChar.java b/src/org/sablecc/sablecc/node/TChar.java
new file mode 100644
index 0000000..c5b6bd5
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TChar.java
@@ -0,0 +1,30 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TChar extends Token
+{
+  public TChar(String text)
+  {
+    setText(text);
+  }
+
+  public TChar(String text, int line, int pos)
+  {
+    setText(text);
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TChar(getText(), getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTChar(this);
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TColon.java b/src/org/sablecc/sablecc/node/TColon.java
new file mode 100644
index 0000000..678a3b5
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TColon.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TColon extends Token
+{
+  public TColon()
+  {
+    super.setText(":");
+  }
+
+  public TColon(int line, int pos)
+  {
+    super.setText(":");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TColon(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTColon(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TColon text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TComma.java b/src/org/sablecc/sablecc/node/TComma.java
new file mode 100644
index 0000000..b0364e7
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TComma.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TComma extends Token
+{
+  public TComma()
+  {
+    super.setText(",");
+  }
+
+  public TComma(int line, int pos)
+  {
+    super.setText(",");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TComma(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTComma(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TComma text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TComment.java b/src/org/sablecc/sablecc/node/TComment.java
new file mode 100644
index 0000000..4056f52
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TComment.java
@@ -0,0 +1,30 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TComment extends Token
+{
+  public TComment(String text)
+  {
+    setText(text);
+  }
+
+  public TComment(String text, int line, int pos)
+  {
+    setText(text);
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TComment(getText(), getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTComment(this);
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TDDot.java b/src/org/sablecc/sablecc/node/TDDot.java
new file mode 100644
index 0000000..0243d22
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TDDot.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TDDot extends Token
+{
+  public TDDot()
+  {
+    super.setText("..");
+  }
+
+  public TDDot(int line, int pos)
+  {
+    super.setText("..");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TDDot(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTDDot(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TDDot text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TDecChar.java b/src/org/sablecc/sablecc/node/TDecChar.java
new file mode 100644
index 0000000..f9c4688
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TDecChar.java
@@ -0,0 +1,30 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TDecChar extends Token
+{
+  public TDecChar(String text)
+  {
+    setText(text);
+  }
+
+  public TDecChar(String text, int line, int pos)
+  {
+    setText(text);
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TDecChar(getText(), getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTDecChar(this);
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TDot.java b/src/org/sablecc/sablecc/node/TDot.java
new file mode 100644
index 0000000..84df19e
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TDot.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TDot extends Token
+{
+  public TDot()
+  {
+    super.setText(".");
+  }
+
+  public TDot(int line, int pos)
+  {
+    super.setText(".");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TDot(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTDot(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TDot text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TEqual.java b/src/org/sablecc/sablecc/node/TEqual.java
new file mode 100644
index 0000000..1ff8e6d
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TEqual.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TEqual extends Token
+{
+  public TEqual()
+  {
+    super.setText("=");
+  }
+
+  public TEqual(int line, int pos)
+  {
+    super.setText("=");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TEqual(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTEqual(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TEqual text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/THelpers.java b/src/org/sablecc/sablecc/node/THelpers.java
new file mode 100644
index 0000000..8ed8c1e
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/THelpers.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class THelpers extends Token
+{
+  public THelpers()
+  {
+    super.setText("Helpers");
+  }
+
+  public THelpers(int line, int pos)
+  {
+    super.setText("Helpers");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new THelpers(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTHelpers(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change THelpers text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/THexChar.java b/src/org/sablecc/sablecc/node/THexChar.java
new file mode 100644
index 0000000..b3d7d91
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/THexChar.java
@@ -0,0 +1,30 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class THexChar extends Token
+{
+  public THexChar(String text)
+  {
+    setText(text);
+  }
+
+  public THexChar(String text, int line, int pos)
+  {
+    setText(text);
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new THexChar(getText(), getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTHexChar(this);
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TId.java b/src/org/sablecc/sablecc/node/TId.java
new file mode 100644
index 0000000..7ba0ed9
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TId.java
@@ -0,0 +1,30 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TId extends Token
+{
+  public TId(String text)
+  {
+    setText(text);
+  }
+
+  public TId(String text, int line, int pos)
+  {
+    setText(text);
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TId(getText(), getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTId(this);
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TIgnored.java b/src/org/sablecc/sablecc/node/TIgnored.java
new file mode 100644
index 0000000..230eef8
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TIgnored.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TIgnored extends Token
+{
+  public TIgnored()
+  {
+    super.setText("Ignored");
+  }
+
+  public TIgnored(int line, int pos)
+  {
+    super.setText("Ignored");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TIgnored(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTIgnored(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TIgnored text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TLBkt.java b/src/org/sablecc/sablecc/node/TLBkt.java
new file mode 100644
index 0000000..64c6015
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TLBkt.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TLBkt extends Token
+{
+  public TLBkt()
+  {
+    super.setText("[");
+  }
+
+  public TLBkt(int line, int pos)
+  {
+    super.setText("[");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TLBkt(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTLBkt(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TLBkt text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TLBrace.java b/src/org/sablecc/sablecc/node/TLBrace.java
new file mode 100644
index 0000000..062bc75
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TLBrace.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TLBrace extends Token
+{
+  public TLBrace()
+  {
+    super.setText("{");
+  }
+
+  public TLBrace(int line, int pos)
+  {
+    super.setText("{");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TLBrace(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTLBrace(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TLBrace text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TLPar.java b/src/org/sablecc/sablecc/node/TLPar.java
new file mode 100644
index 0000000..eb69710
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TLPar.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TLPar extends Token
+{
+  public TLPar()
+  {
+    super.setText("(");
+  }
+
+  public TLPar(int line, int pos)
+  {
+    super.setText("(");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TLPar(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTLPar(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TLPar text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TMinus.java b/src/org/sablecc/sablecc/node/TMinus.java
new file mode 100644
index 0000000..6e655a9
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TMinus.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TMinus extends Token
+{
+  public TMinus()
+  {
+    super.setText("-");
+  }
+
+  public TMinus(int line, int pos)
+  {
+    super.setText("-");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TMinus(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTMinus(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TMinus text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TNew.java b/src/org/sablecc/sablecc/node/TNew.java
new file mode 100644
index 0000000..4d3b87e
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TNew.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TNew extends Token
+{
+  public TNew()
+  {
+    super.setText("New");
+  }
+
+  public TNew(int line, int pos)
+  {
+    super.setText("New");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TNew(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTNew(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TNew text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TNull.java b/src/org/sablecc/sablecc/node/TNull.java
new file mode 100644
index 0000000..4b523c7
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TNull.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TNull extends Token
+{
+  public TNull()
+  {
+    super.setText("Null");
+  }
+
+  public TNull(int line, int pos)
+  {
+    super.setText("Null");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TNull(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTNull(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TNull text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TPackage.java b/src/org/sablecc/sablecc/node/TPackage.java
new file mode 100644
index 0000000..10003fa
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TPackage.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TPackage extends Token
+{
+  public TPackage()
+  {
+    super.setText("Package");
+  }
+
+  public TPackage(int line, int pos)
+  {
+    super.setText("Package");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TPackage(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTPackage(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TPackage text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TPkgId.java b/src/org/sablecc/sablecc/node/TPkgId.java
new file mode 100644
index 0000000..0390d21
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TPkgId.java
@@ -0,0 +1,30 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TPkgId extends Token
+{
+  public TPkgId(String text)
+  {
+    setText(text);
+  }
+
+  public TPkgId(String text, int line, int pos)
+  {
+    setText(text);
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TPkgId(getText(), getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTPkgId(this);
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TPlus.java b/src/org/sablecc/sablecc/node/TPlus.java
new file mode 100644
index 0000000..d7e48a7
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TPlus.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TPlus extends Token
+{
+  public TPlus()
+  {
+    super.setText("+");
+  }
+
+  public TPlus(int line, int pos)
+  {
+    super.setText("+");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TPlus(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTPlus(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TPlus text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TProductionSpecifier.java b/src/org/sablecc/sablecc/node/TProductionSpecifier.java
new file mode 100644
index 0000000..8cb21c2
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TProductionSpecifier.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TProductionSpecifier extends Token
+{
+  public TProductionSpecifier()
+  {
+    super.setText("P");
+  }
+
+  public TProductionSpecifier(int line, int pos)
+  {
+    super.setText("P");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TProductionSpecifier(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTProductionSpecifier(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TProductionSpecifier text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TProductions.java b/src/org/sablecc/sablecc/node/TProductions.java
new file mode 100644
index 0000000..6d201b5
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TProductions.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TProductions extends Token
+{
+  public TProductions()
+  {
+    super.setText("Productions");
+  }
+
+  public TProductions(int line, int pos)
+  {
+    super.setText("Productions");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TProductions(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTProductions(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TProductions text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TQMark.java b/src/org/sablecc/sablecc/node/TQMark.java
new file mode 100644
index 0000000..b07059f
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TQMark.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TQMark extends Token
+{
+  public TQMark()
+  {
+    super.setText("?");
+  }
+
+  public TQMark(int line, int pos)
+  {
+    super.setText("?");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TQMark(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTQMark(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TQMark text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TRBkt.java b/src/org/sablecc/sablecc/node/TRBkt.java
new file mode 100644
index 0000000..a32f0e7
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TRBkt.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TRBkt extends Token
+{
+  public TRBkt()
+  {
+    super.setText("]");
+  }
+
+  public TRBkt(int line, int pos)
+  {
+    super.setText("]");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TRBkt(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTRBkt(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TRBkt text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TRBrace.java b/src/org/sablecc/sablecc/node/TRBrace.java
new file mode 100644
index 0000000..26e4a85
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TRBrace.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TRBrace extends Token
+{
+  public TRBrace()
+  {
+    super.setText("}");
+  }
+
+  public TRBrace(int line, int pos)
+  {
+    super.setText("}");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TRBrace(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTRBrace(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TRBrace text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TRPar.java b/src/org/sablecc/sablecc/node/TRPar.java
new file mode 100644
index 0000000..856a375
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TRPar.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TRPar extends Token
+{
+  public TRPar()
+  {
+    super.setText(")");
+  }
+
+  public TRPar(int line, int pos)
+  {
+    super.setText(")");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TRPar(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTRPar(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TRPar text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TSemicolon.java b/src/org/sablecc/sablecc/node/TSemicolon.java
new file mode 100644
index 0000000..c768657
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TSemicolon.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TSemicolon extends Token
+{
+  public TSemicolon()
+  {
+    super.setText(";");
+  }
+
+  public TSemicolon(int line, int pos)
+  {
+    super.setText(";");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TSemicolon(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTSemicolon(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TSemicolon text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TSlash.java b/src/org/sablecc/sablecc/node/TSlash.java
new file mode 100644
index 0000000..c371062
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TSlash.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TSlash extends Token
+{
+  public TSlash()
+  {
+    super.setText("/");
+  }
+
+  public TSlash(int line, int pos)
+  {
+    super.setText("/");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TSlash(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTSlash(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TSlash text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TStar.java b/src/org/sablecc/sablecc/node/TStar.java
new file mode 100644
index 0000000..e962327
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TStar.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TStar extends Token
+{
+  public TStar()
+  {
+    super.setText("*");
+  }
+
+  public TStar(int line, int pos)
+  {
+    super.setText("*");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TStar(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTStar(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TStar text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TStates.java b/src/org/sablecc/sablecc/node/TStates.java
new file mode 100644
index 0000000..6933885
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TStates.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TStates extends Token
+{
+  public TStates()
+  {
+    super.setText("States");
+  }
+
+  public TStates(int line, int pos)
+  {
+    super.setText("States");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TStates(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTStates(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TStates text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TString.java b/src/org/sablecc/sablecc/node/TString.java
new file mode 100644
index 0000000..daf4908
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TString.java
@@ -0,0 +1,30 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TString extends Token
+{
+  public TString(String text)
+  {
+    setText(text);
+  }
+
+  public TString(String text, int line, int pos)
+  {
+    setText(text);
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TString(getText(), getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTString(this);
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TSyntax.java b/src/org/sablecc/sablecc/node/TSyntax.java
new file mode 100644
index 0000000..3b24e0e
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TSyntax.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TSyntax extends Token
+{
+  public TSyntax()
+  {
+    super.setText("Syntax");
+  }
+
+  public TSyntax(int line, int pos)
+  {
+    super.setText("Syntax");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TSyntax(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTSyntax(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TSyntax text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TTokenSpecifier.java b/src/org/sablecc/sablecc/node/TTokenSpecifier.java
new file mode 100644
index 0000000..ec0360f
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TTokenSpecifier.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TTokenSpecifier extends Token
+{
+  public TTokenSpecifier()
+  {
+    super.setText("T");
+  }
+
+  public TTokenSpecifier(int line, int pos)
+  {
+    super.setText("T");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TTokenSpecifier(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTTokenSpecifier(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TTokenSpecifier text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TTokens.java b/src/org/sablecc/sablecc/node/TTokens.java
new file mode 100644
index 0000000..f815231
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TTokens.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TTokens extends Token
+{
+  public TTokens()
+  {
+    super.setText("Tokens");
+  }
+
+  public TTokens(int line, int pos)
+  {
+    super.setText("Tokens");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TTokens(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTTokens(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TTokens text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/TTree.java b/src/org/sablecc/sablecc/node/TTree.java
new file mode 100644
index 0000000..46ae387
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TTree.java
@@ -0,0 +1,35 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import org.sablecc.sablecc.analysis.*;
+
+public final class TTree extends Token
+{
+  public TTree()
+  {
+    super.setText("Tree");
+  }
+
+  public TTree(int line, int pos)
+  {
+    super.setText("Tree");
+    setLine(line);
+    setPos(pos);
+  }
+
+  public Object clone()
+  {
+    return new TTree(getLine(), getPos());
+  }
+
+  public void apply(Switch sw)
+  {
+    ((Analysis) sw).caseTTree(this);
+  }
+
+  public void setText(String text)
+  {
+    throw new RuntimeException("Cannot change TTree text.");
+  }
+}
diff --git a/src/org/sablecc/sablecc/node/Token.java b/src/org/sablecc/sablecc/node/Token.java
new file mode 100644
index 0000000..ec21ec9
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/Token.java
@@ -0,0 +1,51 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+public abstract class Token extends Node
+{
+  private String text;
+  private int line;
+  private int pos;
+
+  public String getText()
+  {
+    return text;
+  }
+
+  public void setText(String text)
+  {
+    this.text = text;
+  }
+
+  public int getLine()
+  {
+    return line;
+  }
+
+  public void setLine(int line)
+  {
+    this.line = line;
+  }
+
+  public int getPos()
+  {
+    return pos;
+  }
+
+  public void setPos(int pos)
+  {
+    this.pos = pos;
+  }
+
+  public String toString()
+  {
+    return text + " ";
+  }
+
+  void removeChild(Node child)
+  {}
+
+  void replaceChild(Node oldChild, Node newChild)
+  {}
+}
diff --git a/src/org/sablecc/sablecc/node/TypedLinkedList.java b/src/org/sablecc/sablecc/node/TypedLinkedList.java
new file mode 100644
index 0000000..7c9ebd6
--- /dev/null
+++ b/src/org/sablecc/sablecc/node/TypedLinkedList.java
@@ -0,0 +1,149 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.node;
+
+import java.util.*;
+
+public class TypedLinkedList extends LinkedList
+{
+  Cast cast;
+
+  public TypedLinkedList()
+  {
+    super();
+
+    cast = NoCast.instance;
+  }
+
+  public TypedLinkedList(Collection c)
+  {
+    super(c);
+
+    cast = NoCast.instance;
+  }
+
+  public TypedLinkedList(Cast cast)
+  {
+    super();
+
+    this.cast = cast;
+  }
+
+  public TypedLinkedList(Collection c, Cast cast)
+  {
+    super(c);
+
+    this.cast = cast;
+  }
+
+  public Cast getCast()
+  {
+    return cast;
+  }
+
+  public void add
+    (int index, Object element)
+  {
+    super.add(index, cast.cast(element));
+  }
+
+  public boolean add
+    (Object o)
+  {
+    return super.add(cast.cast(o));
+  }
+
+  public boolean addAll(Collection c)
+  {
+    Object[] elements = c.toArray();
+    for(int i=0; i<elements.length; i++)
+    {
+      super.add(cast.cast(elements[i]));
+    }
+    return true;
+  }
+
+  public boolean addAll(int index, Collection c)
+  {
+    int pos = index;
+    Object[] elements = c.toArray();
+    for(int i=0; i<elements.length; i++)
+    {
+      super.add(pos++, cast.cast(elements[i]));
+    }
+    return true;
+  }
+
+  public void addFirst(Object o)
+  {
+    super.addFirst(cast.cast(o));
+  }
+
+  public void addLast(Object o)
+  {
+    super.addLast(cast.cast(o));
+  }
+
+  public ListIterator listIterator(int index)
+  {
+    return new TypedLinkedListIterator(super.listIterator(index));
+  }
+
+  private class TypedLinkedListIterator implements ListIterator
+  {
+    ListIterator iterator;
+
+    TypedLinkedListIterator(ListIterator iterator)
+    {
+      this.iterator = iterator;
+    }
+
+    public boolean hasNext()
+    {
+      return iterator.hasNext();
+    }
+
+    public Object next()
+    {
+      return iterator.next();
+    }
+
+    public boolean hasPrevious()
+    {
+      return iterator.hasPrevious();
+    }
+
+    public Object previous()
+    {
+      return iterator.previous();
+    }
+
+    public int nextIndex()
+    {
+      return iterator.nextIndex();
+    }
+
+    public int previousIndex()
+    {
+      return iterator.previousIndex();
+    }
+
+    public void remove
+      ()
+    {
+      iterator.remove();
+    }
+
+    public void set
+      (Object o)
+    {
+      iterator.set(cast.cast(o));
+    }
+
+    public void add
+      (Object o)
+    {
+      iterator.add(cast.cast(o));
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/parser.txt b/src/org/sablecc/sablecc/parser.txt
new file mode 100644
index 0000000..27ec7e5
--- /dev/null
+++ b/src/org/sablecc/sablecc/parser.txt
@@ -0,0 +1,556 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+Macro:ParserHeader
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import $1$.*;
+import $2$.*;
+import $3$.*;
+import java.util.*;
+
+import java.io.DataInputStream;
+import java.io.BufferedInputStream;
+import java.io.IOException;
+
+ at SuppressWarnings("nls")
+public class Parser
+{
+    public final Analysis ignoredTokens = new AnalysisAdapter();
+
+    protected ArrayList nodeList;
+
+    private final Lexer lexer;
+    private final ListIterator stack = new LinkedList().listIterator();
+    private int last_pos;
+    private int last_line;
+    private Token last_token;
+    private final TokenIndex converter = new TokenIndex();
+    private final int[] action = new int[2];
+
+    private final static int SHIFT = 0;
+    private final static int REDUCE = 1;
+    private final static int ACCEPT = 2;
+    private final static int ERROR = 3;
+
+    public Parser(@SuppressWarnings("hiding") Lexer lexer)
+    {
+        this.lexer = lexer;
+    }
+
+
+$
+
+Macro:ParserInliningPushHeader
+    @SuppressWarnings({"unchecked","unused"})
+    private void push(int numstate, ArrayList listNode) throws ParserException, LexerException, IOException
+    {
+        this.nodeList = listNode;
+
+
+$
+
+Macro:ParserNoInliningPushHeader
+    protected void filter() throws ParserException, LexerException, IOException
+    {
+        // Empty body
+    }
+
+    private void push(int numstate, ArrayList listNode, boolean hidden) throws ParserException, LexerException, IOException
+    {
+        this.nodeList = listNode;
+
+        if(!hidden)
+        {
+            filter();
+        }
+
+
+$
+
+Macro:ParserCommon
+        if(!this.stack.hasNext())
+        {
+            this.stack.add(new State(numstate, this.nodeList));
+            return;
+        }
+
+        State s = (State) this.stack.next();
+        s.state = numstate;
+        s.nodes = this.nodeList;
+    }
+
+    private int goTo(int index)
+    {
+        int state = state();
+        int low = 1;
+        int high = gotoTable[index].length - 1;
+        int value = gotoTable[index][0][1];
+
+        while(low <= high)
+        {
+            int middle = (low + high) / 2;
+
+            if(state < gotoTable[index][middle][0])
+            {
+                high = middle - 1;
+            }
+            else if(state > gotoTable[index][middle][0])
+            {
+                low = middle + 1;
+            }
+            else
+            {
+                value = gotoTable[index][middle][1];
+                break;
+            }
+        }
+
+        return value;
+    }
+
+    private int state()
+    {
+        State s = (State) this.stack.previous();
+        this.stack.next();
+        return s.state;
+    }
+
+    private ArrayList pop()
+    {
+        return ((State) this.stack.previous()).nodes;
+    }
+
+    private int index(Switchable token)
+    {
+        this.converter.index = -1;
+        token.apply(this.converter);
+        return this.converter.index;
+    }
+
+    @SuppressWarnings("unchecked")
+    public Start parse() throws ParserException, LexerException, IOException
+    {
+        push(0, null$0$);
+        List<Node> ign = null;
+        while(true)
+        {
+            while(index(this.lexer.peek()) == -1)
+            {
+                if(ign == null)
+                {
+                    ign = new LinkedList<Node>();
+                }
+
+                ign.add(this.lexer.next());
+            }
+
+            if(ign != null)
+            {
+                this.ignoredTokens.setIn(this.lexer.peek(), ign);
+                ign = null;
+            }
+
+            this.last_pos = this.lexer.peek().getPos();
+            this.last_line = this.lexer.peek().getLine();
+            this.last_token = this.lexer.peek();
+
+            int index = index(this.lexer.peek());
+            this.action[0] = Parser.actionTable[state()][0][1];
+            this.action[1] = Parser.actionTable[state()][0][2];
+
+            int low = 1;
+            int high = Parser.actionTable[state()].length - 1;
+
+            while(low <= high)
+            {
+                int middle = (low + high) / 2;
+
+                if(index < Parser.actionTable[state()][middle][0])
+                {
+                    high = middle - 1;
+                }
+                else if(index > Parser.actionTable[state()][middle][0])
+                {
+                    low = middle + 1;
+                }
+                else
+                {
+                    this.action[0] = Parser.actionTable[state()][middle][1];
+                    this.action[1] = Parser.actionTable[state()][middle][2];
+                    break;
+                }
+            }
+
+            switch(this.action[0])
+            {
+                case SHIFT:
+		    {
+		        ArrayList list = new ArrayList();
+		        list.add(this.lexer.next());
+                        push(this.action[1], list$1$);
+                    }
+		    break;
+                case REDUCE:
+                    switch(this.action[1])
+                    {
+
+$
+
+Macro:ParserInliningReduce
+                    case $0$: /* reduce $2$ */
+		    {
+			ArrayList list = new$0$();
+			push(goTo($1$), list);
+		    }
+		    break;
+
+$
+
+Macro:ParserNoInliningReduce
+                    case $0$: /* reduce $3$ */
+		    {
+			ArrayList list = new$0$();
+			push(goTo($1$), list, $2$);
+		    }
+		    break;
+
+$
+
+Macro:ParserParseTail
+                    }
+                    break;
+                case ACCEPT:
+                    {
+                        EOF node2 = (EOF) this.lexer.next();
+                        $0$ node1 = ($0$) pop().get(0);
+                        Start node = new Start(node1, node2);
+                        return node;
+                    }
+                case ERROR:
+                    throw new ParserException(this.last_token,
+                        "[" + this.last_line + "," + this.last_pos + "] " +
+                        Parser.errorMessages[Parser.errors[this.action[1]]]);
+            }
+        }
+    }
+
+
+$
+
+Macro:ParserNewHeader
+
+
+    @SuppressWarnings("unchecked")
+    ArrayList new$0$() /* reduce $1$ */
+    {
+        @SuppressWarnings("hiding") ArrayList nodeList = new ArrayList();
+
+
+$
+
+Macro:ParserNewBodyDecl
+        @SuppressWarnings("unused") ArrayList nodeArrayList$0$ = pop();
+
+$
+
+Macro:ParserNewBodyDeclNull
+        ArrayList nodeArrayList$0$ = null;
+
+$
+
+Macro:ParserBraceOpening
+        {
+            // Block
+
+$
+
+Macro:ParserBraceClosing
+        }
+
+$
+
+Macro:ParserSimpleVariableDeclaration
+        $0$ $1$Node$2$;
+
+$
+
+Macro:ParserListVariableDeclaration
+        LinkedList listNode$0$ = new LinkedList();
+
+$
+
+Macro:ParserNullVariableDeclaration
+        @SuppressWarnings("unused") Object nullNode$0$ = null;
+
+$
+
+Macro:ParserSimpleTerm
+        $0$Node$1$ = ($2$)nodeArrayList$3$.get($4$);
+
+$
+
+Macro:ParserNewBodyNew
+
+        $0$Node$1$ = new $2$(
+$
+
+Macro:ParserNew&ListBodyParams
+$0$Node$1$
+$
+
+Macro:ParserNew&ListBodyParamsNull
+$0$
+$
+
+Macro:ParserNewBodyNewTail
+);
+
+$
+
+Macro:ParserTypedLinkedListAdd
+	if($2$Node$3$ != null)
+	{
+	  $0$Node$1$.add($2$Node$3$);
+	}
+
+$
+
+Macro:ParserTypedLinkedListAddAll
+	if($2$Node$3$ != null)
+	{
+	  $0$Node$1$.addAll($2$Node$3$);
+	}
+
+$
+
+Macro:ParserTypedLinkedListAddAll2
+	if($2$ != null)
+	{
+	  $0$Node$1$.addAll($2$);
+	}
+
+$
+
+Macro:ParserNewBodyListAdd
+	nodeList.add($0$Node$1$);
+
+$
+
+Macro:ParserNewTail
+        return nodeList;
+    }
+
+
+$
+
+Macro:ParserActionHeader
+
+
+    private static int[][][] actionTable;
+/*      {
+
+$
+
+Macro:ParserActionTail
+        };*/
+
+$
+
+Macro:ParserGotoHeader
+    private static int[][][] gotoTable;
+/*      {
+
+$
+
+Macro:ParserGotoTail
+        };*/
+
+$
+
+Macro:ParserErrorsHeader
+    private static String[] errorMessages;
+/*      {
+
+$
+
+Macro:ParserErrorsTail
+        };*/
+
+$
+
+Macro:ParserErrorIndexHeader
+    private static int[] errors;
+/*      {
+
+$
+
+Macro:ParserErrorIndexTail
+
+        };*/
+
+$
+
+Macro:ParserTail
+
+    static 
+    {
+        try
+        {
+            DataInputStream s = new DataInputStream(
+                new BufferedInputStream(
+                Parser.class.getResourceAsStream("parser.dat")));
+
+            // read actionTable
+            int length = s.readInt();
+            Parser.actionTable = new int[length][][];
+            for(int i = 0; i < Parser.actionTable.length; i++)
+            {
+                length = s.readInt();
+                Parser.actionTable[i] = new int[length][3];
+                for(int j = 0; j < Parser.actionTable[i].length; j++)
+                {
+                for(int k = 0; k < 3; k++)
+                {
+                    Parser.actionTable[i][j][k] = s.readInt();
+                }
+                }
+            }
+
+            // read gotoTable
+            length = s.readInt();
+            gotoTable = new int[length][][];
+            for(int i = 0; i < gotoTable.length; i++)
+            {
+                length = s.readInt();
+                gotoTable[i] = new int[length][2];
+                for(int j = 0; j < gotoTable[i].length; j++)
+                {
+                for(int k = 0; k < 2; k++)
+                {
+                    gotoTable[i][j][k] = s.readInt();
+                }
+                }
+            }
+
+            // read errorMessages
+            length = s.readInt();
+            errorMessages = new String[length];
+            for(int i = 0; i < errorMessages.length; i++)
+            {
+                length = s.readInt();
+                StringBuffer buffer = new StringBuffer();
+
+                for(int j = 0; j < length; j++)
+                {
+                buffer.append(s.readChar());
+                }
+                errorMessages[i] = buffer.toString();
+            }
+
+            // read errors
+            length = s.readInt();
+            errors = new int[length];
+            for(int i = 0; i < errors.length; i++)
+            {
+                errors[i] = s.readInt();
+            }
+
+            s.close();
+        }
+        catch(Exception e)
+        {
+            throw new RuntimeException("The file \"parser.dat\" is either missing or corrupted.");
+        }
+    }
+}
+
+$
+
+Macro:TokenIndexHeader
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import $1$.*;
+import $2$.*;
+
+class TokenIndex extends AnalysisAdapter
+{
+    int index;
+
+$
+
+Macro:TokenIndexBody
+
+    @Override
+    public void case$0$(@SuppressWarnings("unused") $0$ node)
+    {
+        this.index = $1$;
+    }
+
+$
+
+Macro:TokenIndexTail
+
+    @Override
+    public void caseEOF(@SuppressWarnings("unused") EOF node)
+    {
+        this.index = $0$;
+    }
+}
+
+$
+
+Macro:ParserException
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import $1$.*;
+
+ at SuppressWarnings("serial")
+public class ParserException extends Exception
+{
+    Token token;
+
+    public ParserException(@SuppressWarnings("hiding") Token token, String  message)
+    {
+        super(message);
+        this.token = token;
+    }
+
+    public Token getToken()
+    {
+        return this.token;
+    }
+}
+
+$
+
+Macro:State
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import java.util.ArrayList;
+
+final class State
+{
+    int state;
+    ArrayList nodes;
+
+    State(@SuppressWarnings("hiding") int state, @SuppressWarnings("hiding") ArrayList nodes)
+    {
+        this.state = state;
+        this.nodes = nodes;
+    }
+}
+
+$
diff --git a/src/org/sablecc/sablecc/parser/Parser.java b/src/org/sablecc/sablecc/parser/Parser.java
new file mode 100644
index 0000000..69bc5db
--- /dev/null
+++ b/src/org/sablecc/sablecc/parser/Parser.java
@@ -0,0 +1,9277 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.parser;
+
+import org.sablecc.sablecc.lexer.*;
+import org.sablecc.sablecc.node.*;
+import org.sablecc.sablecc.analysis.*;
+import java.util.*;
+
+import java.io.DataInputStream;
+import java.io.BufferedInputStream;
+import java.io.IOException;
+
+public class Parser
+{
+  public final Analysis ignoredTokens = new AnalysisAdapter();
+
+  protected ArrayList nodeList;
+
+  private final Lexer lexer;
+  private final ListIterator stack = new LinkedList().listIterator();
+  private int last_shift;
+  private int last_pos;
+  private int last_line;
+  private Token last_token;
+  private final TokenIndex converter = new TokenIndex();
+  private final int[] action = new int[2];
+
+  private final static int SHIFT = 0;
+  private final static int REDUCE = 1;
+  private final static int ACCEPT = 2;
+  private final static int ERROR = 3;
+
+  public Parser(Lexer lexer)
+  {
+    this.lexer = lexer;
+  }
+
+  private void push(int numstate, ArrayList listNode) throws ParserException, LexerException, IOException
+  {
+    this.nodeList = listNode;
+
+    if(!stack.hasNext())
+    {
+      stack.add(new State(numstate, this.nodeList));
+      return;
+    }
+
+    State s = (State) stack.next();
+    s.state = numstate;
+    s.nodes = this.nodeList;
+  }
+
+  private int goTo(int index)
+  {
+    int state = state();
+    int low = 1;
+    int high = gotoTable[index].length - 1;
+    int value = gotoTable[index][0][1];
+
+    while(low <= high)
+    {
+      int middle = (low + high) / 2;
+
+      if(state < gotoTable[index][middle][0])
+      {
+        high = middle - 1;
+      }
+      else if(state > gotoTable[index][middle][0])
+      {
+        low = middle + 1;
+      }
+      else
+      {
+        value = gotoTable[index][middle][1];
+        break;
+      }
+    }
+
+    return value;
+  }
+
+  private int state()
+  {
+    State s = (State) stack.previous();
+    stack.next();
+    return s.state;
+  }
+
+  private ArrayList pop()
+  {
+    return (ArrayList) ((State) stack.previous()).nodes;
+  }
+
+  private int index(Switchable token)
+  {
+    converter.index = -1;
+    token.apply(converter);
+    return converter.index;
+  }
+
+  public Start parse() throws ParserException, LexerException, IOException
+  {
+    push(0, null);
+    List ign = null;
+    while(true)
+    {
+      while(index(lexer.peek()) == -1)
+      {
+        if(ign == null)
+        {
+          ign = new TypedLinkedList(NodeCast.instance);
+        }
+
+        ign.add(lexer.next());
+      }
+
+      if(ign != null)
+      {
+        ignoredTokens.setIn(lexer.peek(), ign);
+        ign = null;
+      }
+
+      last_pos = lexer.peek().getPos();
+      last_line = lexer.peek().getLine();
+      last_token = lexer.peek();
+
+      int index = index(lexer.peek());
+      action[0] = actionTable[state()][0][1];
+      action[1] = actionTable[state()][0][2];
+
+      int low = 1;
+      int high = actionTable[state()].length - 1;
+
+      while(low <= high)
+      {
+        int middle = (low + high) / 2;
+
+        if(index < actionTable[state()][middle][0])
+        {
+          high = middle - 1;
+        }
+        else if(index > actionTable[state()][middle][0])
+        {
+          low = middle + 1;
+        }
+        else
+        {
+          action[0] = actionTable[state()][middle][1];
+          action[1] = actionTable[state()][middle][2];
+          break;
+        }
+      }
+
+      switch(action[0])
+      {
+      case SHIFT:
+        {
+          ArrayList list = new ArrayList();
+          list.add(lexer.next());
+          push(action[1], list);
+          last_shift = action[1];
+        }
+        break;
+      case REDUCE:
+        switch(action[1])
+        {
+        case 0: /* reduce AAgrammar1Grammar */
+          {
+            ArrayList list = new0();
+            push(goTo(0), list);
+          }
+          break;
+        case 1: /* reduce AAgrammar2Grammar */
+          {
+            ArrayList list = new1();
+            push(goTo(0), list);
+          }
+          break;
+        case 2: /* reduce AAgrammar3Grammar */
+          {
+            ArrayList list = new2();
+            push(goTo(0), list);
+          }
+          break;
+        case 3: /* reduce AAgrammar4Grammar */
+          {
+            ArrayList list = new3();
+            push(goTo(0), list);
+          }
+          break;
+        case 4: /* reduce AAgrammar5Grammar */
+          {
+            ArrayList list = new4();
+            push(goTo(0), list);
+          }
+          break;
+        case 5: /* reduce AAgrammar6Grammar */
+          {
+            ArrayList list = new5();
+            push(goTo(0), list);
+          }
+          break;
+        case 6: /* reduce AAgrammar7Grammar */
+          {
+            ArrayList list = new6();
+            push(goTo(0), list);
+          }
+          break;
+        case 7: /* reduce AAgrammar8Grammar */
+          {
+            ArrayList list = new7();
+            push(goTo(0), list);
+          }
+          break;
+        case 8: /* reduce AAgrammar9Grammar */
+          {
+            ArrayList list = new8();
+            push(goTo(0), list);
+          }
+          break;
+        case 9: /* reduce AAgrammar10Grammar */
+          {
+            ArrayList list = new9();
+            push(goTo(0), list);
+          }
+          break;
+        case 10: /* reduce AAgrammar11Grammar */
+          {
+            ArrayList list = new10();
+            push(goTo(0), list);
+          }
+          break;
+        case 11: /* reduce AAgrammar12Grammar */
+          {
+            ArrayList list = new11();
+            push(goTo(0), list);
+          }
+          break;
+        case 12: /* reduce AAgrammar13Grammar */
+          {
+            ArrayList list = new12();
+            push(goTo(0), list);
+          }
+          break;
+        case 13: /* reduce AAgrammar14Grammar */
+          {
+            ArrayList list = new13();
+            push(goTo(0), list);
+          }
+          break;
+        case 14: /* reduce AAgrammar15Grammar */
+          {
+            ArrayList list = new14();
+            push(goTo(0), list);
+          }
+          break;
+        case 15: /* reduce AAgrammar16Grammar */
+          {
+            ArrayList list = new15();
+            push(goTo(0), list);
+          }
+          break;
+        case 16: /* reduce AAgrammar17Grammar */
+          {
+            ArrayList list = new16();
+            push(goTo(0), list);
+          }
+          break;
+        case 17: /* reduce AAgrammar18Grammar */
+          {
+            ArrayList list = new17();
+            push(goTo(0), list);
+          }
+          break;
+        case 18: /* reduce AAgrammar19Grammar */
+          {
+            ArrayList list = new18();
+            push(goTo(0), list);
+          }
+          break;
+        case 19: /* reduce AAgrammar20Grammar */
+          {
+            ArrayList list = new19();
+            push(goTo(0), list);
+          }
+          break;
+        case 20: /* reduce AAgrammar21Grammar */
+          {
+            ArrayList list = new20();
+            push(goTo(0), list);
+          }
+          break;
+        case 21: /* reduce AAgrammar22Grammar */
+          {
+            ArrayList list = new21();
+            push(goTo(0), list);
+          }
+          break;
+        case 22: /* reduce AAgrammar23Grammar */
+          {
+            ArrayList list = new22();
+            push(goTo(0), list);
+          }
+          break;
+        case 23: /* reduce AAgrammar24Grammar */
+          {
+            ArrayList list = new23();
+            push(goTo(0), list);
+          }
+          break;
+        case 24: /* reduce AAgrammar25Grammar */
+          {
+            ArrayList list = new24();
+            push(goTo(0), list);
+          }
+          break;
+        case 25: /* reduce AAgrammar26Grammar */
+          {
+            ArrayList list = new25();
+            push(goTo(0), list);
+          }
+          break;
+        case 26: /* reduce AAgrammar27Grammar */
+          {
+            ArrayList list = new26();
+            push(goTo(0), list);
+          }
+          break;
+        case 27: /* reduce AAgrammar28Grammar */
+          {
+            ArrayList list = new27();
+            push(goTo(0), list);
+          }
+          break;
+        case 28: /* reduce AAgrammar29Grammar */
+          {
+            ArrayList list = new28();
+            push(goTo(0), list);
+          }
+          break;
+        case 29: /* reduce AAgrammar30Grammar */
+          {
+            ArrayList list = new29();
+            push(goTo(0), list);
+          }
+          break;
+        case 30: /* reduce AAgrammar31Grammar */
+          {
+            ArrayList list = new30();
+            push(goTo(0), list);
+          }
+          break;
+        case 31: /* reduce AAgrammar32Grammar */
+          {
+            ArrayList list = new31();
+            push(goTo(0), list);
+          }
+          break;
+        case 32: /* reduce AAgrammar33Grammar */
+          {
+            ArrayList list = new32();
+            push(goTo(0), list);
+          }
+          break;
+        case 33: /* reduce AAgrammar34Grammar */
+          {
+            ArrayList list = new33();
+            push(goTo(0), list);
+          }
+          break;
+        case 34: /* reduce AAgrammar35Grammar */
+          {
+            ArrayList list = new34();
+            push(goTo(0), list);
+          }
+          break;
+        case 35: /* reduce AAgrammar36Grammar */
+          {
+            ArrayList list = new35();
+            push(goTo(0), list);
+          }
+          break;
+        case 36: /* reduce AAgrammar37Grammar */
+          {
+            ArrayList list = new36();
+            push(goTo(0), list);
+          }
+          break;
+        case 37: /* reduce AAgrammar38Grammar */
+          {
+            ArrayList list = new37();
+            push(goTo(0), list);
+          }
+          break;
+        case 38: /* reduce AAgrammar39Grammar */
+          {
+            ArrayList list = new38();
+            push(goTo(0), list);
+          }
+          break;
+        case 39: /* reduce AAgrammar40Grammar */
+          {
+            ArrayList list = new39();
+            push(goTo(0), list);
+          }
+          break;
+        case 40: /* reduce AAgrammar41Grammar */
+          {
+            ArrayList list = new40();
+            push(goTo(0), list);
+          }
+          break;
+        case 41: /* reduce AAgrammar42Grammar */
+          {
+            ArrayList list = new41();
+            push(goTo(0), list);
+          }
+          break;
+        case 42: /* reduce AAgrammar43Grammar */
+          {
+            ArrayList list = new42();
+            push(goTo(0), list);
+          }
+          break;
+        case 43: /* reduce AAgrammar44Grammar */
+          {
+            ArrayList list = new43();
+            push(goTo(0), list);
+          }
+          break;
+        case 44: /* reduce AAgrammar45Grammar */
+          {
+            ArrayList list = new44();
+            push(goTo(0), list);
+          }
+          break;
+        case 45: /* reduce AAgrammar46Grammar */
+          {
+            ArrayList list = new45();
+            push(goTo(0), list);
+          }
+          break;
+        case 46: /* reduce AAgrammar47Grammar */
+          {
+            ArrayList list = new46();
+            push(goTo(0), list);
+          }
+          break;
+        case 47: /* reduce AAgrammar48Grammar */
+          {
+            ArrayList list = new47();
+            push(goTo(0), list);
+          }
+          break;
+        case 48: /* reduce AAgrammar49Grammar */
+          {
+            ArrayList list = new48();
+            push(goTo(0), list);
+          }
+          break;
+        case 49: /* reduce AAgrammar50Grammar */
+          {
+            ArrayList list = new49();
+            push(goTo(0), list);
+          }
+          break;
+        case 50: /* reduce AAgrammar51Grammar */
+          {
+            ArrayList list = new50();
+            push(goTo(0), list);
+          }
+          break;
+        case 51: /* reduce AAgrammar52Grammar */
+          {
+            ArrayList list = new51();
+            push(goTo(0), list);
+          }
+          break;
+        case 52: /* reduce AAgrammar53Grammar */
+          {
+            ArrayList list = new52();
+            push(goTo(0), list);
+          }
+          break;
+        case 53: /* reduce AAgrammar54Grammar */
+          {
+            ArrayList list = new53();
+            push(goTo(0), list);
+          }
+          break;
+        case 54: /* reduce AAgrammar55Grammar */
+          {
+            ArrayList list = new54();
+            push(goTo(0), list);
+          }
+          break;
+        case 55: /* reduce AAgrammar56Grammar */
+          {
+            ArrayList list = new55();
+            push(goTo(0), list);
+          }
+          break;
+        case 56: /* reduce AAgrammar57Grammar */
+          {
+            ArrayList list = new56();
+            push(goTo(0), list);
+          }
+          break;
+        case 57: /* reduce AAgrammar58Grammar */
+          {
+            ArrayList list = new57();
+            push(goTo(0), list);
+          }
+          break;
+        case 58: /* reduce AAgrammar59Grammar */
+          {
+            ArrayList list = new58();
+            push(goTo(0), list);
+          }
+          break;
+        case 59: /* reduce AAgrammar60Grammar */
+          {
+            ArrayList list = new59();
+            push(goTo(0), list);
+          }
+          break;
+        case 60: /* reduce AAgrammar61Grammar */
+          {
+            ArrayList list = new60();
+            push(goTo(0), list);
+          }
+          break;
+        case 61: /* reduce AAgrammar62Grammar */
+          {
+            ArrayList list = new61();
+            push(goTo(0), list);
+          }
+          break;
+        case 62: /* reduce AAgrammar63Grammar */
+          {
+            ArrayList list = new62();
+            push(goTo(0), list);
+          }
+          break;
+        case 63: /* reduce AAgrammar64Grammar */
+          {
+            ArrayList list = new63();
+            push(goTo(0), list);
+          }
+          break;
+        case 64: /* reduce AAgrammar65Grammar */
+          {
+            ArrayList list = new64();
+            push(goTo(0), list);
+          }
+          break;
+        case 65: /* reduce AAgrammar66Grammar */
+          {
+            ArrayList list = new65();
+            push(goTo(0), list);
+          }
+          break;
+        case 66: /* reduce AAgrammar67Grammar */
+          {
+            ArrayList list = new66();
+            push(goTo(0), list);
+          }
+          break;
+        case 67: /* reduce AAgrammar68Grammar */
+          {
+            ArrayList list = new67();
+            push(goTo(0), list);
+          }
+          break;
+        case 68: /* reduce AAgrammar69Grammar */
+          {
+            ArrayList list = new68();
+            push(goTo(0), list);
+          }
+          break;
+        case 69: /* reduce AAgrammar70Grammar */
+          {
+            ArrayList list = new69();
+            push(goTo(0), list);
+          }
+          break;
+        case 70: /* reduce AAgrammar71Grammar */
+          {
+            ArrayList list = new70();
+            push(goTo(0), list);
+          }
+          break;
+        case 71: /* reduce AAgrammar72Grammar */
+          {
+            ArrayList list = new71();
+            push(goTo(0), list);
+          }
+          break;
+        case 72: /* reduce AAgrammar73Grammar */
+          {
+            ArrayList list = new72();
+            push(goTo(0), list);
+          }
+          break;
+        case 73: /* reduce AAgrammar74Grammar */
+          {
+            ArrayList list = new73();
+            push(goTo(0), list);
+          }
+          break;
+        case 74: /* reduce AAgrammar75Grammar */
+          {
+            ArrayList list = new74();
+            push(goTo(0), list);
+          }
+          break;
+        case 75: /* reduce AAgrammar76Grammar */
+          {
+            ArrayList list = new75();
+            push(goTo(0), list);
+          }
+          break;
+        case 76: /* reduce AAgrammar77Grammar */
+          {
+            ArrayList list = new76();
+            push(goTo(0), list);
+          }
+          break;
+        case 77: /* reduce AAgrammar78Grammar */
+          {
+            ArrayList list = new77();
+            push(goTo(0), list);
+          }
+          break;
+        case 78: /* reduce AAgrammar79Grammar */
+          {
+            ArrayList list = new78();
+            push(goTo(0), list);
+          }
+          break;
+        case 79: /* reduce AAgrammar80Grammar */
+          {
+            ArrayList list = new79();
+            push(goTo(0), list);
+          }
+          break;
+        case 80: /* reduce AAgrammar81Grammar */
+          {
+            ArrayList list = new80();
+            push(goTo(0), list);
+          }
+          break;
+        case 81: /* reduce AAgrammar82Grammar */
+          {
+            ArrayList list = new81();
+            push(goTo(0), list);
+          }
+          break;
+        case 82: /* reduce AAgrammar83Grammar */
+          {
+            ArrayList list = new82();
+            push(goTo(0), list);
+          }
+          break;
+        case 83: /* reduce AAgrammar84Grammar */
+          {
+            ArrayList list = new83();
+            push(goTo(0), list);
+          }
+          break;
+        case 84: /* reduce AAgrammar85Grammar */
+          {
+            ArrayList list = new84();
+            push(goTo(0), list);
+          }
+          break;
+        case 85: /* reduce AAgrammar86Grammar */
+          {
+            ArrayList list = new85();
+            push(goTo(0), list);
+          }
+          break;
+        case 86: /* reduce AAgrammar87Grammar */
+          {
+            ArrayList list = new86();
+            push(goTo(0), list);
+          }
+          break;
+        case 87: /* reduce AAgrammar88Grammar */
+          {
+            ArrayList list = new87();
+            push(goTo(0), list);
+          }
+          break;
+        case 88: /* reduce AAgrammar89Grammar */
+          {
+            ArrayList list = new88();
+            push(goTo(0), list);
+          }
+          break;
+        case 89: /* reduce AAgrammar90Grammar */
+          {
+            ArrayList list = new89();
+            push(goTo(0), list);
+          }
+          break;
+        case 90: /* reduce AAgrammar91Grammar */
+          {
+            ArrayList list = new90();
+            push(goTo(0), list);
+          }
+          break;
+        case 91: /* reduce AAgrammar92Grammar */
+          {
+            ArrayList list = new91();
+            push(goTo(0), list);
+          }
+          break;
+        case 92: /* reduce AAgrammar93Grammar */
+          {
+            ArrayList list = new92();
+            push(goTo(0), list);
+          }
+          break;
+        case 93: /* reduce AAgrammar94Grammar */
+          {
+            ArrayList list = new93();
+            push(goTo(0), list);
+          }
+          break;
+        case 94: /* reduce AAgrammar95Grammar */
+          {
+            ArrayList list = new94();
+            push(goTo(0), list);
+          }
+          break;
+        case 95: /* reduce AAgrammar96Grammar */
+          {
+            ArrayList list = new95();
+            push(goTo(0), list);
+          }
+          break;
+        case 96: /* reduce AAgrammar97Grammar */
+          {
+            ArrayList list = new96();
+            push(goTo(0), list);
+          }
+          break;
+        case 97: /* reduce AAgrammar98Grammar */
+          {
+            ArrayList list = new97();
+            push(goTo(0), list);
+          }
+          break;
+        case 98: /* reduce AAgrammar99Grammar */
+          {
+            ArrayList list = new98();
+            push(goTo(0), list);
+          }
+          break;
+        case 99: /* reduce AAgrammar100Grammar */
+          {
+            ArrayList list = new99();
+            push(goTo(0), list);
+          }
+          break;
+        case 100: /* reduce AAgrammar101Grammar */
+          {
+            ArrayList list = new100();
+            push(goTo(0), list);
+          }
+          break;
+        case 101: /* reduce AAgrammar102Grammar */
+          {
+            ArrayList list = new101();
+            push(goTo(0), list);
+          }
+          break;
+        case 102: /* reduce AAgrammar103Grammar */
+          {
+            ArrayList list = new102();
+            push(goTo(0), list);
+          }
+          break;
+        case 103: /* reduce AAgrammar104Grammar */
+          {
+            ArrayList list = new103();
+            push(goTo(0), list);
+          }
+          break;
+        case 104: /* reduce AAgrammar105Grammar */
+          {
+            ArrayList list = new104();
+            push(goTo(0), list);
+          }
+          break;
+        case 105: /* reduce AAgrammar106Grammar */
+          {
+            ArrayList list = new105();
+            push(goTo(0), list);
+          }
+          break;
+        case 106: /* reduce AAgrammar107Grammar */
+          {
+            ArrayList list = new106();
+            push(goTo(0), list);
+          }
+          break;
+        case 107: /* reduce AAgrammar108Grammar */
+          {
+            ArrayList list = new107();
+            push(goTo(0), list);
+          }
+          break;
+        case 108: /* reduce AAgrammar109Grammar */
+          {
+            ArrayList list = new108();
+            push(goTo(0), list);
+          }
+          break;
+        case 109: /* reduce AAgrammar110Grammar */
+          {
+            ArrayList list = new109();
+            push(goTo(0), list);
+          }
+          break;
+        case 110: /* reduce AAgrammar111Grammar */
+          {
+            ArrayList list = new110();
+            push(goTo(0), list);
+          }
+          break;
+        case 111: /* reduce AAgrammar112Grammar */
+          {
+            ArrayList list = new111();
+            push(goTo(0), list);
+          }
+          break;
+        case 112: /* reduce AAgrammar113Grammar */
+          {
+            ArrayList list = new112();
+            push(goTo(0), list);
+          }
+          break;
+        case 113: /* reduce AAgrammar114Grammar */
+          {
+            ArrayList list = new113();
+            push(goTo(0), list);
+          }
+          break;
+        case 114: /* reduce AAgrammar115Grammar */
+          {
+            ArrayList list = new114();
+            push(goTo(0), list);
+          }
+          break;
+        case 115: /* reduce AAgrammar116Grammar */
+          {
+            ArrayList list = new115();
+            push(goTo(0), list);
+          }
+          break;
+        case 116: /* reduce AAgrammar117Grammar */
+          {
+            ArrayList list = new116();
+            push(goTo(0), list);
+          }
+          break;
+        case 117: /* reduce AAgrammar118Grammar */
+          {
+            ArrayList list = new117();
+            push(goTo(0), list);
+          }
+          break;
+        case 118: /* reduce AAgrammar119Grammar */
+          {
+            ArrayList list = new118();
+            push(goTo(0), list);
+          }
+          break;
+        case 119: /* reduce AAgrammar120Grammar */
+          {
+            ArrayList list = new119();
+            push(goTo(0), list);
+          }
+          break;
+        case 120: /* reduce AAgrammar121Grammar */
+          {
+            ArrayList list = new120();
+            push(goTo(0), list);
+          }
+          break;
+        case 121: /* reduce AAgrammar122Grammar */
+          {
+            ArrayList list = new121();
+            push(goTo(0), list);
+          }
+          break;
+        case 122: /* reduce AAgrammar123Grammar */
+          {
+            ArrayList list = new122();
+            push(goTo(0), list);
+          }
+          break;
+        case 123: /* reduce AAgrammar124Grammar */
+          {
+            ArrayList list = new123();
+            push(goTo(0), list);
+          }
+          break;
+        case 124: /* reduce AAgrammar125Grammar */
+          {
+            ArrayList list = new124();
+            push(goTo(0), list);
+          }
+          break;
+        case 125: /* reduce AAgrammar126Grammar */
+          {
+            ArrayList list = new125();
+            push(goTo(0), list);
+          }
+          break;
+        case 126: /* reduce AAgrammar127Grammar */
+          {
+            ArrayList list = new126();
+            push(goTo(0), list);
+          }
+          break;
+        case 127: /* reduce AAgrammar128Grammar */
+          {
+            ArrayList list = new127();
+            push(goTo(0), list);
+          }
+          break;
+        case 128: /* reduce APackage */
+          {
+            ArrayList list = new128();
+            push(goTo(1), list);
+          }
+          break;
+        case 129: /* reduce AApkgname1PkgName */
+          {
+            ArrayList list = new129();
+            push(goTo(2), list);
+          }
+          break;
+        case 130: /* reduce AApkgname2PkgName */
+          {
+            ArrayList list = new130();
+            push(goTo(2), list);
+          }
+          break;
+        case 131: /* reduce APkgNameTail */
+          {
+            ArrayList list = new131();
+            push(goTo(3), list);
+          }
+          break;
+        case 132: /* reduce AHelpers */
+          {
+            ArrayList list = new132();
+            push(goTo(4), list);
+          }
+          break;
+        case 133: /* reduce AHelperDef */
+          {
+            ArrayList list = new133();
+            push(goTo(5), list);
+          }
+          break;
+        case 134: /* reduce AStates */
+          {
+            ArrayList list = new134();
+            push(goTo(6), list);
+          }
+          break;
+        case 135: /* reduce AAidlist1IdList */
+          {
+            ArrayList list = new135();
+            push(goTo(7), list);
+          }
+          break;
+        case 136: /* reduce AAidlist2IdList */
+          {
+            ArrayList list = new136();
+            push(goTo(7), list);
+          }
+          break;
+        case 137: /* reduce AIdListTail */
+          {
+            ArrayList list = new137();
+            push(goTo(8), list);
+          }
+          break;
+        case 138: /* reduce ATokens */
+          {
+            ArrayList list = new138();
+            push(goTo(9), list);
+          }
+          break;
+        case 139: /* reduce AAtokendef1TokenDef */
+          {
+            ArrayList list = new139();
+            push(goTo(10), list);
+          }
+          break;
+        case 140: /* reduce AAtokendef2TokenDef */
+          {
+            ArrayList list = new140();
+            push(goTo(10), list);
+          }
+          break;
+        case 141: /* reduce AAtokendef3TokenDef */
+          {
+            ArrayList list = new141();
+            push(goTo(10), list);
+          }
+          break;
+        case 142: /* reduce AAtokendef4TokenDef */
+          {
+            ArrayList list = new142();
+            push(goTo(10), list);
+          }
+          break;
+        case 143: /* reduce AAstatelist1StateList */
+          {
+            ArrayList list = new143();
+            push(goTo(11), list);
+          }
+          break;
+        case 144: /* reduce AAstatelist2StateList */
+          {
+            ArrayList list = new144();
+            push(goTo(11), list);
+          }
+          break;
+        case 145: /* reduce AAstatelist3StateList */
+          {
+            ArrayList list = new145();
+            push(goTo(11), list);
+          }
+          break;
+        case 146: /* reduce AAstatelist4StateList */
+          {
+            ArrayList list = new146();
+            push(goTo(11), list);
+          }
+          break;
+        case 147: /* reduce AAstatelisttail1StateListTail */
+          {
+            ArrayList list = new147();
+            push(goTo(12), list);
+          }
+          break;
+        case 148: /* reduce AAstatelisttail2StateListTail */
+          {
+            ArrayList list = new148();
+            push(goTo(12), list);
+          }
+          break;
+        case 149: /* reduce ATransition */
+          {
+            ArrayList list = new149();
+            push(goTo(13), list);
+          }
+          break;
+        case 150: /* reduce AAigntokens1IgnTokens */
+          {
+            ArrayList list = new150();
+            push(goTo(14), list);
+          }
+          break;
+        case 151: /* reduce AAigntokens2IgnTokens */
+          {
+            ArrayList list = new151();
+            push(goTo(14), list);
+          }
+          break;
+        case 152: /* reduce ALookAhead */
+          {
+            ArrayList list = new152();
+            push(goTo(15), list);
+          }
+          break;
+        case 153: /* reduce AAregexp1RegExp */
+          {
+            ArrayList list = new153();
+            push(goTo(16), list);
+          }
+          break;
+        case 154: /* reduce AAregexp2RegExp */
+          {
+            ArrayList list = new154();
+            push(goTo(16), list);
+          }
+          break;
+        case 155: /* reduce ARegExpTail */
+          {
+            ArrayList list = new155();
+            push(goTo(17), list);
+          }
+          break;
+        case 156: /* reduce AAconcat1Concat */
+          {
+            ArrayList list = new156();
+            push(goTo(18), list);
+          }
+          break;
+        case 157: /* reduce AAconcat2Concat */
+          {
+            ArrayList list = new157();
+            push(goTo(18), list);
+          }
+          break;
+        case 158: /* reduce AAunexp1UnExp */
+          {
+            ArrayList list = new158();
+            push(goTo(19), list);
+          }
+          break;
+        case 159: /* reduce AAunexp2UnExp */
+          {
+            ArrayList list = new159();
+            push(goTo(19), list);
+          }
+          break;
+        case 160: /* reduce ACharBasic */
+          {
+            ArrayList list = new160();
+            push(goTo(20), list);
+          }
+          break;
+        case 161: /* reduce ASetBasic */
+          {
+            ArrayList list = new161();
+            push(goTo(20), list);
+          }
+          break;
+        case 162: /* reduce AStringBasic */
+          {
+            ArrayList list = new162();
+            push(goTo(20), list);
+          }
+          break;
+        case 163: /* reduce AIdBasic */
+          {
+            ArrayList list = new163();
+            push(goTo(20), list);
+          }
+          break;
+        case 164: /* reduce ARegExpBasic */
+          {
+            ArrayList list = new164();
+            push(goTo(20), list);
+          }
+          break;
+        case 165: /* reduce ACharChar */
+          {
+            ArrayList list = new165();
+            push(goTo(21), list);
+          }
+          break;
+        case 166: /* reduce ADecChar */
+          {
+            ArrayList list = new166();
+            push(goTo(21), list);
+          }
+          break;
+        case 167: /* reduce AHexChar */
+          {
+            ArrayList list = new167();
+            push(goTo(21), list);
+          }
+          break;
+        case 168: /* reduce AOperationSet */
+          {
+            ArrayList list = new168();
+            push(goTo(22), list);
+          }
+          break;
+        case 169: /* reduce AIntervalSet */
+          {
+            ArrayList list = new169();
+            push(goTo(22), list);
+          }
+          break;
+        case 170: /* reduce AStarUnOp */
+          {
+            ArrayList list = new170();
+            push(goTo(23), list);
+          }
+          break;
+        case 171: /* reduce AQMarkUnOp */
+          {
+            ArrayList list = new171();
+            push(goTo(23), list);
+          }
+          break;
+        case 172: /* reduce APlusUnOp */
+          {
+            ArrayList list = new172();
+            push(goTo(23), list);
+          }
+          break;
+        case 173: /* reduce APlusBinOp */
+          {
+            ArrayList list = new173();
+            push(goTo(24), list);
+          }
+          break;
+        case 174: /* reduce AMinusBinOp */
+          {
+            ArrayList list = new174();
+            push(goTo(24), list);
+          }
+          break;
+        case 175: /* reduce AProductions */
+          {
+            ArrayList list = new175();
+            push(goTo(25), list);
+          }
+          break;
+        case 176: /* reduce AAprod1Prod */
+          {
+            ArrayList list = new176();
+            push(goTo(26), list);
+          }
+          break;
+        case 177: /* reduce AAprod2Prod */
+          {
+            ArrayList list = new177();
+            push(goTo(26), list);
+          }
+          break;
+        case 178: /* reduce AAprodtransform1ProdTransform */
+          {
+            ArrayList list = new178();
+            push(goTo(27), list);
+          }
+          break;
+        case 179: /* reduce AAprodtransform2ProdTransform */
+          {
+            ArrayList list = new179();
+            push(goTo(27), list);
+          }
+          break;
+        case 180: /* reduce AAalts1Alts */
+          {
+            ArrayList list = new180();
+            push(goTo(28), list);
+          }
+          break;
+        case 181: /* reduce AAalts2Alts */
+          {
+            ArrayList list = new181();
+            push(goTo(28), list);
+          }
+          break;
+        case 182: /* reduce AAltsTail */
+          {
+            ArrayList list = new182();
+            push(goTo(29), list);
+          }
+          break;
+        case 183: /* reduce AAalt1Alt */
+          {
+            ArrayList list = new183();
+            push(goTo(30), list);
+          }
+          break;
+        case 184: /* reduce AAalt2Alt */
+          {
+            ArrayList list = new184();
+            push(goTo(30), list);
+          }
+          break;
+        case 185: /* reduce AAalt3Alt */
+          {
+            ArrayList list = new185();
+            push(goTo(30), list);
+          }
+          break;
+        case 186: /* reduce AAalt4Alt */
+          {
+            ArrayList list = new186();
+            push(goTo(30), list);
+          }
+          break;
+        case 187: /* reduce AAalt5Alt */
+          {
+            ArrayList list = new187();
+            push(goTo(30), list);
+          }
+          break;
+        case 188: /* reduce AAalt6Alt */
+          {
+            ArrayList list = new188();
+            push(goTo(30), list);
+          }
+          break;
+        case 189: /* reduce AAalt7Alt */
+          {
+            ArrayList list = new189();
+            push(goTo(30), list);
+          }
+          break;
+        case 190: /* reduce AAalt8Alt */
+          {
+            ArrayList list = new190();
+            push(goTo(30), list);
+          }
+          break;
+        case 191: /* reduce AAalttransform1AltTransform */
+          {
+            ArrayList list = new191();
+            push(goTo(31), list);
+          }
+          break;
+        case 192: /* reduce AAalttransform2AltTransform */
+          {
+            ArrayList list = new192();
+            push(goTo(31), list);
+          }
+          break;
+        case 193: /* reduce AAnewterm1Term */
+          {
+            ArrayList list = new193();
+            push(goTo(32), list);
+          }
+          break;
+        case 194: /* reduce AAnewterm2Term */
+          {
+            ArrayList list = new194();
+            push(goTo(32), list);
+          }
+          break;
+        case 195: /* reduce AAlistterm1Term */
+          {
+            ArrayList list = new195();
+            push(goTo(32), list);
+          }
+          break;
+        case 196: /* reduce AAlistterm2Term */
+          {
+            ArrayList list = new196();
+            push(goTo(32), list);
+          }
+          break;
+        case 197: /* reduce AAsimpleterm1Term */
+          {
+            ArrayList list = new197();
+            push(goTo(32), list);
+          }
+          break;
+        case 198: /* reduce AAsimpleterm2Term */
+          {
+            ArrayList list = new198();
+            push(goTo(32), list);
+          }
+          break;
+        case 199: /* reduce AAsimpleterm3Term */
+          {
+            ArrayList list = new199();
+            push(goTo(32), list);
+          }
+          break;
+        case 200: /* reduce AAsimpleterm4Term */
+          {
+            ArrayList list = new200();
+            push(goTo(32), list);
+          }
+          break;
+        case 201: /* reduce ANullTerm */
+          {
+            ArrayList list = new201();
+            push(goTo(32), list);
+          }
+          break;
+        case 202: /* reduce AAlistoflistterm1ListOfListTerm */
+          {
+            ArrayList list = new202();
+            push(goTo(33), list);
+          }
+          break;
+        case 203: /* reduce AAlistoflistterm2ListOfListTerm */
+          {
+            ArrayList list = new203();
+            push(goTo(33), list);
+          }
+          break;
+        case 204: /* reduce AAnewlistterm1ListTerm */
+          {
+            ArrayList list = new204();
+            push(goTo(34), list);
+          }
+          break;
+        case 205: /* reduce AAnewlistterm2ListTerm */
+          {
+            ArrayList list = new205();
+            push(goTo(34), list);
+          }
+          break;
+        case 206: /* reduce AAsimplelistterm1ListTerm */
+          {
+            ArrayList list = new206();
+            push(goTo(34), list);
+          }
+          break;
+        case 207: /* reduce AAsimplelistterm2ListTerm */
+          {
+            ArrayList list = new207();
+            push(goTo(34), list);
+          }
+          break;
+        case 208: /* reduce AAsimplelistterm3ListTerm */
+          {
+            ArrayList list = new208();
+            push(goTo(34), list);
+          }
+          break;
+        case 209: /* reduce AAsimplelistterm4ListTerm */
+          {
+            ArrayList list = new209();
+            push(goTo(34), list);
+          }
+          break;
+        case 210: /* reduce AListTermTail */
+          {
+            ArrayList list = new210();
+            push(goTo(35), list);
+          }
+          break;
+        case 211: /* reduce ASimpleTermTail */
+          {
+            ArrayList list = new211();
+            push(goTo(36), list);
+          }
+          break;
+        case 212: /* reduce AAprodname1ProdName */
+          {
+            ArrayList list = new212();
+            push(goTo(37), list);
+          }
+          break;
+        case 213: /* reduce AAprodname2ProdName */
+          {
+            ArrayList list = new213();
+            push(goTo(37), list);
+          }
+          break;
+        case 214: /* reduce AProdNameTail */
+          {
+            ArrayList list = new214();
+            push(goTo(38), list);
+          }
+          break;
+        case 215: /* reduce AAparams1Params */
+          {
+            ArrayList list = new215();
+            push(goTo(39), list);
+          }
+          break;
+        case 216: /* reduce AAparams2Params */
+          {
+            ArrayList list = new216();
+            push(goTo(39), list);
+          }
+          break;
+        case 217: /* reduce AParamsTail */
+          {
+            ArrayList list = new217();
+            push(goTo(40), list);
+          }
+          break;
+        case 218: /* reduce AAltName */
+          {
+            ArrayList list = new218();
+            push(goTo(41), list);
+          }
+          break;
+        case 219: /* reduce AAelem1Elem */
+          {
+            ArrayList list = new219();
+            push(goTo(42), list);
+          }
+          break;
+        case 220: /* reduce AAelem2Elem */
+          {
+            ArrayList list = new220();
+            push(goTo(42), list);
+          }
+          break;
+        case 221: /* reduce AAelem3Elem */
+          {
+            ArrayList list = new221();
+            push(goTo(42), list);
+          }
+          break;
+        case 222: /* reduce AAelem4Elem */
+          {
+            ArrayList list = new222();
+            push(goTo(42), list);
+          }
+          break;
+        case 223: /* reduce AAelem5Elem */
+          {
+            ArrayList list = new223();
+            push(goTo(42), list);
+          }
+          break;
+        case 224: /* reduce AAelem6Elem */
+          {
+            ArrayList list = new224();
+            push(goTo(42), list);
+          }
+          break;
+        case 225: /* reduce AAelem7Elem */
+          {
+            ArrayList list = new225();
+            push(goTo(42), list);
+          }
+          break;
+        case 226: /* reduce AAelem8Elem */
+          {
+            ArrayList list = new226();
+            push(goTo(42), list);
+          }
+          break;
+        case 227: /* reduce AElemName */
+          {
+            ArrayList list = new227();
+            push(goTo(43), list);
+          }
+          break;
+        case 228: /* reduce ATokenSpecifier */
+          {
+            ArrayList list = new228();
+            push(goTo(44), list);
+          }
+          break;
+        case 229: /* reduce AProductionSpecifier */
+          {
+            ArrayList list = new229();
+            push(goTo(44), list);
+          }
+          break;
+        case 230: /* reduce AAst */
+          {
+            ArrayList list = new230();
+            push(goTo(45), list);
+          }
+          break;
+        case 231: /* reduce AAstProd */
+          {
+            ArrayList list = new231();
+            push(goTo(46), list);
+          }
+          break;
+        case 232: /* reduce AAastalts1AstAlts */
+          {
+            ArrayList list = new232();
+            push(goTo(47), list);
+          }
+          break;
+        case 233: /* reduce AAastalts2AstAlts */
+          {
+            ArrayList list = new233();
+            push(goTo(47), list);
+          }
+          break;
+        case 234: /* reduce AAstAltsTail */
+          {
+            ArrayList list = new234();
+            push(goTo(48), list);
+          }
+          break;
+        case 235: /* reduce AAastalt1AstAlt */
+          {
+            ArrayList list = new235();
+            push(goTo(49), list);
+          }
+          break;
+        case 236: /* reduce AAastalt2AstAlt */
+          {
+            ArrayList list = new236();
+            push(goTo(49), list);
+          }
+          break;
+        case 237: /* reduce AAastalt3AstAlt */
+          {
+            ArrayList list = new237();
+            push(goTo(49), list);
+          }
+          break;
+        case 238: /* reduce AAastalt4AstAlt */
+          {
+            ArrayList list = new238();
+            push(goTo(49), list);
+          }
+          break;
+        case 239: /* reduce ATerminal$PkgNameTail */
+          {
+            ArrayList list = new239();
+            push(goTo(50), list);
+          }
+          break;
+        case 240: /* reduce ANonTerminal$PkgNameTail */
+          {
+            ArrayList list = new240();
+            push(goTo(50), list);
+          }
+          break;
+        case 241: /* reduce ATerminal$HelperDef */
+          {
+            ArrayList list = new241();
+            push(goTo(51), list);
+          }
+          break;
+        case 242: /* reduce ANonTerminal$HelperDef */
+          {
+            ArrayList list = new242();
+            push(goTo(51), list);
+          }
+          break;
+        case 243: /* reduce ATerminal$IdListTail */
+          {
+            ArrayList list = new243();
+            push(goTo(52), list);
+          }
+          break;
+        case 244: /* reduce ANonTerminal$IdListTail */
+          {
+            ArrayList list = new244();
+            push(goTo(52), list);
+          }
+          break;
+        case 245: /* reduce ATerminal$TokenDef */
+          {
+            ArrayList list = new245();
+            push(goTo(53), list);
+          }
+          break;
+        case 246: /* reduce ANonTerminal$TokenDef */
+          {
+            ArrayList list = new246();
+            push(goTo(53), list);
+          }
+          break;
+        case 247: /* reduce ATerminal$StateListTail */
+          {
+            ArrayList list = new247();
+            push(goTo(54), list);
+          }
+          break;
+        case 248: /* reduce ANonTerminal$StateListTail */
+          {
+            ArrayList list = new248();
+            push(goTo(54), list);
+          }
+          break;
+        case 249: /* reduce ATerminal$RegExpTail */
+          {
+            ArrayList list = new249();
+            push(goTo(55), list);
+          }
+          break;
+        case 250: /* reduce ANonTerminal$RegExpTail */
+          {
+            ArrayList list = new250();
+            push(goTo(55), list);
+          }
+          break;
+        case 251: /* reduce ATerminal$UnExp */
+          {
+            ArrayList list = new251();
+            push(goTo(56), list);
+          }
+          break;
+        case 252: /* reduce ANonTerminal$UnExp */
+          {
+            ArrayList list = new252();
+            push(goTo(56), list);
+          }
+          break;
+        case 253: /* reduce ATerminal$Prod */
+          {
+            ArrayList list = new253();
+            push(goTo(57), list);
+          }
+          break;
+        case 254: /* reduce ANonTerminal$Prod */
+          {
+            ArrayList list = new254();
+            push(goTo(57), list);
+          }
+          break;
+        case 255: /* reduce ATerminal$Elem */
+          {
+            ArrayList list = new255();
+            push(goTo(58), list);
+          }
+          break;
+        case 256: /* reduce ANonTerminal$Elem */
+          {
+            ArrayList list = new256();
+            push(goTo(58), list);
+          }
+          break;
+        case 257: /* reduce ATerminal$AltsTail */
+          {
+            ArrayList list = new257();
+            push(goTo(59), list);
+          }
+          break;
+        case 258: /* reduce ANonTerminal$AltsTail */
+          {
+            ArrayList list = new258();
+            push(goTo(59), list);
+          }
+          break;
+        case 259: /* reduce ATerminal$Term */
+          {
+            ArrayList list = new259();
+            push(goTo(60), list);
+          }
+          break;
+        case 260: /* reduce ANonTerminal$Term */
+          {
+            ArrayList list = new260();
+            push(goTo(60), list);
+          }
+          break;
+        case 261: /* reduce ATerminal$ListTermTail */
+          {
+            ArrayList list = new261();
+            push(goTo(61), list);
+          }
+          break;
+        case 262: /* reduce ANonTerminal$ListTermTail */
+          {
+            ArrayList list = new262();
+            push(goTo(61), list);
+          }
+          break;
+        case 263: /* reduce ATerminal$ParamsTail */
+          {
+            ArrayList list = new263();
+            push(goTo(62), list);
+          }
+          break;
+        case 264: /* reduce ANonTerminal$ParamsTail */
+          {
+            ArrayList list = new264();
+            push(goTo(62), list);
+          }
+          break;
+        case 265: /* reduce ATerminal$AstProd */
+          {
+            ArrayList list = new265();
+            push(goTo(63), list);
+          }
+          break;
+        case 266: /* reduce ANonTerminal$AstProd */
+          {
+            ArrayList list = new266();
+            push(goTo(63), list);
+          }
+          break;
+        case 267: /* reduce ATerminal$AstAltsTail */
+          {
+            ArrayList list = new267();
+            push(goTo(64), list);
+          }
+          break;
+        case 268: /* reduce ANonTerminal$AstAltsTail */
+          {
+            ArrayList list = new268();
+            push(goTo(64), list);
+          }
+          break;
+        }
+        break;
+      case ACCEPT:
+        {
+          EOF node2 = (EOF) lexer.next();
+          PGrammar node1 = (PGrammar) ((ArrayList)pop()).get(0);
+          Start node = new Start(node1, node2);
+          return node;
+        }
+      case ERROR:
+        throw new ParserException(last_token,
+                                  "[" + last_line + "," + last_pos + "] " +
+                                  errorMessages[errors[action[1]]]);
+      }
+    }
+  }
+
+  ArrayList new0() /* reduce AAgrammar1Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      {}
+
+      pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new1() /* reduce AAgrammar2Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+
+      pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new2() /* reduce AAgrammar3Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new3() /* reduce AAgrammar4Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new4() /* reduce AAgrammar5Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      PStates pstatesNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      {}
+      pstatesNode4 = (PStates)nodeArrayList1.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new5() /* reduce AAgrammar6Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      PStates pstatesNode5;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pstatesNode5 = (PStates)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new6() /* reduce AAgrammar7Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      PStates pstatesNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pstatesNode4 = (PStates)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new7() /* reduce AAgrammar8Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      PStates pstatesNode5;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pstatesNode5 = (PStates)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new8() /* reduce AAgrammar9Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      Object nullNode4 = null;
+      PTokens ptokensNode5;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      {}
+      ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new9() /* reduce AAgrammar10Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      PTokens ptokensNode6;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new10() /* reduce AAgrammar11Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      Object nullNode4 = null;
+      PTokens ptokensNode5;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new11() /* reduce AAgrammar12Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      Object nullNode5 = null;
+      PTokens ptokensNode6;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new12() /* reduce AAgrammar13Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      PStates pstatesNode4;
+      PTokens ptokensNode5;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      {}
+      pstatesNode4 = (PStates)nodeArrayList1.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new13() /* reduce AAgrammar14Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      PStates pstatesNode5;
+      PTokens ptokensNode6;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pstatesNode5 = (PStates)nodeArrayList2.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new14() /* reduce AAgrammar15Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      PStates pstatesNode4;
+      PTokens ptokensNode5;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pstatesNode4 = (PStates)nodeArrayList2.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new15() /* reduce AAgrammar16Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      PStates pstatesNode5;
+      PTokens ptokensNode6;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pstatesNode5 = (PStates)nodeArrayList3.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, null, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new16() /* reduce AAgrammar17Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      PIgnTokens pigntokensNode6;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      {}
+      pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new17() /* reduce AAgrammar18Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      PIgnTokens pigntokensNode7;
+      Object nullNode8 = null;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new18() /* reduce AAgrammar19Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      PIgnTokens pigntokensNode6;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new19() /* reduce AAgrammar20Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      PIgnTokens pigntokensNode7;
+      Object nullNode8 = null;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new20() /* reduce AAgrammar21Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      PStates pstatesNode4;
+      Object nullNode5 = null;
+      PIgnTokens pigntokensNode6;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      {}
+      pstatesNode4 = (PStates)nodeArrayList1.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new21() /* reduce AAgrammar22Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      PStates pstatesNode5;
+      Object nullNode6 = null;
+      PIgnTokens pigntokensNode7;
+      Object nullNode8 = null;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pstatesNode5 = (PStates)nodeArrayList2.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new22() /* reduce AAgrammar23Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      PStates pstatesNode4;
+      Object nullNode5 = null;
+      PIgnTokens pigntokensNode6;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pstatesNode4 = (PStates)nodeArrayList2.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new23() /* reduce AAgrammar24Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      PStates pstatesNode5;
+      Object nullNode6 = null;
+      PIgnTokens pigntokensNode7;
+      Object nullNode8 = null;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pstatesNode5 = (PStates)nodeArrayList3.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new24() /* reduce AAgrammar25Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      Object nullNode4 = null;
+      PTokens ptokensNode5;
+      PIgnTokens pigntokensNode6;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      {}
+      ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new25() /* reduce AAgrammar26Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      PTokens ptokensNode6;
+      PIgnTokens pigntokensNode7;
+      Object nullNode8 = null;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new26() /* reduce AAgrammar27Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      Object nullNode4 = null;
+      PTokens ptokensNode5;
+      PIgnTokens pigntokensNode6;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new27() /* reduce AAgrammar28Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      Object nullNode5 = null;
+      PTokens ptokensNode6;
+      PIgnTokens pigntokensNode7;
+      Object nullNode8 = null;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, pigntokensNode7, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new28() /* reduce AAgrammar29Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      PStates pstatesNode4;
+      PTokens ptokensNode5;
+      PIgnTokens pigntokensNode6;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      {}
+      pstatesNode4 = (PStates)nodeArrayList1.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, pigntokensNode6, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new29() /* reduce AAgrammar30Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      PStates pstatesNode5;
+      PTokens ptokensNode6;
+      PIgnTokens pigntokensNode7;
+      Object nullNode8 = null;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pstatesNode5 = (PStates)nodeArrayList2.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, pigntokensNode7, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new30() /* reduce AAgrammar31Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      PStates pstatesNode4;
+      PTokens ptokensNode5;
+      PIgnTokens pigntokensNode6;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pstatesNode4 = (PStates)nodeArrayList2.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new31() /* reduce AAgrammar32Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      PStates pstatesNode5;
+      PTokens ptokensNode6;
+      PIgnTokens pigntokensNode7;
+      Object nullNode8 = null;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pstatesNode5 = (PStates)nodeArrayList3.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, pigntokensNode7, null, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new32() /* reduce AAgrammar33Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      PProductions pproductionsNode7;
+      Object nullNode8 = null;
+      {}
+      pproductionsNode7 = (PProductions)nodeArrayList1.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, pproductionsNode7, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new33() /* reduce AAgrammar34Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      PProductions pproductionsNode8;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pproductionsNode8 = (PProductions)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, pproductionsNode8, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new34() /* reduce AAgrammar35Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      PProductions pproductionsNode7;
+      Object nullNode8 = null;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, pproductionsNode7, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new35() /* reduce AAgrammar36Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      PProductions pproductionsNode8;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, pproductionsNode8, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new36() /* reduce AAgrammar37Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      PStates pstatesNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      PProductions pproductionsNode7;
+      Object nullNode8 = null;
+      {}
+      pstatesNode4 = (PStates)nodeArrayList1.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, pproductionsNode7, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new37() /* reduce AAgrammar38Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      PStates pstatesNode5;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      PProductions pproductionsNode8;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pstatesNode5 = (PStates)nodeArrayList2.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, pproductionsNode8, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new38() /* reduce AAgrammar39Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      PStates pstatesNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      PProductions pproductionsNode7;
+      Object nullNode8 = null;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pstatesNode4 = (PStates)nodeArrayList2.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, pproductionsNode7, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new39() /* reduce AAgrammar40Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      PStates pstatesNode5;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      PProductions pproductionsNode8;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pstatesNode5 = (PStates)nodeArrayList3.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, pproductionsNode8, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new40() /* reduce AAgrammar41Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      Object nullNode4 = null;
+      PTokens ptokensNode5;
+      Object nullNode6 = null;
+      PProductions pproductionsNode7;
+      Object nullNode8 = null;
+      {}
+      ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, pproductionsNode7, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new41() /* reduce AAgrammar42Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      PTokens ptokensNode6;
+      Object nullNode7 = null;
+      PProductions pproductionsNode8;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, pproductionsNode8, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new42() /* reduce AAgrammar43Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      Object nullNode4 = null;
+      PTokens ptokensNode5;
+      Object nullNode6 = null;
+      PProductions pproductionsNode7;
+      Object nullNode8 = null;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, pproductionsNode7, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new43() /* reduce AAgrammar44Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      Object nullNode5 = null;
+      PTokens ptokensNode6;
+      Object nullNode7 = null;
+      PProductions pproductionsNode8;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, pproductionsNode8, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new44() /* reduce AAgrammar45Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      PStates pstatesNode4;
+      PTokens ptokensNode5;
+      Object nullNode6 = null;
+      PProductions pproductionsNode7;
+      Object nullNode8 = null;
+      {}
+      pstatesNode4 = (PStates)nodeArrayList1.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, pproductionsNode7, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new45() /* reduce AAgrammar46Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      PStates pstatesNode5;
+      PTokens ptokensNode6;
+      Object nullNode7 = null;
+      PProductions pproductionsNode8;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pstatesNode5 = (PStates)nodeArrayList2.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, pproductionsNode8, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new46() /* reduce AAgrammar47Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      PStates pstatesNode4;
+      PTokens ptokensNode5;
+      Object nullNode6 = null;
+      PProductions pproductionsNode7;
+      Object nullNode8 = null;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pstatesNode4 = (PStates)nodeArrayList2.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, pproductionsNode7, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new47() /* reduce AAgrammar48Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      PStates pstatesNode5;
+      PTokens ptokensNode6;
+      Object nullNode7 = null;
+      PProductions pproductionsNode8;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pstatesNode5 = (PStates)nodeArrayList3.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, null, pproductionsNode8, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new48() /* reduce AAgrammar49Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      PIgnTokens pigntokensNode6;
+      PProductions pproductionsNode7;
+      Object nullNode8 = null;
+      {}
+      pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, pproductionsNode7, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new49() /* reduce AAgrammar50Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      PIgnTokens pigntokensNode7;
+      PProductions pproductionsNode8;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, pproductionsNode8, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new50() /* reduce AAgrammar51Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      PIgnTokens pigntokensNode6;
+      PProductions pproductionsNode7;
+      Object nullNode8 = null;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, pproductionsNode7, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new51() /* reduce AAgrammar52Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      PIgnTokens pigntokensNode7;
+      PProductions pproductionsNode8;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, pproductionsNode8, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new52() /* reduce AAgrammar53Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      PStates pstatesNode4;
+      Object nullNode5 = null;
+      PIgnTokens pigntokensNode6;
+      PProductions pproductionsNode7;
+      Object nullNode8 = null;
+      {}
+      pstatesNode4 = (PStates)nodeArrayList1.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, pproductionsNode7, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new53() /* reduce AAgrammar54Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      PStates pstatesNode5;
+      Object nullNode6 = null;
+      PIgnTokens pigntokensNode7;
+      PProductions pproductionsNode8;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pstatesNode5 = (PStates)nodeArrayList2.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, pproductionsNode8, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new54() /* reduce AAgrammar55Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      PStates pstatesNode4;
+      Object nullNode5 = null;
+      PIgnTokens pigntokensNode6;
+      PProductions pproductionsNode7;
+      Object nullNode8 = null;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pstatesNode4 = (PStates)nodeArrayList2.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, pproductionsNode7, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new55() /* reduce AAgrammar56Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      PStates pstatesNode5;
+      Object nullNode6 = null;
+      PIgnTokens pigntokensNode7;
+      PProductions pproductionsNode8;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pstatesNode5 = (PStates)nodeArrayList3.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, pproductionsNode8, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new56() /* reduce AAgrammar57Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      Object nullNode4 = null;
+      PTokens ptokensNode5;
+      PIgnTokens pigntokensNode6;
+      PProductions pproductionsNode7;
+      Object nullNode8 = null;
+      {}
+      ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new57() /* reduce AAgrammar58Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      PTokens ptokensNode6;
+      PIgnTokens pigntokensNode7;
+      PProductions pproductionsNode8;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, pproductionsNode8, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new58() /* reduce AAgrammar59Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      Object nullNode4 = null;
+      PTokens ptokensNode5;
+      PIgnTokens pigntokensNode6;
+      PProductions pproductionsNode7;
+      Object nullNode8 = null;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new59() /* reduce AAgrammar60Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      Object nullNode5 = null;
+      PTokens ptokensNode6;
+      PIgnTokens pigntokensNode7;
+      PProductions pproductionsNode8;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, pigntokensNode7, pproductionsNode8, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new60() /* reduce AAgrammar61Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      PStates pstatesNode4;
+      PTokens ptokensNode5;
+      PIgnTokens pigntokensNode6;
+      PProductions pproductionsNode7;
+      Object nullNode8 = null;
+      {}
+      pstatesNode4 = (PStates)nodeArrayList1.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new61() /* reduce AAgrammar62Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      PStates pstatesNode5;
+      PTokens ptokensNode6;
+      PIgnTokens pigntokensNode7;
+      PProductions pproductionsNode8;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pstatesNode5 = (PStates)nodeArrayList2.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, pigntokensNode7, pproductionsNode8, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new62() /* reduce AAgrammar63Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      PStates pstatesNode4;
+      PTokens ptokensNode5;
+      PIgnTokens pigntokensNode6;
+      PProductions pproductionsNode7;
+      Object nullNode8 = null;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pstatesNode4 = (PStates)nodeArrayList2.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new63() /* reduce AAgrammar64Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList6 = (ArrayList) pop();
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      PStates pstatesNode5;
+      PTokens ptokensNode6;
+      PIgnTokens pigntokensNode7;
+      PProductions pproductionsNode8;
+      Object nullNode9 = null;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pstatesNode5 = (PStates)nodeArrayList3.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList5.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList6.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, pigntokensNode7, pproductionsNode8, null);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new64() /* reduce AAgrammar65Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      PAst pastNode8;
+      {}
+      pastNode8 = (PAst)nodeArrayList1.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, null, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new65() /* reduce AAgrammar66Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pastNode9 = (PAst)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, null, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new66() /* reduce AAgrammar67Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      PAst pastNode8;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pastNode8 = (PAst)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, null, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new67() /* reduce AAgrammar68Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pastNode9 = (PAst)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, null, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new68() /* reduce AAgrammar69Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      PStates pstatesNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      PAst pastNode8;
+      {}
+      pstatesNode4 = (PStates)nodeArrayList1.get(0);
+      pastNode8 = (PAst)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, null, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new69() /* reduce AAgrammar70Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      PStates pstatesNode5;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pstatesNode5 = (PStates)nodeArrayList2.get(0);
+      pastNode9 = (PAst)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, null, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new70() /* reduce AAgrammar71Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      PStates pstatesNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      PAst pastNode8;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pstatesNode4 = (PStates)nodeArrayList2.get(0);
+      pastNode8 = (PAst)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, null, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new71() /* reduce AAgrammar72Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      PStates pstatesNode5;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pstatesNode5 = (PStates)nodeArrayList3.get(0);
+      pastNode9 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, null, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new72() /* reduce AAgrammar73Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      Object nullNode4 = null;
+      PTokens ptokensNode5;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      PAst pastNode8;
+      {}
+      ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+      pastNode8 = (PAst)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, null, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new73() /* reduce AAgrammar74Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      PTokens ptokensNode6;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+      pastNode9 = (PAst)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, null, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new74() /* reduce AAgrammar75Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      Object nullNode4 = null;
+      PTokens ptokensNode5;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      PAst pastNode8;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+      pastNode8 = (PAst)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, null, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new75() /* reduce AAgrammar76Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      Object nullNode5 = null;
+      PTokens ptokensNode6;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+      pastNode9 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, null, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new76() /* reduce AAgrammar77Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      PStates pstatesNode4;
+      PTokens ptokensNode5;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      PAst pastNode8;
+      {}
+      pstatesNode4 = (PStates)nodeArrayList1.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+      pastNode8 = (PAst)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, null, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new77() /* reduce AAgrammar78Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      PStates pstatesNode5;
+      PTokens ptokensNode6;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pstatesNode5 = (PStates)nodeArrayList2.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+      pastNode9 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, null, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new78() /* reduce AAgrammar79Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      PStates pstatesNode4;
+      PTokens ptokensNode5;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      PAst pastNode8;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pstatesNode4 = (PStates)nodeArrayList2.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+      pastNode8 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, null, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new79() /* reduce AAgrammar80Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      PStates pstatesNode5;
+      PTokens ptokensNode6;
+      Object nullNode7 = null;
+      Object nullNode8 = null;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pstatesNode5 = (PStates)nodeArrayList3.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+      pastNode9 = (PAst)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, null, null, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new80() /* reduce AAgrammar81Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      PIgnTokens pigntokensNode6;
+      Object nullNode7 = null;
+      PAst pastNode8;
+      {}
+      pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
+      pastNode8 = (PAst)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, null, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new81() /* reduce AAgrammar82Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      PIgnTokens pigntokensNode7;
+      Object nullNode8 = null;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
+      pastNode9 = (PAst)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, null, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new82() /* reduce AAgrammar83Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      PIgnTokens pigntokensNode6;
+      Object nullNode7 = null;
+      PAst pastNode8;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+      pastNode8 = (PAst)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, null, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new83() /* reduce AAgrammar84Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      PIgnTokens pigntokensNode7;
+      Object nullNode8 = null;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+      pastNode9 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, null, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new84() /* reduce AAgrammar85Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      PStates pstatesNode4;
+      Object nullNode5 = null;
+      PIgnTokens pigntokensNode6;
+      Object nullNode7 = null;
+      PAst pastNode8;
+      {}
+      pstatesNode4 = (PStates)nodeArrayList1.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+      pastNode8 = (PAst)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, null, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new85() /* reduce AAgrammar86Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      PStates pstatesNode5;
+      Object nullNode6 = null;
+      PIgnTokens pigntokensNode7;
+      Object nullNode8 = null;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pstatesNode5 = (PStates)nodeArrayList2.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+      pastNode9 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, null, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new86() /* reduce AAgrammar87Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      PStates pstatesNode4;
+      Object nullNode5 = null;
+      PIgnTokens pigntokensNode6;
+      Object nullNode7 = null;
+      PAst pastNode8;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pstatesNode4 = (PStates)nodeArrayList2.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+      pastNode8 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, null, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new87() /* reduce AAgrammar88Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      PStates pstatesNode5;
+      Object nullNode6 = null;
+      PIgnTokens pigntokensNode7;
+      Object nullNode8 = null;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pstatesNode5 = (PStates)nodeArrayList3.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+      pastNode9 = (PAst)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, null, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new88() /* reduce AAgrammar89Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      Object nullNode4 = null;
+      PTokens ptokensNode5;
+      PIgnTokens pigntokensNode6;
+      Object nullNode7 = null;
+      PAst pastNode8;
+      {}
+      ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+      pastNode8 = (PAst)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, null, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new89() /* reduce AAgrammar90Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      PTokens ptokensNode6;
+      PIgnTokens pigntokensNode7;
+      Object nullNode8 = null;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+      pastNode9 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, null, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new90() /* reduce AAgrammar91Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      Object nullNode4 = null;
+      PTokens ptokensNode5;
+      PIgnTokens pigntokensNode6;
+      Object nullNode7 = null;
+      PAst pastNode8;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+      pastNode8 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, null, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new91() /* reduce AAgrammar92Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      Object nullNode5 = null;
+      PTokens ptokensNode6;
+      PIgnTokens pigntokensNode7;
+      Object nullNode8 = null;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+      pastNode9 = (PAst)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, pigntokensNode7, null, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new92() /* reduce AAgrammar93Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      PStates pstatesNode4;
+      PTokens ptokensNode5;
+      PIgnTokens pigntokensNode6;
+      Object nullNode7 = null;
+      PAst pastNode8;
+      {}
+      pstatesNode4 = (PStates)nodeArrayList1.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+      pastNode8 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, pigntokensNode6, null, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new93() /* reduce AAgrammar94Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      PStates pstatesNode5;
+      PTokens ptokensNode6;
+      PIgnTokens pigntokensNode7;
+      Object nullNode8 = null;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pstatesNode5 = (PStates)nodeArrayList2.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+      pastNode9 = (PAst)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, pigntokensNode7, null, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new94() /* reduce AAgrammar95Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      PStates pstatesNode4;
+      PTokens ptokensNode5;
+      PIgnTokens pigntokensNode6;
+      Object nullNode7 = null;
+      PAst pastNode8;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pstatesNode4 = (PStates)nodeArrayList2.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
+      pastNode8 = (PAst)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, null, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new95() /* reduce AAgrammar96Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList6 = (ArrayList) pop();
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      PStates pstatesNode5;
+      PTokens ptokensNode6;
+      PIgnTokens pigntokensNode7;
+      Object nullNode8 = null;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pstatesNode5 = (PStates)nodeArrayList3.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList5.get(0);
+      pastNode9 = (PAst)nodeArrayList6.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, pigntokensNode7, null, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new96() /* reduce AAgrammar97Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      PProductions pproductionsNode7;
+      PAst pastNode8;
+      {}
+      pproductionsNode7 = (PProductions)nodeArrayList1.get(0);
+      pastNode8 = (PAst)nodeArrayList2.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, pproductionsNode7, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new97() /* reduce AAgrammar98Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      PProductions pproductionsNode8;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pproductionsNode8 = (PProductions)nodeArrayList2.get(0);
+      pastNode9 = (PAst)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, pproductionsNode8, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new98() /* reduce AAgrammar99Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      PProductions pproductionsNode7;
+      PAst pastNode8;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+      pastNode8 = (PAst)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, pproductionsNode7, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new99() /* reduce AAgrammar100Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      PProductions pproductionsNode8;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+      pastNode9 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, pproductionsNode8, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new100() /* reduce AAgrammar101Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      PStates pstatesNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      PProductions pproductionsNode7;
+      PAst pastNode8;
+      {}
+      pstatesNode4 = (PStates)nodeArrayList1.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+      pastNode8 = (PAst)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, pproductionsNode7, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new101() /* reduce AAgrammar102Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      PStates pstatesNode5;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      PProductions pproductionsNode8;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pstatesNode5 = (PStates)nodeArrayList2.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+      pastNode9 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, pproductionsNode8, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new102() /* reduce AAgrammar103Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      PStates pstatesNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      PProductions pproductionsNode7;
+      PAst pastNode8;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pstatesNode4 = (PStates)nodeArrayList2.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+      pastNode8 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, pproductionsNode7, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new103() /* reduce AAgrammar104Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      PStates pstatesNode5;
+      Object nullNode6 = null;
+      Object nullNode7 = null;
+      PProductions pproductionsNode8;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pstatesNode5 = (PStates)nodeArrayList3.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+      pastNode9 = (PAst)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, pproductionsNode8, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new104() /* reduce AAgrammar105Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      Object nullNode4 = null;
+      PTokens ptokensNode5;
+      Object nullNode6 = null;
+      PProductions pproductionsNode7;
+      PAst pastNode8;
+      {}
+      ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+      pastNode8 = (PAst)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, pproductionsNode7, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new105() /* reduce AAgrammar106Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      PTokens ptokensNode6;
+      Object nullNode7 = null;
+      PProductions pproductionsNode8;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+      pastNode9 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, pproductionsNode8, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new106() /* reduce AAgrammar107Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      Object nullNode4 = null;
+      PTokens ptokensNode5;
+      Object nullNode6 = null;
+      PProductions pproductionsNode7;
+      PAst pastNode8;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+      pastNode8 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, pproductionsNode7, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new107() /* reduce AAgrammar108Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      Object nullNode5 = null;
+      PTokens ptokensNode6;
+      Object nullNode7 = null;
+      PProductions pproductionsNode8;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+      pastNode9 = (PAst)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, pproductionsNode8, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new108() /* reduce AAgrammar109Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      PStates pstatesNode4;
+      PTokens ptokensNode5;
+      Object nullNode6 = null;
+      PProductions pproductionsNode7;
+      PAst pastNode8;
+      {}
+      pstatesNode4 = (PStates)nodeArrayList1.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+      pastNode8 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, pproductionsNode7, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new109() /* reduce AAgrammar110Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      PStates pstatesNode5;
+      PTokens ptokensNode6;
+      Object nullNode7 = null;
+      PProductions pproductionsNode8;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pstatesNode5 = (PStates)nodeArrayList2.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+      pastNode9 = (PAst)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, pproductionsNode8, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new110() /* reduce AAgrammar111Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      PStates pstatesNode4;
+      PTokens ptokensNode5;
+      Object nullNode6 = null;
+      PProductions pproductionsNode7;
+      PAst pastNode8;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pstatesNode4 = (PStates)nodeArrayList2.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+      pastNode8 = (PAst)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, pproductionsNode7, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new111() /* reduce AAgrammar112Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList6 = (ArrayList) pop();
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      PStates pstatesNode5;
+      PTokens ptokensNode6;
+      Object nullNode7 = null;
+      PProductions pproductionsNode8;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pstatesNode5 = (PStates)nodeArrayList3.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+      pastNode9 = (PAst)nodeArrayList6.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, null, pproductionsNode8, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new112() /* reduce AAgrammar113Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      PIgnTokens pigntokensNode6;
+      PProductions pproductionsNode7;
+      PAst pastNode8;
+      {}
+      pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+      pastNode8 = (PAst)nodeArrayList3.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, pproductionsNode7, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new113() /* reduce AAgrammar114Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      PIgnTokens pigntokensNode7;
+      PProductions pproductionsNode8;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+      pastNode9 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, pproductionsNode8, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new114() /* reduce AAgrammar115Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      PIgnTokens pigntokensNode6;
+      PProductions pproductionsNode7;
+      PAst pastNode8;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+      pastNode8 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, pproductionsNode7, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new115() /* reduce AAgrammar116Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      PIgnTokens pigntokensNode7;
+      PProductions pproductionsNode8;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+      pastNode9 = (PAst)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, pproductionsNode8, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new116() /* reduce AAgrammar117Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      PStates pstatesNode4;
+      Object nullNode5 = null;
+      PIgnTokens pigntokensNode6;
+      PProductions pproductionsNode7;
+      PAst pastNode8;
+      {}
+      pstatesNode4 = (PStates)nodeArrayList1.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+      pastNode8 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, pproductionsNode7, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new117() /* reduce AAgrammar118Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      PStates pstatesNode5;
+      Object nullNode6 = null;
+      PIgnTokens pigntokensNode7;
+      PProductions pproductionsNode8;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pstatesNode5 = (PStates)nodeArrayList2.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+      pastNode9 = (PAst)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, pproductionsNode8, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new118() /* reduce AAgrammar119Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      PStates pstatesNode4;
+      Object nullNode5 = null;
+      PIgnTokens pigntokensNode6;
+      PProductions pproductionsNode7;
+      PAst pastNode8;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pstatesNode4 = (PStates)nodeArrayList2.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+      pastNode8 = (PAst)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, pproductionsNode7, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new119() /* reduce AAgrammar120Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList6 = (ArrayList) pop();
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      PStates pstatesNode5;
+      Object nullNode6 = null;
+      PIgnTokens pigntokensNode7;
+      PProductions pproductionsNode8;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pstatesNode5 = (PStates)nodeArrayList3.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+      pastNode9 = (PAst)nodeArrayList6.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, pproductionsNode8, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new120() /* reduce AAgrammar121Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      Object nullNode4 = null;
+      PTokens ptokensNode5;
+      PIgnTokens pigntokensNode6;
+      PProductions pproductionsNode7;
+      PAst pastNode8;
+      {}
+      ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+      pastNode8 = (PAst)nodeArrayList4.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new121() /* reduce AAgrammar122Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      Object nullNode5 = null;
+      PTokens ptokensNode6;
+      PIgnTokens pigntokensNode7;
+      PProductions pproductionsNode8;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+      pastNode9 = (PAst)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, pproductionsNode8, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new122() /* reduce AAgrammar123Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      Object nullNode4 = null;
+      PTokens ptokensNode5;
+      PIgnTokens pigntokensNode6;
+      PProductions pproductionsNode7;
+      PAst pastNode8;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+      pastNode8 = (PAst)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new123() /* reduce AAgrammar124Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList6 = (ArrayList) pop();
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      Object nullNode5 = null;
+      PTokens ptokensNode6;
+      PIgnTokens pigntokensNode7;
+      PProductions pproductionsNode8;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+      pastNode9 = (PAst)nodeArrayList6.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, pigntokensNode7, pproductionsNode8, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new124() /* reduce AAgrammar125Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      Object nullNode3 = null;
+      PStates pstatesNode4;
+      PTokens ptokensNode5;
+      PIgnTokens pigntokensNode6;
+      PProductions pproductionsNode7;
+      PAst pastNode8;
+      {}
+      pstatesNode4 = (PStates)nodeArrayList1.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+      pastNode8 = (PAst)nodeArrayList5.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new125() /* reduce AAgrammar126Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList6 = (ArrayList) pop();
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      PStates pstatesNode5;
+      PTokens ptokensNode6;
+      PIgnTokens pigntokensNode7;
+      PProductions pproductionsNode8;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      pstatesNode5 = (PStates)nodeArrayList2.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+      pastNode9 = (PAst)nodeArrayList6.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, pigntokensNode7, pproductionsNode8, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new126() /* reduce AAgrammar127Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList6 = (ArrayList) pop();
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      PHelpers phelpersNode3;
+      PStates pstatesNode4;
+      PTokens ptokensNode5;
+      PIgnTokens pigntokensNode6;
+      PProductions pproductionsNode7;
+      PAst pastNode8;
+      {}
+      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+      pstatesNode4 = (PStates)nodeArrayList2.get(0);
+      ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+      pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
+      pproductionsNode7 = (PProductions)nodeArrayList5.get(0);
+      pastNode8 = (PAst)nodeArrayList6.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new127() /* reduce AAgrammar128Grammar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList7 = (ArrayList) pop();
+    ArrayList nodeArrayList6 = (ArrayList) pop();
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PGrammar pgrammarNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PHelpers phelpersNode4;
+      PStates pstatesNode5;
+      PTokens ptokensNode6;
+      PIgnTokens pigntokensNode7;
+      PProductions pproductionsNode8;
+      PAst pastNode9;
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+      pstatesNode5 = (PStates)nodeArrayList3.get(0);
+      ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+      pigntokensNode7 = (PIgnTokens)nodeArrayList5.get(0);
+      pproductionsNode8 = (PProductions)nodeArrayList6.get(0);
+      pastNode9 = (PAst)nodeArrayList7.get(0);
+
+      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, pigntokensNode7, pproductionsNode8, pastNode9);
+    }
+    nodeList.add(pgrammarNode1);
+    return nodeList;
+  }
+
+  ArrayList new128() /* reduce APackage */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      TypedLinkedList listNode1 = new TypedLinkedList();
+      listNode1 = (TypedLinkedList)nodeArrayList2.get(0);
+      if(listNode1 != null)
+      {
+        listNode2.addAll(listNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new129() /* reduce AApkgname1PkgName */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      TPkgId tpkgidNode1;
+      tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
+      if(tpkgidNode1 != null)
+      {
+        listNode2.add(tpkgidNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new130() /* reduce AApkgname2PkgName */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TPkgId tpkgidNode1;
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
+      listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
+      if(tpkgidNode1 != null)
+      {
+        listNode3.add(tpkgidNode1);
+      }
+      if(listNode2 != null)
+      {
+        listNode3.addAll(listNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new131() /* reduce APkgNameTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TPkgId tpkgidNode1;
+    tpkgidNode1 = (TPkgId)nodeArrayList2.get(0);
+    nodeList.add(tpkgidNode1);
+    return nodeList;
+  }
+
+  ArrayList new132() /* reduce AHelpers */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PHelpers phelpersNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+
+      phelpersNode1 = new AHelpers(listNode3);
+    }
+    nodeList.add(phelpersNode1);
+    return nodeList;
+  }
+
+  ArrayList new133() /* reduce AHelperDef */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PHelperDef phelperdefNode1;
+    {
+      TId tidNode2;
+      PRegExp pregexpNode3;
+      tidNode2 = (TId)nodeArrayList1.get(0);
+      pregexpNode3 = (PRegExp)nodeArrayList3.get(0);
+
+      phelperdefNode1 = new AHelperDef(tidNode2, pregexpNode3);
+    }
+    nodeList.add(phelperdefNode1);
+    return nodeList;
+  }
+
+  ArrayList new134() /* reduce AStates */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PStates pstatesNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+
+      pstatesNode1 = new AStates(listNode3);
+    }
+    nodeList.add(pstatesNode1);
+    return nodeList;
+  }
+
+  ArrayList new135() /* reduce AAidlist1IdList */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      TId tidNode1;
+      tidNode1 = (TId)nodeArrayList1.get(0);
+      if(tidNode1 != null)
+      {
+        listNode2.add(tidNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new136() /* reduce AAidlist2IdList */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TId tidNode1;
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      tidNode1 = (TId)nodeArrayList1.get(0);
+      listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
+      if(tidNode1 != null)
+      {
+        listNode3.add(tidNode1);
+      }
+      if(listNode2 != null)
+      {
+        listNode3.addAll(listNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new137() /* reduce AIdListTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TId tidNode1;
+    tidNode1 = (TId)nodeArrayList2.get(0);
+    nodeList.add(tidNode1);
+    return nodeList;
+  }
+
+  ArrayList new138() /* reduce ATokens */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PTokens ptokensNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+
+      ptokensNode1 = new ATokens(listNode3);
+    }
+    nodeList.add(ptokensNode1);
+    return nodeList;
+  }
+
+  ArrayList new139() /* reduce AAtokendef1TokenDef */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PTokenDef ptokendefNode1;
+    {
+      Object nullNode2 = null;
+      TId tidNode3;
+      PRegExp pregexpNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      tidNode3 = (TId)nodeArrayList1.get(0);
+      pregexpNode4 = (PRegExp)nodeArrayList3.get(0);
+
+      ptokendefNode1 = new ATokenDef(null, tidNode3, pregexpNode4, null, null);
+    }
+    nodeList.add(ptokendefNode1);
+    return nodeList;
+  }
+
+  ArrayList new140() /* reduce AAtokendef2TokenDef */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PTokenDef ptokendefNode1;
+    {
+      PStateList pstatelistNode2;
+      TId tidNode3;
+      PRegExp pregexpNode4;
+      Object nullNode5 = null;
+      Object nullNode6 = null;
+      pstatelistNode2 = (PStateList)nodeArrayList1.get(0);
+      tidNode3 = (TId)nodeArrayList2.get(0);
+      pregexpNode4 = (PRegExp)nodeArrayList4.get(0);
+
+      ptokendefNode1 = new ATokenDef(pstatelistNode2, tidNode3, pregexpNode4, null, null);
+    }
+    nodeList.add(ptokendefNode1);
+    return nodeList;
+  }
+
+  ArrayList new141() /* reduce AAtokendef3TokenDef */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PTokenDef ptokendefNode1;
+    {
+      Object nullNode2 = null;
+      TId tidNode3;
+      PRegExp pregexpNode4;
+      TSlash tslashNode5;
+      PRegExp pregexpNode6;
+      tidNode3 = (TId)nodeArrayList1.get(0);
+      pregexpNode4 = (PRegExp)nodeArrayList3.get(0);
+      tslashNode5 = (TSlash)nodeArrayList4.get(0);
+      pregexpNode6 = (PRegExp)nodeArrayList4.get(1);
+
+      ptokendefNode1 = new ATokenDef(null, tidNode3, pregexpNode4, tslashNode5, pregexpNode6);
+    }
+    nodeList.add(ptokendefNode1);
+    return nodeList;
+  }
+
+  ArrayList new142() /* reduce AAtokendef4TokenDef */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList6 = (ArrayList) pop();
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PTokenDef ptokendefNode1;
+    {
+      PStateList pstatelistNode2;
+      TId tidNode3;
+      PRegExp pregexpNode4;
+      TSlash tslashNode5;
+      PRegExp pregexpNode6;
+      pstatelistNode2 = (PStateList)nodeArrayList1.get(0);
+      tidNode3 = (TId)nodeArrayList2.get(0);
+      pregexpNode4 = (PRegExp)nodeArrayList4.get(0);
+      tslashNode5 = (TSlash)nodeArrayList5.get(0);
+      pregexpNode6 = (PRegExp)nodeArrayList5.get(1);
+
+      ptokendefNode1 = new ATokenDef(pstatelistNode2, tidNode3, pregexpNode4, tslashNode5, pregexpNode6);
+    }
+    nodeList.add(ptokendefNode1);
+    return nodeList;
+  }
+
+  ArrayList new143() /* reduce AAstatelist1StateList */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PStateList pstatelistNode1;
+    {
+      TId tidNode2;
+      Object nullNode3 = null;
+      TypedLinkedList listNode4 = new TypedLinkedList();
+      tidNode2 = (TId)nodeArrayList2.get(0);
+      {}
+
+      pstatelistNode1 = new AStateList(tidNode2, null, listNode4);
+    }
+    nodeList.add(pstatelistNode1);
+    return nodeList;
+  }
+
+  ArrayList new144() /* reduce AAstatelist2StateList */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PStateList pstatelistNode1;
+    {
+      TId tidNode2;
+      PTransition ptransitionNode3;
+      TypedLinkedList listNode4 = new TypedLinkedList();
+      tidNode2 = (TId)nodeArrayList2.get(0);
+      ptransitionNode3 = (PTransition)nodeArrayList3.get(0);
+      {}
+
+      pstatelistNode1 = new AStateList(tidNode2, ptransitionNode3, listNode4);
+    }
+    nodeList.add(pstatelistNode1);
+    return nodeList;
+  }
+
+  ArrayList new145() /* reduce AAstatelist3StateList */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PStateList pstatelistNode1;
+    {
+      TId tidNode2;
+      Object nullNode3 = null;
+      TypedLinkedList listNode5 = new TypedLinkedList();
+      tidNode2 = (TId)nodeArrayList2.get(0);
+      {
+        TypedLinkedList listNode4 = new TypedLinkedList();
+        listNode4 = (TypedLinkedList)nodeArrayList3.get(0);
+        if(listNode4 != null)
+        {
+          listNode5.addAll(listNode4);
+        }
+      }
+
+      pstatelistNode1 = new AStateList(tidNode2, null, listNode5);
+    }
+    nodeList.add(pstatelistNode1);
+    return nodeList;
+  }
+
+  ArrayList new146() /* reduce AAstatelist4StateList */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PStateList pstatelistNode1;
+    {
+      TId tidNode2;
+      PTransition ptransitionNode3;
+      TypedLinkedList listNode5 = new TypedLinkedList();
+      tidNode2 = (TId)nodeArrayList2.get(0);
+      ptransitionNode3 = (PTransition)nodeArrayList3.get(0);
+      {
+        TypedLinkedList listNode4 = new TypedLinkedList();
+        listNode4 = (TypedLinkedList)nodeArrayList4.get(0);
+        if(listNode4 != null)
+        {
+          listNode5.addAll(listNode4);
+        }
+      }
+
+      pstatelistNode1 = new AStateList(tidNode2, ptransitionNode3, listNode5);
+    }
+    nodeList.add(pstatelistNode1);
+    return nodeList;
+  }
+
+  ArrayList new147() /* reduce AAstatelisttail1StateListTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PStateListTail pstatelisttailNode1;
+    {
+      TId tidNode2;
+      Object nullNode3 = null;
+      tidNode2 = (TId)nodeArrayList2.get(0);
+
+      pstatelisttailNode1 = new AStateListTail(tidNode2, null);
+    }
+    nodeList.add(pstatelisttailNode1);
+    return nodeList;
+  }
+
+  ArrayList new148() /* reduce AAstatelisttail2StateListTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PStateListTail pstatelisttailNode1;
+    {
+      TId tidNode2;
+      PTransition ptransitionNode3;
+      tidNode2 = (TId)nodeArrayList2.get(0);
+      ptransitionNode3 = (PTransition)nodeArrayList3.get(0);
+
+      pstatelisttailNode1 = new AStateListTail(tidNode2, ptransitionNode3);
+    }
+    nodeList.add(pstatelisttailNode1);
+    return nodeList;
+  }
+
+  ArrayList new149() /* reduce ATransition */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PTransition ptransitionNode1;
+    {
+      TId tidNode2;
+      tidNode2 = (TId)nodeArrayList2.get(0);
+
+      ptransitionNode1 = new ATransition(tidNode2);
+    }
+    nodeList.add(ptransitionNode1);
+    return nodeList;
+  }
+
+  ArrayList new150() /* reduce AAigntokens1IgnTokens */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PIgnTokens pigntokensNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      {}
+
+      pigntokensNode1 = new AIgnTokens(listNode2);
+    }
+    nodeList.add(pigntokensNode1);
+    return nodeList;
+  }
+
+  ArrayList new151() /* reduce AAigntokens2IgnTokens */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PIgnTokens pigntokensNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList3.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+
+      pigntokensNode1 = new AIgnTokens(listNode3);
+    }
+    nodeList.add(pigntokensNode1);
+    return nodeList;
+  }
+
+  ArrayList new152() /* reduce ALookAhead */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TSlash tslashNode1;
+    PRegExp pregexpNode2;
+    tslashNode1 = (TSlash)nodeArrayList1.get(0);
+    pregexpNode2 = (PRegExp)nodeArrayList2.get(0);
+    nodeList.add(tslashNode1);
+    nodeList.add(pregexpNode2);
+    return nodeList;
+  }
+
+  ArrayList new153() /* reduce AAregexp1RegExp */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PRegExp pregexpNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      {
+        PConcat pconcatNode2;
+        pconcatNode2 = (PConcat)nodeArrayList1.get(0);
+        if(pconcatNode2 != null)
+        {
+          listNode3.add(pconcatNode2);
+        }
+      }
+
+      pregexpNode1 = new ARegExp(listNode3);
+    }
+    nodeList.add(pregexpNode1);
+    return nodeList;
+  }
+
+  ArrayList new154() /* reduce AAregexp2RegExp */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PRegExp pregexpNode1;
+    {
+      TypedLinkedList listNode4 = new TypedLinkedList();
+      {
+        PConcat pconcatNode2;
+        TypedLinkedList listNode3 = new TypedLinkedList();
+        pconcatNode2 = (PConcat)nodeArrayList1.get(0);
+        listNode3 = (TypedLinkedList)nodeArrayList2.get(0);
+        if(pconcatNode2 != null)
+        {
+          listNode4.add(pconcatNode2);
+        }
+        if(listNode3 != null)
+        {
+          listNode4.addAll(listNode3);
+        }
+      }
+
+      pregexpNode1 = new ARegExp(listNode4);
+    }
+    nodeList.add(pregexpNode1);
+    return nodeList;
+  }
+
+  ArrayList new155() /* reduce ARegExpTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PConcat pconcatNode1;
+    pconcatNode1 = (PConcat)nodeArrayList2.get(0);
+    nodeList.add(pconcatNode1);
+    return nodeList;
+  }
+
+  ArrayList new156() /* reduce AAconcat1Concat */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    PConcat pconcatNode1;
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      {}
+
+      pconcatNode1 = new AConcat(listNode2);
+    }
+    nodeList.add(pconcatNode1);
+    return nodeList;
+  }
+
+  ArrayList new157() /* reduce AAconcat2Concat */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PConcat pconcatNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+
+      pconcatNode1 = new AConcat(listNode3);
+    }
+    nodeList.add(pconcatNode1);
+    return nodeList;
+  }
+
+  ArrayList new158() /* reduce AAunexp1UnExp */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PUnExp punexpNode1;
+    {
+      PBasic pbasicNode2;
+      Object nullNode3 = null;
+      pbasicNode2 = (PBasic)nodeArrayList1.get(0);
+
+      punexpNode1 = new AUnExp(pbasicNode2, null);
+    }
+    nodeList.add(punexpNode1);
+    return nodeList;
+  }
+
+  ArrayList new159() /* reduce AAunexp2UnExp */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PUnExp punexpNode1;
+    {
+      PBasic pbasicNode2;
+      PUnOp punopNode3;
+      pbasicNode2 = (PBasic)nodeArrayList1.get(0);
+      punopNode3 = (PUnOp)nodeArrayList2.get(0);
+
+      punexpNode1 = new AUnExp(pbasicNode2, punopNode3);
+    }
+    nodeList.add(punexpNode1);
+    return nodeList;
+  }
+
+  ArrayList new160() /* reduce ACharBasic */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PBasic pbasicNode1;
+    {
+      PChar pcharNode2;
+      pcharNode2 = (PChar)nodeArrayList1.get(0);
+
+      pbasicNode1 = new ACharBasic(pcharNode2);
+    }
+    nodeList.add(pbasicNode1);
+    return nodeList;
+  }
+
+  ArrayList new161() /* reduce ASetBasic */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PBasic pbasicNode1;
+    {
+      PSet psetNode2;
+      psetNode2 = (PSet)nodeArrayList1.get(0);
+
+      pbasicNode1 = new ASetBasic(psetNode2);
+    }
+    nodeList.add(pbasicNode1);
+    return nodeList;
+  }
+
+  ArrayList new162() /* reduce AStringBasic */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PBasic pbasicNode1;
+    {
+      TString tstringNode2;
+      tstringNode2 = (TString)nodeArrayList1.get(0);
+
+      pbasicNode1 = new AStringBasic(tstringNode2);
+    }
+    nodeList.add(pbasicNode1);
+    return nodeList;
+  }
+
+  ArrayList new163() /* reduce AIdBasic */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PBasic pbasicNode1;
+    {
+      TId tidNode2;
+      tidNode2 = (TId)nodeArrayList1.get(0);
+
+      pbasicNode1 = new AIdBasic(tidNode2);
+    }
+    nodeList.add(pbasicNode1);
+    return nodeList;
+  }
+
+  ArrayList new164() /* reduce ARegExpBasic */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PBasic pbasicNode1;
+    {
+      PRegExp pregexpNode2;
+      pregexpNode2 = (PRegExp)nodeArrayList2.get(0);
+
+      pbasicNode1 = new ARegExpBasic(pregexpNode2);
+    }
+    nodeList.add(pbasicNode1);
+    return nodeList;
+  }
+
+  ArrayList new165() /* reduce ACharChar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PChar pcharNode1;
+    {
+      TChar tcharNode2;
+      tcharNode2 = (TChar)nodeArrayList1.get(0);
+
+      pcharNode1 = new ACharChar(tcharNode2);
+    }
+    nodeList.add(pcharNode1);
+    return nodeList;
+  }
+
+  ArrayList new166() /* reduce ADecChar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PChar pcharNode1;
+    {
+      TDecChar tdeccharNode2;
+      tdeccharNode2 = (TDecChar)nodeArrayList1.get(0);
+
+      pcharNode1 = new ADecChar(tdeccharNode2);
+    }
+    nodeList.add(pcharNode1);
+    return nodeList;
+  }
+
+  ArrayList new167() /* reduce AHexChar */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PChar pcharNode1;
+    {
+      THexChar thexcharNode2;
+      thexcharNode2 = (THexChar)nodeArrayList1.get(0);
+
+      pcharNode1 = new AHexChar(thexcharNode2);
+    }
+    nodeList.add(pcharNode1);
+    return nodeList;
+  }
+
+  ArrayList new168() /* reduce AOperationSet */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PSet psetNode1;
+    {
+      PBasic pbasicNode2;
+      PBinOp pbinopNode3;
+      PBasic pbasicNode4;
+      pbasicNode2 = (PBasic)nodeArrayList2.get(0);
+      pbinopNode3 = (PBinOp)nodeArrayList3.get(0);
+      pbasicNode4 = (PBasic)nodeArrayList4.get(0);
+
+      psetNode1 = new AOperationSet(pbasicNode2, pbinopNode3, pbasicNode4);
+    }
+    nodeList.add(psetNode1);
+    return nodeList;
+  }
+
+  ArrayList new169() /* reduce AIntervalSet */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PSet psetNode1;
+    {
+      PChar pcharNode2;
+      PChar pcharNode3;
+      pcharNode2 = (PChar)nodeArrayList2.get(0);
+      pcharNode3 = (PChar)nodeArrayList4.get(0);
+
+      psetNode1 = new AIntervalSet(pcharNode2, pcharNode3);
+    }
+    nodeList.add(psetNode1);
+    return nodeList;
+  }
+
+  ArrayList new170() /* reduce AStarUnOp */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PUnOp punopNode1;
+    {
+      TStar tstarNode2;
+      tstarNode2 = (TStar)nodeArrayList1.get(0);
+
+      punopNode1 = new AStarUnOp(tstarNode2);
+    }
+    nodeList.add(punopNode1);
+    return nodeList;
+  }
+
+  ArrayList new171() /* reduce AQMarkUnOp */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PUnOp punopNode1;
+    {
+      TQMark tqmarkNode2;
+      tqmarkNode2 = (TQMark)nodeArrayList1.get(0);
+
+      punopNode1 = new AQMarkUnOp(tqmarkNode2);
+    }
+    nodeList.add(punopNode1);
+    return nodeList;
+  }
+
+  ArrayList new172() /* reduce APlusUnOp */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PUnOp punopNode1;
+    {
+      TPlus tplusNode2;
+      tplusNode2 = (TPlus)nodeArrayList1.get(0);
+
+      punopNode1 = new APlusUnOp(tplusNode2);
+    }
+    nodeList.add(punopNode1);
+    return nodeList;
+  }
+
+  ArrayList new173() /* reduce APlusBinOp */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PBinOp pbinopNode1;
+    {
+
+      pbinopNode1 = new APlusBinOp();
+    }
+    nodeList.add(pbinopNode1);
+    return nodeList;
+  }
+
+  ArrayList new174() /* reduce AMinusBinOp */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PBinOp pbinopNode1;
+    {
+
+      pbinopNode1 = new AMinusBinOp();
+    }
+    nodeList.add(pbinopNode1);
+    return nodeList;
+  }
+
+  ArrayList new175() /* reduce AProductions */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PProductions pproductionsNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+
+      pproductionsNode1 = new AProductions(listNode3);
+    }
+    nodeList.add(pproductionsNode1);
+    return nodeList;
+  }
+
+  ArrayList new176() /* reduce AAprod1Prod */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PProd pprodNode1;
+    {
+      TId tidNode2;
+      Object nullNode3 = null;
+      TypedLinkedList listNode4 = new TypedLinkedList();
+      TypedLinkedList listNode6 = new TypedLinkedList();
+      tidNode2 = (TId)nodeArrayList1.get(0);
+      {}
+
+      {
+        TypedLinkedList listNode5 = new TypedLinkedList();
+        listNode5 = (TypedLinkedList)nodeArrayList3.get(0);
+        if(listNode5 != null)
+        {
+          listNode6.addAll(listNode5);
+        }
+      }
+
+      pprodNode1 = new AProd(tidNode2, null, listNode4, listNode6);
+    }
+    nodeList.add(pprodNode1);
+    return nodeList;
+  }
+
+  ArrayList new177() /* reduce AAprod2Prod */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PProd pprodNode1;
+    {
+      TId tidNode2;
+      TArrow tarrowNode3;
+      TypedLinkedList listNode5 = new TypedLinkedList();
+      TypedLinkedList listNode7 = new TypedLinkedList();
+      tidNode2 = (TId)nodeArrayList1.get(0);
+      tarrowNode3 = (TArrow)nodeArrayList2.get(0);
+      {
+        TypedLinkedList listNode4 = new TypedLinkedList();
+        listNode4 = (TypedLinkedList)nodeArrayList2.get(1);
+        if(listNode4 != null)
+        {
+          listNode5.addAll(listNode4);
+        }
+      }
+      {
+        TypedLinkedList listNode6 = new TypedLinkedList();
+        listNode6 = (TypedLinkedList)nodeArrayList4.get(0);
+        if(listNode6 != null)
+        {
+          listNode7.addAll(listNode6);
+        }
+      }
+
+      pprodNode1 = new AProd(tidNode2, tarrowNode3, listNode5, listNode7);
+    }
+    nodeList.add(pprodNode1);
+    return nodeList;
+  }
+
+  ArrayList new178() /* reduce AAprodtransform1ProdTransform */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TArrow tarrowNode1;
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    tarrowNode1 = (TArrow)nodeArrayList2.get(0);
+    {}
+    nodeList.add(tarrowNode1);
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new179() /* reduce AAprodtransform2ProdTransform */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TArrow tarrowNode1;
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    tarrowNode1 = (TArrow)nodeArrayList2.get(0);
+    {
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      listNode2 = (TypedLinkedList)nodeArrayList3.get(0);
+      if(listNode2 != null)
+      {
+        listNode3.addAll(listNode2);
+      }
+    }
+    nodeList.add(tarrowNode1);
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new180() /* reduce AAalts1Alts */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PAlt paltNode1;
+      paltNode1 = (PAlt)nodeArrayList1.get(0);
+      if(paltNode1 != null)
+      {
+        listNode2.add(paltNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new181() /* reduce AAalts2Alts */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      PAlt paltNode1;
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      paltNode1 = (PAlt)nodeArrayList1.get(0);
+      listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
+      if(paltNode1 != null)
+      {
+        listNode3.add(paltNode1);
+      }
+      if(listNode2 != null)
+      {
+        listNode3.addAll(listNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new182() /* reduce AAltsTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PAlt paltNode1;
+    paltNode1 = (PAlt)nodeArrayList2.get(0);
+    nodeList.add(paltNode1);
+    return nodeList;
+  }
+
+  ArrayList new183() /* reduce AAalt1Alt */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    PAlt paltNode1;
+    {
+      Object nullNode2 = null;
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      {}
+
+      paltNode1 = new AAlt(null, listNode3, null);
+    }
+    nodeList.add(paltNode1);
+    return nodeList;
+  }
+
+  ArrayList new184() /* reduce AAalt2Alt */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PAlt paltNode1;
+    {
+      TId tidNode2;
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      Object nullNode4 = null;
+      tidNode2 = (TId)nodeArrayList1.get(0);
+      {}
+
+      paltNode1 = new AAlt(tidNode2, listNode3, null);
+    }
+    nodeList.add(paltNode1);
+    return nodeList;
+  }
+
+  ArrayList new185() /* reduce AAalt3Alt */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PAlt paltNode1;
+    {
+      Object nullNode2 = null;
+      TypedLinkedList listNode4 = new TypedLinkedList();
+      Object nullNode5 = null;
+      {
+        TypedLinkedList listNode3 = new TypedLinkedList();
+        listNode3 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode3 != null)
+        {
+          listNode4.addAll(listNode3);
+        }
+      }
+
+      paltNode1 = new AAlt(null, listNode4, null);
+    }
+    nodeList.add(paltNode1);
+    return nodeList;
+  }
+
+  ArrayList new186() /* reduce AAalt4Alt */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PAlt paltNode1;
+    {
+      TId tidNode2;
+      TypedLinkedList listNode4 = new TypedLinkedList();
+      Object nullNode5 = null;
+      tidNode2 = (TId)nodeArrayList1.get(0);
+      {
+        TypedLinkedList listNode3 = new TypedLinkedList();
+        listNode3 = (TypedLinkedList)nodeArrayList2.get(0);
+        if(listNode3 != null)
+        {
+          listNode4.addAll(listNode3);
+        }
+      }
+
+      paltNode1 = new AAlt(tidNode2, listNode4, null);
+    }
+    nodeList.add(paltNode1);
+    return nodeList;
+  }
+
+  ArrayList new187() /* reduce AAalt5Alt */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PAlt paltNode1;
+    {
+      Object nullNode2 = null;
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PAltTransform palttransformNode4;
+      {}
+      palttransformNode4 = (PAltTransform)nodeArrayList1.get(0);
+
+      paltNode1 = new AAlt(null, listNode3, palttransformNode4);
+    }
+    nodeList.add(paltNode1);
+    return nodeList;
+  }
+
+  ArrayList new188() /* reduce AAalt6Alt */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PAlt paltNode1;
+    {
+      TId tidNode2;
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      PAltTransform palttransformNode4;
+      tidNode2 = (TId)nodeArrayList1.get(0);
+      {}
+      palttransformNode4 = (PAltTransform)nodeArrayList2.get(0);
+
+      paltNode1 = new AAlt(tidNode2, listNode3, palttransformNode4);
+    }
+    nodeList.add(paltNode1);
+    return nodeList;
+  }
+
+  ArrayList new189() /* reduce AAalt7Alt */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PAlt paltNode1;
+    {
+      Object nullNode2 = null;
+      TypedLinkedList listNode4 = new TypedLinkedList();
+      PAltTransform palttransformNode5;
+      {
+        TypedLinkedList listNode3 = new TypedLinkedList();
+        listNode3 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode3 != null)
+        {
+          listNode4.addAll(listNode3);
+        }
+      }
+      palttransformNode5 = (PAltTransform)nodeArrayList2.get(0);
+
+      paltNode1 = new AAlt(null, listNode4, palttransformNode5);
+    }
+    nodeList.add(paltNode1);
+    return nodeList;
+  }
+
+  ArrayList new190() /* reduce AAalt8Alt */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PAlt paltNode1;
+    {
+      TId tidNode2;
+      TypedLinkedList listNode4 = new TypedLinkedList();
+      PAltTransform palttransformNode5;
+      tidNode2 = (TId)nodeArrayList1.get(0);
+      {
+        TypedLinkedList listNode3 = new TypedLinkedList();
+        listNode3 = (TypedLinkedList)nodeArrayList2.get(0);
+        if(listNode3 != null)
+        {
+          listNode4.addAll(listNode3);
+        }
+      }
+      palttransformNode5 = (PAltTransform)nodeArrayList3.get(0);
+
+      paltNode1 = new AAlt(tidNode2, listNode4, palttransformNode5);
+    }
+    nodeList.add(paltNode1);
+    return nodeList;
+  }
+
+  ArrayList new191() /* reduce AAalttransform1AltTransform */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PAltTransform palttransformNode1;
+    {
+      TLBrace tlbraceNode2;
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      TRBrace trbraceNode4;
+      tlbraceNode2 = (TLBrace)nodeArrayList1.get(0);
+      {}
+      trbraceNode4 = (TRBrace)nodeArrayList3.get(0);
+
+      palttransformNode1 = new AAltTransform(tlbraceNode2, listNode3, trbraceNode4);
+    }
+    nodeList.add(palttransformNode1);
+    return nodeList;
+  }
+
+  ArrayList new192() /* reduce AAalttransform2AltTransform */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PAltTransform palttransformNode1;
+    {
+      TLBrace tlbraceNode2;
+      TypedLinkedList listNode4 = new TypedLinkedList();
+      TRBrace trbraceNode5;
+      tlbraceNode2 = (TLBrace)nodeArrayList1.get(0);
+      {
+        TypedLinkedList listNode3 = new TypedLinkedList();
+        listNode3 = (TypedLinkedList)nodeArrayList3.get(0);
+        if(listNode3 != null)
+        {
+          listNode4.addAll(listNode3);
+        }
+      }
+      trbraceNode5 = (TRBrace)nodeArrayList4.get(0);
+
+      palttransformNode1 = new AAltTransform(tlbraceNode2, listNode4, trbraceNode5);
+    }
+    nodeList.add(palttransformNode1);
+    return nodeList;
+  }
+
+  ArrayList new193() /* reduce AAnewterm1Term */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PTerm ptermNode1;
+    {
+      PProdName pprodnameNode2;
+      TLPar tlparNode3;
+      TypedLinkedList listNode4 = new TypedLinkedList();
+      pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
+      tlparNode3 = (TLPar)nodeArrayList3.get(0);
+      {}
+
+      ptermNode1 = new ANewTerm(pprodnameNode2, tlparNode3, listNode4);
+    }
+    nodeList.add(ptermNode1);
+    return nodeList;
+  }
+
+  ArrayList new194() /* reduce AAnewterm2Term */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PTerm ptermNode1;
+    {
+      PProdName pprodnameNode2;
+      TLPar tlparNode3;
+      TypedLinkedList listNode5 = new TypedLinkedList();
+      pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
+      tlparNode3 = (TLPar)nodeArrayList3.get(0);
+      {
+        TypedLinkedList listNode4 = new TypedLinkedList();
+        listNode4 = (TypedLinkedList)nodeArrayList4.get(0);
+        if(listNode4 != null)
+        {
+          listNode5.addAll(listNode4);
+        }
+      }
+
+      ptermNode1 = new ANewTerm(pprodnameNode2, tlparNode3, listNode5);
+    }
+    nodeList.add(ptermNode1);
+    return nodeList;
+  }
+
+  ArrayList new195() /* reduce AAlistterm1Term */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PTerm ptermNode1;
+    {
+      TLBkt tlbktNode2;
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      tlbktNode2 = (TLBkt)nodeArrayList1.get(0);
+      {}
+
+      ptermNode1 = new AListTerm(tlbktNode2, listNode3);
+    }
+    nodeList.add(ptermNode1);
+    return nodeList;
+  }
+
+  ArrayList new196() /* reduce AAlistterm2Term */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PTerm ptermNode1;
+    {
+      TLBkt tlbktNode2;
+      TypedLinkedList listNode4 = new TypedLinkedList();
+      tlbktNode2 = (TLBkt)nodeArrayList1.get(0);
+      {
+        TypedLinkedList listNode3 = new TypedLinkedList();
+        listNode3 = (TypedLinkedList)nodeArrayList2.get(0);
+        if(listNode3 != null)
+        {
+          listNode4.addAll(listNode3);
+        }
+      }
+
+      ptermNode1 = new AListTerm(tlbktNode2, listNode4);
+    }
+    nodeList.add(ptermNode1);
+    return nodeList;
+  }
+
+  ArrayList new197() /* reduce AAsimpleterm1Term */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PTerm ptermNode1;
+    {
+      Object nullNode2 = null;
+      TId tidNode3;
+      Object nullNode4 = null;
+      tidNode3 = (TId)nodeArrayList1.get(0);
+
+      ptermNode1 = new ASimpleTerm(null, tidNode3, null);
+    }
+    nodeList.add(ptermNode1);
+    return nodeList;
+  }
+
+  ArrayList new198() /* reduce AAsimpleterm2Term */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PTerm ptermNode1;
+    {
+      PSpecifier pspecifierNode2;
+      TId tidNode3;
+      Object nullNode4 = null;
+      pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
+      tidNode3 = (TId)nodeArrayList2.get(0);
+
+      ptermNode1 = new ASimpleTerm(pspecifierNode2, tidNode3, null);
+    }
+    nodeList.add(ptermNode1);
+    return nodeList;
+  }
+
+  ArrayList new199() /* reduce AAsimpleterm3Term */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PTerm ptermNode1;
+    {
+      Object nullNode2 = null;
+      TId tidNode3;
+      TId tidNode4;
+      tidNode3 = (TId)nodeArrayList1.get(0);
+      tidNode4 = (TId)nodeArrayList2.get(0);
+
+      ptermNode1 = new ASimpleTerm(null, tidNode3, tidNode4);
+    }
+    nodeList.add(ptermNode1);
+    return nodeList;
+  }
+
+  ArrayList new200() /* reduce AAsimpleterm4Term */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PTerm ptermNode1;
+    {
+      PSpecifier pspecifierNode2;
+      TId tidNode3;
+      TId tidNode4;
+      pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
+      tidNode3 = (TId)nodeArrayList2.get(0);
+      tidNode4 = (TId)nodeArrayList3.get(0);
+
+      ptermNode1 = new ASimpleTerm(pspecifierNode2, tidNode3, tidNode4);
+    }
+    nodeList.add(ptermNode1);
+    return nodeList;
+  }
+
+  ArrayList new201() /* reduce ANullTerm */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PTerm ptermNode1;
+    {
+
+      ptermNode1 = new ANullTerm();
+    }
+    nodeList.add(ptermNode1);
+    return nodeList;
+  }
+
+  ArrayList new202() /* reduce AAlistoflistterm1ListOfListTerm */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PListTerm plisttermNode1;
+      plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
+      if(plisttermNode1 != null)
+      {
+        listNode2.add(plisttermNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new203() /* reduce AAlistoflistterm2ListOfListTerm */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      PListTerm plisttermNode1;
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
+      listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
+      if(plisttermNode1 != null)
+      {
+        listNode3.add(plisttermNode1);
+      }
+      if(listNode2 != null)
+      {
+        listNode3.addAll(listNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new204() /* reduce AAnewlistterm1ListTerm */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PListTerm plisttermNode1;
+    {
+      PProdName pprodnameNode2;
+      TLPar tlparNode3;
+      TypedLinkedList listNode4 = new TypedLinkedList();
+      pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
+      tlparNode3 = (TLPar)nodeArrayList3.get(0);
+      {}
+
+      plisttermNode1 = new ANewListTerm(pprodnameNode2, tlparNode3, listNode4);
+    }
+    nodeList.add(plisttermNode1);
+    return nodeList;
+  }
+
+  ArrayList new205() /* reduce AAnewlistterm2ListTerm */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList5 = (ArrayList) pop();
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PListTerm plisttermNode1;
+    {
+      PProdName pprodnameNode2;
+      TLPar tlparNode3;
+      TypedLinkedList listNode5 = new TypedLinkedList();
+      pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
+      tlparNode3 = (TLPar)nodeArrayList3.get(0);
+      {
+        TypedLinkedList listNode4 = new TypedLinkedList();
+        listNode4 = (TypedLinkedList)nodeArrayList4.get(0);
+        if(listNode4 != null)
+        {
+          listNode5.addAll(listNode4);
+        }
+      }
+
+      plisttermNode1 = new ANewListTerm(pprodnameNode2, tlparNode3, listNode5);
+    }
+    nodeList.add(plisttermNode1);
+    return nodeList;
+  }
+
+  ArrayList new206() /* reduce AAsimplelistterm1ListTerm */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PListTerm plisttermNode1;
+    {
+      Object nullNode2 = null;
+      TId tidNode3;
+      Object nullNode4 = null;
+      tidNode3 = (TId)nodeArrayList1.get(0);
+
+      plisttermNode1 = new ASimpleListTerm(null, tidNode3, null);
+    }
+    nodeList.add(plisttermNode1);
+    return nodeList;
+  }
+
+  ArrayList new207() /* reduce AAsimplelistterm2ListTerm */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PListTerm plisttermNode1;
+    {
+      PSpecifier pspecifierNode2;
+      TId tidNode3;
+      Object nullNode4 = null;
+      pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
+      tidNode3 = (TId)nodeArrayList2.get(0);
+
+      plisttermNode1 = new ASimpleListTerm(pspecifierNode2, tidNode3, null);
+    }
+    nodeList.add(plisttermNode1);
+    return nodeList;
+  }
+
+  ArrayList new208() /* reduce AAsimplelistterm3ListTerm */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PListTerm plisttermNode1;
+    {
+      Object nullNode2 = null;
+      TId tidNode3;
+      TId tidNode4;
+      tidNode3 = (TId)nodeArrayList1.get(0);
+      tidNode4 = (TId)nodeArrayList2.get(0);
+
+      plisttermNode1 = new ASimpleListTerm(null, tidNode3, tidNode4);
+    }
+    nodeList.add(plisttermNode1);
+    return nodeList;
+  }
+
+  ArrayList new209() /* reduce AAsimplelistterm4ListTerm */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PListTerm plisttermNode1;
+    {
+      PSpecifier pspecifierNode2;
+      TId tidNode3;
+      TId tidNode4;
+      pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
+      tidNode3 = (TId)nodeArrayList2.get(0);
+      tidNode4 = (TId)nodeArrayList3.get(0);
+
+      plisttermNode1 = new ASimpleListTerm(pspecifierNode2, tidNode3, tidNode4);
+    }
+    nodeList.add(plisttermNode1);
+    return nodeList;
+  }
+
+  ArrayList new210() /* reduce AListTermTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PListTerm plisttermNode1;
+    plisttermNode1 = (PListTerm)nodeArrayList2.get(0);
+    nodeList.add(plisttermNode1);
+    return nodeList;
+  }
+
+  ArrayList new211() /* reduce ASimpleTermTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TId tidNode1;
+    tidNode1 = (TId)nodeArrayList2.get(0);
+    nodeList.add(tidNode1);
+    return nodeList;
+  }
+
+  ArrayList new212() /* reduce AAprodname1ProdName */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PProdName pprodnameNode1;
+    {
+      TId tidNode2;
+      Object nullNode3 = null;
+      tidNode2 = (TId)nodeArrayList1.get(0);
+
+      pprodnameNode1 = new AProdName(tidNode2, null);
+    }
+    nodeList.add(pprodnameNode1);
+    return nodeList;
+  }
+
+  ArrayList new213() /* reduce AAprodname2ProdName */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PProdName pprodnameNode1;
+    {
+      TId tidNode2;
+      TId tidNode3;
+      tidNode2 = (TId)nodeArrayList1.get(0);
+      tidNode3 = (TId)nodeArrayList2.get(0);
+
+      pprodnameNode1 = new AProdName(tidNode2, tidNode3);
+    }
+    nodeList.add(pprodnameNode1);
+    return nodeList;
+  }
+
+  ArrayList new214() /* reduce AProdNameTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TId tidNode1;
+    tidNode1 = (TId)nodeArrayList2.get(0);
+    nodeList.add(tidNode1);
+    return nodeList;
+  }
+
+  ArrayList new215() /* reduce AAparams1Params */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PTerm ptermNode1;
+      ptermNode1 = (PTerm)nodeArrayList1.get(0);
+      if(ptermNode1 != null)
+      {
+        listNode2.add(ptermNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new216() /* reduce AAparams2Params */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      PTerm ptermNode1;
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      ptermNode1 = (PTerm)nodeArrayList1.get(0);
+      listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
+      if(ptermNode1 != null)
+      {
+        listNode3.add(ptermNode1);
+      }
+      if(listNode2 != null)
+      {
+        listNode3.addAll(listNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new217() /* reduce AParamsTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PTerm ptermNode1;
+    ptermNode1 = (PTerm)nodeArrayList2.get(0);
+    nodeList.add(ptermNode1);
+    return nodeList;
+  }
+
+  ArrayList new218() /* reduce AAltName */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TId tidNode1;
+    tidNode1 = (TId)nodeArrayList2.get(0);
+    nodeList.add(tidNode1);
+    return nodeList;
+  }
+
+  ArrayList new219() /* reduce AAelem1Elem */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PElem pelemNode1;
+    {
+      Object nullNode2 = null;
+      Object nullNode3 = null;
+      TId tidNode4;
+      Object nullNode5 = null;
+      tidNode4 = (TId)nodeArrayList1.get(0);
+
+      pelemNode1 = new AElem(null, null, tidNode4, null);
+    }
+    nodeList.add(pelemNode1);
+    return nodeList;
+  }
+
+  ArrayList new220() /* reduce AAelem2Elem */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PElem pelemNode1;
+    {
+      TId tidNode2;
+      Object nullNode3 = null;
+      TId tidNode4;
+      Object nullNode5 = null;
+      tidNode2 = (TId)nodeArrayList1.get(0);
+      tidNode4 = (TId)nodeArrayList2.get(0);
+
+      pelemNode1 = new AElem(tidNode2, null, tidNode4, null);
+    }
+    nodeList.add(pelemNode1);
+    return nodeList;
+  }
+
+  ArrayList new221() /* reduce AAelem3Elem */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PElem pelemNode1;
+    {
+      Object nullNode2 = null;
+      PSpecifier pspecifierNode3;
+      TId tidNode4;
+      Object nullNode5 = null;
+      pspecifierNode3 = (PSpecifier)nodeArrayList1.get(0);
+      tidNode4 = (TId)nodeArrayList2.get(0);
+
+      pelemNode1 = new AElem(null, pspecifierNode3, tidNode4, null);
+    }
+    nodeList.add(pelemNode1);
+    return nodeList;
+  }
+
+  ArrayList new222() /* reduce AAelem4Elem */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PElem pelemNode1;
+    {
+      TId tidNode2;
+      PSpecifier pspecifierNode3;
+      TId tidNode4;
+      Object nullNode5 = null;
+      tidNode2 = (TId)nodeArrayList1.get(0);
+      pspecifierNode3 = (PSpecifier)nodeArrayList2.get(0);
+      tidNode4 = (TId)nodeArrayList3.get(0);
+
+      pelemNode1 = new AElem(tidNode2, pspecifierNode3, tidNode4, null);
+    }
+    nodeList.add(pelemNode1);
+    return nodeList;
+  }
+
+  ArrayList new223() /* reduce AAelem5Elem */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PElem pelemNode1;
+    {
+      Object nullNode2 = null;
+      Object nullNode3 = null;
+      TId tidNode4;
+      PUnOp punopNode5;
+      tidNode4 = (TId)nodeArrayList1.get(0);
+      punopNode5 = (PUnOp)nodeArrayList2.get(0);
+
+      pelemNode1 = new AElem(null, null, tidNode4, punopNode5);
+    }
+    nodeList.add(pelemNode1);
+    return nodeList;
+  }
+
+  ArrayList new224() /* reduce AAelem6Elem */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PElem pelemNode1;
+    {
+      TId tidNode2;
+      Object nullNode3 = null;
+      TId tidNode4;
+      PUnOp punopNode5;
+      tidNode2 = (TId)nodeArrayList1.get(0);
+      tidNode4 = (TId)nodeArrayList2.get(0);
+      punopNode5 = (PUnOp)nodeArrayList3.get(0);
+
+      pelemNode1 = new AElem(tidNode2, null, tidNode4, punopNode5);
+    }
+    nodeList.add(pelemNode1);
+    return nodeList;
+  }
+
+  ArrayList new225() /* reduce AAelem7Elem */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PElem pelemNode1;
+    {
+      Object nullNode2 = null;
+      PSpecifier pspecifierNode3;
+      TId tidNode4;
+      PUnOp punopNode5;
+      pspecifierNode3 = (PSpecifier)nodeArrayList1.get(0);
+      tidNode4 = (TId)nodeArrayList2.get(0);
+      punopNode5 = (PUnOp)nodeArrayList3.get(0);
+
+      pelemNode1 = new AElem(null, pspecifierNode3, tidNode4, punopNode5);
+    }
+    nodeList.add(pelemNode1);
+    return nodeList;
+  }
+
+  ArrayList new226() /* reduce AAelem8Elem */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PElem pelemNode1;
+    {
+      TId tidNode2;
+      PSpecifier pspecifierNode3;
+      TId tidNode4;
+      PUnOp punopNode5;
+      tidNode2 = (TId)nodeArrayList1.get(0);
+      pspecifierNode3 = (PSpecifier)nodeArrayList2.get(0);
+      tidNode4 = (TId)nodeArrayList3.get(0);
+      punopNode5 = (PUnOp)nodeArrayList4.get(0);
+
+      pelemNode1 = new AElem(tidNode2, pspecifierNode3, tidNode4, punopNode5);
+    }
+    nodeList.add(pelemNode1);
+    return nodeList;
+  }
+
+  ArrayList new227() /* reduce AElemName */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TId tidNode1;
+    tidNode1 = (TId)nodeArrayList2.get(0);
+    nodeList.add(tidNode1);
+    return nodeList;
+  }
+
+  ArrayList new228() /* reduce ATokenSpecifier */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PSpecifier pspecifierNode1;
+    {
+
+      pspecifierNode1 = new ATokenSpecifier();
+    }
+    nodeList.add(pspecifierNode1);
+    return nodeList;
+  }
+
+  ArrayList new229() /* reduce AProductionSpecifier */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PSpecifier pspecifierNode1;
+    {
+
+      pspecifierNode1 = new AProductionSpecifier();
+    }
+    nodeList.add(pspecifierNode1);
+    return nodeList;
+  }
+
+  ArrayList new230() /* reduce AAst */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PAst pastNode1;
+    {
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      {
+        TypedLinkedList listNode2 = new TypedLinkedList();
+        listNode2 = (TypedLinkedList)nodeArrayList4.get(0);
+        if(listNode2 != null)
+        {
+          listNode3.addAll(listNode2);
+        }
+      }
+
+      pastNode1 = new AAst(listNode3);
+    }
+    nodeList.add(pastNode1);
+    return nodeList;
+  }
+
+  ArrayList new231() /* reduce AAstProd */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList4 = (ArrayList) pop();
+    ArrayList nodeArrayList3 = (ArrayList) pop();
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PAstProd pastprodNode1;
+    {
+      TId tidNode2;
+      TypedLinkedList listNode4 = new TypedLinkedList();
+      tidNode2 = (TId)nodeArrayList1.get(0);
+      {
+        TypedLinkedList listNode3 = new TypedLinkedList();
+        listNode3 = (TypedLinkedList)nodeArrayList3.get(0);
+        if(listNode3 != null)
+        {
+          listNode4.addAll(listNode3);
+        }
+      }
+
+      pastprodNode1 = new AAstProd(tidNode2, listNode4);
+    }
+    nodeList.add(pastprodNode1);
+    return nodeList;
+  }
+
+  ArrayList new232() /* reduce AAastalts1AstAlts */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PAstAlt pastaltNode1;
+      pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
+      if(pastaltNode1 != null)
+      {
+        listNode2.add(pastaltNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new233() /* reduce AAastalts2AstAlts */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      PAstAlt pastaltNode1;
+      TypedLinkedList listNode2 = new TypedLinkedList();
+      pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
+      listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
+      if(pastaltNode1 != null)
+      {
+        listNode3.add(pastaltNode1);
+      }
+      if(listNode2 != null)
+      {
+        listNode3.addAll(listNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new234() /* reduce AAstAltsTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PAstAlt pastaltNode1;
+    pastaltNode1 = (PAstAlt)nodeArrayList2.get(0);
+    nodeList.add(pastaltNode1);
+    return nodeList;
+  }
+
+  ArrayList new235() /* reduce AAastalt1AstAlt */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    PAstAlt pastaltNode1;
+    {
+      Object nullNode2 = null;
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      {}
+
+      pastaltNode1 = new AAstAlt(null, listNode3);
+    }
+    nodeList.add(pastaltNode1);
+    return nodeList;
+  }
+
+  ArrayList new236() /* reduce AAastalt2AstAlt */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PAstAlt pastaltNode1;
+    {
+      TId tidNode2;
+      TypedLinkedList listNode3 = new TypedLinkedList();
+      tidNode2 = (TId)nodeArrayList1.get(0);
+      {}
+
+      pastaltNode1 = new AAstAlt(tidNode2, listNode3);
+    }
+    nodeList.add(pastaltNode1);
+    return nodeList;
+  }
+
+  ArrayList new237() /* reduce AAastalt3AstAlt */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PAstAlt pastaltNode1;
+    {
+      Object nullNode2 = null;
+      TypedLinkedList listNode4 = new TypedLinkedList();
+      {
+        TypedLinkedList listNode3 = new TypedLinkedList();
+        listNode3 = (TypedLinkedList)nodeArrayList1.get(0);
+        if(listNode3 != null)
+        {
+          listNode4.addAll(listNode3);
+        }
+      }
+
+      pastaltNode1 = new AAstAlt(null, listNode4);
+    }
+    nodeList.add(pastaltNode1);
+    return nodeList;
+  }
+
+  ArrayList new238() /* reduce AAastalt4AstAlt */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    PAstAlt pastaltNode1;
+    {
+      TId tidNode2;
+      TypedLinkedList listNode4 = new TypedLinkedList();
+      tidNode2 = (TId)nodeArrayList1.get(0);
+      {
+        TypedLinkedList listNode3 = new TypedLinkedList();
+        listNode3 = (TypedLinkedList)nodeArrayList2.get(0);
+        if(listNode3 != null)
+        {
+          listNode4.addAll(listNode3);
+        }
+      }
+
+      pastaltNode1 = new AAstAlt(tidNode2, listNode4);
+    }
+    nodeList.add(pastaltNode1);
+    return nodeList;
+  }
+
+  ArrayList new239() /* reduce ATerminal$PkgNameTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      TPkgId tpkgidNode1;
+      tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
+      if(tpkgidNode1 != null)
+      {
+        listNode2.add(tpkgidNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new240() /* reduce ANonTerminal$PkgNameTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TypedLinkedList listNode1 = new TypedLinkedList();
+      TPkgId tpkgidNode2;
+      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
+      tpkgidNode2 = (TPkgId)nodeArrayList2.get(0);
+      if(listNode1 != null)
+      {
+        listNode3.addAll(listNode1);
+      }
+      if(tpkgidNode2 != null)
+      {
+        listNode3.add(tpkgidNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new241() /* reduce ATerminal$HelperDef */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PHelperDef phelperdefNode1;
+      phelperdefNode1 = (PHelperDef)nodeArrayList1.get(0);
+      if(phelperdefNode1 != null)
+      {
+        listNode2.add(phelperdefNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new242() /* reduce ANonTerminal$HelperDef */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TypedLinkedList listNode1 = new TypedLinkedList();
+      PHelperDef phelperdefNode2;
+      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
+      phelperdefNode2 = (PHelperDef)nodeArrayList2.get(0);
+      if(listNode1 != null)
+      {
+        listNode3.addAll(listNode1);
+      }
+      if(phelperdefNode2 != null)
+      {
+        listNode3.add(phelperdefNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new243() /* reduce ATerminal$IdListTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      TId tidNode1;
+      tidNode1 = (TId)nodeArrayList1.get(0);
+      if(tidNode1 != null)
+      {
+        listNode2.add(tidNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new244() /* reduce ANonTerminal$IdListTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TypedLinkedList listNode1 = new TypedLinkedList();
+      TId tidNode2;
+      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
+      tidNode2 = (TId)nodeArrayList2.get(0);
+      if(listNode1 != null)
+      {
+        listNode3.addAll(listNode1);
+      }
+      if(tidNode2 != null)
+      {
+        listNode3.add(tidNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new245() /* reduce ATerminal$TokenDef */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PTokenDef ptokendefNode1;
+      ptokendefNode1 = (PTokenDef)nodeArrayList1.get(0);
+      if(ptokendefNode1 != null)
+      {
+        listNode2.add(ptokendefNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new246() /* reduce ANonTerminal$TokenDef */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TypedLinkedList listNode1 = new TypedLinkedList();
+      PTokenDef ptokendefNode2;
+      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
+      ptokendefNode2 = (PTokenDef)nodeArrayList2.get(0);
+      if(listNode1 != null)
+      {
+        listNode3.addAll(listNode1);
+      }
+      if(ptokendefNode2 != null)
+      {
+        listNode3.add(ptokendefNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new247() /* reduce ATerminal$StateListTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PStateListTail pstatelisttailNode1;
+      pstatelisttailNode1 = (PStateListTail)nodeArrayList1.get(0);
+      if(pstatelisttailNode1 != null)
+      {
+        listNode2.add(pstatelisttailNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new248() /* reduce ANonTerminal$StateListTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TypedLinkedList listNode1 = new TypedLinkedList();
+      PStateListTail pstatelisttailNode2;
+      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
+      pstatelisttailNode2 = (PStateListTail)nodeArrayList2.get(0);
+      if(listNode1 != null)
+      {
+        listNode3.addAll(listNode1);
+      }
+      if(pstatelisttailNode2 != null)
+      {
+        listNode3.add(pstatelisttailNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new249() /* reduce ATerminal$RegExpTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PConcat pconcatNode1;
+      pconcatNode1 = (PConcat)nodeArrayList1.get(0);
+      if(pconcatNode1 != null)
+      {
+        listNode2.add(pconcatNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new250() /* reduce ANonTerminal$RegExpTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TypedLinkedList listNode1 = new TypedLinkedList();
+      PConcat pconcatNode2;
+      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
+      pconcatNode2 = (PConcat)nodeArrayList2.get(0);
+      if(listNode1 != null)
+      {
+        listNode3.addAll(listNode1);
+      }
+      if(pconcatNode2 != null)
+      {
+        listNode3.add(pconcatNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new251() /* reduce ATerminal$UnExp */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PUnExp punexpNode1;
+      punexpNode1 = (PUnExp)nodeArrayList1.get(0);
+      if(punexpNode1 != null)
+      {
+        listNode2.add(punexpNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new252() /* reduce ANonTerminal$UnExp */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TypedLinkedList listNode1 = new TypedLinkedList();
+      PUnExp punexpNode2;
+      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
+      punexpNode2 = (PUnExp)nodeArrayList2.get(0);
+      if(listNode1 != null)
+      {
+        listNode3.addAll(listNode1);
+      }
+      if(punexpNode2 != null)
+      {
+        listNode3.add(punexpNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new253() /* reduce ATerminal$Prod */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PProd pprodNode1;
+      pprodNode1 = (PProd)nodeArrayList1.get(0);
+      if(pprodNode1 != null)
+      {
+        listNode2.add(pprodNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new254() /* reduce ANonTerminal$Prod */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TypedLinkedList listNode1 = new TypedLinkedList();
+      PProd pprodNode2;
+      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
+      pprodNode2 = (PProd)nodeArrayList2.get(0);
+      if(listNode1 != null)
+      {
+        listNode3.addAll(listNode1);
+      }
+      if(pprodNode2 != null)
+      {
+        listNode3.add(pprodNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new255() /* reduce ATerminal$Elem */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PElem pelemNode1;
+      pelemNode1 = (PElem)nodeArrayList1.get(0);
+      if(pelemNode1 != null)
+      {
+        listNode2.add(pelemNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new256() /* reduce ANonTerminal$Elem */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TypedLinkedList listNode1 = new TypedLinkedList();
+      PElem pelemNode2;
+      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
+      pelemNode2 = (PElem)nodeArrayList2.get(0);
+      if(listNode1 != null)
+      {
+        listNode3.addAll(listNode1);
+      }
+      if(pelemNode2 != null)
+      {
+        listNode3.add(pelemNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new257() /* reduce ATerminal$AltsTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PAlt paltNode1;
+      paltNode1 = (PAlt)nodeArrayList1.get(0);
+      if(paltNode1 != null)
+      {
+        listNode2.add(paltNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new258() /* reduce ANonTerminal$AltsTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TypedLinkedList listNode1 = new TypedLinkedList();
+      PAlt paltNode2;
+      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
+      paltNode2 = (PAlt)nodeArrayList2.get(0);
+      if(listNode1 != null)
+      {
+        listNode3.addAll(listNode1);
+      }
+      if(paltNode2 != null)
+      {
+        listNode3.add(paltNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new259() /* reduce ATerminal$Term */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PTerm ptermNode1;
+      ptermNode1 = (PTerm)nodeArrayList1.get(0);
+      if(ptermNode1 != null)
+      {
+        listNode2.add(ptermNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new260() /* reduce ANonTerminal$Term */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TypedLinkedList listNode1 = new TypedLinkedList();
+      PTerm ptermNode2;
+      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
+      ptermNode2 = (PTerm)nodeArrayList2.get(0);
+      if(listNode1 != null)
+      {
+        listNode3.addAll(listNode1);
+      }
+      if(ptermNode2 != null)
+      {
+        listNode3.add(ptermNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new261() /* reduce ATerminal$ListTermTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PListTerm plisttermNode1;
+      plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
+      if(plisttermNode1 != null)
+      {
+        listNode2.add(plisttermNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new262() /* reduce ANonTerminal$ListTermTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TypedLinkedList listNode1 = new TypedLinkedList();
+      PListTerm plisttermNode2;
+      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
+      plisttermNode2 = (PListTerm)nodeArrayList2.get(0);
+      if(listNode1 != null)
+      {
+        listNode3.addAll(listNode1);
+      }
+      if(plisttermNode2 != null)
+      {
+        listNode3.add(plisttermNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new263() /* reduce ATerminal$ParamsTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PTerm ptermNode1;
+      ptermNode1 = (PTerm)nodeArrayList1.get(0);
+      if(ptermNode1 != null)
+      {
+        listNode2.add(ptermNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new264() /* reduce ANonTerminal$ParamsTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TypedLinkedList listNode1 = new TypedLinkedList();
+      PTerm ptermNode2;
+      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
+      ptermNode2 = (PTerm)nodeArrayList2.get(0);
+      if(listNode1 != null)
+      {
+        listNode3.addAll(listNode1);
+      }
+      if(ptermNode2 != null)
+      {
+        listNode3.add(ptermNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new265() /* reduce ATerminal$AstProd */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PAstProd pastprodNode1;
+      pastprodNode1 = (PAstProd)nodeArrayList1.get(0);
+      if(pastprodNode1 != null)
+      {
+        listNode2.add(pastprodNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new266() /* reduce ANonTerminal$AstProd */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TypedLinkedList listNode1 = new TypedLinkedList();
+      PAstProd pastprodNode2;
+      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
+      pastprodNode2 = (PAstProd)nodeArrayList2.get(0);
+      if(listNode1 != null)
+      {
+        listNode3.addAll(listNode1);
+      }
+      if(pastprodNode2 != null)
+      {
+        listNode3.add(pastprodNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  ArrayList new267() /* reduce ATerminal$AstAltsTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode2 = new TypedLinkedList();
+    {
+      PAstAlt pastaltNode1;
+      pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
+      if(pastaltNode1 != null)
+      {
+        listNode2.add(pastaltNode1);
+      }
+    }
+    nodeList.add(listNode2);
+    return nodeList;
+  }
+
+  ArrayList new268() /* reduce ANonTerminal$AstAltsTail */
+  {
+    ArrayList nodeList = new ArrayList();
+
+    ArrayList nodeArrayList2 = (ArrayList) pop();
+    ArrayList nodeArrayList1 = (ArrayList) pop();
+    TypedLinkedList listNode3 = new TypedLinkedList();
+    {
+      TypedLinkedList listNode1 = new TypedLinkedList();
+      PAstAlt pastaltNode2;
+      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
+      pastaltNode2 = (PAstAlt)nodeArrayList2.get(0);
+      if(listNode1 != null)
+      {
+        listNode3.addAll(listNode1);
+      }
+      if(pastaltNode2 != null)
+      {
+        listNode3.add(pastaltNode2);
+      }
+    }
+    nodeList.add(listNode3);
+    return nodeList;
+  }
+
+  private static int[][][] actionTable;
+  /*      {
+  			{{-1, REDUCE, 0}, {1, SHIFT, 1}, {2, SHIFT, 2}, {3, SHIFT, 3}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, ERROR, 1}, {0, SHIFT, 16}, },
+  			{{-1, ERROR, 2}, {33, SHIFT, 18}, },
+  			{{-1, ERROR, 3}, {33, SHIFT, 20}, },
+  			{{-1, ERROR, 4}, {22, SHIFT, 23}, {33, SHIFT, 24}, },
+  			{{-1, ERROR, 5}, {4, SHIFT, 28}, },
+  			{{-1, ERROR, 6}, {33, SHIFT, 29}, },
+  			{{-1, ERROR, 7}, {8, SHIFT, 32}, },
+  			{{-1, ERROR, 8}, {38, ACCEPT, -1}, },
+  			{{-1, REDUCE, 1}, {2, SHIFT, 2}, {3, SHIFT, 3}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 2}, {2, SHIFT, 2}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 4}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 8}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 16}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 32}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 64}, },
+  			{{-1, ERROR, 16}, {14, SHIFT, 54}, {16, SHIFT, 55}, },
+  			{{-1, REDUCE, 128}, },
+  			{{-1, REDUCE, 135}, {29, SHIFT, 58}, },
+  			{{-1, ERROR, 19}, {16, SHIFT, 61}, },
+  			{{-1, ERROR, 20}, {17, SHIFT, 62}, },
+  			{{-1, REDUCE, 241}, },
+  			{{-1, REDUCE, 132}, {33, SHIFT, 20}, },
+  			{{-1, ERROR, 23}, {33, SHIFT, 64}, },
+  			{{-1, ERROR, 24}, {17, SHIFT, 65}, },
+  			{{-1, REDUCE, 245}, },
+  			{{-1, ERROR, 26}, {33, SHIFT, 66}, },
+  			{{-1, REDUCE, 138}, {22, SHIFT, 23}, {33, SHIFT, 24}, },
+  			{{-1, ERROR, 28}, {16, SHIFT, 68}, {33, SHIFT, 18}, },
+  			{{-1, ERROR, 29}, {17, SHIFT, 70}, {22, SHIFT, 71}, },
+  			{{-1, REDUCE, 253}, },
+  			{{-1, REDUCE, 175}, {33, SHIFT, 29}, },
+  			{{-1, ERROR, 32}, {9, SHIFT, 74}, },
+  			{{-1, REDUCE, 3}, {2, SHIFT, 2}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 5}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 9}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 17}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 33}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 65}, },
+  			{{-1, REDUCE, 6}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 10}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 18}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 34}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 66}, },
+  			{{-1, REDUCE, 12}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 20}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 36}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 68}, },
+  			{{-1, REDUCE, 24}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 40}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 72}, },
+  			{{-1, REDUCE, 48}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 80}, },
+  			{{-1, REDUCE, 96}, },
+  			{{-1, ERROR, 54}, {0, SHIFT, 110}, },
+  			{{-1, REDUCE, 129}, },
+  			{{-1, REDUCE, 239}, },
+  			{{-1, ERROR, 57}, {14, SHIFT, 54}, {16, SHIFT, 111}, },
+  			{{-1, ERROR, 58}, {33, SHIFT, 113}, },
+  			{{-1, REDUCE, 243}, },
+  			{{-1, REDUCE, 136}, {29, SHIFT, 58}, },
+  			{{-1, REDUCE, 134}, },
+  			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+  			{{-1, REDUCE, 242}, },
+  			{{-1, ERROR, 64}, {23, SHIFT, 129}, {29, SHIFT, 130}, {31, SHIFT, 131}, },
+  			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+  			{{-1, ERROR, 66}, {17, SHIFT, 136}, },
+  			{{-1, REDUCE, 246}, },
+  			{{-1, REDUCE, 150}, },
+  			{{-1, ERROR, 69}, {16, SHIFT, 137}, },
+  			{{-1, REDUCE, 183}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 141}, {33, SHIFT, 142}, },
+  			{{-1, ERROR, 71}, {31, SHIFT, 151}, },
+  			{{-1, ERROR, 72}, {17, SHIFT, 152}, },
+  			{{-1, REDUCE, 254}, },
+  			{{-1, ERROR, 74}, {33, SHIFT, 153}, },
+  			{{-1, REDUCE, 7}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 11}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 19}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 35}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 67}, },
+  			{{-1, REDUCE, 13}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 21}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 37}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 69}, },
+  			{{-1, REDUCE, 25}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 41}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 73}, },
+  			{{-1, REDUCE, 49}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 81}, },
+  			{{-1, REDUCE, 97}, },
+  			{{-1, REDUCE, 14}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 22}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 38}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 70}, },
+  			{{-1, REDUCE, 26}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 42}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 74}, },
+  			{{-1, REDUCE, 50}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 82}, },
+  			{{-1, REDUCE, 98}, },
+  			{{-1, REDUCE, 28}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 44}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 76}, },
+  			{{-1, REDUCE, 52}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 84}, },
+  			{{-1, REDUCE, 100}, },
+  			{{-1, REDUCE, 56}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 88}, },
+  			{{-1, REDUCE, 104}, },
+  			{{-1, REDUCE, 112}, },
+  			{{-1, REDUCE, 131}, },
+  			{{-1, REDUCE, 130}, },
+  			{{-1, REDUCE, 240}, },
+  			{{-1, REDUCE, 137}, },
+  			{{-1, REDUCE, 244}, },
+  			{{-1, ERROR, 115}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+  			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+  			{{-1, REDUCE, 163}, },
+  			{{-1, REDUCE, 165}, },
+  			{{-1, REDUCE, 166}, },
+  			{{-1, REDUCE, 167}, },
+  			{{-1, REDUCE, 162}, },
+  			{{-1, ERROR, 122}, {16, SHIFT, 194}, },
+  			{{-1, REDUCE, 153}, {28, SHIFT, 195}, },
+  			{{-1, REDUCE, 251}, },
+  			{{-1, REDUCE, 158}, {24, SHIFT, 198}, {26, SHIFT, 199}, {27, SHIFT, 200}, },
+  			{{-1, REDUCE, 160}, },
+  			{{-1, REDUCE, 161}, },
+  			{{-1, REDUCE, 157}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+  			{{-1, REDUCE, 143}, },
+  			{{-1, ERROR, 130}, {33, SHIFT, 203}, },
+  			{{-1, ERROR, 131}, {33, SHIFT, 204}, },
+  			{{-1, REDUCE, 247}, },
+  			{{-1, ERROR, 133}, {23, SHIFT, 205}, {29, SHIFT, 130}, },
+  			{{-1, ERROR, 134}, {23, SHIFT, 207}, {29, SHIFT, 130}, },
+  			{{-1, ERROR, 135}, {16, SHIFT, 209}, {30, SHIFT, 210}, },
+  			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+  			{{-1, REDUCE, 151}, },
+  			{{-1, ERROR, 138}, {14, SHIFT, 213}, },
+  			{{-1, ERROR, 139}, {14, SHIFT, 214}, },
+  			{{-1, ERROR, 140}, {33, SHIFT, 215}, },
+  			{{-1, ERROR, 141}, {31, SHIFT, 216}, {33, SHIFT, 217}, },
+  			{{-1, REDUCE, 219}, {24, SHIFT, 198}, {26, SHIFT, 199}, {27, SHIFT, 200}, },
+  			{{-1, ERROR, 143}, {16, SHIFT, 219}, },
+  			{{-1, REDUCE, 180}, {28, SHIFT, 220}, },
+  			{{-1, REDUCE, 187}, },
+  			{{-1, REDUCE, 184}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 223}, {33, SHIFT, 142}, },
+  			{{-1, REDUCE, 255}, },
+  			{{-1, ERROR, 148}, {12, SHIFT, 138}, {13, SHIFT, 139}, {33, SHIFT, 226}, },
+  			{{-1, ERROR, 149}, {33, SHIFT, 228}, },
+  			{{-1, REDUCE, 185}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 223}, {33, SHIFT, 142}, },
+  			{{-1, ERROR, 151}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {23, SHIFT, 231}, {33, SHIFT, 142}, },
+  			{{-1, REDUCE, 183}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 141}, {33, SHIFT, 142}, },
+  			{{-1, ERROR, 153}, {17, SHIFT, 234}, },
+  			{{-1, REDUCE, 265}, },
+  			{{-1, REDUCE, 230}, {33, SHIFT, 153}, },
+  			{{-1, REDUCE, 15}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 23}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 39}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 71}, },
+  			{{-1, REDUCE, 27}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 43}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 75}, },
+  			{{-1, REDUCE, 51}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 83}, },
+  			{{-1, REDUCE, 99}, },
+  			{{-1, REDUCE, 29}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 45}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 77}, },
+  			{{-1, REDUCE, 53}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 85}, },
+  			{{-1, REDUCE, 101}, },
+  			{{-1, REDUCE, 57}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 89}, },
+  			{{-1, REDUCE, 105}, },
+  			{{-1, REDUCE, 113}, },
+  			{{-1, REDUCE, 30}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 46}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 78}, },
+  			{{-1, REDUCE, 54}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 86}, },
+  			{{-1, REDUCE, 102}, },
+  			{{-1, REDUCE, 58}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 90}, },
+  			{{-1, REDUCE, 106}, },
+  			{{-1, REDUCE, 114}, },
+  			{{-1, REDUCE, 60}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 92}, },
+  			{{-1, REDUCE, 108}, },
+  			{{-1, REDUCE, 116}, },
+  			{{-1, REDUCE, 120}, },
+  			{{-1, ERROR, 191}, {24, SHIFT, 257}, {25, SHIFT, 258}, },
+  			{{-1, REDUCE, 160}, {15, SHIFT, 260}, },
+  			{{-1, ERROR, 193}, {21, SHIFT, 261}, },
+  			{{-1, REDUCE, 133}, },
+  			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+  			{{-1, REDUCE, 249}, },
+  			{{-1, REDUCE, 154}, {28, SHIFT, 195}, },
+  			{{-1, REDUCE, 172}, },
+  			{{-1, REDUCE, 171}, },
+  			{{-1, REDUCE, 170}, },
+  			{{-1, REDUCE, 159}, },
+  			{{-1, REDUCE, 252}, },
+  			{{-1, REDUCE, 147}, {31, SHIFT, 131}, },
+  			{{-1, REDUCE, 149}, },
+  			{{-1, REDUCE, 144}, },
+  			{{-1, ERROR, 206}, {23, SHIFT, 265}, {29, SHIFT, 130}, },
+  			{{-1, REDUCE, 145}, },
+  			{{-1, REDUCE, 248}, },
+  			{{-1, REDUCE, 139}, },
+  			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+  			{{-1, ERROR, 211}, {16, SHIFT, 267}, },
+  			{{-1, ERROR, 212}, {16, SHIFT, 268}, {30, SHIFT, 210}, },
+  			{{-1, REDUCE, 228}, },
+  			{{-1, REDUCE, 229}, },
+  			{{-1, ERROR, 215}, {19, SHIFT, 270}, },
+  			{{-1, ERROR, 216}, {10, SHIFT, 271}, {11, SHIFT, 272}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 273}, {23, SHIFT, 274}, {33, SHIFT, 275}, },
+  			{{-1, ERROR, 217}, {23, SHIFT, 279}, },
+  			{{-1, REDUCE, 223}, },
+  			{{-1, REDUCE, 176}, },
+  			{{-1, REDUCE, 183}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 141}, {33, SHIFT, 142}, },
+  			{{-1, REDUCE, 257}, },
+  			{{-1, REDUCE, 181}, {28, SHIFT, 220}, },
+  			{{-1, ERROR, 223}, {31, SHIFT, 216}, },
+  			{{-1, REDUCE, 188}, },
+  			{{-1, REDUCE, 186}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 223}, {33, SHIFT, 142}, },
+  			{{-1, REDUCE, 220}, {24, SHIFT, 198}, {26, SHIFT, 199}, {27, SHIFT, 200}, },
+  			{{-1, ERROR, 227}, {33, SHIFT, 284}, },
+  			{{-1, REDUCE, 221}, {24, SHIFT, 198}, {26, SHIFT, 199}, {27, SHIFT, 200}, },
+  			{{-1, REDUCE, 189}, },
+  			{{-1, REDUCE, 256}, },
+  			{{-1, REDUCE, 178}, },
+  			{{-1, ERROR, 232}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {23, SHIFT, 286}, {33, SHIFT, 142}, },
+  			{{-1, ERROR, 233}, {16, SHIFT, 287}, },
+  			{{-1, REDUCE, 235}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 288}, {33, SHIFT, 142}, },
+  			{{-1, REDUCE, 266}, },
+  			{{-1, REDUCE, 31}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 47}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 79}, },
+  			{{-1, REDUCE, 55}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 87}, },
+  			{{-1, REDUCE, 103}, },
+  			{{-1, REDUCE, 59}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 91}, },
+  			{{-1, REDUCE, 107}, },
+  			{{-1, REDUCE, 115}, },
+  			{{-1, REDUCE, 61}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 93}, },
+  			{{-1, REDUCE, 109}, },
+  			{{-1, REDUCE, 117}, },
+  			{{-1, REDUCE, 121}, },
+  			{{-1, REDUCE, 62}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 94}, },
+  			{{-1, REDUCE, 110}, },
+  			{{-1, REDUCE, 118}, },
+  			{{-1, REDUCE, 122}, },
+  			{{-1, REDUCE, 124}, },
+  			{{-1, REDUCE, 173}, },
+  			{{-1, REDUCE, 174}, },
+  			{{-1, ERROR, 259}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+  			{{-1, ERROR, 260}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, },
+  			{{-1, REDUCE, 164}, },
+  			{{-1, REDUCE, 155}, },
+  			{{-1, REDUCE, 250}, },
+  			{{-1, REDUCE, 148}, },
+  			{{-1, REDUCE, 146}, },
+  			{{-1, REDUCE, 152}, },
+  			{{-1, REDUCE, 141}, },
+  			{{-1, REDUCE, 140}, },
+  			{{-1, ERROR, 269}, {16, SHIFT, 302}, },
+  			{{-1, ERROR, 270}, {32, SHIFT, 303}, },
+  			{{-1, ERROR, 271}, {33, SHIFT, 304}, },
+  			{{-1, REDUCE, 201}, },
+  			{{-1, ERROR, 273}, {10, SHIFT, 306}, {12, SHIFT, 138}, {13, SHIFT, 139}, {19, SHIFT, 307}, {33, SHIFT, 308}, },
+  			{{-1, REDUCE, 191}, },
+  			{{-1, REDUCE, 197}, {14, SHIFT, 312}, },
+  			{{-1, REDUCE, 259}, },
+  			{{-1, ERROR, 277}, {33, SHIFT, 314}, },
+  			{{-1, ERROR, 278}, {10, SHIFT, 271}, {11, SHIFT, 272}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 273}, {23, SHIFT, 315}, {33, SHIFT, 275}, },
+  			{{-1, REDUCE, 218}, },
+  			{{-1, REDUCE, 182}, },
+  			{{-1, REDUCE, 258}, },
+  			{{-1, REDUCE, 190}, },
+  			{{-1, REDUCE, 224}, },
+  			{{-1, REDUCE, 222}, {24, SHIFT, 198}, {26, SHIFT, 199}, {27, SHIFT, 200}, },
+  			{{-1, REDUCE, 225}, },
+  			{{-1, REDUCE, 179}, },
+  			{{-1, REDUCE, 177}, },
+  			{{-1, ERROR, 288}, {33, SHIFT, 217}, },
+  			{{-1, REDUCE, 236}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {33, SHIFT, 142}, },
+  			{{-1, ERROR, 290}, {16, SHIFT, 319}, },
+  			{{-1, REDUCE, 232}, {28, SHIFT, 320}, },
+  			{{-1, REDUCE, 237}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {33, SHIFT, 142}, },
+  			{{-1, REDUCE, 63}, {7, SHIFT, 7}, },
+  			{{-1, REDUCE, 95}, },
+  			{{-1, REDUCE, 111}, },
+  			{{-1, REDUCE, 119}, },
+  			{{-1, REDUCE, 123}, },
+  			{{-1, REDUCE, 125}, },
+  			{{-1, REDUCE, 126}, },
+  			{{-1, ERROR, 300}, {19, SHIFT, 324}, },
+  			{{-1, ERROR, 301}, {19, SHIFT, 325}, },
+  			{{-1, REDUCE, 142}, },
+  			{{-1, REDUCE, 227}, },
+  			{{-1, REDUCE, 212}, {14, SHIFT, 326}, },
+  			{{-1, ERROR, 305}, {20, SHIFT, 328}, },
+  			{{-1, ERROR, 306}, {33, SHIFT, 304}, },
+  			{{-1, REDUCE, 195}, },
+  			{{-1, REDUCE, 206}, {14, SHIFT, 312}, },
+  			{{-1, ERROR, 309}, {19, SHIFT, 331}, },
+  			{{-1, REDUCE, 202}, {29, SHIFT, 332}, },
+  			{{-1, ERROR, 311}, {33, SHIFT, 335}, },
+  			{{-1, ERROR, 312}, {33, SHIFT, 336}, },
+  			{{-1, REDUCE, 199}, },
+  			{{-1, REDUCE, 198}, {14, SHIFT, 312}, },
+  			{{-1, REDUCE, 192}, },
+  			{{-1, REDUCE, 260}, },
+  			{{-1, REDUCE, 226}, },
+  			{{-1, REDUCE, 238}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {33, SHIFT, 142}, },
+  			{{-1, REDUCE, 231}, },
+  			{{-1, REDUCE, 235}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 288}, {33, SHIFT, 142}, },
+  			{{-1, REDUCE, 267}, },
+  			{{-1, REDUCE, 233}, {28, SHIFT, 320}, },
+  			{{-1, REDUCE, 127}, },
+  			{{-1, REDUCE, 168}, },
+  			{{-1, REDUCE, 169}, },
+  			{{-1, ERROR, 326}, {33, SHIFT, 340}, },
+  			{{-1, REDUCE, 213}, },
+  			{{-1, ERROR, 328}, {10, SHIFT, 271}, {11, SHIFT, 272}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 273}, {21, SHIFT, 341}, {33, SHIFT, 275}, },
+  			{{-1, ERROR, 329}, {20, SHIFT, 344}, },
+  			{{-1, REDUCE, 208}, },
+  			{{-1, REDUCE, 196}, },
+  			{{-1, ERROR, 332}, {10, SHIFT, 306}, {12, SHIFT, 138}, {13, SHIFT, 139}, {33, SHIFT, 308}, },
+  			{{-1, REDUCE, 261}, },
+  			{{-1, REDUCE, 203}, {29, SHIFT, 332}, },
+  			{{-1, REDUCE, 207}, {14, SHIFT, 312}, },
+  			{{-1, REDUCE, 211}, },
+  			{{-1, REDUCE, 200}, },
+  			{{-1, REDUCE, 234}, },
+  			{{-1, REDUCE, 268}, },
+  			{{-1, REDUCE, 214}, },
+  			{{-1, REDUCE, 193}, },
+  			{{-1, REDUCE, 215}, {29, SHIFT, 348}, },
+  			{{-1, ERROR, 343}, {21, SHIFT, 351}, },
+  			{{-1, ERROR, 344}, {10, SHIFT, 271}, {11, SHIFT, 272}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 273}, {21, SHIFT, 352}, {33, SHIFT, 275}, },
+  			{{-1, REDUCE, 210}, },
+  			{{-1, REDUCE, 262}, },
+  			{{-1, REDUCE, 209}, },
+  			{{-1, ERROR, 348}, {10, SHIFT, 271}, {11, SHIFT, 272}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 273}, {33, SHIFT, 275}, },
+  			{{-1, REDUCE, 263}, },
+  			{{-1, REDUCE, 216}, {29, SHIFT, 348}, },
+  			{{-1, REDUCE, 194}, },
+  			{{-1, REDUCE, 204}, },
+  			{{-1, ERROR, 353}, {21, SHIFT, 356}, },
+  			{{-1, REDUCE, 217}, },
+  			{{-1, REDUCE, 264}, },
+  			{{-1, REDUCE, 205}, },
+          };*/
+  private static int[][][] gotoTable;
+  /*      {
+  			{{-1, 8}, },
+  			{{-1, 9}, },
+  			{{-1, 17}, },
+  			{{-1, 56}, {57, 112}, },
+  			{{-1, 10}, {9, 33}, },
+  			{{-1, 21}, {22, 63}, },
+  			{{-1, 11}, {9, 34}, {10, 39}, {33, 75}, },
+  			{{-1, 19}, {28, 69}, },
+  			{{-1, 59}, {60, 114}, },
+  			{{-1, 12}, {9, 35}, {10, 40}, {11, 44}, {33, 76}, {34, 80}, {39, 90}, {75, 156}, },
+  			{{-1, 25}, {27, 67}, },
+  			{{-1, 26}, },
+  			{{-1, 132}, {134, 208}, {206, 208}, },
+  			{{-1, 133}, {203, 264}, },
+  			{{-1, 13}, {9, 36}, {10, 41}, {11, 45}, {12, 48}, {33, 77}, {34, 81}, {35, 84}, {39, 91}, {40, 94}, {44, 100}, {75, 157}, {76, 160}, {80, 166}, {90, 176}, {156, 236}, },
+  			{{-1, 211}, {212, 269}, },
+  			{{-1, 122}, {65, 135}, {116, 193}, {136, 212}, {210, 266}, },
+  			{{-1, 196}, {197, 263}, },
+  			{{-1, 123}, {195, 262}, },
+  			{{-1, 124}, {128, 202}, },
+  			{{-1, 125}, {115, 191}, {259, 300}, },
+  			{{-1, 126}, {115, 192}, {260, 301}, },
+  			{{-1, 127}, },
+  			{{-1, 201}, {142, 218}, {226, 283}, {228, 285}, {284, 317}, },
+  			{{-1, 259}, },
+  			{{-1, 14}, {9, 37}, {10, 42}, {11, 46}, {12, 49}, {13, 51}, {33, 78}, {34, 82}, {35, 85}, {36, 87}, {39, 92}, {40, 95}, {41, 97}, {44, 101}, {45, 103}, {48, 106}, {75, 158}, {76, 161}, {77, 163}, {80, 167}, {81, 169}, {84, 172}, {90, 177}, {91, 179}, {94, 182}, {100, 186}, {156, 237}, {157, 239}, {160, 242}, {166, 246}, {176, 251}, {236, 293}, },
+  			{{-1, 30}, {31, 73}, },
+  			{{-1, 72}, },
+  			{{-1, 143}, {152, 233}, },
+  			{{-1, 221}, {222, 281}, },
+  			{{-1, 144}, {220, 280}, },
+  			{{-1, 145}, {146, 224}, {150, 229}, {225, 282}, },
+  			{{-1, 342}, {216, 276}, {278, 316}, {348, 354}, },
+  			{{-1, 309}, },
+  			{{-1, 310}, {332, 345}, },
+  			{{-1, 333}, {334, 346}, },
+  			{{-1, 313}, {308, 330}, {314, 337}, {335, 347}, },
+  			{{-1, 305}, {306, 329}, },
+  			{{-1, 327}, },
+  			{{-1, 343}, {344, 353}, },
+  			{{-1, 349}, {350, 355}, },
+  			{{-1, 146}, {234, 289}, {320, 289}, },
+  			{{-1, 147}, {150, 230}, {225, 230}, {232, 230}, {292, 230}, {318, 230}, },
+  			{{-1, 148}, },
+  			{{-1, 149}, {148, 227}, {216, 277}, {273, 311}, {278, 277}, {328, 277}, {332, 311}, {344, 277}, {348, 277}, },
+  			{{-1, 15}, {9, 38}, {10, 43}, {11, 47}, {12, 50}, {13, 52}, {14, 53}, {33, 79}, {34, 83}, {35, 86}, {36, 88}, {37, 89}, {39, 93}, {40, 96}, {41, 98}, {42, 99}, {44, 102}, {45, 104}, {46, 105}, {48, 107}, {49, 108}, {51, 109}, {75, 159}, {76, 162}, {77, 164}, {78, 165}, {80, 168}, {81, 170}, {82, 171}, {84, 173}, {85, 174}, {87, 175}, {90, 178}, {91, 180}, {92, 181}, {94, 183}, {95, 184}, {97, 185}, {100, 187}, {101, 188}, {103, 189}, {106, 190}, {156, 238}, {157, 240}, {158, 241}, { [...]
+  			{{-1, 154}, {155, 235}, },
+  			{{-1, 290}, },
+  			{{-1, 321}, {322, 339}, },
+  			{{-1, 291}, {320, 338}, },
+  			{{-1, 57}, },
+  			{{-1, 22}, },
+  			{{-1, 60}, },
+  			{{-1, 27}, },
+  			{{-1, 134}, {133, 206}, },
+  			{{-1, 197}, },
+  			{{-1, 128}, },
+  			{{-1, 31}, },
+  			{{-1, 150}, {146, 225}, {151, 232}, {234, 292}, {289, 318}, {320, 292}, },
+  			{{-1, 222}, },
+  			{{-1, 278}, },
+  			{{-1, 334}, },
+  			{{-1, 350}, },
+  			{{-1, 155}, },
+  			{{-1, 322}, },
+          };*/
+  private static String[] errorMessages;
+  /*      {
+  			"expecting: 'Package', 'States', 'Helpers', 'Tokens', 'Ignored', 'Productions', 'Abstract', EOF",
+  			"expecting: pkg id",
+  			"expecting: id",
+  			"expecting: '{', id",
+  			"expecting: 'Tokens'",
+  			"expecting: 'Syntax'",
+  			"expecting: EOF",
+  			"expecting: 'States', 'Helpers', 'Tokens', 'Ignored', 'Productions', 'Abstract', EOF",
+  			"expecting: 'States', 'Tokens', 'Ignored', 'Productions', 'Abstract', EOF",
+  			"expecting: 'Tokens', 'Ignored', 'Productions', 'Abstract', EOF",
+  			"expecting: 'Ignored', 'Productions', 'Abstract', EOF",
+  			"expecting: 'Productions', 'Abstract', EOF",
+  			"expecting: 'Abstract', EOF",
+  			"expecting: '.', ';'",
+  			"expecting: ';', ','",
+  			"expecting: ';'",
+  			"expecting: '='",
+  			"expecting: 'States', 'Tokens', 'Ignored', 'Productions', 'Abstract', id, EOF",
+  			"expecting: 'Ignored', 'Productions', 'Abstract', '{', id, EOF",
+  			"expecting: ';', id",
+  			"expecting: '=', '{'",
+  			"expecting: 'Abstract', id, EOF",
+  			"expecting: 'Tree'",
+  			"expecting: ';', '[', '(', '|', id, char, dec char, hex char, string",
+  			"expecting: '}', ',', '->'",
+  			"expecting: ';', '[', '(', '|', '/', id, char, dec char, hex char, string",
+  			"expecting: 'T', 'P', ';', '[', '{', '|', id",
+  			"expecting: '->'",
+  			"expecting: '[', '(', id, char, dec char, hex char, string",
+  			"expecting: '[', '(', ')', '|', id, char, dec char, hex char, string",
+  			"expecting: ';', '[', ']', '(', ')', '+', '-', '?', '*', '|', '/', id, char, dec char, hex char, string",
+  			"expecting: '..', ';', '[', ']', '(', ')', '+', '-', '?', '*', '|', '/', id, char, dec char, hex char, string",
+  			"expecting: ';', ')', '|', '/'",
+  			"expecting: ';', '[', '(', ')', '|', '/', id, char, dec char, hex char, string",
+  			"expecting: ';', '[', '(', ')', '+', '?', '*', '|', '/', id, char, dec char, hex char, string",
+  			"expecting: ';', '[', ']', '(', ')', '+', '?', '*', '|', '/', id, char, dec char, hex char, string",
+  			"expecting: '}', ','",
+  			"expecting: ';', '/'",
+  			"expecting: '.'",
+  			"expecting: '->', id",
+  			"expecting: 'T', 'P', ';', '[', '{', '}', '+', '?', '*', '|', id",
+  			"expecting: ';', '|'",
+  			"expecting: 'T', 'P', ';', '[', '{', '}', '|', id",
+  			"expecting: 'T', 'P', id",
+  			"expecting: 'T', 'P', '[', '}', id",
+  			"expecting: id, EOF",
+  			"expecting: '+', '-'",
+  			"expecting: '..', '+', '-'",
+  			"expecting: ')'",
+  			"expecting: 'T', 'P', ';', '[', '(', ')', '{', '}', '|', '/', id, char, dec char, hex char, string",
+  			"expecting: ']'",
+  			"expecting: 'New', 'Null', 'T', 'P', '[', '}', id",
+  			"expecting: '}'",
+  			"expecting: char, dec char, hex char",
+  			"expecting: ':'",
+  			"expecting: 'New', 'Null', 'T', 'P', '[', ')', '}', ',', id",
+  			"expecting: 'New', 'T', 'P', ']', id",
+  			"expecting: 'New', 'Null', 'T', 'P', '.', '[', ')', '}', ',', id",
+  			"expecting: 'T', 'P', ';', '[', '|', id",
+  			"expecting: '.', '('",
+  			"expecting: '('",
+  			"expecting: '.', ']', ','",
+  			"expecting: ']', ','",
+  			"expecting: 'New', 'Null', 'T', 'P', '[', ')', id",
+  			"expecting: 'New', 'T', 'P', id",
+  			"expecting: 'New', 'Null', 'T', 'P', '[', ']', ')', '}', ',', id",
+  			"expecting: ')', ','",
+  			"expecting: 'New', 'Null', 'T', 'P', '[', id",
+          };*/
+  private static int[] errors;
+  /*      {
+  			0, 1, 2, 2, 3, 4, 2, 5, 6, 7, 8, 9, 10, 11, 12, 6, 13, 7, 14, 15, 16, 17, 17, 2, 16, 18, 2, 18, 19, 20, 21, 21, 22, 8, 9, 10, 11, 12, 6, 9, 10, 11, 12, 6, 10, 11, 12, 6, 11, 12, 6, 12, 6, 6, 1, 7, 13, 13, 2, 14, 14, 9, 23, 17, 24, 25, 16, 18, 11, 15, 26, 27, 16, 21, 2, 9, 10, 11, 12, 6, 10, 11, 12, 6, 11, 12, 6, 12, 6, 6, 10, 11, 12, 6, 11, 12, 6, 12, 6, 6, 11, 12, 6, 12, 6, 6, 12, 6, 6, 6, 13, 7, 13, 14, 14, 28, 29, 30, 31, 31, 31, 30, 15, 32, 33, 34, 35, 30, 33, 2, 2, 2, 36, 36, 3 [...]
+          };*/
+
+  static
+  {
+    try
+    {
+      DataInputStream s = new DataInputStream(
+                            new BufferedInputStream(
+                              Parser.class.getResourceAsStream("parser.dat")));
+
+      // read actionTable
+      int length = s.readInt();
+      actionTable = new int[length][][];
+      for(int i = 0; i < actionTable.length; i++)
+      {
+        length = s.readInt();
+        actionTable[i] = new int[length][3];
+        for(int j = 0; j < actionTable[i].length; j++)
+        {
+          for(int k = 0; k < 3; k++)
+          {
+            actionTable[i][j][k] = s.readInt();
+          }
+        }
+      }
+
+      // read gotoTable
+      length = s.readInt();
+      gotoTable = new int[length][][];
+      for(int i = 0; i < gotoTable.length; i++)
+      {
+        length = s.readInt();
+        gotoTable[i] = new int[length][2];
+        for(int j = 0; j < gotoTable[i].length; j++)
+        {
+          for(int k = 0; k < 2; k++)
+          {
+            gotoTable[i][j][k] = s.readInt();
+          }
+        }
+      }
+
+      // read errorMessages
+      length = s.readInt();
+      errorMessages = new String[length];
+      for(int i = 0; i < errorMessages.length; i++)
+      {
+        length = s.readInt();
+        StringBuffer buffer = new StringBuffer();
+
+        for(int j = 0; j < length; j++)
+        {
+          buffer.append(s.readChar());
+        }
+        errorMessages[i] = buffer.toString();
+      }
+
+      // read errors
+      length = s.readInt();
+      errors = new int[length];
+      for(int i = 0; i < errors.length; i++)
+      {
+        errors[i] = s.readInt();
+      }
+
+      s.close();
+    }
+    catch(Exception e)
+    {
+      throw new RuntimeException("The file \"parser.dat\" is either missing or corrupted.");
+    }
+  }
+}
diff --git a/src/org/sablecc/sablecc/parser/ParserException.java b/src/org/sablecc/sablecc/parser/ParserException.java
new file mode 100644
index 0000000..da9525f
--- /dev/null
+++ b/src/org/sablecc/sablecc/parser/ParserException.java
@@ -0,0 +1,21 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.parser;
+
+import org.sablecc.sablecc.node.*;
+
+public class ParserException extends Exception
+{
+  Token token;
+
+  public ParserException(Token token, String  message)
+  {
+    super(message);
+    this.token = token;
+  }
+
+  public Token getToken()
+  {
+    return token;
+  }
+}
diff --git a/src/org/sablecc/sablecc/parser/State.java b/src/org/sablecc/sablecc/parser/State.java
new file mode 100644
index 0000000..1807f8c
--- /dev/null
+++ b/src/org/sablecc/sablecc/parser/State.java
@@ -0,0 +1,17 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.parser;
+
+import java.util.ArrayList;
+
+final class State
+{
+  int state;
+  ArrayList nodes;
+
+  State(int state, ArrayList nodes)
+  {
+    this.state = state;
+    this.nodes = nodes;
+  }
+}
diff --git a/src/org/sablecc/sablecc/parser/TokenIndex.java b/src/org/sablecc/sablecc/parser/TokenIndex.java
new file mode 100644
index 0000000..088f948
--- /dev/null
+++ b/src/org/sablecc/sablecc/parser/TokenIndex.java
@@ -0,0 +1,206 @@
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package org.sablecc.sablecc.parser;
+
+import org.sablecc.sablecc.node.*;
+import org.sablecc.sablecc.analysis.*;
+
+class TokenIndex extends AnalysisAdapter
+{
+  int index;
+
+  public void caseTPkgId(TPkgId node)
+  {
+    index = 0;
+  }
+
+  public void caseTPackage(TPackage node)
+  {
+    index = 1;
+  }
+
+  public void caseTStates(TStates node)
+  {
+    index = 2;
+  }
+
+  public void caseTHelpers(THelpers node)
+  {
+    index = 3;
+  }
+
+  public void caseTTokens(TTokens node)
+  {
+    index = 4;
+  }
+
+  public void caseTIgnored(TIgnored node)
+  {
+    index = 5;
+  }
+
+  public void caseTProductions(TProductions node)
+  {
+    index = 6;
+  }
+
+  public void caseTAbstract(TAbstract node)
+  {
+    index = 7;
+  }
+
+  public void caseTSyntax(TSyntax node)
+  {
+    index = 8;
+  }
+
+  public void caseTTree(TTree node)
+  {
+    index = 9;
+  }
+
+  public void caseTNew(TNew node)
+  {
+    index = 10;
+  }
+
+  public void caseTNull(TNull node)
+  {
+    index = 11;
+  }
+
+  public void caseTTokenSpecifier(TTokenSpecifier node)
+  {
+    index = 12;
+  }
+
+  public void caseTProductionSpecifier(TProductionSpecifier node)
+  {
+    index = 13;
+  }
+
+  public void caseTDot(TDot node)
+  {
+    index = 14;
+  }
+
+  public void caseTDDot(TDDot node)
+  {
+    index = 15;
+  }
+
+  public void caseTSemicolon(TSemicolon node)
+  {
+    index = 16;
+  }
+
+  public void caseTEqual(TEqual node)
+  {
+    index = 17;
+  }
+
+  public void caseTLBkt(TLBkt node)
+  {
+    index = 18;
+  }
+
+  public void caseTRBkt(TRBkt node)
+  {
+    index = 19;
+  }
+
+  public void caseTLPar(TLPar node)
+  {
+    index = 20;
+  }
+
+  public void caseTRPar(TRPar node)
+  {
+    index = 21;
+  }
+
+  public void caseTLBrace(TLBrace node)
+  {
+    index = 22;
+  }
+
+  public void caseTRBrace(TRBrace node)
+  {
+    index = 23;
+  }
+
+  public void caseTPlus(TPlus node)
+  {
+    index = 24;
+  }
+
+  public void caseTMinus(TMinus node)
+  {
+    index = 25;
+  }
+
+  public void caseTQMark(TQMark node)
+  {
+    index = 26;
+  }
+
+  public void caseTStar(TStar node)
+  {
+    index = 27;
+  }
+
+  public void caseTBar(TBar node)
+  {
+    index = 28;
+  }
+
+  public void caseTComma(TComma node)
+  {
+    index = 29;
+  }
+
+  public void caseTSlash(TSlash node)
+  {
+    index = 30;
+  }
+
+  public void caseTArrow(TArrow node)
+  {
+    index = 31;
+  }
+
+  public void caseTColon(TColon node)
+  {
+    index = 32;
+  }
+
+  public void caseTId(TId node)
+  {
+    index = 33;
+  }
+
+  public void caseTChar(TChar node)
+  {
+    index = 34;
+  }
+
+  public void caseTDecChar(TDecChar node)
+  {
+    index = 35;
+  }
+
+  public void caseTHexChar(THexChar node)
+  {
+    index = 36;
+  }
+
+  public void caseTString(TString node)
+  {
+    index = 37;
+  }
+
+  public void caseEOF(EOF node)
+  {
+    index = 38;
+  }
+}
diff --git a/src/org/sablecc/sablecc/parser/parser.dat b/src/org/sablecc/sablecc/parser/parser.dat
new file mode 100644
index 0000000..f8300a4
Binary files /dev/null and b/src/org/sablecc/sablecc/parser/parser.dat differ
diff --git a/src/org/sablecc/sablecc/productions.txt b/src/org/sablecc/sablecc/productions.txt
new file mode 100644
index 0000000..fae6241
--- /dev/null
+++ b/src/org/sablecc/sablecc/productions.txt
@@ -0,0 +1,18 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+Macro:Production
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+public abstract class $1$ extends Node
+{
+    // Empty body
+}
+
+$
diff --git a/src/org/sablecc/sablecc/tokens.txt b/src/org/sablecc/sablecc/tokens.txt
new file mode 100644
index 0000000..e1fbe0d
--- /dev/null
+++ b/src/org/sablecc/sablecc/tokens.txt
@@ -0,0 +1,91 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// 0 : xxx.node
+// 1 : xxx.analysis
+// 2 : Txxx
+Macro:VariableTextToken
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import $1$.*;
+
+ at SuppressWarnings("nls")
+public final class $2$ extends Token
+{
+    public $2$(String text)
+    {
+        setText(text);
+    }
+
+    public $2$(String text, int line, int pos)
+    {
+        setText(text);
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new $2$(getText(), getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).case$2$(this);
+    }
+}
+
+$
+
+// 0 : xxx.node
+// 1 : xxx.analysis
+// 2 : Txxx
+// 3 : xxx
+Macro:FixedTextToken
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import $1$.*;
+
+ at SuppressWarnings("nls")
+public final class $2$ extends Token
+{
+    public $2$()
+    {
+        super.setText("$3$");
+    }
+
+    public $2$(int line, int pos)
+    {
+        super.setText("$3$");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new $2$(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).case$2$(this);
+    }
+
+    @Override
+    public void setText(@SuppressWarnings("unused") String text)
+    {
+        throw new RuntimeException("Cannot change $2$ text.");
+    }
+}
+
+$
diff --git a/src/org/sablecc/sablecc/utils.txt b/src/org/sablecc/sablecc/utils.txt
new file mode 100644
index 0000000..b55c582
--- /dev/null
+++ b/src/org/sablecc/sablecc/utils.txt
@@ -0,0 +1,346 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of SableCC.                             *
+ * See the file "LICENSE" for copyright information and the  *
+ * terms and conditions for copying, distribution and        *
+ * modification of SableCC.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+Macro:Start
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import $1$.*;
+
+ at SuppressWarnings("nls")
+public final class Start extends Node
+{
+    private $2$ _$3$_;
+    private EOF _eof_;
+
+    public Start()
+    {
+        // Empty body
+    }
+
+    public Start(
+        @SuppressWarnings("hiding") $2$ _$3$_,
+        @SuppressWarnings("hiding") EOF _eof_)
+    {
+        set$2$(_$3$_);
+        setEOF(_eof_);
+    }
+
+    @Override
+    public Object clone()
+    {
+        return new Start(
+            cloneNode(this._$3$_),
+            cloneNode(this._eof_));
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseStart(this);
+    }
+
+    public $2$ get$2$()
+    {
+        return this._$3$_;
+    }
+
+    public void set$2$($2$ node)
+    {
+        if(this._$3$_ != null)
+        {
+            this._$3$_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._$3$_ = node;
+    }
+
+    public EOF getEOF()
+    {
+        return this._eof_;
+    }
+
+    public void setEOF(EOF node)
+    {
+        if(this._eof_ != null)
+        {
+            this._eof_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._eof_ = node;
+    }
+
+    @Override
+    void removeChild(Node child)
+    {
+        if(this._$3$_ == child)
+        {
+            this._$3$_ = null;
+            return;
+        }
+
+        if(this._eof_ == child)
+        {
+            this._eof_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
+
+    @Override
+    void replaceChild(Node oldChild, Node newChild)
+    {
+        if(this._$3$_ == oldChild)
+        {
+            set$2$(($2$) newChild);
+            return;
+        }
+
+        if(this._eof_ == oldChild)
+        {
+            setEOF((EOF) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
+
+    @Override
+    public String toString()
+    {
+        return "" +
+            toString(this._$3$_) +
+            toString(this._eof_);
+    }
+}
+
+$
+
+Macro:EOF
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import $1$.*;
+
+ at SuppressWarnings("nls")
+public final class EOF extends Token
+{
+    public EOF()
+    {
+        setText("");
+    }
+
+    public EOF(int line, int pos)
+    {
+        setText("");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+        return new EOF(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseEOF(this);
+    }
+}
+
+$
+
+Macro:Token
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+ at SuppressWarnings("nls")
+public abstract class Token extends Node
+{
+    private String text;
+    private int line;
+    private int pos;
+
+    public String getText()
+    {
+        return this.text;
+    }
+
+    public void setText(@SuppressWarnings("hiding") String text)
+    {
+        this.text = text;
+    }
+
+    public int getLine()
+    {
+        return this.line;
+    }
+
+    public void setLine(@SuppressWarnings("hiding") int line)
+    {
+        this.line = line;
+    }
+
+    public int getPos()
+    {
+        return this.pos;
+    }
+
+    public void setPos(@SuppressWarnings("hiding") int pos)
+    {
+        this.pos = pos;
+    }
+
+    @Override
+    public String toString()
+    {
+        return this.text + " ";
+    }
+
+    @Override
+    void removeChild(@SuppressWarnings("unused") Node child)
+    {
+        throw new RuntimeException("Not a child.");
+    }
+
+    @Override
+    void replaceChild(@SuppressWarnings("unused") Node oldChild, @SuppressWarnings("unused") Node newChild)
+    {
+        throw new RuntimeException("Not a child.");
+    }
+}
+
+$
+
+Macro:Node
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import java.util.*;
+
+ at SuppressWarnings("nls")
+public abstract class Node implements Switchable, Cloneable
+{
+    private Node parent;
+
+    @Override
+    public abstract Object clone();
+
+    public Node parent()
+    {
+        return this.parent;
+    }
+
+    void parent(@SuppressWarnings("hiding") Node parent)
+    {
+        this.parent = parent;
+    }
+
+    abstract void removeChild(Node child);
+    abstract void replaceChild(Node oldChild, Node newChild);
+
+    public void replaceBy(Node node)
+    {
+        this.parent.replaceChild(this, node);
+    }
+
+    protected String toString(Node node)
+    {
+        if(node != null)
+        {
+            return node.toString();
+        }
+
+        return "";
+    }
+
+    protected String toString(List list)
+    {
+        StringBuffer s = new StringBuffer();
+
+        for(Iterator i = list.iterator(); i.hasNext();)
+        {
+            s.append(i.next());
+        }
+
+        return s.toString();
+    }
+
+    @SuppressWarnings("unchecked")
+    protected <T extends Node> T cloneNode(T node)
+    {
+        if(node != null)
+        {
+            return (T) node.clone();
+        }
+
+        return null;
+    }
+
+    protected <T> List<T> cloneList(List<T> list)
+    {
+        List<T> clone = new LinkedList<T>();
+
+        for(T n : list)
+        {
+            clone.add(n);
+        }
+
+        return clone;
+    }
+}
+
+$
+
+Macro:Switch
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+public interface Switch
+{
+        // Empty body
+}
+
+$
+
+Macro:Switchable
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+public interface Switchable
+{
+    void apply(Switch sw);
+}
+
+$

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/sablecc.git



More information about the pkg-java-commits mailing list