[pkg-eucalyptus-commits] r248 - in sablecc: . sablecc sablecc/branches sablecc/branches/upstream sablecc/branches/upstream/current sablecc/branches/upstream/current/bin sablecc/branches/upstream/current/etc sablecc/branches/upstream/current/src sablecc/branches/upstream/current/src/org sablecc/branches/upstream/current/src/org/sablecc sablecc/branches/upstream/current/src/org/sablecc/sablecc sablecc/branches/upstream/current/src/org/sablecc/sablecc/analysis sablecc/branches/upstream/current/src/org/sablecc/sablecc/lexer sablecc/branches/upstream/current/src/org/sablecc/sablecc/node sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser

Chris Halls halls at alioth.debian.org
Thu Jul 12 16:49:25 UTC 2012


Author: halls
Date: 2012-07-12 16:49:25 +0000 (Thu, 12 Jul 2012)
New Revision: 248

Added:
   sablecc/sablecc/
   sablecc/sablecc/branches/
   sablecc/sablecc/branches/upstream/
   sablecc/sablecc/branches/upstream/current/
   sablecc/sablecc/branches/upstream/current/AUTHORS
   sablecc/sablecc/branches/upstream/current/COPYING-LESSER
   sablecc/sablecc/branches/upstream/current/ChangeLog
   sablecc/sablecc/branches/upstream/current/ChangeLog.old
   sablecc/sablecc/branches/upstream/current/LICENSE
   sablecc/sablecc/branches/upstream/current/README.html
   sablecc/sablecc/branches/upstream/current/THANKS
   sablecc/sablecc/branches/upstream/current/bin/
   sablecc/sablecc/branches/upstream/current/bin/sablecc
   sablecc/sablecc/branches/upstream/current/bin/sablecc.bat
   sablecc/sablecc/branches/upstream/current/build.xml
   sablecc/sablecc/branches/upstream/current/etc/
   sablecc/sablecc/branches/upstream/current/etc/manifest
   sablecc/sablecc/branches/upstream/current/sablecc-anttask-1.0.1.tar.gz
   sablecc/sablecc/branches/upstream/current/src/
   sablecc/sablecc/branches/upstream/current/src/org/
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/AUTHORS
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/AcceptStates.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/BooleanCast.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/COPYING-LESSER
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Cast.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/CharSet.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/ConstructNFA.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/DFA.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/DisplayLicense.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenAlts.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenAnalyses.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenLexer.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenParser.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenProds.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenTokens.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenUtils.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Grammar.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/IntSet.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/IntegerCast.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/IntegerComparator.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LICENSE
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR0Collection.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR0Item.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR0ItemAndSetPair.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR0ItemSet.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR1Collection.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR1Item.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR1ItemSet.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/ListCast.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/MacroExpander.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/NFA.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/NoCast.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/NodeCast.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/NodeComparator.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Production.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/ResolveIds.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/SableCC.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/StringCast.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/StringComparator.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Switch.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Switchable.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Symbol.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/SymbolSet.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Transitions.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/TypedLinkedList.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/TypedTreeMap.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Version.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/alternatives.txt
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analyses.txt
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analysis/
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analysis/Analysis.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analysis/AnalysisAdapter.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analysis/DepthFirstAdapter.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/lexer.txt
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/lexer/
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/lexer/Lexer.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/lexer/LexerException.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alt1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alt2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltName.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltName1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltNameOpt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltNameOpt1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltNameOpt2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alts.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alts1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTail.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTail1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTails.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTails1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTails2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic3.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic4.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic5.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/BinOp.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/BinOp1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/BinOp2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Concat.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Concat1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/EOF.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elem.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elem1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemName.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemName1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemNameOpt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemNameOpt1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemNameOpt2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elems.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elems1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elems2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Grammar.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Grammar1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDef.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDef1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDefs.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDefs1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDefs2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Helpers.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Helpers1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelpersOpt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelpersOpt1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelpersOpt2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdList.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdList1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListOpt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListOpt1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTail.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTail1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTails.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTails1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTails2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokens.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokens1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokensOpt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokensOpt1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokensOpt2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAhead.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAhead1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAheadOpt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAheadOpt1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAheadOpt2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Node.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PChar.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PChar1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PChar2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PChar3.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PSet.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PSet1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PSet2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Package.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Package1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PackageOpt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PackageOpt1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PackageOpt2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId10.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId3.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId4.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId5.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId6.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId7.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId8.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId9.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgName.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgName1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameOpt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameOpt1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTail.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTail1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTails.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTails1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTails2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prod.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prod1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prods.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prods1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prods2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Productions.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Productions1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ProductionsOpt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ProductionsOpt1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ProductionsOpt2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExp.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExp1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTail.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTail1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTails.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTails1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTails2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Specifier.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Specifier1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Specifier2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/SpecifierOpt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/SpecifierOpt1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/SpecifierOpt2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Start.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Start1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateList.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateList1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListOpt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListOpt1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListOpt2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTail.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTail1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTails.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTails1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTails2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/States.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/States1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StatesOpt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StatesOpt1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StatesOpt2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TArrow.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TBar.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TBlank.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TChar.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TColon.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TComma.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TComment.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TDDot.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TDecChar.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TDot.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TEqual.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/THelpers.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/THexChar.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TId.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TIgnored.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TLBkt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TLBrace.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TLPar.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TMinus.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TPackage.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TPkgId.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TPlus.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TProductionSpecifier.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TProductions.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TQMark.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TRBkt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TRBrace.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TRPar.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TSemicolon.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TSlash.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TStar.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TStates.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TString.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TTokenSpecifier.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TTokens.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Token.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDef.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDef1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDefs.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDefs1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDefs2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Tokens.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Tokens1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokensOpt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokensOpt1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokensOpt2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Transition.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Transition1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TransitionOpt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TransitionOpt1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TransitionOpt2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExp.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExp1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExps.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExps1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExps2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOp.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOp1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOp2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOp3.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOpOpt.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOpOpt1.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOpOpt2.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser.txt
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/Parser.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/ParserException.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/State.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/TokenIndex.java
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/parser.dat
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/productions.txt
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/tokens.txt
   sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/utils.txt
Log:
[svn-inject] Installing original source of sablecc (2.16.2)

Added: sablecc/sablecc/branches/upstream/current/AUTHORS
===================================================================
--- sablecc/sablecc/branches/upstream/current/AUTHORS	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/AUTHORS	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,5 @@
+This file contains the name of all copyright holders.
+
+Etienne M. Gagnon <egagnon at j-meg.com>
+Ben Menking <bmenking at bigfoot.com>
+Mariusz Nowostawski <mariusz at marni.otago.ac.nz>

Added: sablecc/sablecc/branches/upstream/current/COPYING-LESSER
===================================================================
--- sablecc/sablecc/branches/upstream/current/COPYING-LESSER	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/COPYING-LESSER	2012-07-12 16:49:25 UTC (rev 248)
@@ -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!
+
+

Added: sablecc/sablecc/branches/upstream/current/ChangeLog
===================================================================
--- sablecc/sablecc/branches/upstream/current/ChangeLog	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/ChangeLog	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,435 @@
+This file contains the history of changes.
+
+Time is shown in UTC.
+
+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.
+
+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.
+
+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.
+
+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.
+
+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.
+
+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.
+
+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.
+

Added: sablecc/sablecc/branches/upstream/current/ChangeLog.old
===================================================================
--- sablecc/sablecc/branches/upstream/current/ChangeLog.old	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/ChangeLog.old	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,38 @@
+2000-03-04  Etienne M. Gagnon  <egagnon at j-meg.com>
+
+	* ca/mcgill/sable/sablecc/LR0Collection.java:
+
+	Added a "names" vector to hold the name for each set that
+	corresponds to the shortest stack path to the state
+ 	represented by the set.
+
+	* ca/mcgill/sable/sablecc/Grammar.java,
+	ca/mcgill/sable/sablecc/LR0Item.java,
+	ca/mcgill/sable/sablecc/LR1Item.java,
+	ca/mcgill/sable/sablecc/LR1ItemSet.java:
+
+	Fixed bugs in Ben Menking's code.  Changed variable names to 
+	be more intuitive.  Improved output look.  Optimized the code.
+
+2000-03-04  Ben Menking  <bmenking at bigfoot.com>
+
+	* ca/mcgill/sable/sablecc/Grammar.java, 
+	ca/mcgill/sable/sablecc/LR0Item.java,
+	ca/mcgill/sable/sablecc/LR1Item.java, 
+	ca/mcgill/sable/sablecc/LR1ItemSet.java,
+	ca/mcgill/sable/sablecc/Production.java, SableCC-LICENSE:
+
+	[First integrated contribution into SableCC]
+	Modified SableCC's dump that results from shift-reduce and 
+	reduce-reduce errors to:
+	- Indicate the current position in a production using a * 
+	symbol instead of using a position number
+	- Filtering out the state's irrelevant productions and
+	displaying only those that are directly involved in the 
+	conflict.
+
+2000-03-03  Etienne M. Gagnon  <egagnon at j-meg.com>
+
+	Released SableCC version 2.12. 
+	[Up to this point, all the code has been solely written by 
+	Etienne M. Gagnon <egagnon at j-meg.com>.]

Added: sablecc/sablecc/branches/upstream/current/LICENSE
===================================================================
--- sablecc/sablecc/branches/upstream/current/LICENSE	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/LICENSE	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,23 @@
+SableCC, an object-oriented compiler framework. 
+Copyright (C) 1997-2001 Etienne M. Gagnon <egagnon at j-meg.com> 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/

Added: sablecc/sablecc/branches/upstream/current/README.html
===================================================================
--- sablecc/sablecc/branches/upstream/current/README.html	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/README.html	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,264 @@
+<HTML>
+  <HEAD>
+    <TITLE>SableCC 2.16.2 - Read Me</TITLE>
+  </HEAD>
+  
+  <BODY bgcolor="#FFFFFF">
+    
+    <A NAME="top"></A>
+    <CENTER><TABLE WIDTH="100%" BGCOLOR="#F2FF80" >
+	<TR ALIGN=CENTER>
+	  <TD>
+	    <H1><B><I><FONT size=+4>SableCC</FONT></I></B> 
+	    <!-- <FONT COLOR="red"><B>experimental version</B></FONT> -->
+	    <!-- -->version<!-- -->
+	    2.16.2</H1>
+	    <H2>ReadMe</H2>
+	  </TD>
+	</TR>
+    </TABLE></CENTER>
+
+    <P>Welcome to <B><I><FONT size=+1>SableCC</FONT></I></B> version 2.16.2.</P>
+    <!-- 
+    <P><FONT COLOR="red"><B>WARNING:</B></FONT> This is an EXPERIMENTAL version. <BR>
+       Each <B><I><FONT size=+1>SableCC</FONT></I></B> version is composed of three integers: 
+       "<i>major.minor.revision</i>".<BR>
+       If you want a <B>stable</B> version, pick a version with an <b>even</b> 
+       <i>minor</i> integer. (e.g. 14, 16, ...)</P>
+     -->
+    <P>Please read this document carefully.</P>
+    
+    <A NAME="content"></A>
+    <TABLE WIDTH="100%" BGCOLOR="#F2FF80" >
+      <TR>
+	<TD>
+	  <TABLE WIDTH="100%" >
+	    <TR VALIGN=TOP>
+	      <TD>
+		<H2>Content</H2>
+	      </TD>
+	      <TD ALIGN=RIGHT><A href="#top">top</A></TD>
+	    </TR>
+	  </TABLE>
+	</TD>
+      </TR>
+    </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="#mailing-list">Mailing-list</A>
+      </LI>
+
+      <LI>
+      <A href="#donations">Donations</A>
+      </LI>
+    </UL>
+    
+    <A NAME="start"></A>
+    <TABLE WIDTH="100%" BGCOLOR="#F2FF80" >
+      <TR>
+	<TD>
+	  <TABLE WIDTH="100%" >
+	    <TR VALIGN=TOP>
+	      <TD>
+		<H2>Getting Started</H2>
+	      </TD>
+	      <TD ALIGN=RIGHT><A href="#content">content</A></TD>
+	    </TR>
+	  </TABLE>
+	</TD>
+      </TR>
+    </TABLE>
+    
+    <P>Here are the minimal steps to get <B><I><FONT size=+1>SableCC</FONT></I></B>
+    running.</P>
+    
+    <H3>If you got <TT>sablecc-2.16.2.tar.gz</TT> (or <TT>sablecc-2.16.2.zip</TT>)</H3>
+    
+    <OL>
+      <LI>
+      Decompress the file <TT>sablecc-2.16.2.tar.gz</TT> (or <TT>sablecc-2.16.2.zip</TT>):
+      <TT><PRE>
+	  tar -xzvf sablecc-2.16.2.tar.gz
+	  </PRE></TT> or <TT><PRE>
+	  jar -xvf sablecc-2.16.2.zip
+      </PRE></TT>
+      </LI>
+      
+      <LI>
+      Go into the in <TT>sablecc-2.16.2</TT> directory:
+      <TT><PRE>
+	  cd sablecc-2.16.2
+      </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
+      </PRE></TT>
+      </LI>
+    </OL>
+    <P>This is it. If you have <A href="http://jakarta.apache.org/ant/">Jakarta-Ant</A>
+    and <A href="http://xml.apache.org/xerces-j/">Xerces</A> installed, you
+    can install <B><I><FONT size=+1>SableCC</FONT></I></B> with the command:
+    <TT><PRE>
+	ant -Dinstall.dir=<I>destination</I> install
+    </PRE></TT>
+    </P>
+    <P>If you want to manually install <B><I><FONT size=+1>SableCC</FONT></I></B>, you must
+    copy (and edit) the files <TT>bin/sablecc</TT> and <TT>lib/sablecc.jar</TT> 
+    (or <TT>bin\sablecc.bat</TT> and <TT>lib\sablecc.jar</TT>) to an appropriate 
+    location, and set your PATH environment variable appropriately.
+    </P>
+
+    <H3>If you got <TT>sablecc-2.16.2-src.tar.gz</TT> (sources-only package)</H3>
+    
+    <OL>
+      <LI>
+      Decompress the file <TT>sablecc-2.16.2-src.tar.gz</TT>:
+      <TT><PRE>
+	  tar -xzvf sablecc-2.16.2-src.tar.gz
+      </PRE></TT>
+      </LI>
+      
+      <LI>
+      Go into the in <TT>sablecc-2.16.2</TT> directory:
+      <TT><PRE>
+	  cd sablecc-2.16.2
+      </PRE></TT>
+      </LI>
+      
+      <LI>
+      If you want an automatic build process, you need to have <A href="http://jakarta.apache.org/ant/">Jakarta-Ant</A>
+      and <A href="http://xml.apache.org/xerces-j/">Xerces</A> installed.
+      Simply type:
+      <TT><PRE>
+	  ant -Dinstall.dir=<I>destination</I> install
+      </PRE></TT>
+      </LI>
+    </OL>
+    
+    <A NAME="license"></A>
+    <TABLE WIDTH="100%" BGCOLOR="#F2FF80" >
+      <TR>
+	<TD>
+	  <TABLE WIDTH="100%" >
+	    <TR VALIGN=TOP>
+	      <TD>
+		<H2>License</H2>
+	      </TD>
+	      <TD ALIGN=RIGHT><A href="#content">content</A></TD>
+	    </TR>
+	  </TABLE>
+	</TD>
+      </TR>
+    </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" >
+      <TR>
+	<TD>
+	  <TABLE WIDTH="100%" >
+	    <TR VALIGN=TOP>
+	      <TD>
+		<H2>Documentation</H2>
+	      </TD>
+	      <TD ALIGN=RIGHT><A href="#content">content</A></TD>
+	    </TR>
+	  </TABLE>
+	</TD>
+      </TR>
+    </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 following site: <A href="http://www.sablecc.org/">http://www.sablecc.org/</A>.</P>
+    
+    <A NAME="help"></A>
+    <TABLE WIDTH="100%" BGCOLOR="#F2FF80" >
+      <TR>
+	<TD>
+	  <TABLE WIDTH="100%" >
+	    <TR VALIGN=TOP>
+	      <TD>
+		<H2>Getting Help</H2>
+	      </TD>
+	      <TD ALIGN=RIGHT><A href="#content">content</A></TD>
+	    </TR>
+	  </TABLE>
+	</TD>
+      </TR>
+    </TABLE>
+    
+    <P>The easiest way of obtaining help is to get on the <I><A href="#mailing-list"><B><FONT size=+1>SableCC</FONT></B>
+    mailing-list</A></I>. 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>
+    
+    <A NAME="mailing-list"></A>
+    <TABLE WIDTH="100%" BGCOLOR="#F2FF80" >
+      <TR>
+	<TD>
+	  <TABLE WIDTH="100%" >
+	    <TR VALIGN=TOP>
+	      <TD>
+		<H2>Mailing-list</H2>
+	      </TD>
+	      <TD ALIGN=RIGHT><A href="#content">content</A></TD>
+	    </TR>
+	  </TABLE>
+	</TD>
+      </TR>
+    </TABLE>
+
+    <P>To get on the <I><B><FONT size=+1>SableCC</FONT></B> mailing-list</I>,
+    send an e-mail message to <A href="mailto:majordomo at sable.mcgill.ca">majordomo at sable.mcgill.ca</A>.
+    Put '<B>subscribe sablecc-list your at email.address</B>' in the <B>body</B>
+    of the message. Once you are on the list, you can send your questions.</P>
+    
+    <A NAME="donations"></A>
+    <TABLE WIDTH="100%" BGCOLOR="#F2FF80" >
+      <TR>
+	<TD>
+	  <TABLE WIDTH="100%" >
+	    <TR VALIGN=TOP>
+	      <TD>
+		<H2>Donations</H2>
+	      </TD>
+	      <TD ALIGN=RIGHT><A href="#content">content</A></TD>
+	    </TR>
+	  </TABLE>
+	</TD>
+      </TR>
+    </TABLE>
+    
+    <P>You are very welcome to express your appreciation of <B><I><FONT size=+1>SableCC</FONT></I></B> through any kind of donation.
+    If you would like to make a financial donation
+    (or another kind of donation), or if you would like to fund further development of 
+    <B><I><FONT size=+1>SableCC</FONT></I></B>, please send an email to Etienne M. Gagnon 
+    (<A href="mailto:egagnon at j-meg.com">egagnon at j-meg.com</A>).  Thank you in advance. </P>
+    
+  </BODY>
+</HTML>

Added: sablecc/sablecc/branches/upstream/current/THANKS
===================================================================
--- sablecc/sablecc/branches/upstream/current/THANKS	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/THANKS	2012-07-12 16:49:25 UTC (rev 248)
@@ -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

Added: sablecc/sablecc/branches/upstream/current/bin/sablecc
===================================================================
--- sablecc/sablecc/branches/upstream/current/bin/sablecc	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/bin/sablecc	2012-07-12 16:49:25 UTC (rev 248)
@@ -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 $*

Added: sablecc/sablecc/branches/upstream/current/bin/sablecc.bat
===================================================================
--- sablecc/sablecc/branches/upstream/current/bin/sablecc.bat	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/bin/sablecc.bat	2012-07-12 16:49:25 UTC (rev 248)
@@ -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

Added: sablecc/sablecc/branches/upstream/current/build.xml
===================================================================
--- sablecc/sablecc/branches/upstream/current/build.xml	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/build.xml	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,472 @@
+<?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="2.16.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="sablecc-anttask.version" value="1.0.1"/>
+  <property name="manifest" value="etc/manifest"/>
+
+<!-- we have to force modern/classic, other compilers might not work, including jikes 1.12 -->
+  <property name="build.compiler" value="modern" />
+
+  <property file="${user.home}/.ant.properties" />
+
+
+<!--
+=====================================
+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,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 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="ChangeLog.old"/>
+        <include name="LICENSE"/>
+        <include name="README.html"/>
+        <include name="THANKS"/>
+        <include name="sablecc-anttask-${sablecc-anttask.version}.tar.gz"/>
+        <include name="build.xml"/>
+      </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>
+
+<!--
+=====================================
+Changelog Target
+=====================================
+-->
+
+  <target name="changelog" description="regenerate the change log">
+
+    <exec executable="cvs2cl" dir="${basedir}">
+      <arg line="--utc -g -z9 -F TRUNK -S -W 3600 --usermap ChangeLog.usermap --header ChangeLog.header -I ChangeLog"/>
+    </exec>
+
+  </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>

Added: sablecc/sablecc/branches/upstream/current/etc/manifest
===================================================================
--- sablecc/sablecc/branches/upstream/current/etc/manifest	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/etc/manifest	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+Main-Class: org.sablecc.sablecc.SableCC

Added: sablecc/sablecc/branches/upstream/current/sablecc-anttask-1.0.1.tar.gz
===================================================================
(Binary files differ)


Property changes on: sablecc/sablecc/branches/upstream/current/sablecc-anttask-1.0.1.tar.gz
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/AUTHORS
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/AUTHORS	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/AUTHORS	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,5 @@
+This file contains the name of all copyright holders.
+
+Etienne M. Gagnon <egagnon at j-meg.com>
+Ben Menking <bmenking at bigfoot.com>
+Mariusz Nowostawski <mariusz at marni.otago.ac.nz>

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/AcceptStates.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/AcceptStates.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/AcceptStates.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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 caseStart1(Start1 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;
+        }
+    }
+}

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/BooleanCast.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/BooleanCast.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/BooleanCast.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,25 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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;
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/COPYING-LESSER
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/COPYING-LESSER	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/COPYING-LESSER	2012-07-12 16:49:25 UTC (rev 248)
@@ -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!
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Cast.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Cast.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Cast.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,14 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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);
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/CharSet.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/CharSet.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/CharSet.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,228 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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;
+        }
+    }
+}
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/ConstructNFA.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/ConstructNFA.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/ConstructNFA.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,471 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 outStart1(Start1 node)
+    {
+        setOut(node, getOut(node.getNode1()));
+
+        // free memory
+        if(getOut(node.getNode1()) != null) setOut(node.getNode1(), null);
+    }
+
+    public void outGrammar1(Grammar1 node)
+    {
+        setOut(node, getOut(node.getNode4()));
+
+        // free memory
+        if(getOut(node.getNode4()) != null) setOut(node.getNode4(), null);
+    }
+
+    public void outHelperDef1(HelperDef1 node)
+    {
+        setOut(node, getOut(node.getNode3()));
+
+        // free memory
+        if(getOut(node.getNode3()) != null) setOut(node.getNode3(), null);
+    }
+
+    public void outTokensOpt1(TokensOpt1 node)
+    {
+        setOut(node, getOut(node.getNode1()));
+
+        // free memory
+        if(getOut(node.getNode1()) != null) setOut(node.getNode1(), null);
+    }
+
+    public void outTokens1(Tokens1 node)
+    {
+        setOut(node, getOut(node.getNode2()));
+
+        // free memory
+        if(getOut(node.getNode2()) != null) setOut(node.getNode2(), null);
+    }
+
+    public void outTokenDefs1(TokenDefs1 node)
+    {
+        NFA n1 = (NFA) getOut(node.getNode1());
+        NFA n2 = (NFA) getOut(node.getNode2());
+
+        if(n1 == null)
+        {
+            setOut(node, n2);
+        }
+        else if(n2 == null)
+        {
+            setOut(node, n1);
+        }
+        else
+        {
+            setOut(node, n1.merge(n2));
+        }
+
+        // free memory
+        if(getOut(node.getNode1()) != null) setOut(node.getNode1(), null);
+        if(getOut(node.getNode2()) != null) setOut(node.getNode2(), null);
+    }
+
+    public void outTokenDef1(TokenDef1 node)
+    {
+        Set set = (Set) getOut(node.getNode1());
+        Object o1 = getOut(node.getNode4());
+        Object o2 = getOut(node.getNode5());
+
+        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);
+
+                if(o2 != null)
+                    {
+                        NFA n2 = (o2 instanceof NFA) ? (NFA) o2 : new NFA((CharSet) o2);
+
+                        NFA n3 = n1.concatenate(n2);
+
+                        n1.states[n1.states.length - 1].accept = name + "_Token";
+                        n2.states[n2.states.length - 1].accept = name + "_LookAhead";
+                        n3.states[n3.states.length - 1].accept = name;
+
+                        setOut(node, n1.merge(n2.merge(n3)));
+                    }
+                else
+                    {
+                        n1.states[n1.states.length - 1].accept = name;
+                        setOut(node, n1);
+                    }
+            }
+        else
+            {
+                //System.out.print("-");
+            }
+
+        // free memory
+        if(getOut(node.getNode1()) != null) setOut(node.getNode1(), null);
+        if(getOut(node.getNode4()) != null) setOut(node.getNode4(), null);
+        if(getOut(node.getNode5()) != null) setOut(node.getNode5(), null);
+    }
+
+    public void outStateListOpt1(StateListOpt1 node)
+    {
+        setOut(node, getOut(node.getNode1()));
+
+        // free memory
+        setOut(node.getNode1(), null);
+    }
+
+    public void outStateList1(StateList1 node)
+    {
+        String str = node.getNode2().getText().toUpperCase();
+        Set set = (Set) getOut(node.getNode4());
+
+        set.add(str);
+        setOut(node, set);
+
+        // free memory
+        setOut(node.getNode4(), null);
+    }
+
+    public void outStateListTails1(StateListTails1 node)
+    {
+        String str = (String) getOut(node.getNode1());
+        Set set = (Set) getOut(node.getNode2());
+
+        set.add(str);
+        setOut(node, set);
+
+        // free memory
+        setOut(node.getNode1(), null);
+        setOut(node.getNode2(), null);
+    }
+
+    public void outStateListTails2(StateListTails2 node)
+    {
+        setOut(node, new TreeSet());
+    }
+
+    public void outStateListTail1(StateListTail1 node)
+    {
+        setOut(node, node.getNode2().getText().toUpperCase());
+    }
+
+    public void outLookAheadOpt1(LookAheadOpt1 node)
+    {
+        setOut(node, getOut(node.getNode1()));
+
+        // free memory
+        if(getOut(node.getNode1()) != null) setOut(node.getNode1(), null);
+    }
+
+    public void outLookAhead1(LookAhead1 node)
+    {
+        setOut(node, getOut(node.getNode2()));
+
+        // free memory
+        if(getOut(node.getNode2()) != null) setOut(node.getNode2(), null);
+    }
+
+    public void outRegExp1(RegExp1 node)
+    {
+        Object o1 = getOut(node.getNode1());
+        Object o2 = getOut(node.getNode2());
+
+        if(o2 != null)
+        {
+            NFA n1 = (o1 instanceof NFA) ? (NFA) o1 : new NFA((CharSet) o1);
+            NFA n2 = (o2 instanceof NFA) ? (NFA) o2 : new NFA((CharSet) o2);
+
+            setOut(node, n1.alternate(n2));
+        }
+        else
+        {
+            setOut(node, o1);
+        }
+
+        // free memory
+        if(getOut(node.getNode1()) != null) setOut(node.getNode1(), null);
+        if(getOut(node.getNode2()) != null) setOut(node.getNode2(), null);
+    }
+
+    public void outRegExpTails1(RegExpTails1 node)
+    {
+        Object o1 = getOut(node.getNode1());
+        Object o2 = getOut(node.getNode2());
+
+        if(o2 != null)
+        {
+            NFA n1 = (o1 instanceof NFA) ? (NFA) o1 : new NFA((CharSet) o1);
+            NFA n2 = (o2 instanceof NFA) ? (NFA) o2 : new NFA((CharSet) o2);
+
+            setOut(node, n1.alternate(n2));
+        }
+        else
+        {
+            setOut(node, o1);
+        }
+
+        // free memory
+        if(getOut(node.getNode1()) != null) setOut(node.getNode1(), null);
+        if(getOut(node.getNode2()) != null) setOut(node.getNode2(), null);
+    }
+
+    public void outRegExpTail1(RegExpTail1 node)
+    {
+        setOut(node, getOut(node.getNode2()));
+
+        // free memory
+        if(getOut(node.getNode2()) != null) setOut(node.getNode2(), null);
+    }
+
+    public void outConcat1(Concat1 node)
+    {
+        Object o = getOut(node.getNode1());
+
+        if(o == null)
+        {
+            setOut(node, new NFA());
+        }
+        else
+        {
+            setOut(node, o);
+        }
+
+        // free memory
+        if(getOut(node.getNode1()) != null) setOut(node.getNode1(), null);
+    }
+
+    public void outUnExps1(UnExps1 node)
+    {
+        Object o1 = getOut(node.getNode1());
+        Object o2 = getOut(node.getNode2());
+
+        if(o2 != null)
+        {
+            NFA n1 = (o1 instanceof NFA) ? (NFA) o1 : new NFA((CharSet) o1);
+            NFA n2 = (o2 instanceof NFA) ? (NFA) o2 : new NFA((CharSet) o2);
+
+            setOut(node, n1.concatenate(n2));
+        }
+        else
+        {
+            setOut(node, o1);
+        }
+
+        // free memory
+        if(getOut(node.getNode1()) != null) setOut(node.getNode1(), null);
+        if(getOut(node.getNode2()) != null) setOut(node.getNode2(), null);
+    }
+
+    public void outUnExp1(UnExp1 node)
+    {
+        Object o = getOut(node.getNode1());
+        char c = ((Character) getOut(node.getNode2())).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.getNode1()) != null) setOut(node.getNode1(), null);
+        if(getOut(node.getNode2()) != null) setOut(node.getNode2(), null);
+    }
+
+    public void outBasic1(Basic1 node)
+    {
+        char c = ((Character) getOut(node.getNode1())).charValue();
+        setOut(node, new CharSet(c));
+
+        // free memory
+        if(getOut(node.getNode1()) != null) setOut(node.getNode1(), null);
+    }
+
+    public void outBasic2(Basic2 node)
+    {
+        setOut(node, getOut(node.getNode1()));
+
+        // free memory
+        if(getOut(node.getNode1()) != null) setOut(node.getNode1(), null);
+    }
+
+    public void outBasic3(Basic3 node)
+    {
+        String s = node.getNode1().getText();
+        s = s.substring(1, s.length() -1);
+
+        setOut(node, new NFA(s));
+    }
+
+    public void outBasic4(Basic4 node)
+    {
+        Object o = getOut((Node) ids.helpers.get(node.getNode1().getText()));
+
+        if(o instanceof NFA)
+        {
+            setOut(node, ((NFA) o).clone());
+        }
+        else
+        {
+            setOut(node, ((CharSet) o).clone());
+        }
+    }
+
+    public void outBasic5(Basic5 node)
+    {
+        setOut(node, getOut(node.getNode2()));
+
+        // free memory
+        if(getOut(node.getNode2()) != null) setOut(node.getNode2(), null);
+    }
+
+    public void outPChar1(PChar1 node)
+    {
+        setOut(node, new Character(node.getNode1().getText().charAt(1)));
+    }
+
+    public void outPChar2(PChar2 node)
+    {
+        setOut(node, new Character((char) Integer.parseInt(node.getNode1().getText())));
+    }
+
+    public void outPChar3(PChar3 node)
+    {
+        setOut(node, new Character((char)
+            Integer.parseInt(node.getNode1().getText().substring(2), 16)));
+    }
+
+    public void outPSet1(PSet1 node)
+    {
+        try
+        {
+            CharSet cs1 = (CharSet) getOut(node.getNode2());
+            CharSet cs2 = (CharSet) getOut(node.getNode4());
+            char binop = ((Character) getOut(node.getNode3())).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.getNode2()) != null) setOut(node.getNode2(), null);
+        if(getOut(node.getNode3()) != null) setOut(node.getNode3(), null);
+        if(getOut(node.getNode4()) != null) setOut(node.getNode4(), null);
+    }
+
+    public void outPSet2(PSet2 node)
+    {
+        char c1 = ((Character) getOut(node.getNode2())).charValue();
+        char c2 = ((Character) getOut(node.getNode4())).charValue();
+
+        if(c1 > c2)
+        {
+            throw new RuntimeException(node + " is invalid.");
+        }
+
+        setOut(node, new CharSet(c1, c2));
+
+        // free memory
+        if(getOut(node.getNode2()) != null) setOut(node.getNode2(), null);
+        if(getOut(node.getNode4()) != null) setOut(node.getNode4(), null);
+    }
+
+    public void outUnOpOpt1(UnOpOpt1 node)
+    {
+        setOut(node, getOut(node.getNode1()));
+
+        // free memory
+        if(getOut(node.getNode1()) != null) setOut(node.getNode1(), null);
+    }
+
+    public void outUnOpOpt2(UnOpOpt2 node)
+    {
+        setOut(node, new Character(' '));
+    }
+
+    public void outUnOp1(UnOp1 node)
+    {
+        setOut(node, new Character('*'));
+    }
+
+    public void outUnOp2(UnOp2 node)
+    {
+        setOut(node, new Character('?'));
+    }
+
+    public void outUnOp3(UnOp3 node)
+    {
+        setOut(node, new Character('+'));
+    }
+
+    public void outBinOp1(BinOp1 node)
+    {
+        setOut(node, new Character('+'));
+    }
+
+    public void outBinOp2(BinOp2 node)
+    {
+        setOut(node, new Character('-'));
+    }
+}
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/DFA.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/DFA.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/DFA.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,402 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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);
+        }
+    }
+}
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/DisplayLicense.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/DisplayLicense.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/DisplayLicense.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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: SableVM-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);
+        }
+    }
+}

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenAlts.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenAlts.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenAlts.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,487 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 ResolveIds ids;
+    private File pkgDir;
+    private String pkgName;
+    private List elemList;
+
+    private String currentProd;
+    ElemInfo info;
+//    final GenAlts instance = this;
+
+    public GenAlts(ResolveIds ids)
+    {
+        this.ids = 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(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 inProd1(Prod1 node)
+    {
+        currentProd = (String) ids.names.get(node);
+    }
+
+    public void inAlt1(Alt1 node)
+    {
+        inAlt(node);
+    }
+
+    public void inAlt2(Alt2 node)
+    {
+        inAlt(node);
+    }
+
+    public void inAlt(Alt node)
+    {
+        elemList = new TypedLinkedList(ElemInfoCast.instance);
+    }
+
+    public void inElem1(Elem1 node)
+    {
+        info = new ElemInfo();
+
+        info.name = (String) ids.names.get(node);
+        info.type = (String) ids.elemTypes.get(node);
+        info.operator = ElemInfo.NONE;
+
+        node.getNode4().apply(new DepthFirstAdapter()
+        {
+            public void caseUnOp1(UnOp1 node)
+            {
+                info.operator = ElemInfo.STAR;
+            }
+
+            public void caseUnOp2(UnOp2 node)
+            {
+                info.operator = ElemInfo.QMARK;
+            }
+
+            public void caseUnOp3(UnOp3 node)
+            {
+                info.operator = ElemInfo.PLUS;
+            }
+        });
+
+        elemList.add(info);
+        info = null;
+    }
+
+    public void outAlt1(Alt1 node)
+    {
+        outAlt(node);
+    }
+
+    public void outAlt2(Alt2 node)
+    {
+        outAlt(node);
+    }
+
+    public void outAlt(Alt 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());
+        }
+
+        try
+        {
+            boolean hasOperator = false;
+
+            macros.apply(file, "AlternativeHeader", new String[] {pkgName,
+                ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
+                name, currentProd});
+
+            for(Iterator i = elemList.iterator(); i.hasNext();)
+            {
+                ElemInfo info = (ElemInfo) i.next();
+
+                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.name, 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();
+
+                    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[] {"List", nodeName(info.name), i.hasNext() ? "," : ""});
+                        }
+                        break;
+                    }
+                }
+
+                macros.apply(file, "ConstructorBodyHeader", null);
+
+                for(Iterator i = elemList.iterator(); i.hasNext();)
+                {
+                    ElemInfo info = (ElemInfo) i.next();
+
+                    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[] {nodeName(info.name)});
+                        }
+                        break;
+                    }
+                }
+
+                macros.apply(file, "ConstructorBodyTail", null);
+            }
+
+            if(hasOperator)
+            {
+                macros.apply(file, "ConstructorHeader",
+                    new String[] {name});
+
+                for(Iterator i = elemList.iterator(); i.hasNext();)
+                {
+                    ElemInfo info = (ElemInfo) i.next();
+
+                    switch(info.operator)
+                    {
+                    case ElemInfo.NONE:
+                    case ElemInfo.QMARK:
+                        {
+                            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[] {"X" + 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();
+
+                    switch(info.operator)
+                    {
+                    case ElemInfo.NONE:
+                    case ElemInfo.QMARK:
+                        {
+                            macros.apply(file, "ConstructorBodyNode",
+                                new String[] {info.name, nodeName(info.name)});
+                        }
+                        break;
+                    case ElemInfo.STAR:
+                    case ElemInfo.PLUS:
+                        {
+                            macros.apply(file, "ConstructorBodyPlus",
+                                new String[] {nodeName(info.name), info.type});
+                        }
+                        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();
+
+                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();
+
+                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)});
+                    }
+                    break;
+                }
+            }
+
+            macros.apply(file, "ToStringHeader", null);
+            for(Iterator i = elemList.iterator(); i.hasNext();)
+            {
+                ElemInfo info = (ElemInfo) i.next();
+
+                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();
+
+                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();
+
+                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)});
+                    }
+                    break;
+                }
+            }
+            macros.apply(file, "ReplaceChildTail", null);
+
+/* */
+            for(Iterator i = elemList.iterator(); i.hasNext();)
+            {
+                ElemInfo info = (ElemInfo) i.next();
+
+                switch(info.operator)
+                {
+                case ElemInfo.STAR:
+                case ElemInfo.PLUS:
+                    {
+                        macros.apply(file, "Cast",
+                            new String[] {info.name, info.type, name});
+                    }
+                    break;
+                }
+            }
+
+            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;
+        }
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenAnalyses.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenAnalyses.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenAnalyses.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,460 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 ResolveIds 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(ResolveIds ids)
+    {
+        this.ids = 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(ids.pkgDir, "analysis");
+        pkgName = ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis";
+
+        if(!pkgDir.exists())
+        {
+            if(!pkgDir.mkdir())
+            {
+                throw new RuntimeException("Unable to create " + pkgDir.getAbsolutePath());
+            }
+        }
+    }
+
+    public void inProd1(Prod1 node)
+    {
+        if(mainProduction == null)
+        {
+            mainProduction = (String) ids.names.get(node);
+        }
+    }
+
+    public void inTokenDef1(TokenDef1 node)
+    {
+        tokenList.add(ids.names.get(node));
+    }
+
+    public void inAlt1(Alt1 node)
+    {
+        inAlt(node);
+    }
+
+    public void inAlt2(Alt2 node)
+    {
+        inAlt(node);
+    }
+
+    public void inAlt(Alt node)
+    {
+        elemList = new TypedLinkedList(ElemInfoCast.instance);
+    }
+
+    public void inElem1(Elem1 node)
+    {
+        info = new ElemInfo();
+
+        info.name = (String) ids.names.get(node);
+        info.type = (String) ids.elemTypes.get(node);
+        info.operator = ElemInfo.NONE;
+
+        node.getNode4().apply(new DepthFirstAdapter()
+        {
+            public void caseUnOp1(UnOp1 node)
+            {
+                info.operator = ElemInfo.STAR;
+            }
+
+            public void caseUnOp2(UnOp2 node)
+            {
+                info.operator = ElemInfo.QMARK;
+            }
+
+            public void caseUnOp3(UnOp3 node)
+            {
+                info.operator = ElemInfo.PLUS;
+            }
+        });
+
+        elemList.add(info);
+        info = null;
+    }
+
+    public void outAlt1(Alt1 node)
+    {
+        outAlt(node);
+    }
+
+    public void outAlt2(Alt2 node)
+    {
+        outAlt(node);
+    }
+
+    public void outAlt(Alt node)
+    {
+        AltInfo info = new AltInfo();
+
+        info.name = (String) ids.names.get(node);
+        info.elems.addAll(elemList);
+        elemList = null;
+
+        altList.add(info);
+    }
+
+    public void outStart1(Start1 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,
+                ids.pkgName.equals("") ? "node" : ids.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,
+                ids.pkgName.equals("") ? "node" : ids.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,
+                ids.pkgName.equals("") ? "node" : ids.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,
+                ids.pkgName.equals("") ? "node" : ids.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;
+        }
+    }
+}
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenLexer.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenLexer.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenLexer.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,361 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 caseStart1(Start1 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)
+        {
+        }
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenParser.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenParser.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenParser.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,883 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 GenParser extends DepthFirstAdapter
+{
+    private MacroExpander macros;
+    private ResolveIds ids;
+    private File pkgDir;
+    private String pkgName;
+    private String currentProd;
+    private int currentAlt;
+    private boolean hasProductions;
+
+    static final int NONE = 0;
+    static final int STAR = 1;
+    static final int QMARK = 2;
+    static final int PLUS = 3;
+    int count;
+    int elem;
+    Map alts = new TypedTreeMap(
+        StringComparator.instance,
+        StringCast.instance,
+        NodeCast.instance);
+
+    public GenParser(ResolveIds ids)
+    {
+        this.ids = ids;
+
+        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 caseStart1(Start1 tree)
+    {
+        tree.apply(new DepthFirstAdapter()
+        {
+            private boolean hasAlternative;
+
+            public void caseTokenDef1(TokenDef1 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 inProd1(Prod1 node)
+            {
+                hasAlternative = false;
+            }
+
+            public void inAlt1(Alt1 node)
+            {
+                hasAlternative = true;
+            }
+
+            public void outProd1(Prod1 node)
+            {
+                if(hasAlternative)
+                {
+                    Grammar.addNonterminal((String) ids.names.get(node));
+                }
+            }
+        });
+
+        tree.getNode1().apply(this);
+
+        if(!hasProductions)
+        {
+            return;
+        }
+
+        Grammar.computeLALR();
+
+        createParser();
+        createParserException();
+        createState();
+        createTokenIndex();
+    }
+
+    public void inProd1(Prod1 node)
+    {
+        hasProductions = true;
+        currentProd = (String) ids.names.get(node);
+    }
+
+    public void caseAlt1(Alt1 node)
+    {
+        count = 1;
+
+        node.apply(new DepthFirstAdapter()
+        {
+            public void inElem1(Elem1 node)
+            {
+                GenParser.this.setOut(node, new Integer(NONE));
+            }
+
+            public void caseUnOp1(UnOp1 node)
+            {
+                count *= 2;
+
+                GenParser.this.setOut(node.getParent().getParent(), new Integer(STAR));
+            }
+
+            public void caseUnOp2(UnOp2 node)
+            {
+                count *= 2;
+
+                GenParser.this.setOut(node.getParent().getParent(), new Integer(QMARK));
+            }
+
+            public void caseUnOp3(UnOp3 node)
+            {
+                GenParser.this.setOut(node.getParent().getParent(), new Integer(PLUS));
+            }
+        });
+
+        if(count == 1)
+        {
+            alts.put(ids.names.get(node), node);
+
+            currentAlt = Grammar.addProduction(currentProd, (String) ids.names.get(node));
+            node.getNode2().apply(this);
+        }
+        else
+        {
+            int max = count;
+
+            for(count = 0; count < max; count++)
+            {
+                elem = 0;
+
+                alts.put(
+                    "X" + (count + 1) + (String) ids.names.get(node),
+                    node);
+
+                currentAlt = Grammar.addProduction(currentProd,
+                    "X" + (count + 1) + (String) ids.names.get(node));
+
+                node.getNode2().apply(this);
+            }
+        }
+    }
+
+    public void caseElem1(Elem1 node)
+    {
+        int op = ((Integer) getOut(node)).intValue();
+        String name = (String) ids.elemTypes.get(node);
+
+        switch(op)
+        {
+        case NONE:
+            {
+                Grammar.addSymbolToProduction(name, currentAlt);
+            }
+            break;
+        case STAR:
+            {
+//                System.out.println("Star:" + count + ", " + (1 << elem));
+
+                if((count & (1 << elem)) != 0)
+                {
+//                    System.out.println("yes");
+
+                    try
+                    {
+                        Grammar.addNonterminal("X" + name);
+
+                        int alt = Grammar.addProduction("X" + name, "X1" + name);
+
+                        Grammar.addSymbolToProduction("X" + name, alt);
+                        Grammar.addSymbolToProduction(name, alt);
+
+                        alt = Grammar.addProduction("X" + name, "X2" + name);
+
+                        Grammar.addSymbolToProduction(name, alt);
+                    }
+                    catch(Exception e)
+                    {
+                    }
+
+                    Grammar.addSymbolToProduction("X" + name, currentAlt);
+                }
+
+                elem++;
+            }
+            break;
+        case QMARK:
+            {
+                if((count & (1 << elem)) != 0)
+                {
+                    Grammar.addSymbolToProduction(name, currentAlt);
+                }
+
+                elem++;
+            }
+            break;
+        case PLUS:
+            {
+                try
+                {
+                    Grammar.addNonterminal("X" + name);
+
+                    int alt = Grammar.addProduction("X" + name, "X1" + name);
+
+                    Grammar.addSymbolToProduction("X" + name, alt);
+                    Grammar.addSymbolToProduction(name, alt);
+
+                    alt = Grammar.addProduction("X" + name, "X2" + name);
+
+                    Grammar.addSymbolToProduction(name, alt);
+                }
+                catch(Exception e)
+                {
+                }
+
+                Grammar.addSymbolToProduction("X" + name, currentAlt);
+            }
+            break;
+        }
+    }
+
+    public void caseAlt2(Alt2 node)
+    {
+    }
+
+    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"});
+
+            for(int i = 0; i < (productions.length - 1); i++)
+            {
+                Node node = (Node) alts.get(productions[i].name);
+
+                if(node == null)
+                {
+                    macros.apply(file, "ParserReduceNoFilter", new String[] {
+                        "" + productions[i].index,
+                        "" + productions[i].leftside});
+                }
+                else
+                {
+                    macros.apply(file, "ParserReduceFilter", new String[] {
+                        "" + productions[i].index,
+                        "" + productions[i].leftside});
+                }
+            }
+
+            {
+                Symbol[] rightside = productions[productions.length - 1].rightside();
+                macros.apply(file, "ParserParseTail", new String[] {rightside[0].name});
+            }
+
+            for(int i = 0; i < (productions.length - 1); i++)
+            {
+                macros.apply(file, "ParserNewHeader",
+                    new String[] {"" + productions[i].index});
+
+                Node node = (Node) alts.get(productions[i].name);
+
+                if(node == null)
+                {
+                    Symbol[] rightside = productions[i].rightside();
+                    for(int k = rightside.length - 1; k >= 0; k--)
+                    {
+                        macros.apply(file, "ParserNewBodyDecl",
+                            new String[] {rightside[k].name, "" + (k + 1)});
+                    }
+
+                    macros.apply(file, "ParserNewBodyNew",
+                        new String[] {productions[i].name});
+
+                    for(int k = 0; k < rightside.length; k++)
+                    {
+                        macros.apply(file, "ParserNewBodyParams",
+                            new String[] {(k == 0) ? "" : ", ",
+                            (k + 1) + ""});
+                    }
+
+                    macros.apply(file, "ParserNewTail", new String[] { "" + productions[i].leftside});
+                }
+                else
+                {
+                    count = count(productions[i].name) - 1;
+                    elem = 0;
+                    final BufferedWriter finalFile = file;
+                    final LinkedList stack = new LinkedList();
+
+                    node.apply(new DepthFirstAdapter()
+                    {
+                        private int current;
+
+                        public void caseElem1(Elem1 node)
+                        {
+                            int op = ((Integer) GenParser.this.getOut(node)).intValue();
+                            String name = (String) ids.elemTypes.get(node);
+                            current++;
+
+                            switch(op)
+                            {
+                            case NONE:
+                                {
+                                    stack.addFirst(new Element("ParserNewBodyDecl",
+                                        new String[] {name, "" + current}));
+                                }
+                                break;
+                            case STAR:
+                                {
+                                    if((count & (1 << elem)) != 0)
+                                    {
+                                        stack.addFirst(new Element("ParserNewBodyDecl",
+                                            new String[] {"X" + name, "" + current}));
+                                    }
+                                    else
+                                    {
+                                        stack.addFirst(new Element("ParserNewBodyDeclNull",
+                                            new String[] {"X" + name, "" + current}));
+                                    }
+
+                                    elem++;
+                                }
+                                break;
+                            case QMARK:
+                                {
+                                    if((count & (1 << elem)) != 0)
+                                    {
+                                        stack.addFirst(new Element("ParserNewBodyDecl",
+                                            new String[] {name, "" + current}));
+                                    }
+                                    else
+                                    {
+                                        stack.addFirst(new Element("ParserNewBodyDeclNull",
+                                            new String[] {name, "" + current}));
+                                    }
+
+                                    elem++;
+                                }
+                                break;
+                            case PLUS:
+                                {
+                                    stack.addFirst(new Element("ParserNewBodyDecl",
+                                        new String[] {"X" + name, "" + current}));
+                                }
+                                break;
+                            }
+                        }
+                    });
+
+                    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());
+                    }
+
+                    macros.apply(file, "ParserNewBodyNew",
+                        new String[] {
+                        (node == null) ? productions[i].name : name(productions[i].name)});
+
+                    node.apply(new DepthFirstAdapter()
+                    {
+                        private int current;
+
+                        public void caseElem1(Elem1 node)
+                        {
+                            try
+                            {
+                                String name = (String) ids.elemTypes.get(node);
+                                current++;
+
+                                macros.apply(finalFile, "ParserNewBodyParams",
+                                    new String[] {(current == 1) ? "" : ", ",
+                                    current + ""});
+                            }
+                            catch(IOException e)
+                            {
+                                throw new RuntimeException("An error occured while writing to " +
+                                    new File(pkgDir, "Parser.java").getAbsolutePath());
+                            }
+                        }
+                    });
+
+                    macros.apply(file, "ParserNewTail", new String[] { "" + productions[i].leftside});
+                }
+            }
+
+            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();
+
+            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;
+        }
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenProds.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenProds.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenProds.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.util.*;
+import java.io.*;
+
+public class GenProds extends DepthFirstAdapter
+{
+    private MacroExpander macros;
+    private ResolveIds ids;
+    private File pkgDir;
+    private String pkgName;
+    private Map hiddenProds = new TypedTreeMap(
+        StringComparator.instance,
+        StringCast.instance,
+        NodeCast.instance);
+
+    public GenProds(ResolveIds ids)
+    {
+        this.ids = 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(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 inProd1(Prod1 node)
+    {
+        String name = (String) ids.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)
+        {
+        }
+    }
+
+    public void inUnOp1(UnOp1 node)
+    {
+        if(node.getParent().getParent() instanceof Elem1)
+        {
+            Elem1 elem = (Elem1) node.getParent().getParent();
+
+            String name = (String) ids.elemTypes.get(elem);
+
+            if(hiddenProds.put("X" + name, elem) == null)
+            {
+                createProduction("X" + name);
+
+                createAlternative(
+                    "X1" + name,
+                    "HiddenAlternative2",
+                    new String[] {pkgName,
+                    ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
+                    "X1" + name,
+                    "X" + name,
+                    name,
+                    GenAlts.nodeName(name),
+                    GenAlts.nodeName("X" + name)});
+
+                createAlternative(
+                    "X2" + name,
+                    "HiddenAlternative1",
+                    new String[] {pkgName,
+                    ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
+                    "X2" + name,
+                    "X" + name,
+                    name,
+                    GenAlts.nodeName(name)});
+            }
+        }
+    }
+
+    public void inUnOp3(UnOp3 node)
+    {
+        if(node.getParent().getParent() instanceof Elem1)
+        {
+            Elem1 elem = (Elem1) node.getParent().getParent();
+
+            String name = (String) ids.elemTypes.get(elem);
+
+            if(hiddenProds.put("X" + name, elem) == null)
+            {
+                createProduction("X" + name);
+
+                createAlternative(
+                    "X1" + name,
+                    "HiddenAlternative2",
+                    new String[] {pkgName,
+                    ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
+                    "X1" + name,
+                    "X" + name,
+                    name,
+                    GenAlts.nodeName(name),
+                    GenAlts.nodeName("X" + name)});
+
+                createAlternative(
+                    "X2" + name,
+                    "HiddenAlternative1",
+                    new String[] {pkgName,
+                    ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
+                    "X2" + name,
+                    "X" + name,
+                    name,
+                    GenAlts.nodeName(name)});
+            }
+        }
+    }
+
+    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)
+        {
+        }
+    }
+}
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenTokens.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenTokens.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenTokens.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,208 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.*;
+
+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 inTokenDef1(TokenDef1 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;
+
+        RegExp1 regExp = (RegExp1) node.getNode4();
+
+        Concat1 concat = (Concat1) regExp.getNode1();
+        RegExpTails regExpTails = regExp.getNode2();
+
+        if(regExpTails instanceof RegExpTails2)
+        {
+            UnExps unExps = concat.getNode1();
+
+            if(unExps instanceof UnExps1)
+            {
+                UnExps unExps_2 = ((UnExps1) unExps).getNode2();
+
+                if(unExps_2 instanceof UnExps2)
+                {
+                    UnExp1 unExp = (UnExp1) ((UnExps1) unExps).getNode1();
+
+                    Basic basic = unExp.getNode1();
+                    UnOpOpt unOpOpt = unExp.getNode2();
+
+                    if((basic instanceof Basic3) &&
+                        (unOpOpt instanceof UnOpOpt2))
+                    {
+                        text = ((Basic3) basic).getNode1().getText();
+                        text = text.substring(1, text.length() - 1);
+                    }
+                    else if((basic instanceof Basic1) &&
+                        (unOpOpt instanceof UnOpOpt2))
+                    {
+                        PChar pChar = ((Basic1) basic).getNode1();
+
+                        if(pChar instanceof PChar1)
+                        {
+                            text = ((PChar1) pChar).getNode1().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();
+    }
+}
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenUtils.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenUtils.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/GenUtils.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,290 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 ResolveIds ids;
+    private File pkgDir;
+    private String pkgName;
+    private String mainProduction;
+
+    public GenUtils(ResolveIds ids)
+    {
+        this.ids = 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(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 caseGrammar1(Grammar1 node)
+    {
+        node.getNode6().apply(this);
+    }
+
+    public void caseProd1(Prod1 node)
+    {
+        if(mainProduction == null)
+        {
+            mainProduction = (String) ids.names.get(node);
+        }
+    }
+
+    public void outStart1(Start1 node)
+    {
+        if(mainProduction != null)
+        {
+            createStart();
+        }
+
+        createEOF();
+        createNode();
+        createNodeCast();
+        createToken();
+        create("Switch");
+        create("Switchable");
+        create("TypedLinkedList");
+        create("Cast");
+        create("NoCast");
+    }
+
+    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,
+                ids.pkgName.equals("") ? "analysis" : ids.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,
+                ids.pkgName.equals("") ? "analysis" : ids.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,
+                ids.pkgName.equals("") ? "analysis" : ids.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 createNodeCast()
+    {
+        BufferedWriter file;
+
+        try
+        {
+            file = new BufferedWriter(
+                new FileWriter(
+                new File(pkgDir, "NodeCast.java")));
+        }
+        catch(IOException e)
+        {
+            throw new RuntimeException("Unable to create " + new File(pkgDir, "NodeCast.java").getAbsolutePath());
+        }
+
+        try
+        {
+            macros.apply(file, "NodeCast", new String[] {pkgName});
+        }
+        catch(IOException e)
+        {
+            throw new RuntimeException("An error occured while writing to " +
+                new File(pkgDir, "NodeCast.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)
+        {
+        }
+    }
+}
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Grammar.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Grammar.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Grammar.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,632 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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()
+    {
+        // 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];
+
+        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)
+                {
+                    action_[i][j] = new int[] {0, destination.intValue()};
+                }
+
+                for(int k = 0; k < items.length; k++)
+                {
+                    Production production = Production.
+                        production(items[k].lr0Item.production);
+
+                    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)
+                                {
+                                    switch(action[0])
+                                    {
+                                    case 0:
+                                        throw new RuntimeException(
+                                            "\n\nshift/reduce conflict in state [stack:" +
+                                            collection.collection.names.elementAt(i) + "*] on " +
+                                            terminals[j] + " in " + state.toString(terminals[j]));
+                                    case 1:
+                                        throw new RuntimeException(
+                                            "\n\nreduce/reduce conflict in state [stack:" +
+                                            collection.collection.names.elementAt(i) + "*] on " +
+                                            terminals[j] + " in " + state.toString(terminals[j]));
+                                    case 2:
+                                        throw new RuntimeException(
+                                            "\n\nreduce/accept conflict in state [stack:" +
+                                            collection.collection.names.elementAt(i) + "*] on " +
+                                            terminals[j] + " in " + state.toString(terminals[j]));
+                                    }
+                                }
+                                else
+                                {
+                                    action_[i][j] = new int[] {1,
+                                        items[k].lr0Item.production};
+                                }
+                            }
+                        }
+                        else
+                        {
+                            if(terminals[j].index == eof)
+                            {
+                                int[] action = action_[i][j];
+                                if(action != null)
+                                {
+                                    switch(action[0])
+                                    {
+                                    case 0:
+                                        throw new RuntimeException(
+                                            "shift/accept conflict in state [stack:" +
+                                            collection.collection.names.elementAt(i) + "*] on " +
+                                            terminals[j] + " in " + state);
+                                    case 1:
+                                        throw new RuntimeException(
+                                            "reduce/accept conflict in state [stack:" +
+                                            collection.collection.names.elementAt(i) + "*] on " +
+                                            terminals[j] + " in " + state);
+                                    }
+                                }
+                                else
+                                {
+                                    action_[i][j] = new int[] {2};
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+            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;
+    }
+}
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/IntSet.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/IntSet.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/IntSet.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,378 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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()*/;
+    }
+}
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/IntegerCast.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/IntegerCast.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/IntegerCast.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,25 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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;
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/IntegerComparator.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/IntegerComparator.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/IntegerComparator.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,25 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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();
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LICENSE
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LICENSE	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LICENSE	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,23 @@
+SableCC, an object-oriented compiler framework. 
+Copyright (C) 1997-2001 Etienne M. Gagnon <egagnon at j-meg.com> 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/

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR0Collection.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR0Collection.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR0Collection.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,132 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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();
+    }
+}
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR0Item.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR0Item.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR0Item.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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 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 + " ]";
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR0ItemAndSetPair.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR0ItemAndSetPair.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR0ItemAndSetPair.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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;
+
+final class LR0ItemAndSetPair
+{
+    public final LR0Item item;
+    public final int set;
+
+    LR0ItemAndSetPair(LR0Item item, int set)
+    {
+        this.item = item;
+        this.set = set;
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR0ItemSet.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR0ItemSet.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR0ItemSet.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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 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;
+    }
+
+}
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR1Collection.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR1Collection.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR1Collection.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,182 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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();
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR1Item.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR1Item.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR1Item.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,101 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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;
+    }
+}
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR1ItemSet.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR1ItemSet.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/LR1ItemSet.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,228 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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);
+
+            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;
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/ListCast.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/ListCast.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/ListCast.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,25 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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;
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/MacroExpander.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/MacroExpander.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/MacroExpander.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,112 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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);
+                }
+            }
+        }
+    }
+}
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/NFA.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/NFA.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/NFA.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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 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 + "}";
+        }
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/NoCast.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/NoCast.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/NoCast.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,22 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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;
+    }
+}

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/NodeCast.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/NodeCast.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/NodeCast.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,26 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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;
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/NodeComparator.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/NodeComparator.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/NodeComparator.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,26 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 NodeComparator implements Comparator
+{
+    public final static NodeComparator instance = new NodeComparator();
+
+    private NodeComparator()
+    {
+    }
+
+    public int compare(Object o1, Object o2)
+    {
+        return ((Node) o1).getId() - ((Node) o2).getId();
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Production.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Production.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Production.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,160 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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();
+    }
+}
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/ResolveIds.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/ResolveIds.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/ResolveIds.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,652 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 TypedTreeMap(
+        StringComparator.instance,
+        StringCast.instance,
+        NodeCast.instance);
+    public final Map elems = new TypedTreeMap(
+        StringComparator.instance,
+        StringCast.instance,
+        NodeCast.instance);
+    public final Map names = new TypedTreeMap(
+        NodeComparator.instance,
+        NodeCast.instance,
+        StringCast.instance);
+    public final Map errorNames = new TypedTreeMap(
+        NodeComparator.instance,
+        NodeCast.instance,
+        StringCast.instance);
+    public final Map elemTypes = new TypedTreeMap(
+        NodeComparator.instance,
+        NodeCast.instance,
+        StringCast.instance);
+    public final Map fixedTokens = new TypedTreeMap(
+        NodeComparator.instance,
+        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 inPkgName1(PkgName1 node)
+    {
+        pkgName = node.getNode1().getText();
+        pkgDir = new File(pkgDir, node.getNode1().getText());
+
+        if(!pkgDir.exists())
+        {
+            if(!pkgDir.mkdir())
+            {
+                throw new RuntimeException("Unable to create " + pkgDir.getAbsolutePath());
+            }
+        }
+    }
+
+    public void inPkgNameTail1(PkgNameTail1 node)
+    {
+        pkgName += "." + node.getNode2().getText();
+        pkgDir = new File(pkgDir, node.getNode2().getText());
+
+        if(!pkgDir.exists())
+        {
+            if(!pkgDir.mkdir())
+            {
+                throw new RuntimeException("Unable to create " + pkgDir.getAbsolutePath());
+            }
+        }
+    }
+
+    public void caseBasic4(Basic4 node)
+    {
+        String name = node.getNode1().getText();
+
+        if(helpers.get(name) == null)
+        {
+            error2(node.getNode1(), name);
+        }
+    }
+
+    public void outHelperDef1(HelperDef1 node)
+    {
+        String name = node.getNode1().getText();
+
+        if(helpers.put(name, node) != null)
+        {
+            error(node.getNode1(), name);
+        }
+
+        names.put(node, name);
+    }
+
+    public void outTokenDef1(TokenDef1 node)
+    {
+        String name = "T" + name(node.getNode2().getText());
+        String errorName = errorName(node.getNode2().getText());
+
+        if(tokens.put(name, node) != null)
+        {
+            error(node.getNode2(), name);
+        }
+
+        names.put(node, name);
+        errorNames.put(node, errorName);
+        tokenList.add(name);
+    }
+
+    public void inStates1(States1 node)
+    {
+        processingStates = true;
+    }
+
+    public void outStates1(States1 node)
+    {
+        processingStates = false;
+    }
+
+    public void inIgnTokens1(IgnTokens1 node)
+    {
+        processingIgnTokens = true;
+    }
+
+    public void outIgnTokens1(IgnTokens1 node)
+    {
+        processingIgnTokens = false;
+    }
+
+    public void inIdList1(IdList1 node)
+    {
+        if(processingStates)
+        {
+            String name = node.getNode1().getText().toUpperCase();
+
+            if(states.put(name, node.getNode1()) != null)
+            {
+                error(node.getNode1(), name);
+            }
+
+            names.put(node.getNode1(), name);
+            stateList.add(name);
+        }
+
+        if(processingIgnTokens)
+        {
+            String name = "T" + name(node.getNode1().getText());
+
+            if(tokens.get(name) == null)
+            {
+                error2(node.getNode1(), name);
+            }
+
+            if(ignTokens.put(name, node.getNode1()) != null)
+            {
+                error(node.getNode1(), name);
+            }
+
+            names.put(node.getNode1(), name);
+        }
+    }
+
+    public void inIdListTail1(IdListTail1 node)
+    {
+        if(processingStates)
+        {
+            String name = node.getNode2().getText().toUpperCase();
+
+            if(states.put(name, node.getNode2()) != null)
+            {
+                error(node.getNode2(), name);
+            }
+
+            names.put(node.getNode2(), name);
+            stateList.add(name);
+        }
+
+        if(processingIgnTokens)
+        {
+            String name = "T" + name(node.getNode2().getText());
+
+            if(tokens.get(name) == null)
+            {
+                error2(node.getNode2(), name);
+            }
+
+            if(ignTokens.put(name, node.getNode2()) != null)
+            {
+                error(node.getNode2(), name);
+            }
+
+            names.put(node.getNode2(), name);
+        }
+    }
+
+    private Map stateMap;
+
+    public void inStateList1(StateList1 node)
+    {
+        stateMap = new TypedTreeMap(
+            StringComparator.instance,
+            StringCast.instance,
+            NodeCast.instance);
+
+        String name = node.getNode2().getText().toUpperCase();
+
+        if(states.get(name) == null)
+        {
+            error2(node.getNode2(), name);
+        }
+
+        if(stateMap.put(name, node) != null)
+        {
+            error(node.getNode2(), name);
+        }
+    }
+
+    public void outStateList1(StateList1 node)
+    {
+        stateMap = null;
+    }
+
+    public void inStateListTail1(StateListTail1 node)
+    {
+        String name = node.getNode2().getText().toUpperCase();
+
+        if(states.get(name) == null)
+        {
+            error2(node.getNode2(), name);
+        }
+
+        if(stateMap.put(name, node) != null)
+        {
+            error(node.getNode2(), name);
+        }
+    }
+
+    public void inTransition1(Transition1 node)
+    {
+        String name = node.getNode2().getText().toUpperCase();
+
+        if(states.get(name) == null)
+        {
+            error2(node.getNode2(), name);
+        }
+    }
+
+    public void inProd1(Prod1 node)
+    {
+        currentProd = name(node.getNode1().getText());
+
+        String name = "P" + currentProd;
+
+        if(prods.put(name, node) != null)
+        {
+            error(node.getNode1(), name);
+        }
+
+        names.put(node, name);
+    }
+
+    private class Alt1Switch extends AnalysisAdapter
+    {
+        Alt1 alt;
+
+        Alt1Switch(Alt1 alt)
+        {
+            this.alt = alt;
+        }
+
+        public void caseAltNameOpt1(AltNameOpt1 node)
+        {
+            currentAlt =
+                "A" +
+                name(((AltName1) node.getNode1()).getNode2().getText()) +
+                currentProd;
+
+            if(alts.put(currentAlt, alt) != null)
+            {
+                error(((AltName1) node.getNode1()).getNode2(), currentAlt);
+            }
+
+            names.put(alt, currentAlt);
+        }
+
+        public void caseAltNameOpt2(AltNameOpt2 node)
+        {
+            currentAlt = "A" + currentProd;
+
+            if(alts.put(currentAlt, alt) != null)
+            {
+                error(currentAlt);
+            }
+
+            names.put(alt, currentAlt);
+        }
+    }
+
+    public void inAlt1(final Alt1 alt)
+    {
+        alt.getNode1().apply(new Alt1Switch(alt));
+    }
+
+    public void defaultcase(Node node)
+    {
+        if(node instanceof Token)
+        {
+            Token t = (Token) node;
+            lastLine = t.getLine();
+            lastPos = t.getPos() + t.getText().length();
+        }
+    }
+
+    private class Alt2Switch extends AnalysisAdapter
+    {
+        Alt2 alt;
+
+        Alt2Switch(Alt2 alt)
+        {
+            this.alt = alt;
+        }
+
+        public void caseAltNameOpt1(AltNameOpt1 node)
+        {
+            currentAlt =
+                "A" +
+                name(((AltName1) node.getNode1()).getNode2().getText()) +
+                currentProd;
+
+            if(alts.put(currentAlt, alt) != null)
+            {
+                error(((AltName1) node.getNode1()).getNode2(), currentAlt);
+            }
+
+            names.put(alt, currentAlt);
+        }
+
+        public void caseAltNameOpt2(AltNameOpt2 node)
+        {
+            currentAlt = "A" + currentProd;
+
+            if(alts.put(currentAlt, alt) != null)
+            {
+                error(currentAlt);
+            }
+
+            names.put(alt, currentAlt);
+        }
+    }
+
+    public void inLookAhead1(LookAhead1 node)
+    {
+        Token token = (Token) node.getNode1();
+
+        throw new RuntimeException(
+            "[" + token.getLine() + "," + token.getPos() + "] " +
+            "Look ahead not yet supported.");
+    }
+    public void inAlt2(final Alt2 alt)
+    {
+        alt.getNode2().apply(new Alt2Switch(alt));
+    }
+
+    public void caseElem1(final Elem1 elem)
+    {
+        elem.getNode1().apply(new AnalysisAdapter()
+        {
+            public void caseElemNameOpt1(ElemNameOpt1 node)
+            {
+                String name = currentAlt + "." +
+                    name(((ElemName1)node.getNode1()).getNode2().getText());
+
+                if(elems.put(name, elem) != null)
+                {
+                    error(((ElemName1)node.getNode1()).getNode2(), name);
+                }
+
+                if(((ElemName1)node.getNode1()).getNode2().getText().equals("class"))
+                {
+                    error5(((ElemName1)node.getNode1()).getNode2());
+                }
+
+                names.put(elem, name(((ElemName1)node.getNode1()).getNode2().getText()));
+            }
+
+            public void caseElemNameOpt2(ElemNameOpt2 node)
+            {
+                String name = currentAlt + "." +
+                    name(elem.getNode3().getText());
+
+                if(elems.put(name, elem) != null)
+                {
+                    error(elem.getNode3(), name);
+                }
+
+                if(elem.getNode3().getText().equals("class"))
+                {
+                    error5(elem.getNode3());
+                }
+
+                names.put(elem, name(elem.getNode3().getText()));
+            }
+        });
+    }
+
+    public void outProductions1(Productions1 prod)
+    {
+        prod.apply(new DepthFirstAdapter()
+        {
+            public void caseElem1(Elem1 node)
+            {
+                String name = name(node.getNode3().getText());
+
+                if(node.getNode2() instanceof SpecifierOpt1)
+                {
+                    if(((SpecifierOpt1) node.getNode2()).getNode1() instanceof Specifier1)
+                    {
+                        if(tokens.get("T" + name) == null)
+                        {
+                            error2(node.getNode3(), "T" + name);
+                        }
+
+                        if(ignTokens.get("T" + name) != null)
+                        {
+                            error3(node.getNode3(), "T" + name);
+                        }
+
+                        elemTypes.put(node, "T" + name);
+                    }
+                    else
+                    {
+                        if(prods.get("P" + name) == null)
+                        {
+                            error2(node.getNode3(), "P" + name);
+                        }
+
+                        elemTypes.put(node, "P" + 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.getNode3(), "P" + name + " and T" + name);
+                    }
+
+                    if(token != null)
+                    {
+                        if(production != null)
+                        {
+                            error4(node.getNode3(), "P" + name + " and T" + name);
+                        }
+
+                        if(ignToken != null)
+                        {
+                            error3(node.getNode3(), "T" + name);
+                        }
+
+                        elemTypes.put(node, "T" + name);
+                    }
+                    else
+                    {
+                        elemTypes.put(node, "P" + 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;
+            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();
+    }
+
+    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();
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/SableCC.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/SableCC.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/SableCC.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,210 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 void displayCopyright()
+    {
+        System.out.println();
+        System.out.println("SableCC version " + Version.VERSION);
+        System.out.println("Copyright (C) 1997-2001 Etienne M. Gagnon <egagnon at j-meg.com> 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 [-d destination] filename [filename]...");
+        System.out.println("  sablecc -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("-license")))
+        {
+            new DisplayLicense();
+            System.exit(0);
+        }
+
+        displayCopyright();
+
+        {
+            int arg = 0;
+            while(arg < arguments.length)
+            {
+                if(arguments[arg].equals("-d"))
+                {
+                    if((d_option == null) && (++arg < arguments.length))
+                    {
+                        d_option = arguments[arg];
+                    }
+                    else
+                    {
+                        displayUsage();
+                        System.exit(1);
+                    }
+                }
+                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)
+        {
+            System.out.println(e);
+            System.exit(1);
+        }
+        catch(Throwable e)
+        {
+            System.out.println(e);
+            System.exit(1);
+        }
+        finally
+        {
+            System.exit(0);
+        }
+    }
+
+
+  /**
+   * 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(String grammar, String destDir) throws Exception, Throwable
+  {
+      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, Throwable
+  {
+      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;
+
+      // Build the AST
+      Start tree = new Parser(new Lexer(new BufferedReader(
+                 temp = new FileReader(in)))).parse();
+      temp.close();
+
+      System.out.println("Verifying identifiers.");
+      ResolveIds ids = new ResolveIds(dir);
+      tree.apply(ids);
+
+      // Create the node.* and analysis.* files
+      System.out.println("Generating token classes.");
+      tree.apply(new GenTokens(ids));
+
+      System.out.println("Generating production classes.");
+      tree.apply(new GenProds(ids));
+
+      System.out.println("Generating alternative classes.");
+      tree.apply(new GenAlts(ids));
+
+      System.out.println("Generating analysis classes.");
+      tree.apply(new GenAnalyses(ids));
+
+      System.out.println("Generating utility classes.");
+      tree.apply(new GenUtils(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));
+      }
+      catch(Exception e)
+      {
+          System.out.println(e.getMessage());
+          throw e;
+      }
+  }
+
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/StringCast.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/StringCast.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/StringCast.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,25 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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;
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/StringComparator.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/StringComparator.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/StringComparator.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,25 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Switch.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Switch.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Switch.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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 Switch
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Switchable.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Switchable.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Switchable.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,14 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 Switchable
+{
+    void apply(Switch sw);
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Symbol.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Symbol.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Symbol.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,153 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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;
+    }
+}
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/SymbolSet.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/SymbolSet.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/SymbolSet.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Transitions.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Transitions.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Transitions.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,77 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 TypedTreeMap(
+        NodeComparator.instance,
+        NodeCast.instance,
+        NoCast.instance);
+
+    private String state;
+    private String transition;
+    private Map map;
+
+    public void caseStateList1(StateList1 node)
+    {
+        inStateList1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+
+        outStateList1(node);  // We moved this...
+
+        node.getNode4().apply(this);
+        node.getNode5().apply(this);
+
+    }
+
+    public void inTokenDef1(TokenDef1 node)
+    {
+        map = new TypedTreeMap(
+            StringComparator.instance,
+            StringCast.instance,
+            StringCast.instance);
+    }
+
+    public void inStateList1(StateList1 node)
+    {
+        state = transition = node.getNode2().getText().toUpperCase();
+    }
+
+    public void inStateListTail1(StateListTail1 node)
+    {
+        state = transition = node.getNode2().getText().toUpperCase();
+    }
+
+    public void outTransition1(Transition1 node)
+    {
+        transition = node.getNode2().getText().toUpperCase();
+    }
+
+    public void outStateList1(StateList1 node)
+    {
+        map.put(state, transition);
+    }
+
+    public void outStateListTail1(StateListTail1 node)
+    {
+        map.put(state, transition);
+    }
+
+    public void outTokenDef1(TokenDef1 node)
+    {
+        tokenStates.put(node, map);
+    }
+}

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/TypedLinkedList.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/TypedLinkedList.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/TypedLinkedList.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,118 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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));
+        }
+    }
+}

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/TypedTreeMap.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/TypedTreeMap.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/TypedTreeMap.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,181 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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(map);
+
+        keyCast = NoCast.instance;
+        valueCast = NoCast.instance;
+    }
+
+    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(map);
+
+        this.keyCast = keyCast;
+        this.valueCast = valueCast;
+    }
+
+    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));
+        }
+    }
+}

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Version.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Version.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/Version.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,6 @@
+package org.sablecc.sablecc;
+
+public class Version
+{
+  public static final String VERSION = "2.16.2";
+}

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/alternatives.txt
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/alternatives.txt	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/alternatives.txt	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,312 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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:AlternativeHeader
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import java.util.*;
+import $1$.*;
+
+public final class $2$ extends $3$
+{
+
+$
+
+Macro:NodeElement
+    private $0$ _$1$_;
+
+$
+
+Macro:ListElement
+    private final LinkedList _$1$_ = new TypedLinkedList(new $0$_Cast());
+
+$
+
+Macro:ConstructorHeader
+
+    public $0$(
+$
+
+Macro:ConstructorHeaderDeclNode
+
+        $0$ _$1$_$2$
+$
+
+Macro:ConstructorHeaderDeclList
+
+        $0$ _$1$_$2$
+$
+
+Macro:ConstructorBodyHeader
+)
+    {
+
+$
+
+Macro:ConstructorBodyNode
+        set$0$(_$1$_);
+
+
+$
+
+Macro:ConstructorBodyList
+        {
+            this._$0$_.clear();
+            this._$0$_.addAll(_$0$_);
+        }
+
+
+$
+
+Macro:ConstructorBodyQMark
+        if(_$2$_ instanceof X1QMark$1$)
+        {
+            set$0$(((X1QMark$1$) _$2$_).get$1$());
+        }
+        else
+        {
+            set$0$(null);
+        }
+
+
+$
+
+Macro:ConstructorBodyStar
+        while(_$0$_ instanceof X1Star$1$)
+        {
+            this._$0$_.add(((X1Star$1$) _$0$_).get$1$());
+            _$0$_ = ((X1Star$1$) _$0$_).getXStar$1$();
+        }
+
+
+$
+
+Macro:ConstructorBodyPlus
+        if(_$0$_ != null)
+        {
+            while(_$0$_ instanceof X1$1$)
+            {
+                this._$0$_.addFirst(((X1$1$) _$0$_).get$1$());
+                _$0$_ = ((X1$1$) _$0$_).getX$1$();
+            }
+            this._$0$_.addFirst(((X2$1$) _$0$_).get$1$());
+        }
+
+
+$
+
+Macro:ConstructorBodyTail
+    }
+
+$
+
+Macro:CloneHeader
+    public Object clone()
+    {
+        return new $0$(
+$
+
+Macro:CloneBodyNode
+
+            ($0$) cloneNode(_$1$_)$2$
+$
+
+Macro:CloneBodyList
+
+            cloneList(_$0$_)$1$
+$
+
+Macro:CloneTail
+);
+    }
+
+$
+
+Macro:Apply
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).case$0$(this);
+    }
+
+$
+
+Macro:GetSetNode
+
+    public $0$ get$1$()
+    {
+        return _$2$_;
+    }
+
+    public void set$1$($0$ node)
+    {
+        if(_$2$_ != null)
+        {
+            _$2$_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        _$2$_ = node;
+    }
+
+$
+
+Macro:GetSetList
+
+    public LinkedList get$0$()
+    {
+        return _$1$_;
+    }
+
+    public void set$0$(List list)
+    {
+        _$1$_.clear();
+        _$1$_.addAll(list);
+    }
+
+$
+
+Macro:ToStringHeader
+
+    public String toString()
+    {
+        return ""
+$
+
+Macro:ToStringBodyNode
+
+            + toString(_$0$_)
+$
+
+Macro:ToStringBodyList
+
+            + toString(_$0$_)
+$
+
+Macro:ToStringTail
+;
+    }
+
+$
+
+Macro:RemoveChildHeader
+
+    void removeChild(Node child)
+    {
+
+$
+
+Macro:RemoveChildNode
+        if(_$0$_ == child)
+        {
+            _$0$_ = null;
+            return;
+        }
+
+
+$
+
+Macro:RemoveChildList
+        if(_$0$_.remove(child))
+        {
+            return;
+        }
+
+
+$
+
+Macro:RemoveChildTail
+    }
+
+$
+
+Macro:ReplaceChildHeader
+
+    void replaceChild(Node oldChild, Node newChild)
+    {
+
+$
+
+Macro:ReplaceChildNode
+        if(_$0$_ == oldChild)
+        {
+            set$1$(($2$) newChild);
+            return;
+        }
+
+
+$
+
+Macro:ReplaceChildList
+        for(ListIterator i = _$0$_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set(newChild);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
+
+
+$
+
+Macro:ReplaceChildTail
+    }
+
+$
+
+Macro:Cast
+
+    private class $0$_Cast implements Cast
+    {
+        public Object cast(Object o)
+        {
+            $1$ node = ($1$) o;
+
+            if((node.parent() != null) &&
+                (node.parent() != $2$.this))
+            {
+                node.parent().removeChild(node);
+            }
+
+            if((node.parent() == null) ||
+                (node.parent() != $2$.this))
+            {
+                node.parent($2$.this);
+            }
+
+            return node;
+        }
+    }
+
+$
+
+Macro:AlternativeTail
+}
+
+$
+
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analyses.txt
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analyses.txt	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analyses.txt	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,277 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 in);
+    Object getOut(Node node);
+    void setOut(Node node, Object out);
+
+
+$
+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 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);
+        }
+    }
+
+$
+
+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(Node node)
+    {
+    }
+}
+
+$
+
+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(Node node)
+    {
+    }
+
+    public void defaultOut(Node node)
+    {
+    }
+
+    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 $1$.*;
+
+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.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
+
+    public void case$0$($0$ node)
+    {
+        in$0$(node);
+
+$
+
+Macro:DepthFirstAdapterCaseBodyNode
+        if(node.get$0$() != null)
+        {
+            node.get$0$().apply(this);
+        }
+
+$
+
+Macro:DepthFirstAdapterCaseBodyList
+        {
+            Object temp[] = node.get$0$().toArray();
+            for(int i = 0; i < temp.length; i++)
+            {
+                (($1$) temp[i]).apply(this);
+            }
+        }
+
+$
+
+Macro:ReversedDepthFirstAdapterCaseBodyList
+        {
+            Object temp[] = node.get$0$().toArray();
+            for(int i = temp.length - 1; i >= 0; i--)
+            {
+                (($1$) temp[i]).apply(this);
+            }
+        }
+
+$
+
+Macro:DepthFirstAdapterCaseTail
+        out$0$(node);
+    }
+
+$
+
+Macro:DepthFirstAdapterTail
+}
+
+$
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analysis/Analysis.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analysis/Analysis.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analysis/Analysis.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.                                  *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package org.sablecc.sablecc.analysis;
+
+import org.sablecc.sablecc.Switch;
+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 caseGrammar1(Grammar1 node);
+    void casePackageOpt1(PackageOpt1 node);
+    void casePackageOpt2(PackageOpt2 node);
+    void casePackage1(Package1 node);
+    void casePkgNameOpt1(PkgNameOpt1 node);
+    void casePkgName1(PkgName1 node);
+    void casePkgNameTails1(PkgNameTails1 node);
+    void casePkgNameTails2(PkgNameTails2 node);
+    void casePkgNameTail1(PkgNameTail1 node);
+    void casePkgId1(PkgId1 node);
+    void casePkgId2(PkgId2 node);
+    void casePkgId3(PkgId3 node);
+    void casePkgId4(PkgId4 node);
+    void casePkgId5(PkgId5 node);
+    void casePkgId6(PkgId6 node);
+    void casePkgId7(PkgId7 node);
+    void casePkgId8(PkgId8 node);
+    void casePkgId9(PkgId9 node);
+    void casePkgId10(PkgId10 node);
+    void caseHelpersOpt1(HelpersOpt1 node);
+    void caseHelpersOpt2(HelpersOpt2 node);
+    void caseHelpers1(Helpers1 node);
+    void caseHelperDefs1(HelperDefs1 node);
+    void caseHelperDefs2(HelperDefs2 node);
+    void caseHelperDef1(HelperDef1 node);
+    void caseStatesOpt1(StatesOpt1 node);
+    void caseStatesOpt2(StatesOpt2 node);
+    void caseStates1(States1 node);
+    void caseIdListOpt1(IdListOpt1 node);
+    void caseIdList1(IdList1 node);
+    void caseIdListTails1(IdListTails1 node);
+    void caseIdListTails2(IdListTails2 node);
+    void caseIdListTail1(IdListTail1 node);
+    void caseTokensOpt1(TokensOpt1 node);
+    void caseTokensOpt2(TokensOpt2 node);
+    void caseTokens1(Tokens1 node);
+    void caseTokenDefs1(TokenDefs1 node);
+    void caseTokenDefs2(TokenDefs2 node);
+    void caseTokenDef1(TokenDef1 node);
+    void caseStateListOpt1(StateListOpt1 node);
+    void caseStateListOpt2(StateListOpt2 node);
+    void caseStateList1(StateList1 node);
+    void caseStateListTails1(StateListTails1 node);
+    void caseStateListTails2(StateListTails2 node);
+    void caseStateListTail1(StateListTail1 node);
+    void caseTransitionOpt1(TransitionOpt1 node);
+    void caseTransitionOpt2(TransitionOpt2 node);
+    void caseTransition1(Transition1 node);
+    void caseIgnTokensOpt1(IgnTokensOpt1 node);
+    void caseIgnTokensOpt2(IgnTokensOpt2 node);
+    void caseIgnTokens1(IgnTokens1 node);
+    void caseLookAheadOpt1(LookAheadOpt1 node);
+    void caseLookAheadOpt2(LookAheadOpt2 node);
+    void caseLookAhead1(LookAhead1 node);
+    void caseRegExp1(RegExp1 node);
+    void caseRegExpTails1(RegExpTails1 node);
+    void caseRegExpTails2(RegExpTails2 node);
+    void caseRegExpTail1(RegExpTail1 node);
+    void caseConcat1(Concat1 node);
+    void caseUnExps1(UnExps1 node);
+    void caseUnExps2(UnExps2 node);
+    void caseUnExp1(UnExp1 node);
+    void caseBasic1(Basic1 node);
+    void caseBasic2(Basic2 node);
+    void caseBasic3(Basic3 node);
+    void caseBasic4(Basic4 node);
+    void caseBasic5(Basic5 node);
+    void casePChar1(PChar1 node);
+    void casePChar2(PChar2 node);
+    void casePChar3(PChar3 node);
+    void casePSet1(PSet1 node);
+    void casePSet2(PSet2 node);
+    void caseUnOpOpt1(UnOpOpt1 node);
+    void caseUnOpOpt2(UnOpOpt2 node);
+    void caseUnOp1(UnOp1 node);
+    void caseUnOp2(UnOp2 node);
+    void caseUnOp3(UnOp3 node);
+    void caseBinOp1(BinOp1 node);
+    void caseBinOp2(BinOp2 node);
+    void caseProductionsOpt1(ProductionsOpt1 node);
+    void caseProductionsOpt2(ProductionsOpt2 node);
+    void caseProductions1(Productions1 node);
+    void caseProds1(Prods1 node);
+    void caseProds2(Prods2 node);
+    void caseProd1(Prod1 node);
+    void caseAlts1(Alts1 node);
+    void caseAltsTails1(AltsTails1 node);
+    void caseAltsTails2(AltsTails2 node);
+    void caseAltsTail1(AltsTail1 node);
+    void caseAlt1(Alt1 node);
+    void caseAlt2(Alt2 node);
+    void caseAltNameOpt1(AltNameOpt1 node);
+    void caseAltNameOpt2(AltNameOpt2 node);
+    void caseAltName1(AltName1 node);
+    void caseElems1(Elems1 node);
+    void caseElems2(Elems2 node);
+    void caseElem1(Elem1 node);
+    void caseElemNameOpt1(ElemNameOpt1 node);
+    void caseElemNameOpt2(ElemNameOpt2 node);
+    void caseElemName1(ElemName1 node);
+    void caseSpecifierOpt1(SpecifierOpt1 node);
+    void caseSpecifierOpt2(SpecifierOpt2 node);
+    void caseSpecifier1(Specifier1 node);
+    void caseSpecifier2(Specifier2 node);
+    void caseStart1(Start1 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 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 caseTPkgId(TPkgId node);
+    void caseTBlank(TBlank node);
+    void caseTComment(TComment node);
+    void caseEOF(EOF node);
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analysis/AnalysisAdapter.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analysis/AnalysisAdapter.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analysis/AnalysisAdapter.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,789 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.analysis;
+
+import org.sablecc.sablecc.node.*;
+import java.util.*;
+import org.sablecc.sablecc.*;
+
+public class AnalysisAdapter implements Analysis
+{
+    private Map in;
+    private Map 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 TypedTreeMap(
+                NodeComparator.instance,
+                NodeCast.instance,
+                NoCast.instance);
+        }
+
+        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 TypedTreeMap(
+                NodeComparator.instance,
+                NodeCast.instance,
+                NoCast.instance);
+        }
+
+        if(out != null)
+        {
+            this.out.put(node, out);
+        }
+        else
+        {
+            this.out.remove(node);
+        }
+    }
+
+    public void defaultCase(Node node)
+    {
+    }
+
+    public void caseGrammar1(Grammar1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePackageOpt1(PackageOpt1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePackageOpt2(PackageOpt2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePackage1(Package1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePkgNameOpt1(PkgNameOpt1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePkgName1(PkgName1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePkgNameTails1(PkgNameTails1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePkgNameTails2(PkgNameTails2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePkgNameTail1(PkgNameTail1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePkgId1(PkgId1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePkgId2(PkgId2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePkgId3(PkgId3 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePkgId4(PkgId4 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePkgId5(PkgId5 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePkgId6(PkgId6 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePkgId7(PkgId7 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePkgId8(PkgId8 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePkgId9(PkgId9 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePkgId10(PkgId10 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseHelpersOpt1(HelpersOpt1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseHelpersOpt2(HelpersOpt2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseHelpers1(Helpers1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseHelperDefs1(HelperDefs1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseHelperDefs2(HelperDefs2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseHelperDef1(HelperDef1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseStatesOpt1(StatesOpt1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseStatesOpt2(StatesOpt2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseStates1(States1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseIdListOpt1(IdListOpt1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseIdList1(IdList1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseIdListTails1(IdListTails1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseIdListTails2(IdListTails2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseIdListTail1(IdListTail1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTokensOpt1(TokensOpt1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTokensOpt2(TokensOpt2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTokens1(Tokens1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTokenDefs1(TokenDefs1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTokenDefs2(TokenDefs2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTokenDef1(TokenDef1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseStateListOpt1(StateListOpt1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseStateListOpt2(StateListOpt2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseStateList1(StateList1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseStateListTails1(StateListTails1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseStateListTails2(StateListTails2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseStateListTail1(StateListTail1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTransitionOpt1(TransitionOpt1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTransitionOpt2(TransitionOpt2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTransition1(Transition1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseIgnTokensOpt1(IgnTokensOpt1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseIgnTokensOpt2(IgnTokensOpt2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseIgnTokens1(IgnTokens1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseLookAheadOpt1(LookAheadOpt1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseLookAheadOpt2(LookAheadOpt2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseLookAhead1(LookAhead1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseRegExp1(RegExp1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseRegExpTails1(RegExpTails1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseRegExpTails2(RegExpTails2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseRegExpTail1(RegExpTail1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseConcat1(Concat1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseUnExps1(UnExps1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseUnExps2(UnExps2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseUnExp1(UnExp1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseBasic1(Basic1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseBasic2(Basic2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseBasic3(Basic3 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseBasic4(Basic4 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseBasic5(Basic5 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePChar1(PChar1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePChar2(PChar2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePChar3(PChar3 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePSet1(PSet1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void casePSet2(PSet2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseUnOpOpt1(UnOpOpt1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseUnOpOpt2(UnOpOpt2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseUnOp1(UnOp1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseUnOp2(UnOp2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseUnOp3(UnOp3 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseBinOp1(BinOp1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseBinOp2(BinOp2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseProductionsOpt1(ProductionsOpt1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseProductionsOpt2(ProductionsOpt2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseProductions1(Productions1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseProds1(Prods1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseProds2(Prods2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseProd1(Prod1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAlts1(Alts1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAltsTails1(AltsTails1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAltsTails2(AltsTails2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAltsTail1(AltsTail1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAlt1(Alt1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAlt2(Alt2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAltNameOpt1(AltNameOpt1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAltNameOpt2(AltNameOpt2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAltName1(AltName1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseElems1(Elems1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseElems2(Elems2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseElem1(Elem1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseElemNameOpt1(ElemNameOpt1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseElemNameOpt2(ElemNameOpt2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseElemName1(ElemName1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseSpecifierOpt1(SpecifierOpt1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseSpecifierOpt2(SpecifierOpt2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseSpecifier1(Specifier1 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseSpecifier2(Specifier2 node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseStart1(Start1 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 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 caseTPkgId(TPkgId node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTBlank(TBlank node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTComment(TComment node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseEOF(EOF node)
+    {
+        defaultCase(node);
+    }
+
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analysis/DepthFirstAdapter.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analysis/DepthFirstAdapter.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/analysis/DepthFirstAdapter.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,1855 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.analysis;
+
+import org.sablecc.sablecc.node.*;
+
+public class DepthFirstAdapter extends AnalysisAdapter
+{
+    public void inGrammar1(Grammar1 node)
+    {
+    }
+
+    public void outGrammar1(Grammar1 node)
+    {
+    }
+
+    public void caseGrammar1(Grammar1 node)
+    {
+        inGrammar1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+        node.getNode4().apply(this);
+        node.getNode5().apply(this);
+        node.getNode6().apply(this);
+
+        outGrammar1(node);
+    }
+
+    public void inPackageOpt1(PackageOpt1 node)
+    {
+    }
+
+    public void outPackageOpt1(PackageOpt1 node)
+    {
+    }
+
+    public void casePackageOpt1(PackageOpt1 node)
+    {
+        inPackageOpt1(node);
+
+        node.getNode1().apply(this);
+
+        outPackageOpt1(node);
+    }
+
+    public void inPackageOpt2(PackageOpt2 node)
+    {
+    }
+
+    public void outPackageOpt2(PackageOpt2 node)
+    {
+    }
+
+    public void casePackageOpt2(PackageOpt2 node)
+    {
+        inPackageOpt2(node);
+
+
+        outPackageOpt2(node);
+    }
+
+    public void inPackage1(Package1 node)
+    {
+    }
+
+    public void outPackage1(Package1 node)
+    {
+    }
+
+    public void casePackage1(Package1 node)
+    {
+        inPackage1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outPackage1(node);
+    }
+
+    public void inPkgNameOpt1(PkgNameOpt1 node)
+    {
+    }
+
+    public void outPkgNameOpt1(PkgNameOpt1 node)
+    {
+    }
+
+    public void casePkgNameOpt1(PkgNameOpt1 node)
+    {
+        inPkgNameOpt1(node);
+
+        node.getNode1().apply(this);
+
+        outPkgNameOpt1(node);
+    }
+
+    public void inPkgName1(PkgName1 node)
+    {
+    }
+
+    public void outPkgName1(PkgName1 node)
+    {
+    }
+
+    public void casePkgName1(PkgName1 node)
+    {
+        inPkgName1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+
+        outPkgName1(node);
+    }
+
+    public void inPkgNameTails1(PkgNameTails1 node)
+    {
+    }
+
+    public void outPkgNameTails1(PkgNameTails1 node)
+    {
+    }
+
+    public void casePkgNameTails1(PkgNameTails1 node)
+    {
+        inPkgNameTails1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outPkgNameTails1(node);
+    }
+
+    public void inPkgNameTails2(PkgNameTails2 node)
+    {
+    }
+
+    public void outPkgNameTails2(PkgNameTails2 node)
+    {
+    }
+
+    public void casePkgNameTails2(PkgNameTails2 node)
+    {
+        inPkgNameTails2(node);
+
+
+        outPkgNameTails2(node);
+    }
+
+    public void inPkgNameTail1(PkgNameTail1 node)
+    {
+    }
+
+    public void outPkgNameTail1(PkgNameTail1 node)
+    {
+    }
+
+    public void casePkgNameTail1(PkgNameTail1 node)
+    {
+        inPkgNameTail1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outPkgNameTail1(node);
+    }
+
+    public void inPkgId1(PkgId1 node)
+    {
+    }
+
+    public void outPkgId1(PkgId1 node)
+    {
+    }
+
+    public void casePkgId1(PkgId1 node)
+    {
+        inPkgId1(node);
+
+        node.getNode1().apply(this);
+
+        outPkgId1(node);
+    }
+
+    public void inPkgId2(PkgId2 node)
+    {
+    }
+
+    public void outPkgId2(PkgId2 node)
+    {
+    }
+
+    public void casePkgId2(PkgId2 node)
+    {
+        inPkgId2(node);
+
+        node.getNode1().apply(this);
+
+        outPkgId2(node);
+    }
+
+    public void inPkgId3(PkgId3 node)
+    {
+    }
+
+    public void outPkgId3(PkgId3 node)
+    {
+    }
+
+    public void casePkgId3(PkgId3 node)
+    {
+        inPkgId3(node);
+
+        node.getNode1().apply(this);
+
+        outPkgId3(node);
+    }
+
+    public void inPkgId4(PkgId4 node)
+    {
+    }
+
+    public void outPkgId4(PkgId4 node)
+    {
+    }
+
+    public void casePkgId4(PkgId4 node)
+    {
+        inPkgId4(node);
+
+        node.getNode1().apply(this);
+
+        outPkgId4(node);
+    }
+
+    public void inPkgId5(PkgId5 node)
+    {
+    }
+
+    public void outPkgId5(PkgId5 node)
+    {
+    }
+
+    public void casePkgId5(PkgId5 node)
+    {
+        inPkgId5(node);
+
+        node.getNode1().apply(this);
+
+        outPkgId5(node);
+    }
+
+    public void inPkgId6(PkgId6 node)
+    {
+    }
+
+    public void outPkgId6(PkgId6 node)
+    {
+    }
+
+    public void casePkgId6(PkgId6 node)
+    {
+        inPkgId6(node);
+
+        node.getNode1().apply(this);
+
+        outPkgId6(node);
+    }
+
+    public void inPkgId7(PkgId7 node)
+    {
+    }
+
+    public void outPkgId7(PkgId7 node)
+    {
+    }
+
+    public void casePkgId7(PkgId7 node)
+    {
+        inPkgId7(node);
+
+        node.getNode1().apply(this);
+
+        outPkgId7(node);
+    }
+
+    public void inPkgId8(PkgId8 node)
+    {
+    }
+
+    public void outPkgId8(PkgId8 node)
+    {
+    }
+
+    public void casePkgId8(PkgId8 node)
+    {
+        inPkgId8(node);
+
+        node.getNode1().apply(this);
+
+        outPkgId8(node);
+    }
+
+    public void inPkgId9(PkgId9 node)
+    {
+    }
+
+    public void outPkgId9(PkgId9 node)
+    {
+    }
+
+    public void casePkgId9(PkgId9 node)
+    {
+        inPkgId9(node);
+
+        node.getNode1().apply(this);
+
+        outPkgId9(node);
+    }
+
+    public void inPkgId10(PkgId10 node)
+    {
+    }
+
+    public void outPkgId10(PkgId10 node)
+    {
+    }
+
+    public void casePkgId10(PkgId10 node)
+    {
+        inPkgId10(node);
+
+        node.getNode1().apply(this);
+
+        outPkgId10(node);
+    }
+
+    public void inHelpersOpt1(HelpersOpt1 node)
+    {
+    }
+
+    public void outHelpersOpt1(HelpersOpt1 node)
+    {
+    }
+
+    public void caseHelpersOpt1(HelpersOpt1 node)
+    {
+        inHelpersOpt1(node);
+
+        node.getNode1().apply(this);
+
+        outHelpersOpt1(node);
+    }
+
+    public void inHelpersOpt2(HelpersOpt2 node)
+    {
+    }
+
+    public void outHelpersOpt2(HelpersOpt2 node)
+    {
+    }
+
+    public void caseHelpersOpt2(HelpersOpt2 node)
+    {
+        inHelpersOpt2(node);
+
+
+        outHelpersOpt2(node);
+    }
+
+    public void inHelpers1(Helpers1 node)
+    {
+    }
+
+    public void outHelpers1(Helpers1 node)
+    {
+    }
+
+    public void caseHelpers1(Helpers1 node)
+    {
+        inHelpers1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outHelpers1(node);
+    }
+
+    public void inHelperDefs1(HelperDefs1 node)
+    {
+    }
+
+    public void outHelperDefs1(HelperDefs1 node)
+    {
+    }
+
+    public void caseHelperDefs1(HelperDefs1 node)
+    {
+        inHelperDefs1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outHelperDefs1(node);
+    }
+
+    public void inHelperDefs2(HelperDefs2 node)
+    {
+    }
+
+    public void outHelperDefs2(HelperDefs2 node)
+    {
+    }
+
+    public void caseHelperDefs2(HelperDefs2 node)
+    {
+        inHelperDefs2(node);
+
+
+        outHelperDefs2(node);
+    }
+
+    public void inHelperDef1(HelperDef1 node)
+    {
+    }
+
+    public void outHelperDef1(HelperDef1 node)
+    {
+    }
+
+    public void caseHelperDef1(HelperDef1 node)
+    {
+        inHelperDef1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+        node.getNode4().apply(this);
+
+        outHelperDef1(node);
+    }
+
+    public void inStatesOpt1(StatesOpt1 node)
+    {
+    }
+
+    public void outStatesOpt1(StatesOpt1 node)
+    {
+    }
+
+    public void caseStatesOpt1(StatesOpt1 node)
+    {
+        inStatesOpt1(node);
+
+        node.getNode1().apply(this);
+
+        outStatesOpt1(node);
+    }
+
+    public void inStatesOpt2(StatesOpt2 node)
+    {
+    }
+
+    public void outStatesOpt2(StatesOpt2 node)
+    {
+    }
+
+    public void caseStatesOpt2(StatesOpt2 node)
+    {
+        inStatesOpt2(node);
+
+
+        outStatesOpt2(node);
+    }
+
+    public void inStates1(States1 node)
+    {
+    }
+
+    public void outStates1(States1 node)
+    {
+    }
+
+    public void caseStates1(States1 node)
+    {
+        inStates1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+
+        outStates1(node);
+    }
+
+    public void inIdListOpt1(IdListOpt1 node)
+    {
+    }
+
+    public void outIdListOpt1(IdListOpt1 node)
+    {
+    }
+
+    public void caseIdListOpt1(IdListOpt1 node)
+    {
+        inIdListOpt1(node);
+
+        node.getNode1().apply(this);
+
+        outIdListOpt1(node);
+    }
+
+    public void inIdList1(IdList1 node)
+    {
+    }
+
+    public void outIdList1(IdList1 node)
+    {
+    }
+
+    public void caseIdList1(IdList1 node)
+    {
+        inIdList1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outIdList1(node);
+    }
+
+    public void inIdListTails1(IdListTails1 node)
+    {
+    }
+
+    public void outIdListTails1(IdListTails1 node)
+    {
+    }
+
+    public void caseIdListTails1(IdListTails1 node)
+    {
+        inIdListTails1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outIdListTails1(node);
+    }
+
+    public void inIdListTails2(IdListTails2 node)
+    {
+    }
+
+    public void outIdListTails2(IdListTails2 node)
+    {
+    }
+
+    public void caseIdListTails2(IdListTails2 node)
+    {
+        inIdListTails2(node);
+
+
+        outIdListTails2(node);
+    }
+
+    public void inIdListTail1(IdListTail1 node)
+    {
+    }
+
+    public void outIdListTail1(IdListTail1 node)
+    {
+    }
+
+    public void caseIdListTail1(IdListTail1 node)
+    {
+        inIdListTail1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outIdListTail1(node);
+    }
+
+    public void inTokensOpt1(TokensOpt1 node)
+    {
+    }
+
+    public void outTokensOpt1(TokensOpt1 node)
+    {
+    }
+
+    public void caseTokensOpt1(TokensOpt1 node)
+    {
+        inTokensOpt1(node);
+
+        node.getNode1().apply(this);
+
+        outTokensOpt1(node);
+    }
+
+    public void inTokensOpt2(TokensOpt2 node)
+    {
+    }
+
+    public void outTokensOpt2(TokensOpt2 node)
+    {
+    }
+
+    public void caseTokensOpt2(TokensOpt2 node)
+    {
+        inTokensOpt2(node);
+
+
+        outTokensOpt2(node);
+    }
+
+    public void inTokens1(Tokens1 node)
+    {
+    }
+
+    public void outTokens1(Tokens1 node)
+    {
+    }
+
+    public void caseTokens1(Tokens1 node)
+    {
+        inTokens1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outTokens1(node);
+    }
+
+    public void inTokenDefs1(TokenDefs1 node)
+    {
+    }
+
+    public void outTokenDefs1(TokenDefs1 node)
+    {
+    }
+
+    public void caseTokenDefs1(TokenDefs1 node)
+    {
+        inTokenDefs1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outTokenDefs1(node);
+    }
+
+    public void inTokenDefs2(TokenDefs2 node)
+    {
+    }
+
+    public void outTokenDefs2(TokenDefs2 node)
+    {
+    }
+
+    public void caseTokenDefs2(TokenDefs2 node)
+    {
+        inTokenDefs2(node);
+
+
+        outTokenDefs2(node);
+    }
+
+    public void inTokenDef1(TokenDef1 node)
+    {
+    }
+
+    public void outTokenDef1(TokenDef1 node)
+    {
+    }
+
+    public void caseTokenDef1(TokenDef1 node)
+    {
+        inTokenDef1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+        node.getNode4().apply(this);
+        node.getNode5().apply(this);
+        node.getNode6().apply(this);
+
+        outTokenDef1(node);
+    }
+
+    public void inStateListOpt1(StateListOpt1 node)
+    {
+    }
+
+    public void outStateListOpt1(StateListOpt1 node)
+    {
+    }
+
+    public void caseStateListOpt1(StateListOpt1 node)
+    {
+        inStateListOpt1(node);
+
+        node.getNode1().apply(this);
+
+        outStateListOpt1(node);
+    }
+
+    public void inStateListOpt2(StateListOpt2 node)
+    {
+    }
+
+    public void outStateListOpt2(StateListOpt2 node)
+    {
+    }
+
+    public void caseStateListOpt2(StateListOpt2 node)
+    {
+        inStateListOpt2(node);
+
+
+        outStateListOpt2(node);
+    }
+
+    public void inStateList1(StateList1 node)
+    {
+    }
+
+    public void outStateList1(StateList1 node)
+    {
+    }
+
+    public void caseStateList1(StateList1 node)
+    {
+        inStateList1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+        node.getNode4().apply(this);
+        node.getNode5().apply(this);
+
+        outStateList1(node);
+    }
+
+    public void inStateListTails1(StateListTails1 node)
+    {
+    }
+
+    public void outStateListTails1(StateListTails1 node)
+    {
+    }
+
+    public void caseStateListTails1(StateListTails1 node)
+    {
+        inStateListTails1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outStateListTails1(node);
+    }
+
+    public void inStateListTails2(StateListTails2 node)
+    {
+    }
+
+    public void outStateListTails2(StateListTails2 node)
+    {
+    }
+
+    public void caseStateListTails2(StateListTails2 node)
+    {
+        inStateListTails2(node);
+
+
+        outStateListTails2(node);
+    }
+
+    public void inStateListTail1(StateListTail1 node)
+    {
+    }
+
+    public void outStateListTail1(StateListTail1 node)
+    {
+    }
+
+    public void caseStateListTail1(StateListTail1 node)
+    {
+        inStateListTail1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+
+        outStateListTail1(node);
+    }
+
+    public void inTransitionOpt1(TransitionOpt1 node)
+    {
+    }
+
+    public void outTransitionOpt1(TransitionOpt1 node)
+    {
+    }
+
+    public void caseTransitionOpt1(TransitionOpt1 node)
+    {
+        inTransitionOpt1(node);
+
+        node.getNode1().apply(this);
+
+        outTransitionOpt1(node);
+    }
+
+    public void inTransitionOpt2(TransitionOpt2 node)
+    {
+    }
+
+    public void outTransitionOpt2(TransitionOpt2 node)
+    {
+    }
+
+    public void caseTransitionOpt2(TransitionOpt2 node)
+    {
+        inTransitionOpt2(node);
+
+
+        outTransitionOpt2(node);
+    }
+
+    public void inTransition1(Transition1 node)
+    {
+    }
+
+    public void outTransition1(Transition1 node)
+    {
+    }
+
+    public void caseTransition1(Transition1 node)
+    {
+        inTransition1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outTransition1(node);
+    }
+
+    public void inIgnTokensOpt1(IgnTokensOpt1 node)
+    {
+    }
+
+    public void outIgnTokensOpt1(IgnTokensOpt1 node)
+    {
+    }
+
+    public void caseIgnTokensOpt1(IgnTokensOpt1 node)
+    {
+        inIgnTokensOpt1(node);
+
+        node.getNode1().apply(this);
+
+        outIgnTokensOpt1(node);
+    }
+
+    public void inIgnTokensOpt2(IgnTokensOpt2 node)
+    {
+    }
+
+    public void outIgnTokensOpt2(IgnTokensOpt2 node)
+    {
+    }
+
+    public void caseIgnTokensOpt2(IgnTokensOpt2 node)
+    {
+        inIgnTokensOpt2(node);
+
+
+        outIgnTokensOpt2(node);
+    }
+
+    public void inIgnTokens1(IgnTokens1 node)
+    {
+    }
+
+    public void outIgnTokens1(IgnTokens1 node)
+    {
+    }
+
+    public void caseIgnTokens1(IgnTokens1 node)
+    {
+        inIgnTokens1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+        node.getNode4().apply(this);
+
+        outIgnTokens1(node);
+    }
+
+    public void inLookAheadOpt1(LookAheadOpt1 node)
+    {
+    }
+
+    public void outLookAheadOpt1(LookAheadOpt1 node)
+    {
+    }
+
+    public void caseLookAheadOpt1(LookAheadOpt1 node)
+    {
+        inLookAheadOpt1(node);
+
+        node.getNode1().apply(this);
+
+        outLookAheadOpt1(node);
+    }
+
+    public void inLookAheadOpt2(LookAheadOpt2 node)
+    {
+    }
+
+    public void outLookAheadOpt2(LookAheadOpt2 node)
+    {
+    }
+
+    public void caseLookAheadOpt2(LookAheadOpt2 node)
+    {
+        inLookAheadOpt2(node);
+
+
+        outLookAheadOpt2(node);
+    }
+
+    public void inLookAhead1(LookAhead1 node)
+    {
+    }
+
+    public void outLookAhead1(LookAhead1 node)
+    {
+    }
+
+    public void caseLookAhead1(LookAhead1 node)
+    {
+        inLookAhead1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outLookAhead1(node);
+    }
+
+    public void inRegExp1(RegExp1 node)
+    {
+    }
+
+    public void outRegExp1(RegExp1 node)
+    {
+    }
+
+    public void caseRegExp1(RegExp1 node)
+    {
+        inRegExp1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outRegExp1(node);
+    }
+
+    public void inRegExpTails1(RegExpTails1 node)
+    {
+    }
+
+    public void outRegExpTails1(RegExpTails1 node)
+    {
+    }
+
+    public void caseRegExpTails1(RegExpTails1 node)
+    {
+        inRegExpTails1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outRegExpTails1(node);
+    }
+
+    public void inRegExpTails2(RegExpTails2 node)
+    {
+    }
+
+    public void outRegExpTails2(RegExpTails2 node)
+    {
+    }
+
+    public void caseRegExpTails2(RegExpTails2 node)
+    {
+        inRegExpTails2(node);
+
+
+        outRegExpTails2(node);
+    }
+
+    public void inRegExpTail1(RegExpTail1 node)
+    {
+    }
+
+    public void outRegExpTail1(RegExpTail1 node)
+    {
+    }
+
+    public void caseRegExpTail1(RegExpTail1 node)
+    {
+        inRegExpTail1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outRegExpTail1(node);
+    }
+
+    public void inConcat1(Concat1 node)
+    {
+    }
+
+    public void outConcat1(Concat1 node)
+    {
+    }
+
+    public void caseConcat1(Concat1 node)
+    {
+        inConcat1(node);
+
+        node.getNode1().apply(this);
+
+        outConcat1(node);
+    }
+
+    public void inUnExps1(UnExps1 node)
+    {
+    }
+
+    public void outUnExps1(UnExps1 node)
+    {
+    }
+
+    public void caseUnExps1(UnExps1 node)
+    {
+        inUnExps1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outUnExps1(node);
+    }
+
+    public void inUnExps2(UnExps2 node)
+    {
+    }
+
+    public void outUnExps2(UnExps2 node)
+    {
+    }
+
+    public void caseUnExps2(UnExps2 node)
+    {
+        inUnExps2(node);
+
+
+        outUnExps2(node);
+    }
+
+    public void inUnExp1(UnExp1 node)
+    {
+    }
+
+    public void outUnExp1(UnExp1 node)
+    {
+    }
+
+    public void caseUnExp1(UnExp1 node)
+    {
+        inUnExp1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outUnExp1(node);
+    }
+
+    public void inBasic1(Basic1 node)
+    {
+    }
+
+    public void outBasic1(Basic1 node)
+    {
+    }
+
+    public void caseBasic1(Basic1 node)
+    {
+        inBasic1(node);
+
+        node.getNode1().apply(this);
+
+        outBasic1(node);
+    }
+
+    public void inBasic2(Basic2 node)
+    {
+    }
+
+    public void outBasic2(Basic2 node)
+    {
+    }
+
+    public void caseBasic2(Basic2 node)
+    {
+        inBasic2(node);
+
+        node.getNode1().apply(this);
+
+        outBasic2(node);
+    }
+
+    public void inBasic3(Basic3 node)
+    {
+    }
+
+    public void outBasic3(Basic3 node)
+    {
+    }
+
+    public void caseBasic3(Basic3 node)
+    {
+        inBasic3(node);
+
+        node.getNode1().apply(this);
+
+        outBasic3(node);
+    }
+
+    public void inBasic4(Basic4 node)
+    {
+    }
+
+    public void outBasic4(Basic4 node)
+    {
+    }
+
+    public void caseBasic4(Basic4 node)
+    {
+        inBasic4(node);
+
+        node.getNode1().apply(this);
+
+        outBasic4(node);
+    }
+
+    public void inBasic5(Basic5 node)
+    {
+    }
+
+    public void outBasic5(Basic5 node)
+    {
+    }
+
+    public void caseBasic5(Basic5 node)
+    {
+        inBasic5(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+
+        outBasic5(node);
+    }
+
+    public void inPChar1(PChar1 node)
+    {
+    }
+
+    public void outPChar1(PChar1 node)
+    {
+    }
+
+    public void casePChar1(PChar1 node)
+    {
+        inPChar1(node);
+
+        node.getNode1().apply(this);
+
+        outPChar1(node);
+    }
+
+    public void inPChar2(PChar2 node)
+    {
+    }
+
+    public void outPChar2(PChar2 node)
+    {
+    }
+
+    public void casePChar2(PChar2 node)
+    {
+        inPChar2(node);
+
+        node.getNode1().apply(this);
+
+        outPChar2(node);
+    }
+
+    public void inPChar3(PChar3 node)
+    {
+    }
+
+    public void outPChar3(PChar3 node)
+    {
+    }
+
+    public void casePChar3(PChar3 node)
+    {
+        inPChar3(node);
+
+        node.getNode1().apply(this);
+
+        outPChar3(node);
+    }
+
+    public void inPSet1(PSet1 node)
+    {
+    }
+
+    public void outPSet1(PSet1 node)
+    {
+    }
+
+    public void casePSet1(PSet1 node)
+    {
+        inPSet1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+        node.getNode4().apply(this);
+        node.getNode5().apply(this);
+
+        outPSet1(node);
+    }
+
+    public void inPSet2(PSet2 node)
+    {
+    }
+
+    public void outPSet2(PSet2 node)
+    {
+    }
+
+    public void casePSet2(PSet2 node)
+    {
+        inPSet2(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+        node.getNode4().apply(this);
+        node.getNode5().apply(this);
+
+        outPSet2(node);
+    }
+
+    public void inUnOpOpt1(UnOpOpt1 node)
+    {
+    }
+
+    public void outUnOpOpt1(UnOpOpt1 node)
+    {
+    }
+
+    public void caseUnOpOpt1(UnOpOpt1 node)
+    {
+        inUnOpOpt1(node);
+
+        node.getNode1().apply(this);
+
+        outUnOpOpt1(node);
+    }
+
+    public void inUnOpOpt2(UnOpOpt2 node)
+    {
+    }
+
+    public void outUnOpOpt2(UnOpOpt2 node)
+    {
+    }
+
+    public void caseUnOpOpt2(UnOpOpt2 node)
+    {
+        inUnOpOpt2(node);
+
+
+        outUnOpOpt2(node);
+    }
+
+    public void inUnOp1(UnOp1 node)
+    {
+    }
+
+    public void outUnOp1(UnOp1 node)
+    {
+    }
+
+    public void caseUnOp1(UnOp1 node)
+    {
+        inUnOp1(node);
+
+        node.getNode1().apply(this);
+
+        outUnOp1(node);
+    }
+
+    public void inUnOp2(UnOp2 node)
+    {
+    }
+
+    public void outUnOp2(UnOp2 node)
+    {
+    }
+
+    public void caseUnOp2(UnOp2 node)
+    {
+        inUnOp2(node);
+
+        node.getNode1().apply(this);
+
+        outUnOp2(node);
+    }
+
+    public void inUnOp3(UnOp3 node)
+    {
+    }
+
+    public void outUnOp3(UnOp3 node)
+    {
+    }
+
+    public void caseUnOp3(UnOp3 node)
+    {
+        inUnOp3(node);
+
+        node.getNode1().apply(this);
+
+        outUnOp3(node);
+    }
+
+    public void inBinOp1(BinOp1 node)
+    {
+    }
+
+    public void outBinOp1(BinOp1 node)
+    {
+    }
+
+    public void caseBinOp1(BinOp1 node)
+    {
+        inBinOp1(node);
+
+        node.getNode1().apply(this);
+
+        outBinOp1(node);
+    }
+
+    public void inBinOp2(BinOp2 node)
+    {
+    }
+
+    public void outBinOp2(BinOp2 node)
+    {
+    }
+
+    public void caseBinOp2(BinOp2 node)
+    {
+        inBinOp2(node);
+
+        node.getNode1().apply(this);
+
+        outBinOp2(node);
+    }
+
+    public void inProductionsOpt1(ProductionsOpt1 node)
+    {
+    }
+
+    public void outProductionsOpt1(ProductionsOpt1 node)
+    {
+    }
+
+    public void caseProductionsOpt1(ProductionsOpt1 node)
+    {
+        inProductionsOpt1(node);
+
+        node.getNode1().apply(this);
+
+        outProductionsOpt1(node);
+    }
+
+    public void inProductionsOpt2(ProductionsOpt2 node)
+    {
+    }
+
+    public void outProductionsOpt2(ProductionsOpt2 node)
+    {
+    }
+
+    public void caseProductionsOpt2(ProductionsOpt2 node)
+    {
+        inProductionsOpt2(node);
+
+
+        outProductionsOpt2(node);
+    }
+
+    public void inProductions1(Productions1 node)
+    {
+    }
+
+    public void outProductions1(Productions1 node)
+    {
+    }
+
+    public void caseProductions1(Productions1 node)
+    {
+        inProductions1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outProductions1(node);
+    }
+
+    public void inProds1(Prods1 node)
+    {
+    }
+
+    public void outProds1(Prods1 node)
+    {
+    }
+
+    public void caseProds1(Prods1 node)
+    {
+        inProds1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outProds1(node);
+    }
+
+    public void inProds2(Prods2 node)
+    {
+    }
+
+    public void outProds2(Prods2 node)
+    {
+    }
+
+    public void caseProds2(Prods2 node)
+    {
+        inProds2(node);
+
+
+        outProds2(node);
+    }
+
+    public void inProd1(Prod1 node)
+    {
+    }
+
+    public void outProd1(Prod1 node)
+    {
+    }
+
+    public void caseProd1(Prod1 node)
+    {
+        inProd1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+        node.getNode4().apply(this);
+
+        outProd1(node);
+    }
+
+    public void inAlts1(Alts1 node)
+    {
+    }
+
+    public void outAlts1(Alts1 node)
+    {
+    }
+
+    public void caseAlts1(Alts1 node)
+    {
+        inAlts1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outAlts1(node);
+    }
+
+    public void inAltsTails1(AltsTails1 node)
+    {
+    }
+
+    public void outAltsTails1(AltsTails1 node)
+    {
+    }
+
+    public void caseAltsTails1(AltsTails1 node)
+    {
+        inAltsTails1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outAltsTails1(node);
+    }
+
+    public void inAltsTails2(AltsTails2 node)
+    {
+    }
+
+    public void outAltsTails2(AltsTails2 node)
+    {
+    }
+
+    public void caseAltsTails2(AltsTails2 node)
+    {
+        inAltsTails2(node);
+
+
+        outAltsTails2(node);
+    }
+
+    public void inAltsTail1(AltsTail1 node)
+    {
+    }
+
+    public void outAltsTail1(AltsTail1 node)
+    {
+    }
+
+    public void caseAltsTail1(AltsTail1 node)
+    {
+        inAltsTail1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outAltsTail1(node);
+    }
+
+    public void inAlt1(Alt1 node)
+    {
+    }
+
+    public void outAlt1(Alt1 node)
+    {
+    }
+
+    public void caseAlt1(Alt1 node)
+    {
+        inAlt1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outAlt1(node);
+    }
+
+    public void inAlt2(Alt2 node)
+    {
+    }
+
+    public void outAlt2(Alt2 node)
+    {
+    }
+
+    public void caseAlt2(Alt2 node)
+    {
+        inAlt2(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+        node.getNode4().apply(this);
+
+        outAlt2(node);
+    }
+
+    public void inAltNameOpt1(AltNameOpt1 node)
+    {
+    }
+
+    public void outAltNameOpt1(AltNameOpt1 node)
+    {
+    }
+
+    public void caseAltNameOpt1(AltNameOpt1 node)
+    {
+        inAltNameOpt1(node);
+
+        node.getNode1().apply(this);
+
+        outAltNameOpt1(node);
+    }
+
+    public void inAltNameOpt2(AltNameOpt2 node)
+    {
+    }
+
+    public void outAltNameOpt2(AltNameOpt2 node)
+    {
+    }
+
+    public void caseAltNameOpt2(AltNameOpt2 node)
+    {
+        inAltNameOpt2(node);
+
+
+        outAltNameOpt2(node);
+    }
+
+    public void inAltName1(AltName1 node)
+    {
+    }
+
+    public void outAltName1(AltName1 node)
+    {
+    }
+
+    public void caseAltName1(AltName1 node)
+    {
+        inAltName1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+
+        outAltName1(node);
+    }
+
+    public void inElems1(Elems1 node)
+    {
+    }
+
+    public void outElems1(Elems1 node)
+    {
+    }
+
+    public void caseElems1(Elems1 node)
+    {
+        inElems1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outElems1(node);
+    }
+
+    public void inElems2(Elems2 node)
+    {
+    }
+
+    public void outElems2(Elems2 node)
+    {
+    }
+
+    public void caseElems2(Elems2 node)
+    {
+        inElems2(node);
+
+
+        outElems2(node);
+    }
+
+    public void inElem1(Elem1 node)
+    {
+    }
+
+    public void outElem1(Elem1 node)
+    {
+    }
+
+    public void caseElem1(Elem1 node)
+    {
+        inElem1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+        node.getNode4().apply(this);
+
+        outElem1(node);
+    }
+
+    public void inElemNameOpt1(ElemNameOpt1 node)
+    {
+    }
+
+    public void outElemNameOpt1(ElemNameOpt1 node)
+    {
+    }
+
+    public void caseElemNameOpt1(ElemNameOpt1 node)
+    {
+        inElemNameOpt1(node);
+
+        node.getNode1().apply(this);
+
+        outElemNameOpt1(node);
+    }
+
+    public void inElemNameOpt2(ElemNameOpt2 node)
+    {
+    }
+
+    public void outElemNameOpt2(ElemNameOpt2 node)
+    {
+    }
+
+    public void caseElemNameOpt2(ElemNameOpt2 node)
+    {
+        inElemNameOpt2(node);
+
+
+        outElemNameOpt2(node);
+    }
+
+    public void inElemName1(ElemName1 node)
+    {
+    }
+
+    public void outElemName1(ElemName1 node)
+    {
+    }
+
+    public void caseElemName1(ElemName1 node)
+    {
+        inElemName1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+        node.getNode3().apply(this);
+        node.getNode4().apply(this);
+
+        outElemName1(node);
+    }
+
+    public void inSpecifierOpt1(SpecifierOpt1 node)
+    {
+    }
+
+    public void outSpecifierOpt1(SpecifierOpt1 node)
+    {
+    }
+
+    public void caseSpecifierOpt1(SpecifierOpt1 node)
+    {
+        inSpecifierOpt1(node);
+
+        node.getNode1().apply(this);
+
+        outSpecifierOpt1(node);
+    }
+
+    public void inSpecifierOpt2(SpecifierOpt2 node)
+    {
+    }
+
+    public void outSpecifierOpt2(SpecifierOpt2 node)
+    {
+    }
+
+    public void caseSpecifierOpt2(SpecifierOpt2 node)
+    {
+        inSpecifierOpt2(node);
+
+
+        outSpecifierOpt2(node);
+    }
+
+    public void inSpecifier1(Specifier1 node)
+    {
+    }
+
+    public void outSpecifier1(Specifier1 node)
+    {
+    }
+
+    public void caseSpecifier1(Specifier1 node)
+    {
+        inSpecifier1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outSpecifier1(node);
+    }
+
+    public void inSpecifier2(Specifier2 node)
+    {
+    }
+
+    public void outSpecifier2(Specifier2 node)
+    {
+    }
+
+    public void caseSpecifier2(Specifier2 node)
+    {
+        inSpecifier2(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outSpecifier2(node);
+    }
+
+    public void inStart1(Start1 node)
+    {
+    }
+
+    public void outStart1(Start1 node)
+    {
+    }
+
+    public void caseStart1(Start1 node)
+    {
+        inStart1(node);
+
+        node.getNode1().apply(this);
+        node.getNode2().apply(this);
+
+        outStart1(node);
+    }
+
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/lexer/Lexer.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/lexer/Lexer.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/lexer/Lexer.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,704 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.lexer;
+
+import java.io.*;
+import java.util.Stack;
+import java.util.Vector;
+
+import java.util.*;
+import org.sablecc.sablecc.node.*;
+
+public final class Lexer
+{
+    private final Reader in;
+
+    public Lexer(Reader in)
+    {
+        this.in = in;
+    }
+
+    private Token token;
+
+    public Token peek() throws LexerException, IOException
+    {
+        if(token == null)
+        {
+            token = getToken();
+        }
+
+        return token;
+    }
+
+    public Token next() throws LexerException, IOException
+    {
+        if(token == null)
+        {
+            return getToken();
+        }
+
+        Token result = token;
+        token = null;
+        return result;
+    }
+
+    private int line;
+    private int pos;
+
+    private boolean cr;
+
+    private Token getToken() throws IOException, LexerException
+    {
+        int 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;
+
+        StringBuffer text = new StringBuffer();
+
+        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);
+
+                int oldState = state;
+                state = -1;
+
+                int low = 0;
+                int high = gotoTable[oldState].length - 1;
+
+                while(low <= high)
+                {
+                    int middle = (low + high) / 2;
+
+                    if(c < gotoTable[oldState][middle][0])
+                    {
+                        high = middle - 1;
+                    }
+                    else if(c > gotoTable[oldState][middle][1])
+                    {
+                        low = middle + 1;
+                    }
+                    else
+                    {
+                        state = gotoTable[oldState][middle][2];
+                        break;
+                    }
+                }
+            }
+            else
+            {
+                state = -1;
+            }
+
+            if(state >= 0)
+            {
+                if(accept[state] != -1)
+                {
+                    accept_state = state;
+                    accept_token = accept[state];
+                    accept_length = text.length();
+                    accept_pos = pos;
+                    accept_line = line;
+                }
+            }
+            else
+            {
+                if(accept_state != -1)
+                {
+                    switch(accept_token)
+                    {
+                    case 0:
+                        {
+                            TPackage token = new TPackage();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 1:
+                        {
+                            TStates token = new TStates();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 2:
+                        {
+                            THelpers token = new THelpers();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 3:
+                        {
+                            TTokens token = new TTokens();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 4:
+                        {
+                            TIgnored token = new TIgnored();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 5:
+                        {
+                            TProductions token = new TProductions();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 6:
+                        {
+                            TTokenSpecifier token = new TTokenSpecifier();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 7:
+                        {
+                            TProductionSpecifier token = new TProductionSpecifier();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 8:
+                        {
+                            TDot token = new TDot();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 9:
+                        {
+                            TDDot token = new TDDot();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 10:
+                        {
+                            TSemicolon token = new TSemicolon();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 11:
+                        {
+                            TEqual token = new TEqual();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 12:
+                        {
+                            TLBkt token = new TLBkt();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 13:
+                        {
+                            TRBkt token = new TRBkt();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 14:
+                        {
+                            TLPar token = new TLPar();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 15:
+                        {
+                            TRPar token = new TRPar();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 16:
+                        {
+                            TLBrace token = new TLBrace();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 17:
+                        {
+                            TRBrace token = new TRBrace();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 18:
+                        {
+                            TPlus token = new TPlus();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 19:
+                        {
+                            TMinus token = new TMinus();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 20:
+                        {
+                            TQMark token = new TQMark();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 21:
+                        {
+                            TStar token = new TStar();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 22:
+                        {
+                            TBar token = new TBar();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 23:
+                        {
+                            TComma token = new TComma();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 24:
+                        {
+                            TSlash token = new TSlash();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 25:
+                        {
+                            TArrow token = new TArrow();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 26:
+                        {
+                            TColon token = new TColon();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 27:
+                        {
+                            TId token = new TId();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 28:
+                        {
+                            TChar token = new TChar();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 29:
+                        {
+                            TDecChar token = new TDecChar();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 30:
+                        {
+                            THexChar token = new THexChar();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 31:
+                        {
+                            TString token = new TString();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 32:
+                        {
+                            TPkgId token = new TPkgId();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 33:
+                        {
+                            TBlank token = new TBlank();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(accept_length));
+                            pos = accept_pos;
+                            line = accept_line;
+                            return token;
+                        }
+                    case 34:
+                        {
+                            TComment token = new TComment();
+                            token.setPos(start_pos + 1);
+                            token.setLine(start_line + 1);
+                            token.setText(text.toString().substring(0, accept_length));
+                            pushBack(text.toString().substring(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();
+                        token.setPos(start_pos + 1);
+                        token.setLine(start_line + 1);
+                        return token;
+                    }
+                }
+            }
+        }
+    }
+
+    private final Stack chars = new Stack();
+    private boolean eof;
+
+    private int getChar() throws IOException
+    {
+        if(!chars.empty())
+        {
+            return ((Integer) chars.pop()).intValue();
+        }
+
+        if(eof)
+        {
+            return -1;
+        }
+
+        int result = in.read();
+
+        if(result == -1)
+        {
+            eof = true;
+        }
+
+        return result;
+    }
+
+    private void pushBack(String text)
+    {
+        for(int i = text.length() - 1; i >= 0; i--)
+        {
+            chars.push(new Integer((int) text.charAt(i)));
+        }
+    }
+
+    private static int[][][] gotoTable =
+    {
+        {{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, 71, 21}, {72, 72, 22}, {73, 73, 23}, {74, 79, 21}, {80, 80, 24}, {81, 82, 21}, {83, 83, 25}, {84, 84, 26}, {85, 90, 21}, {91, 91, 27}, {93, 93, 28}, {95, 95, 29}, {97, 122, 30}, {123, 123, 31}, {124, 124, 32}, {125, 125, 33}, },
+        {{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, },
+        {{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, },
+        {{9, 9, 1}, {10, 10, 34}, {13, 13, 3}, {32, 32, 4}, },
+        {{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
+        {{0, 9, 40}, {11, 12, 40}, {14, 38, 40}, {39, 39, 41}, {40, 65535, 40}, },
+        {},
+        {},
+        {},
+        {},
+        {},
+        {{62, 62, 42}, },
+        {{46, 46, 43}, },
+        {{42, 42, 44}, {47, 47, 45}, },
+        {{48, 57, 16}, {88, 88, 46}, {120, 120, 47}, },
+        {{48, 57, 16}, },
+        {},
+        {},
+        {},
+        {},
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 100, 39}, {101, 101, 48}, {102, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 102, 39}, {103, 103, 49}, {104, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 97, 50}, {98, 113, 39}, {114, 114, 51}, {115, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 115, 39}, {116, 116, 52}, {117, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 110, 39}, {111, 111, 53}, {112, 122, 39}, },
+        {},
+        {},
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 54}, {65, 90, 37}, {95, 95, 55}, {97, 122, 56}, },
+        {},
+        {},
+        {},
+        {{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
+        {{0, 9, 57}, {11, 12, 57}, {14, 38, 57}, {39, 39, 58}, {40, 65535, 57}, },
+        {{39, 39, 59}, },
+        {},
+        {},
+        {{0, 41, 60}, {42, 42, 61}, {43, 65535, 60}, },
+        {{0, 9, 62}, {10, 10, 63}, {11, 12, 62}, {13, 13, 64}, {14, 65535, 62}, },
+        {{48, 57, 65}, {65, 70, 65}, {97, 102, 65}, },
+        {{48, 57, 65}, {65, 70, 65}, {97, 102, 65}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 107, 39}, {108, 108, 66}, {109, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 109, 39}, {110, 110, 67}, {111, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 98, 39}, {99, 99, 68}, {100, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 110, 39}, {111, 111, 69}, {112, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 97, 70}, {98, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 106, 39}, {107, 107, 71}, {108, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 54}, {65, 90, 37}, {95, 95, 55}, {97, 122, 56}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 72}, },
+        {{36, 36, 35}, {48, 57, 54}, {65, 90, 37}, {95, 95, 55}, {97, 122, 56}, },
+        {{0, 9, 57}, {11, 12, 57}, {14, 38, 57}, {39, 39, 73}, {40, 65535, 57}, },
+        {},
+        {},
+        {{0, 41, 60}, {42, 42, 61}, {43, 65535, 60}, },
+        {{0, 41, 74}, {42, 42, 61}, {43, 46, 74}, {47, 47, 75}, {48, 65535, 74}, },
+        {{0, 9, 62}, {10, 10, 63}, {11, 12, 62}, {13, 13, 64}, {14, 65535, 62}, },
+        {},
+        {{10, 10, 76}, },
+        {{48, 57, 65}, {65, 70, 65}, {97, 102, 65}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 111, 39}, {112, 112, 77}, {113, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 110, 39}, {111, 111, 78}, {112, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 106, 39}, {107, 107, 79}, {108, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 99, 39}, {100, 100, 80}, {101, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 115, 39}, {116, 116, 81}, {117, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 100, 39}, {101, 101, 82}, {102, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 83}, {65, 90, 37}, {95, 95, 55}, {97, 122, 84}, },
+        {},
+        {{0, 41, 85}, {42, 42, 86}, {43, 65535, 85}, },
+        {},
+        {},
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 100, 39}, {101, 101, 87}, {102, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 113, 39}, {114, 114, 88}, {115, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 97, 89}, {98, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 116, 39}, {117, 117, 90}, {118, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 100, 39}, {101, 101, 91}, {102, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 109, 39}, {110, 110, 92}, {111, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 83}, {65, 90, 37}, {95, 95, 55}, {97, 122, 84}, },
+        {{36, 36, 35}, {48, 57, 83}, {65, 90, 37}, {95, 95, 55}, {97, 122, 84}, },
+        {{0, 41, 85}, {42, 42, 86}, {43, 65535, 85}, },
+        {{0, 41, 74}, {42, 42, 86}, {43, 46, 74}, {47, 47, 75}, {48, 65535, 74}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 113, 39}, {114, 114, 93}, {115, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 100, 39}, {101, 101, 94}, {102, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 102, 39}, {103, 103, 95}, {104, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 98, 39}, {99, 99, 96}, {100, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 114, 39}, {115, 115, 97}, {116, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 114, 39}, {115, 115, 98}, {116, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 114, 39}, {115, 115, 99}, {116, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 99, 39}, {100, 100, 100}, {101, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 100, 39}, {101, 101, 101}, {102, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 115, 39}, {116, 116, 102}, {117, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 104, 39}, {105, 105, 103}, {106, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 110, 39}, {111, 111, 104}, {112, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 109, 39}, {110, 110, 105}, {111, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 114, 39}, {115, 115, 106}, {116, 122, 39}, },
+        {{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
+    };
+
+    private static int[] accept =
+    {
+        -1, 33, 33, 33, 33, 32, -1, 14, 15, 21, 18, 23, 19, 8, 24, 29, 29, 26, 10, 11, 20, 32, 32, 32, 7, 32, 6, 12, 13, 32, 27, 16, 22, 17, 33, 32, 32, 32, 32, 32, -1, -1, 25, 9, -1, -1, -1, -1, 32, 32, 32, 32, 32, 32, 27, 32, 27, -1, 28, 28, -1, -1, -1, 34, 34, 30, 32, 32, 32, 32, 32, 32, 27, 31, -1, 34, 34, 32, 32, 32, 32, 32, 32, 27, 27, -1, -1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 3, 2, 4, 0, 32, 32, 32, 32, 5,
+    };
+}

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/lexer/LexerException.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/lexer/LexerException.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/lexer/LexerException.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,16 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.lexer;
+
+public class LexerException extends Exception
+{
+    LexerException(String message)
+    {
+        super(message);
+    }
+}

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/lexer.txt
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/lexer.txt	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/lexer.txt	2012-07-12 16:49:25 UTC (rev 248)
@@ -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$;
+
+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 java.util.*;
+import $1$.*;
+
+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();
+
+    protected void filter() throws LexerException, IOException
+    {
+    }
+
+    public Lexer(PushbackReader in)
+    {
+        this.in = in;
+
+        if(gotoTable == null)
+        {
+            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.");
+            }
+        }
+    }
+
+    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)
+                    {
+
+$
+
+Macro:LexerVariableToken
+                    case $0$:
+                        {
+                            Token token = new$0$(
+                                getText(accept_length),
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            pos = accept_pos;
+                            line = accept_line;
+
+$
+
+Macro:LexerFixedToken
+                    case $0$:
+                        {
+                            Token token = new$0$(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            pos = accept_pos;
+                            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(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;
+                    }
+                }
+            }
+        }
+    }
+
+
+$
+
+Macro:LexerNewVariableToken
+    Token new$0$(String text, int line, int pos) { return new $1$(text, line, pos); }
+
+$
+
+Macro:LexerNewFixedToken
+    Token new$0$(int line, int pos) { return new $1$(line, pos); }
+
+$
+
+Macro:LexerBody2
+
+    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;
+/*  {
+
+$
+
+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(int id)
+        {
+            this.id = id;
+        }
+
+        public int id()
+        {
+            return id;
+        }
+    }
+
+$
+
+Macro:LexerTail
+}
+
+$
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class Alt extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alt1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alt1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alt1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Alt1 extends Alt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAlt1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private AltNameOpt node1;
+
+    public AltNameOpt getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(AltNameOpt node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private Elems node2;
+
+    public Elems getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(Elems node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alt2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alt2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alt2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,149 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Alt2 extends Alt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAlt2(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2
+            + node3
+            + node4;
+    }
+
+    private TLPar node1;
+
+    public TLPar getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TLPar node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private AltNameOpt node2;
+
+    public AltNameOpt getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(AltNameOpt node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    private Elems node3;
+
+    public Elems getNode3()
+    {
+        return node3;
+    }
+
+    public void setNode3(Elems node)
+    {
+        if(node3 != null)
+        {
+            node3.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node3 = node;
+    }
+
+    private TRPar node4;
+
+    public TRPar getNode4()
+    {
+        return node4;
+    }
+
+    public void setNode4(TRPar node)
+    {
+        if(node4 != null)
+        {
+            node4.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node4 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+        if(node3 == child)
+        {
+            node3 = null;
+        }
+
+        if(node4 == child)
+        {
+            node4 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltName.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltName.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltName.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class AltName extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltName1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltName1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltName1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,119 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class AltName1 extends AltName
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAltName1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2
+            + node3;
+    }
+
+    private TLBrace node1;
+
+    public TLBrace getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TLBrace node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private TId node2;
+
+    public TId getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(TId node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    private TRBrace node3;
+
+    public TRBrace getNode3()
+    {
+        return node3;
+    }
+
+    public void setNode3(TRBrace node)
+    {
+        if(node3 != null)
+        {
+            node3.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node3 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+        if(node3 == child)
+        {
+            node3 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltNameOpt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltNameOpt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltNameOpt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class AltNameOpt extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltNameOpt1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltNameOpt1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltNameOpt1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class AltNameOpt1 extends AltNameOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAltNameOpt1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private AltName node1;
+
+    public AltName getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(AltName node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltNameOpt2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltNameOpt2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltNameOpt2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class AltNameOpt2 extends AltNameOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAltNameOpt2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alts.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alts.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alts.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class Alts extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alts1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alts1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Alts1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Alts1 extends Alts
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAlts1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private Alt node1;
+
+    public Alt getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(Alt node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private AltsTails node2;
+
+    public AltsTails getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(AltsTails node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTail.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTail.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTail.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class AltsTail extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTail1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTail1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTail1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class AltsTail1 extends AltsTail
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAltsTail1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private TBar node1;
+
+    public TBar getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TBar node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private Alt node2;
+
+    public Alt getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(Alt node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTails.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTails.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTails.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class AltsTails extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTails1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTails1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTails1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class AltsTails1 extends AltsTails
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAltsTails1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private AltsTail node1;
+
+    public AltsTail getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(AltsTail node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private AltsTails node2;
+
+    public AltsTails getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(AltsTails node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTails2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTails2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/AltsTails2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class AltsTails2 extends AltsTails
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAltsTails2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class Basic extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Basic1 extends Basic
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseBasic1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private PChar node1;
+
+    public PChar getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(PChar node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Basic2 extends Basic
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseBasic2(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private PSet node1;
+
+    public PSet getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(PSet node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic3.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic3.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic3.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Basic3 extends Basic
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseBasic3(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TString node1;
+
+    public TString getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TString node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic4.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic4.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic4.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Basic4 extends Basic
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseBasic4(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TId node1;
+
+    public TId getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TId node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic5.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic5.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Basic5.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,119 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Basic5 extends Basic
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseBasic5(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2
+            + node3;
+    }
+
+    private TLPar node1;
+
+    public TLPar getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TLPar node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private RegExp node2;
+
+    public RegExp getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(RegExp node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    private TRPar node3;
+
+    public TRPar getNode3()
+    {
+        return node3;
+    }
+
+    public void setNode3(TRPar node)
+    {
+        if(node3 != null)
+        {
+            node3.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node3 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+        if(node3 == child)
+        {
+            node3 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/BinOp.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/BinOp.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/BinOp.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class BinOp extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/BinOp1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/BinOp1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/BinOp1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class BinOp1 extends BinOp
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseBinOp1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TPlus node1;
+
+    public TPlus getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TPlus node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/BinOp2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/BinOp2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/BinOp2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class BinOp2 extends BinOp
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseBinOp2(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TMinus node1;
+
+    public TMinus getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TMinus node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Concat.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Concat.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Concat.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class Concat extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Concat1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Concat1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Concat1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Concat1 extends Concat
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseConcat1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private UnExps node1;
+
+    public UnExps getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(UnExps node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/EOF.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/EOF.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/EOF.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,25 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class EOF extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseEOF(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elem.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elem.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elem.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class Elem extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elem1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elem1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elem1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,149 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Elem1 extends Elem
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseElem1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2
+            + node3
+            + node4;
+    }
+
+    private ElemNameOpt node1;
+
+    public ElemNameOpt getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(ElemNameOpt node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private SpecifierOpt node2;
+
+    public SpecifierOpt getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(SpecifierOpt node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    private TId node3;
+
+    public TId getNode3()
+    {
+        return node3;
+    }
+
+    public void setNode3(TId node)
+    {
+        if(node3 != null)
+        {
+            node3.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node3 = node;
+    }
+
+    private UnOpOpt node4;
+
+    public UnOpOpt getNode4()
+    {
+        return node4;
+    }
+
+    public void setNode4(UnOpOpt node)
+    {
+        if(node4 != null)
+        {
+            node4.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node4 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+        if(node3 == child)
+        {
+            node3 = null;
+        }
+
+        if(node4 == child)
+        {
+            node4 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemName.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemName.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemName.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class ElemName extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemName1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemName1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemName1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,149 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class ElemName1 extends ElemName
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseElemName1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2
+            + node3
+            + node4;
+    }
+
+    private TLBkt node1;
+
+    public TLBkt getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TLBkt node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private TId node2;
+
+    public TId getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(TId node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    private TRBkt node3;
+
+    public TRBkt getNode3()
+    {
+        return node3;
+    }
+
+    public void setNode3(TRBkt node)
+    {
+        if(node3 != null)
+        {
+            node3.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node3 = node;
+    }
+
+    private TColon node4;
+
+    public TColon getNode4()
+    {
+        return node4;
+    }
+
+    public void setNode4(TColon node)
+    {
+        if(node4 != null)
+        {
+            node4.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node4 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+        if(node3 == child)
+        {
+            node3 = null;
+        }
+
+        if(node4 == child)
+        {
+            node4 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemNameOpt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemNameOpt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemNameOpt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class ElemNameOpt extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemNameOpt1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemNameOpt1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemNameOpt1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class ElemNameOpt1 extends ElemNameOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseElemNameOpt1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private ElemName node1;
+
+    public ElemName getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(ElemName node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemNameOpt2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemNameOpt2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ElemNameOpt2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class ElemNameOpt2 extends ElemNameOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseElemNameOpt2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elems.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elems.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elems.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class Elems extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elems1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elems1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elems1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Elems1 extends Elems
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseElems1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private Elem node1;
+
+    public Elem getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(Elem node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private Elems node2;
+
+    public Elems getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(Elems node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elems2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elems2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Elems2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Elems2 extends Elems
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseElems2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Grammar.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Grammar.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Grammar.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class Grammar extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Grammar1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Grammar1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Grammar1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,209 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Grammar1 extends Grammar
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseGrammar1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2
+            + node3
+            + node4
+            + node5
+            + node6;
+    }
+
+    private PackageOpt node1;
+
+    public PackageOpt getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(PackageOpt node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private HelpersOpt node2;
+
+    public HelpersOpt getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(HelpersOpt node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    private StatesOpt node3;
+
+    public StatesOpt getNode3()
+    {
+        return node3;
+    }
+
+    public void setNode3(StatesOpt node)
+    {
+        if(node3 != null)
+        {
+            node3.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node3 = node;
+    }
+
+    private TokensOpt node4;
+
+    public TokensOpt getNode4()
+    {
+        return node4;
+    }
+
+    public void setNode4(TokensOpt node)
+    {
+        if(node4 != null)
+        {
+            node4.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node4 = node;
+    }
+
+    private IgnTokensOpt node5;
+
+    public IgnTokensOpt getNode5()
+    {
+        return node5;
+    }
+
+    public void setNode5(IgnTokensOpt node)
+    {
+        if(node5 != null)
+        {
+            node5.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node5 = node;
+    }
+
+    private ProductionsOpt node6;
+
+    public ProductionsOpt getNode6()
+    {
+        return node6;
+    }
+
+    public void setNode6(ProductionsOpt node)
+    {
+        if(node6 != null)
+        {
+            node6.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node6 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+        if(node3 == child)
+        {
+            node3 = null;
+        }
+
+        if(node4 == child)
+        {
+            node4 = null;
+        }
+
+        if(node5 == child)
+        {
+            node5 = null;
+        }
+
+        if(node6 == child)
+        {
+            node6 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDef.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDef.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDef.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class HelperDef extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDef1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDef1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDef1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,149 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class HelperDef1 extends HelperDef
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseHelperDef1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2
+            + node3
+            + node4;
+    }
+
+    private TId node1;
+
+    public TId getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TId node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private TEqual node2;
+
+    public TEqual getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(TEqual node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    private RegExp node3;
+
+    public RegExp getNode3()
+    {
+        return node3;
+    }
+
+    public void setNode3(RegExp node)
+    {
+        if(node3 != null)
+        {
+            node3.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node3 = node;
+    }
+
+    private TSemicolon node4;
+
+    public TSemicolon getNode4()
+    {
+        return node4;
+    }
+
+    public void setNode4(TSemicolon node)
+    {
+        if(node4 != null)
+        {
+            node4.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node4 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+        if(node3 == child)
+        {
+            node3 = null;
+        }
+
+        if(node4 == child)
+        {
+            node4 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDefs.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDefs.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDefs.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class HelperDefs extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDefs1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDefs1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDefs1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class HelperDefs1 extends HelperDefs
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseHelperDefs1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private HelperDef node1;
+
+    public HelperDef getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(HelperDef node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private HelperDefs node2;
+
+    public HelperDefs getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(HelperDefs node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDefs2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDefs2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelperDefs2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class HelperDefs2 extends HelperDefs
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseHelperDefs2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Helpers.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Helpers.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Helpers.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class Helpers extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Helpers1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Helpers1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Helpers1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Helpers1 extends Helpers
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseHelpers1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private THelpers node1;
+
+    public THelpers getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(THelpers node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private HelperDefs node2;
+
+    public HelperDefs getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(HelperDefs node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelpersOpt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelpersOpt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelpersOpt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class HelpersOpt extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelpersOpt1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelpersOpt1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelpersOpt1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class HelpersOpt1 extends HelpersOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseHelpersOpt1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private Helpers node1;
+
+    public Helpers getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(Helpers node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelpersOpt2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelpersOpt2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/HelpersOpt2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class HelpersOpt2 extends HelpersOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseHelpersOpt2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdList.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdList.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdList.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class IdList extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdList1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdList1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdList1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class IdList1 extends IdList
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseIdList1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private TId node1;
+
+    public TId getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TId node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private IdListTails node2;
+
+    public IdListTails getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(IdListTails node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListOpt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListOpt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListOpt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class IdListOpt extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListOpt1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListOpt1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListOpt1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class IdListOpt1 extends IdListOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseIdListOpt1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private IdList node1;
+
+    public IdList getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(IdList node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTail.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTail.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTail.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class IdListTail extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTail1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTail1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTail1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class IdListTail1 extends IdListTail
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseIdListTail1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private TComma node1;
+
+    public TComma getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TComma node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private TId node2;
+
+    public TId getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(TId node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTails.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTails.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTails.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class IdListTails extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTails1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTails1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTails1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class IdListTails1 extends IdListTails
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseIdListTails1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private IdListTail node1;
+
+    public IdListTail getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(IdListTail node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private IdListTails node2;
+
+    public IdListTails getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(IdListTails node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTails2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTails2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IdListTails2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class IdListTails2 extends IdListTails
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseIdListTails2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokens.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokens.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokens.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class IgnTokens extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokens1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokens1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokens1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,149 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class IgnTokens1 extends IgnTokens
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseIgnTokens1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2
+            + node3
+            + node4;
+    }
+
+    private TIgnored node1;
+
+    public TIgnored getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TIgnored node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private TTokens node2;
+
+    public TTokens getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(TTokens node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    private IdListOpt node3;
+
+    public IdListOpt getNode3()
+    {
+        return node3;
+    }
+
+    public void setNode3(IdListOpt node)
+    {
+        if(node3 != null)
+        {
+            node3.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node3 = node;
+    }
+
+    private TSemicolon node4;
+
+    public TSemicolon getNode4()
+    {
+        return node4;
+    }
+
+    public void setNode4(TSemicolon node)
+    {
+        if(node4 != null)
+        {
+            node4.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node4 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+        if(node3 == child)
+        {
+            node3 = null;
+        }
+
+        if(node4 == child)
+        {
+            node4 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokensOpt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokensOpt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokensOpt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class IgnTokensOpt extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokensOpt1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokensOpt1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokensOpt1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class IgnTokensOpt1 extends IgnTokensOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseIgnTokensOpt1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private IgnTokens node1;
+
+    public IgnTokens getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(IgnTokens node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokensOpt2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokensOpt2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/IgnTokensOpt2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class IgnTokensOpt2 extends IgnTokensOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseIgnTokensOpt2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAhead.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAhead.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAhead.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class LookAhead extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAhead1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAhead1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAhead1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class LookAhead1 extends LookAhead
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseLookAhead1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private TSlash node1;
+
+    public TSlash getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TSlash node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private RegExp node2;
+
+    public RegExp getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(RegExp node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAheadOpt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAheadOpt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAheadOpt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class LookAheadOpt extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAheadOpt1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAheadOpt1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAheadOpt1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class LookAheadOpt1 extends LookAheadOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseLookAheadOpt1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private LookAhead node1;
+
+    public LookAhead getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(LookAhead node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAheadOpt2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAheadOpt2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/LookAheadOpt2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class LookAheadOpt2 extends LookAheadOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseLookAheadOpt2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Node.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Node.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Node.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,57 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.analysis.Analysis;
+import org.sablecc.sablecc.Switchable;
+
+public abstract class Node implements Switchable
+{
+    private static int nextId =0;
+
+    private final int id = nextId++;
+    private Node parent;
+
+    public int getId()
+    {
+        return id;
+    }
+
+    public Node getParent()
+    {
+        return parent;
+    }
+
+    void setParent(Node parent)
+    {
+        this.parent = parent;
+    }
+
+    abstract void removeChild(Node child);
+
+    public Object getIn(Analysis analysis)
+    {
+        return analysis.getIn(this);
+    }
+
+    public void setIn(Analysis analysis, Object in)
+    {
+        analysis.setIn(this, in);
+    }
+
+    public Object getOut(Analysis analysis)
+    {
+        return analysis.getOut(this);
+    }
+
+    public void setOut(Analysis analysis, Object out)
+    {
+        analysis.setOut(this, out);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PChar.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PChar.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PChar.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class PChar extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PChar1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PChar1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PChar1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PChar1 extends PChar
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePChar1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TChar node1;
+
+    public TChar getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TChar node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PChar2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PChar2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PChar2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PChar2 extends PChar
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePChar2(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TDecChar node1;
+
+    public TDecChar getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TDecChar node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PChar3.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PChar3.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PChar3.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PChar3 extends PChar
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePChar3(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private THexChar node1;
+
+    public THexChar getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(THexChar node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PSet.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PSet.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PSet.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class PSet extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PSet1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PSet1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PSet1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,179 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PSet1 extends PSet
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePSet1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2
+            + node3
+            + node4
+            + node5;
+    }
+
+    private TLBkt node1;
+
+    public TLBkt getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TLBkt node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private Basic node2;
+
+    public Basic getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(Basic node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    private BinOp node3;
+
+    public BinOp getNode3()
+    {
+        return node3;
+    }
+
+    public void setNode3(BinOp node)
+    {
+        if(node3 != null)
+        {
+            node3.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node3 = node;
+    }
+
+    private Basic node4;
+
+    public Basic getNode4()
+    {
+        return node4;
+    }
+
+    public void setNode4(Basic node)
+    {
+        if(node4 != null)
+        {
+            node4.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node4 = node;
+    }
+
+    private TRBkt node5;
+
+    public TRBkt getNode5()
+    {
+        return node5;
+    }
+
+    public void setNode5(TRBkt node)
+    {
+        if(node5 != null)
+        {
+            node5.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node5 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+        if(node3 == child)
+        {
+            node3 = null;
+        }
+
+        if(node4 == child)
+        {
+            node4 = null;
+        }
+
+        if(node5 == child)
+        {
+            node5 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PSet2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PSet2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PSet2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,179 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PSet2 extends PSet
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePSet2(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2
+            + node3
+            + node4
+            + node5;
+    }
+
+    private TLBkt node1;
+
+    public TLBkt getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TLBkt node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private PChar node2;
+
+    public PChar getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(PChar node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    private TDDot node3;
+
+    public TDDot getNode3()
+    {
+        return node3;
+    }
+
+    public void setNode3(TDDot node)
+    {
+        if(node3 != null)
+        {
+            node3.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node3 = node;
+    }
+
+    private PChar node4;
+
+    public PChar getNode4()
+    {
+        return node4;
+    }
+
+    public void setNode4(PChar node)
+    {
+        if(node4 != null)
+        {
+            node4.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node4 = node;
+    }
+
+    private TRBkt node5;
+
+    public TRBkt getNode5()
+    {
+        return node5;
+    }
+
+    public void setNode5(TRBkt node)
+    {
+        if(node5 != null)
+        {
+            node5.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node5 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+        if(node3 == child)
+        {
+            node3 = null;
+        }
+
+        if(node4 == child)
+        {
+            node4 = null;
+        }
+
+        if(node5 == child)
+        {
+            node5 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Package.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Package.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Package.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class Package extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Package1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Package1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Package1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,90 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+import org.sablecc.sablecc.node.Package;
+
+public final class Package1 extends Package
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePackage1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private TPackage node1;
+
+    public TPackage getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TPackage node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private PkgNameOpt node2;
+
+    public PkgNameOpt getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(PkgNameOpt node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PackageOpt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PackageOpt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PackageOpt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class PackageOpt extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PackageOpt1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PackageOpt1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PackageOpt1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,60 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+import org.sablecc.sablecc.node.Package;
+
+public final class PackageOpt1 extends PackageOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePackageOpt1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private Package node1;
+
+    public Package getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(Package node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PackageOpt2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PackageOpt2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PackageOpt2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PackageOpt2 extends PackageOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePackageOpt2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,14 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+public abstract class PkgId extends Node
+{
+    abstract public String getText();
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,64 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PkgId1 extends PkgId
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePkgId1(this);
+    }
+
+    public String getText()
+    {
+        return node1.getText();
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TPackage node1;
+
+    public TPackage getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TPackage node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId10.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId10.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId10.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,64 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PkgId10 extends PkgId
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePkgId10(this);
+    }
+
+    public String getText()
+    {
+        return node1.getText();
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TPkgId node1;
+
+    public TPkgId getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TPkgId node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,64 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PkgId2 extends PkgId
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePkgId2(this);
+    }
+
+    public String getText()
+    {
+        return node1.getText();
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TStates node1;
+
+    public TStates getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TStates node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId3.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId3.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId3.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,64 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PkgId3 extends PkgId
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePkgId3(this);
+    }
+
+    public String getText()
+    {
+        return node1.getText();
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private THelpers node1;
+
+    public THelpers getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(THelpers node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId4.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId4.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId4.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,64 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PkgId4 extends PkgId
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePkgId4(this);
+    }
+
+    public String getText()
+    {
+        return node1.getText();
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TTokens node1;
+
+    public TTokens getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TTokens node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId5.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId5.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId5.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,64 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PkgId5 extends PkgId
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePkgId5(this);
+    }
+
+    public String getText()
+    {
+        return node1.getText();
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TIgnored node1;
+
+    public TIgnored getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TIgnored node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId6.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId6.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId6.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,64 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PkgId6 extends PkgId
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePkgId6(this);
+    }
+
+    public String getText()
+    {
+        return node1.getText();
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TProductions node1;
+
+    public TProductions getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TProductions node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId7.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId7.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId7.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,64 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PkgId7 extends PkgId
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePkgId7(this);
+    }
+
+    public String getText()
+    {
+        return node1.getText();
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TTokenSpecifier node1;
+
+    public TTokenSpecifier getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TTokenSpecifier node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId8.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId8.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId8.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,64 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PkgId8 extends PkgId
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePkgId8(this);
+    }
+
+    public String getText()
+    {
+        return node1.getText();
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TProductionSpecifier node1;
+
+    public TProductionSpecifier getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TProductionSpecifier node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId9.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId9.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgId9.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,64 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PkgId9 extends PkgId
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePkgId9(this);
+    }
+
+    public String getText()
+    {
+        return node1.getText();
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TId node1;
+
+    public TId getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TId node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgName.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgName.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgName.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class PkgName extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgName1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgName1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgName1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,119 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PkgName1 extends PkgName
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePkgName1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2
+            + node3;
+    }
+
+    private PkgId node1;
+
+    public PkgId getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(PkgId node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private PkgNameTails node2;
+
+    public PkgNameTails getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(PkgNameTails node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    private TSemicolon node3;
+
+    public TSemicolon getNode3()
+    {
+        return node3;
+    }
+
+    public void setNode3(TSemicolon node)
+    {
+        if(node3 != null)
+        {
+            node3.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node3 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+        if(node3 == child)
+        {
+            node3 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameOpt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameOpt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameOpt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class PkgNameOpt extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameOpt1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameOpt1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameOpt1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PkgNameOpt1 extends PkgNameOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePkgNameOpt1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private PkgName node1;
+
+    public PkgName getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(PkgName node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTail.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTail.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTail.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class PkgNameTail extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTail1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTail1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTail1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PkgNameTail1 extends PkgNameTail
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePkgNameTail1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private TDot node1;
+
+    public TDot getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TDot node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private PkgId node2;
+
+    public PkgId getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(PkgId node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTails.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTails.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTails.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class PkgNameTails extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTails1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTails1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTails1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PkgNameTails1 extends PkgNameTails
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePkgNameTails1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private PkgNameTail node1;
+
+    public PkgNameTail getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(PkgNameTail node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private PkgNameTails node2;
+
+    public PkgNameTails getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(PkgNameTails node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTails2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTails2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/PkgNameTails2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class PkgNameTails2 extends PkgNameTails
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).casePkgNameTails2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prod.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prod.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prod.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class Prod extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prod1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prod1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prod1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,149 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Prod1 extends Prod
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseProd1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2
+            + node3
+            + node4;
+    }
+
+    private TId node1;
+
+    public TId getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TId node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private TEqual node2;
+
+    public TEqual getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(TEqual node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    private Alts node3;
+
+    public Alts getNode3()
+    {
+        return node3;
+    }
+
+    public void setNode3(Alts node)
+    {
+        if(node3 != null)
+        {
+            node3.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node3 = node;
+    }
+
+    private TSemicolon node4;
+
+    public TSemicolon getNode4()
+    {
+        return node4;
+    }
+
+    public void setNode4(TSemicolon node)
+    {
+        if(node4 != null)
+        {
+            node4.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node4 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+        if(node3 == child)
+        {
+            node3 = null;
+        }
+
+        if(node4 == child)
+        {
+            node4 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prods.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prods.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prods.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class Prods extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prods1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prods1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prods1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Prods1 extends Prods
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseProds1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private Prod node1;
+
+    public Prod getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(Prod node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private Prods node2;
+
+    public Prods getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(Prods node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prods2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prods2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Prods2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Prods2 extends Prods
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseProds2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Productions.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Productions.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Productions.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class Productions extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Productions1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Productions1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Productions1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Productions1 extends Productions
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseProductions1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private TProductions node1;
+
+    public TProductions getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TProductions node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private Prods node2;
+
+    public Prods getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(Prods node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ProductionsOpt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ProductionsOpt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ProductionsOpt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class ProductionsOpt extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ProductionsOpt1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ProductionsOpt1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ProductionsOpt1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class ProductionsOpt1 extends ProductionsOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseProductionsOpt1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private Productions node1;
+
+    public Productions getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(Productions node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ProductionsOpt2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ProductionsOpt2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/ProductionsOpt2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class ProductionsOpt2 extends ProductionsOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseProductionsOpt2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExp.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExp.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExp.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class RegExp extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExp1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExp1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExp1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class RegExp1 extends RegExp
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseRegExp1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private Concat node1;
+
+    public Concat getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(Concat node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private RegExpTails node2;
+
+    public RegExpTails getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(RegExpTails node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTail.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTail.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTail.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class RegExpTail extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTail1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTail1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTail1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class RegExpTail1 extends RegExpTail
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseRegExpTail1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private TBar node1;
+
+    public TBar getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TBar node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private Concat node2;
+
+    public Concat getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(Concat node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTails.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTails.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTails.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class RegExpTails extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTails1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTails1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTails1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class RegExpTails1 extends RegExpTails
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseRegExpTails1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private RegExpTail node1;
+
+    public RegExpTail getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(RegExpTail node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private RegExpTails node2;
+
+    public RegExpTails getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(RegExpTails node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTails2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTails2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/RegExpTails2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class RegExpTails2 extends RegExpTails
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseRegExpTails2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Specifier.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Specifier.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Specifier.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class Specifier extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Specifier1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Specifier1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Specifier1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Specifier1 extends Specifier
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseSpecifier1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private TTokenSpecifier node1;
+
+    public TTokenSpecifier getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TTokenSpecifier node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private TDot node2;
+
+    public TDot getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(TDot node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Specifier2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Specifier2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Specifier2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Specifier2 extends Specifier
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseSpecifier2(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private TProductionSpecifier node1;
+
+    public TProductionSpecifier getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TProductionSpecifier node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private TDot node2;
+
+    public TDot getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(TDot node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/SpecifierOpt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/SpecifierOpt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/SpecifierOpt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class SpecifierOpt extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/SpecifierOpt1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/SpecifierOpt1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/SpecifierOpt1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class SpecifierOpt1 extends SpecifierOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseSpecifierOpt1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private Specifier node1;
+
+    public Specifier getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(Specifier node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/SpecifierOpt2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/SpecifierOpt2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/SpecifierOpt2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class SpecifierOpt2 extends SpecifierOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseSpecifierOpt2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Start.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Start.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Start.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class Start extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Start1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Start1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Start1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Start1 extends Start
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseStart1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private Grammar node1;
+
+    public Grammar getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(Grammar node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private EOF node2;
+
+    public EOF getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(EOF node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateList.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateList.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateList.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class StateList extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateList1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateList1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateList1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,179 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class StateList1 extends StateList
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseStateList1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2
+            + node3
+            + node4
+            + node5;
+    }
+
+    private TLBrace node1;
+
+    public TLBrace getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TLBrace node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private TId node2;
+
+    public TId getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(TId node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    private TransitionOpt node3;
+
+    public TransitionOpt getNode3()
+    {
+        return node3;
+    }
+
+    public void setNode3(TransitionOpt node)
+    {
+        if(node3 != null)
+        {
+            node3.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node3 = node;
+    }
+
+    private StateListTails node4;
+
+    public StateListTails getNode4()
+    {
+        return node4;
+    }
+
+    public void setNode4(StateListTails node)
+    {
+        if(node4 != null)
+        {
+            node4.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node4 = node;
+    }
+
+    private TRBrace node5;
+
+    public TRBrace getNode5()
+    {
+        return node5;
+    }
+
+    public void setNode5(TRBrace node)
+    {
+        if(node5 != null)
+        {
+            node5.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node5 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+        if(node3 == child)
+        {
+            node3 = null;
+        }
+
+        if(node4 == child)
+        {
+            node4 = null;
+        }
+
+        if(node5 == child)
+        {
+            node5 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListOpt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListOpt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListOpt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class StateListOpt extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListOpt1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListOpt1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListOpt1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class StateListOpt1 extends StateListOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseStateListOpt1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private StateList node1;
+
+    public StateList getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(StateList node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListOpt2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListOpt2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListOpt2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class StateListOpt2 extends StateListOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseStateListOpt2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTail.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTail.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTail.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class StateListTail extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTail1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTail1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTail1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,119 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class StateListTail1 extends StateListTail
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseStateListTail1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2
+            + node3;
+    }
+
+    private TComma node1;
+
+    public TComma getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TComma node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private TId node2;
+
+    public TId getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(TId node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    private TransitionOpt node3;
+
+    public TransitionOpt getNode3()
+    {
+        return node3;
+    }
+
+    public void setNode3(TransitionOpt node)
+    {
+        if(node3 != null)
+        {
+            node3.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node3 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+        if(node3 == child)
+        {
+            node3 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTails.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTails.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTails.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class StateListTails extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTails1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTails1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTails1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class StateListTails1 extends StateListTails
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseStateListTails1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private StateListTail node1;
+
+    public StateListTail getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(StateListTail node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private StateListTails node2;
+
+    public StateListTails getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(StateListTails node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTails2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTails2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StateListTails2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class StateListTails2 extends StateListTails
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseStateListTails2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/States.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/States.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/States.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class States extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/States1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/States1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/States1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,119 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class States1 extends States
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseStates1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2
+            + node3;
+    }
+
+    private TStates node1;
+
+    public TStates getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TStates node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private IdListOpt node2;
+
+    public IdListOpt getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(IdListOpt node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    private TSemicolon node3;
+
+    public TSemicolon getNode3()
+    {
+        return node3;
+    }
+
+    public void setNode3(TSemicolon node)
+    {
+        if(node3 != null)
+        {
+            node3.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node3 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+        if(node3 == child)
+        {
+            node3 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StatesOpt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StatesOpt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StatesOpt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class StatesOpt extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StatesOpt1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StatesOpt1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StatesOpt1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class StatesOpt1 extends StatesOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseStatesOpt1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private States node1;
+
+    public States getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(States node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StatesOpt2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StatesOpt2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/StatesOpt2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class StatesOpt2 extends StatesOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseStatesOpt2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TArrow.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TArrow.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TArrow.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TArrow extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTArrow(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TBar.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TBar.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TBar.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TBar extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTBar(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TBlank.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TBlank.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TBlank.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TBlank extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTBlank(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TChar.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TChar.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TChar.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TChar extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTChar(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TColon.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TColon.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TColon.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TColon extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTColon(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TComma.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TComma.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TComma.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TComma extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTComma(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TComment.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TComment.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TComment.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TComment extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTComment(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TDDot.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TDDot.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TDDot.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TDDot extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTDDot(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TDecChar.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TDecChar.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TDecChar.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TDecChar extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTDecChar(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TDot.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TDot.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TDot.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TDot extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTDot(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TEqual.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TEqual.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TEqual.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TEqual extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTEqual(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/THelpers.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/THelpers.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/THelpers.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class THelpers extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTHelpers(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/THexChar.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/THexChar.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/THexChar.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class THexChar extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTHexChar(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TId.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TId.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TId.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TId extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTId(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TIgnored.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TIgnored.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TIgnored.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TIgnored extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTIgnored(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TLBkt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TLBkt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TLBkt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TLBkt extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTLBkt(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TLBrace.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TLBrace.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TLBrace.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TLBrace extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTLBrace(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TLPar.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TLPar.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TLPar.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TLPar extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTLPar(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TMinus.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TMinus.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TMinus.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TMinus extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTMinus(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TPackage.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TPackage.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TPackage.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TPackage extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTPackage(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TPkgId.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TPkgId.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TPkgId.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TPkgId extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTPkgId(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TPlus.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TPlus.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TPlus.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TPlus extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTPlus(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TProductionSpecifier.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TProductionSpecifier.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TProductionSpecifier.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TProductionSpecifier extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTProductionSpecifier(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TProductions.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TProductions.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TProductions.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TProductions extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTProductions(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TQMark.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TQMark.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TQMark.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TQMark extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTQMark(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TRBkt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TRBkt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TRBkt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TRBkt extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTRBkt(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TRBrace.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TRBrace.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TRBrace.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TRBrace extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTRBrace(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TRPar.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TRPar.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TRPar.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TRPar extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTRPar(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TSemicolon.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TSemicolon.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TSemicolon.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TSemicolon extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTSemicolon(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TSlash.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TSlash.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TSlash.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TSlash extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTSlash(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TStar.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TStar.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TStar.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TStar extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTStar(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TStates.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TStates.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TStates.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TStates extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTStates(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TString.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TString.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TString.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TString extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTString(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TTokenSpecifier.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TTokenSpecifier.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TTokenSpecifier.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TTokenSpecifier extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTTokenSpecifier(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TTokens.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TTokens.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TTokens.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TTokens extends Token
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTTokens(this);
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Token.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Token.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Token.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,57 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+public abstract class Token extends Node
+{
+    public String toString()
+    {
+        return text + " ";
+    }
+
+    private String text;
+
+    public String getText()
+    {
+        return text;
+    }
+
+    public void setText(String text)
+    {
+        this.text = text;
+    }
+
+    private int line;
+
+    public int getLine()
+    {
+        return line;
+    }
+
+    public void setLine(int line)
+    {
+        this.line = line;
+    }
+
+    private int pos;
+
+    public int getPos()
+    {
+        return pos;
+    }
+
+    public void setPos(int pos)
+    {
+        this.pos = pos;
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDef.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDef.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDef.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class TokenDef extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDef1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDef1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDef1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,209 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TokenDef1 extends TokenDef
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTokenDef1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2
+            + node3
+            + node4
+            + node5
+            + node6;
+    }
+
+    private StateListOpt node1;
+
+    public StateListOpt getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(StateListOpt node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private TId node2;
+
+    public TId getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(TId node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    private TEqual node3;
+
+    public TEqual getNode3()
+    {
+        return node3;
+    }
+
+    public void setNode3(TEqual node)
+    {
+        if(node3 != null)
+        {
+            node3.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node3 = node;
+    }
+
+    private RegExp node4;
+
+    public RegExp getNode4()
+    {
+        return node4;
+    }
+
+    public void setNode4(RegExp node)
+    {
+        if(node4 != null)
+        {
+            node4.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node4 = node;
+    }
+
+    private LookAheadOpt node5;
+
+    public LookAheadOpt getNode5()
+    {
+        return node5;
+    }
+
+    public void setNode5(LookAheadOpt node)
+    {
+        if(node5 != null)
+        {
+            node5.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node5 = node;
+    }
+
+    private TSemicolon node6;
+
+    public TSemicolon getNode6()
+    {
+        return node6;
+    }
+
+    public void setNode6(TSemicolon node)
+    {
+        if(node6 != null)
+        {
+            node6.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node6 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+        if(node3 == child)
+        {
+            node3 = null;
+        }
+
+        if(node4 == child)
+        {
+            node4 = null;
+        }
+
+        if(node5 == child)
+        {
+            node5 = null;
+        }
+
+        if(node6 == child)
+        {
+            node6 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDefs.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDefs.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDefs.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class TokenDefs extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDefs1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDefs1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDefs1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TokenDefs1 extends TokenDefs
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTokenDefs1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private TokenDef node1;
+
+    public TokenDef getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TokenDef node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private TokenDefs node2;
+
+    public TokenDefs getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(TokenDefs node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDefs2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDefs2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokenDefs2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TokenDefs2 extends TokenDefs
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTokenDefs2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Tokens.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Tokens.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Tokens.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class Tokens extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Tokens1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Tokens1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Tokens1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Tokens1 extends Tokens
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTokens1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private TTokens node1;
+
+    public TTokens getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TTokens node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private TokenDefs node2;
+
+    public TokenDefs getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(TokenDefs node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokensOpt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokensOpt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokensOpt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class TokensOpt extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokensOpt1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokensOpt1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokensOpt1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TokensOpt1 extends TokensOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTokensOpt1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private Tokens node1;
+
+    public Tokens getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(Tokens node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokensOpt2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokensOpt2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TokensOpt2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TokensOpt2 extends TokensOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTokensOpt2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Transition.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Transition.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Transition.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class Transition extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Transition1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Transition1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/Transition1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class Transition1 extends Transition
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTransition1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private TArrow node1;
+
+    public TArrow getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TArrow node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private TId node2;
+
+    public TId getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(TId node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TransitionOpt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TransitionOpt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TransitionOpt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class TransitionOpt extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TransitionOpt1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TransitionOpt1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TransitionOpt1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TransitionOpt1 extends TransitionOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTransitionOpt1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private Transition node1;
+
+    public Transition getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(Transition node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TransitionOpt2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TransitionOpt2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/TransitionOpt2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class TransitionOpt2 extends TransitionOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTransitionOpt2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExp.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExp.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExp.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class UnExp extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExp1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExp1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExp1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class UnExp1 extends UnExp
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseUnExp1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private Basic node1;
+
+    public Basic getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(Basic node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private UnOpOpt node2;
+
+    public UnOpOpt getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(UnOpOpt node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExps.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExps.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExps.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class UnExps extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExps1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExps1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExps1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,89 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class UnExps1 extends UnExps
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseUnExps1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1
+            + node2;
+    }
+
+    private UnExp node1;
+
+    public UnExp getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(UnExp node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    private UnExps node2;
+
+    public UnExps getNode2()
+    {
+        return node2;
+    }
+
+    public void setNode2(UnExps node)
+    {
+        if(node2 != null)
+        {
+            node2.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node2 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+        if(node2 == child)
+        {
+            node2 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExps2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExps2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnExps2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class UnExps2 extends UnExps
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseUnExps2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOp.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOp.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOp.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class UnOp extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOp1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOp1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOp1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class UnOp1 extends UnOp
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseUnOp1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TStar node1;
+
+    public TStar getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TStar node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOp2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOp2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOp2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class UnOp2 extends UnOp
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseUnOp2(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TQMark node1;
+
+    public TQMark getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TQMark node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOp3.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOp3.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOp3.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class UnOp3 extends UnOp
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseUnOp3(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private TPlus node1;
+
+    public TPlus getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(TPlus node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOpOpt.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOpOpt.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOpOpt.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+public abstract class UnOpOpt extends Node
+{
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOpOpt1.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOpOpt1.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOpOpt1.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class UnOpOpt1 extends UnOpOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseUnOpOpt1(this);
+    }
+
+    public String toString()
+    {
+        return ""
+            + node1;
+    }
+
+    private UnOp node1;
+
+    public UnOp getNode1()
+    {
+        return node1;
+    }
+
+    public void setNode1(UnOp node)
+    {
+        if(node1 != null)
+        {
+            node1.setParent(null);
+        }
+
+        if(node.getParent() != null)
+        {
+            node.getParent().removeChild(node);
+        }
+
+        node.setParent(this);
+
+        node1 = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(node1 == child)
+        {
+            node1 = null;
+        }
+
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOpOpt2.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOpOpt2.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/node/UnOpOpt2.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.node;
+
+import org.sablecc.sablecc.Switch;
+import org.sablecc.sablecc.analysis.Analysis;
+
+public final class UnOpOpt2 extends UnOpOpt
+{
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseUnOpOpt2(this);
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+
+    void removeChild(Node child)
+    {
+    }
+}
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/Parser.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/Parser.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/Parser.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,1394 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.parser;
+
+import org.sablecc.sablecc.node.*;
+import org.sablecc.sablecc.lexer.*;
+import java.util.*;
+import org.sablecc.sablecc.node.Package;
+import org.sablecc.sablecc.Switchable;
+
+import java.util.Vector;
+import java.util.Stack;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+
+public final class Parser
+{
+    private final Lexer lexer;
+    private final Stack stack = new Stack();
+
+    public Parser(Lexer lexer)
+    {
+        this.lexer = lexer;
+
+        try
+        {
+            ObjectInputStream s = new ObjectInputStream(getClass().getResourceAsStream("parser.dat"));
+            actionTable = (int[][][]) s.readObject();
+            gotoTable = (int[][]) s.readObject();
+            errors = (String[]) s.readObject();
+            s.close();
+        }
+        catch(Exception e)
+        {
+            throw new RuntimeException("Unable to read parser.dat.");
+        }
+    }
+
+    private void push(int state, Object node)
+    {
+        stack.push(new State(state, node));
+    }
+
+    private int state()
+    {
+        return ((State) stack.peek()).state;
+    }
+
+    private Object pop()
+    {
+        return ((State) stack.pop()).node;
+    }
+
+    private final TokenIndex converter = new TokenIndex();
+
+    private int index(Switchable token)
+    {
+        converter.index = -1;
+        token.apply(converter);
+        return converter.index;
+    }
+
+    private int last_shift;
+    private int last_pos;
+    private int last_line;
+    private boolean get_last_coordinates = true;
+
+    public Start parse() throws ParserException, LexerException, IOException
+    {
+        push(0, null);
+
+        int[] action;
+        while(true)
+        {
+            while(index(lexer.peek()) == -1)
+            {
+                lexer.next();
+            }
+
+            if(get_last_coordinates)
+            {
+                last_pos = lexer.peek().getPos();
+                last_line = lexer.peek().getLine();
+                get_last_coordinates = false;
+            }
+
+            action = actionTable[state()][index(lexer.peek())];
+
+            switch(action[0])
+            {
+                case SHIFT:
+                    push(action[1], lexer.next());
+                    last_shift = action[1];
+                    get_last_coordinates = true;
+                    break;
+                case REDUCE:
+                    switch(action[1])
+                    {
+                    case 0:
+                        {
+                            Grammar1 node = new Grammar1();
+                            node.setNode6((ProductionsOpt) pop());
+                            node.setNode5((IgnTokensOpt) pop());
+                            node.setNode4((TokensOpt) pop());
+                            node.setNode3((StatesOpt) pop());
+                            node.setNode2((HelpersOpt) pop());
+                            node.setNode1((PackageOpt) pop());
+                            push(gotoTable[state()][0], node);
+                        }
+                        break;
+                    case 1:
+                        {
+                            PackageOpt1 node = new PackageOpt1();
+                            node.setNode1((Package) pop());
+                            push(gotoTable[state()][1], node);
+                        }
+                        break;
+                    case 2:
+                        {
+                            PackageOpt2 node = new PackageOpt2();
+                            push(gotoTable[state()][1], node);
+                        }
+                        break;
+                    case 3:
+                        {
+                            Package1 node = new Package1();
+                            node.setNode2((PkgNameOpt) pop());
+                            node.setNode1((TPackage) pop());
+                            push(gotoTable[state()][2], node);
+                        }
+                        break;
+                    case 4:
+                        {
+                            PkgNameOpt1 node = new PkgNameOpt1();
+                            node.setNode1((PkgName) pop());
+                            push(gotoTable[state()][3], node);
+                        }
+                        break;
+                    case 5:
+                        {
+                            PkgName1 node = new PkgName1();
+                            node.setNode3((TSemicolon) pop());
+                            node.setNode2((PkgNameTails) pop());
+                            node.setNode1((PkgId) pop());
+                            push(gotoTable[state()][4], node);
+                        }
+                        break;
+                    case 6:
+                        {
+                            PkgNameTails1 node = new PkgNameTails1();
+                            node.setNode2((PkgNameTails) pop());
+                            node.setNode1((PkgNameTail) pop());
+                            push(gotoTable[state()][5], node);
+                        }
+                        break;
+                    case 7:
+                        {
+                            PkgNameTails2 node = new PkgNameTails2();
+                            push(gotoTable[state()][5], node);
+                        }
+                        break;
+                    case 8:
+                        {
+                            PkgNameTail1 node = new PkgNameTail1();
+                            node.setNode2((PkgId) pop());
+                            node.setNode1((TDot) pop());
+                            push(gotoTable[state()][6], node);
+                        }
+                        break;
+                    case 9:
+                        {
+                            PkgId1 node = new PkgId1();
+                            node.setNode1((TPackage) pop());
+                            push(gotoTable[state()][7], node);
+                        }
+                        break;
+                    case 10:
+                        {
+                            PkgId2 node = new PkgId2();
+                            node.setNode1((TStates) pop());
+                            push(gotoTable[state()][7], node);
+                        }
+                        break;
+                    case 11:
+                        {
+                            PkgId3 node = new PkgId3();
+                            node.setNode1((THelpers) pop());
+                            push(gotoTable[state()][7], node);
+                        }
+                        break;
+                    case 12:
+                        {
+                            PkgId4 node = new PkgId4();
+                            node.setNode1((TTokens) pop());
+                            push(gotoTable[state()][7], node);
+                        }
+                        break;
+                    case 13:
+                        {
+                            PkgId5 node = new PkgId5();
+                            node.setNode1((TIgnored) pop());
+                            push(gotoTable[state()][7], node);
+                        }
+                        break;
+                    case 14:
+                        {
+                            PkgId6 node = new PkgId6();
+                            node.setNode1((TProductions) pop());
+                            push(gotoTable[state()][7], node);
+                        }
+                        break;
+                    case 15:
+                        {
+                            PkgId7 node = new PkgId7();
+                            node.setNode1((TTokenSpecifier) pop());
+                            push(gotoTable[state()][7], node);
+                        }
+                        break;
+                    case 16:
+                        {
+                            PkgId8 node = new PkgId8();
+                            node.setNode1((TProductionSpecifier) pop());
+                            push(gotoTable[state()][7], node);
+                        }
+                        break;
+                    case 17:
+                        {
+                            PkgId9 node = new PkgId9();
+                            node.setNode1((TId) pop());
+                            push(gotoTable[state()][7], node);
+                        }
+                        break;
+                    case 18:
+                        {
+                            PkgId10 node = new PkgId10();
+                            node.setNode1((TPkgId) pop());
+                            push(gotoTable[state()][7], node);
+                        }
+                        break;
+                    case 19:
+                        {
+                            HelpersOpt1 node = new HelpersOpt1();
+                            node.setNode1((Helpers) pop());
+                            push(gotoTable[state()][8], node);
+                        }
+                        break;
+                    case 20:
+                        {
+                            HelpersOpt2 node = new HelpersOpt2();
+                            push(gotoTable[state()][8], node);
+                        }
+                        break;
+                    case 21:
+                        {
+                            Helpers1 node = new Helpers1();
+                            node.setNode2((HelperDefs) pop());
+                            node.setNode1((THelpers) pop());
+                            push(gotoTable[state()][9], node);
+                        }
+                        break;
+                    case 22:
+                        {
+                            HelperDefs1 node = new HelperDefs1();
+                            node.setNode2((HelperDefs) pop());
+                            node.setNode1((HelperDef) pop());
+                            push(gotoTable[state()][10], node);
+                        }
+                        break;
+                    case 23:
+                        {
+                            HelperDefs2 node = new HelperDefs2();
+                            push(gotoTable[state()][10], node);
+                        }
+                        break;
+                    case 24:
+                        {
+                            HelperDef1 node = new HelperDef1();
+                            node.setNode4((TSemicolon) pop());
+                            node.setNode3((RegExp) pop());
+                            node.setNode2((TEqual) pop());
+                            node.setNode1((TId) pop());
+                            push(gotoTable[state()][11], node);
+                        }
+                        break;
+                    case 25:
+                        {
+                            StatesOpt1 node = new StatesOpt1();
+                            node.setNode1((States) pop());
+                            push(gotoTable[state()][12], node);
+                        }
+                        break;
+                    case 26:
+                        {
+                            StatesOpt2 node = new StatesOpt2();
+                            push(gotoTable[state()][12], node);
+                        }
+                        break;
+                    case 27:
+                        {
+                            States1 node = new States1();
+                            node.setNode3((TSemicolon) pop());
+                            node.setNode2((IdListOpt) pop());
+                            node.setNode1((TStates) pop());
+                            push(gotoTable[state()][13], node);
+                        }
+                        break;
+                    case 28:
+                        {
+                            IdListOpt1 node = new IdListOpt1();
+                            node.setNode1((IdList) pop());
+                            push(gotoTable[state()][14], node);
+                        }
+                        break;
+                    case 29:
+                        {
+                            IdList1 node = new IdList1();
+                            node.setNode2((IdListTails) pop());
+                            node.setNode1((TId) pop());
+                            push(gotoTable[state()][15], node);
+                        }
+                        break;
+                    case 30:
+                        {
+                            IdListTails1 node = new IdListTails1();
+                            node.setNode2((IdListTails) pop());
+                            node.setNode1((IdListTail) pop());
+                            push(gotoTable[state()][16], node);
+                        }
+                        break;
+                    case 31:
+                        {
+                            IdListTails2 node = new IdListTails2();
+                            push(gotoTable[state()][16], node);
+                        }
+                        break;
+                    case 32:
+                        {
+                            IdListTail1 node = new IdListTail1();
+                            node.setNode2((TId) pop());
+                            node.setNode1((TComma) pop());
+                            push(gotoTable[state()][17], node);
+                        }
+                        break;
+                    case 33:
+                        {
+                            TokensOpt1 node = new TokensOpt1();
+                            node.setNode1((Tokens) pop());
+                            push(gotoTable[state()][18], node);
+                        }
+                        break;
+                    case 34:
+                        {
+                            TokensOpt2 node = new TokensOpt2();
+                            push(gotoTable[state()][18], node);
+                        }
+                        break;
+                    case 35:
+                        {
+                            Tokens1 node = new Tokens1();
+                            node.setNode2((TokenDefs) pop());
+                            node.setNode1((TTokens) pop());
+                            push(gotoTable[state()][19], node);
+                        }
+                        break;
+                    case 36:
+                        {
+                            TokenDefs1 node = new TokenDefs1();
+                            node.setNode2((TokenDefs) pop());
+                            node.setNode1((TokenDef) pop());
+                            push(gotoTable[state()][20], node);
+                        }
+                        break;
+                    case 37:
+                        {
+                            TokenDefs2 node = new TokenDefs2();
+                            push(gotoTable[state()][20], node);
+                        }
+                        break;
+                    case 38:
+                        {
+                            TokenDef1 node = new TokenDef1();
+                            node.setNode6((TSemicolon) pop());
+                            node.setNode5((LookAheadOpt) pop());
+                            node.setNode4((RegExp) pop());
+                            node.setNode3((TEqual) pop());
+                            node.setNode2((TId) pop());
+                            node.setNode1((StateListOpt) pop());
+                            push(gotoTable[state()][21], node);
+                        }
+                        break;
+                    case 39:
+                        {
+                            StateListOpt1 node = new StateListOpt1();
+                            node.setNode1((StateList) pop());
+                            push(gotoTable[state()][22], node);
+                        }
+                        break;
+                    case 40:
+                        {
+                            StateListOpt2 node = new StateListOpt2();
+                            push(gotoTable[state()][22], node);
+                        }
+                        break;
+                    case 41:
+                        {
+                            StateList1 node = new StateList1();
+                            node.setNode5((TRBrace) pop());
+                            node.setNode4((StateListTails) pop());
+                            node.setNode3((TransitionOpt) pop());
+                            node.setNode2((TId) pop());
+                            node.setNode1((TLBrace) pop());
+                            push(gotoTable[state()][23], node);
+                        }
+                        break;
+                    case 42:
+                        {
+                            StateListTails1 node = new StateListTails1();
+                            node.setNode2((StateListTails) pop());
+                            node.setNode1((StateListTail) pop());
+                            push(gotoTable[state()][24], node);
+                        }
+                        break;
+                    case 43:
+                        {
+                            StateListTails2 node = new StateListTails2();
+                            push(gotoTable[state()][24], node);
+                        }
+                        break;
+                    case 44:
+                        {
+                            StateListTail1 node = new StateListTail1();
+                            node.setNode3((TransitionOpt) pop());
+                            node.setNode2((TId) pop());
+                            node.setNode1((TComma) pop());
+                            push(gotoTable[state()][25], node);
+                        }
+                        break;
+                    case 45:
+                        {
+                            TransitionOpt1 node = new TransitionOpt1();
+                            node.setNode1((Transition) pop());
+                            push(gotoTable[state()][26], node);
+                        }
+                        break;
+                    case 46:
+                        {
+                            TransitionOpt2 node = new TransitionOpt2();
+                            push(gotoTable[state()][26], node);
+                        }
+                        break;
+                    case 47:
+                        {
+                            Transition1 node = new Transition1();
+                            node.setNode2((TId) pop());
+                            node.setNode1((TArrow) pop());
+                            push(gotoTable[state()][27], node);
+                        }
+                        break;
+                    case 48:
+                        {
+                            IgnTokensOpt1 node = new IgnTokensOpt1();
+                            node.setNode1((IgnTokens) pop());
+                            push(gotoTable[state()][28], node);
+                        }
+                        break;
+                    case 49:
+                        {
+                            IgnTokensOpt2 node = new IgnTokensOpt2();
+                            push(gotoTable[state()][28], node);
+                        }
+                        break;
+                    case 50:
+                        {
+                            IgnTokens1 node = new IgnTokens1();
+                            node.setNode4((TSemicolon) pop());
+                            node.setNode3((IdListOpt) pop());
+                            node.setNode2((TTokens) pop());
+                            node.setNode1((TIgnored) pop());
+                            push(gotoTable[state()][29], node);
+                        }
+                        break;
+                    case 51:
+                        {
+                            LookAheadOpt1 node = new LookAheadOpt1();
+                            node.setNode1((LookAhead) pop());
+                            push(gotoTable[state()][30], node);
+                        }
+                        break;
+                    case 52:
+                        {
+                            LookAheadOpt2 node = new LookAheadOpt2();
+                            push(gotoTable[state()][30], node);
+                        }
+                        break;
+                    case 53:
+                        {
+                            LookAhead1 node = new LookAhead1();
+                            node.setNode2((RegExp) pop());
+                            node.setNode1((TSlash) pop());
+                            push(gotoTable[state()][31], node);
+                        }
+                        break;
+                    case 54:
+                        {
+                            RegExp1 node = new RegExp1();
+                            node.setNode2((RegExpTails) pop());
+                            node.setNode1((Concat) pop());
+                            push(gotoTable[state()][32], node);
+                        }
+                        break;
+                    case 55:
+                        {
+                            RegExpTails1 node = new RegExpTails1();
+                            node.setNode2((RegExpTails) pop());
+                            node.setNode1((RegExpTail) pop());
+                            push(gotoTable[state()][33], node);
+                        }
+                        break;
+                    case 56:
+                        {
+                            RegExpTails2 node = new RegExpTails2();
+                            push(gotoTable[state()][33], node);
+                        }
+                        break;
+                    case 57:
+                        {
+                            RegExpTail1 node = new RegExpTail1();
+                            node.setNode2((Concat) pop());
+                            node.setNode1((TBar) pop());
+                            push(gotoTable[state()][34], node);
+                        }
+                        break;
+                    case 58:
+                        {
+                            Concat1 node = new Concat1();
+                            node.setNode1((UnExps) pop());
+                            push(gotoTable[state()][35], node);
+                        }
+                        break;
+                    case 59:
+                        {
+                            UnExps1 node = new UnExps1();
+                            node.setNode2((UnExps) pop());
+                            node.setNode1((UnExp) pop());
+                            push(gotoTable[state()][36], node);
+                        }
+                        break;
+                    case 60:
+                        {
+                            UnExps2 node = new UnExps2();
+                            push(gotoTable[state()][36], node);
+                        }
+                        break;
+                    case 61:
+                        {
+                            UnExp1 node = new UnExp1();
+                            node.setNode2((UnOpOpt) pop());
+                            node.setNode1((Basic) pop());
+                            push(gotoTable[state()][37], node);
+                        }
+                        break;
+                    case 62:
+                        {
+                            Basic1 node = new Basic1();
+                            node.setNode1((PChar) pop());
+                            push(gotoTable[state()][38], node);
+                        }
+                        break;
+                    case 63:
+                        {
+                            Basic2 node = new Basic2();
+                            node.setNode1((PSet) pop());
+                            push(gotoTable[state()][38], node);
+                        }
+                        break;
+                    case 64:
+                        {
+                            Basic3 node = new Basic3();
+                            node.setNode1((TString) pop());
+                            push(gotoTable[state()][38], node);
+                        }
+                        break;
+                    case 65:
+                        {
+                            Basic4 node = new Basic4();
+                            node.setNode1((TId) pop());
+                            push(gotoTable[state()][38], node);
+                        }
+                        break;
+                    case 66:
+                        {
+                            Basic5 node = new Basic5();
+                            node.setNode3((TRPar) pop());
+                            node.setNode2((RegExp) pop());
+                            node.setNode1((TLPar) pop());
+                            push(gotoTable[state()][38], node);
+                        }
+                        break;
+                    case 67:
+                        {
+                            PChar1 node = new PChar1();
+                            node.setNode1((TChar) pop());
+                            push(gotoTable[state()][39], node);
+                        }
+                        break;
+                    case 68:
+                        {
+                            PChar2 node = new PChar2();
+                            node.setNode1((TDecChar) pop());
+                            push(gotoTable[state()][39], node);
+                        }
+                        break;
+                    case 69:
+                        {
+                            PChar3 node = new PChar3();
+                            node.setNode1((THexChar) pop());
+                            push(gotoTable[state()][39], node);
+                        }
+                        break;
+                    case 70:
+                        {
+                            PSet1 node = new PSet1();
+                            node.setNode5((TRBkt) pop());
+                            node.setNode4((Basic) pop());
+                            node.setNode3((BinOp) pop());
+                            node.setNode2((Basic) pop());
+                            node.setNode1((TLBkt) pop());
+                            push(gotoTable[state()][40], node);
+                        }
+                        break;
+                    case 71:
+                        {
+                            PSet2 node = new PSet2();
+                            node.setNode5((TRBkt) pop());
+                            node.setNode4((PChar) pop());
+                            node.setNode3((TDDot) pop());
+                            node.setNode2((PChar) pop());
+                            node.setNode1((TLBkt) pop());
+                            push(gotoTable[state()][40], node);
+                        }
+                        break;
+                    case 72:
+                        {
+                            UnOpOpt1 node = new UnOpOpt1();
+                            node.setNode1((UnOp) pop());
+                            push(gotoTable[state()][41], node);
+                        }
+                        break;
+                    case 73:
+                        {
+                            UnOpOpt2 node = new UnOpOpt2();
+                            push(gotoTable[state()][41], node);
+                        }
+                        break;
+                    case 74:
+                        {
+                            UnOp1 node = new UnOp1();
+                            node.setNode1((TStar) pop());
+                            push(gotoTable[state()][42], node);
+                        }
+                        break;
+                    case 75:
+                        {
+                            UnOp2 node = new UnOp2();
+                            node.setNode1((TQMark) pop());
+                            push(gotoTable[state()][42], node);
+                        }
+                        break;
+                    case 76:
+                        {
+                            UnOp3 node = new UnOp3();
+                            node.setNode1((TPlus) pop());
+                            push(gotoTable[state()][42], node);
+                        }
+                        break;
+                    case 77:
+                        {
+                            BinOp1 node = new BinOp1();
+                            node.setNode1((TPlus) pop());
+                            push(gotoTable[state()][43], node);
+                        }
+                        break;
+                    case 78:
+                        {
+                            BinOp2 node = new BinOp2();
+                            node.setNode1((TMinus) pop());
+                            push(gotoTable[state()][43], node);
+                        }
+                        break;
+                    case 79:
+                        {
+                            ProductionsOpt1 node = new ProductionsOpt1();
+                            node.setNode1((Productions) pop());
+                            push(gotoTable[state()][44], node);
+                        }
+                        break;
+                    case 80:
+                        {
+                            ProductionsOpt2 node = new ProductionsOpt2();
+                            push(gotoTable[state()][44], node);
+                        }
+                        break;
+                    case 81:
+                        {
+                            Productions1 node = new Productions1();
+                            node.setNode2((Prods) pop());
+                            node.setNode1((TProductions) pop());
+                            push(gotoTable[state()][45], node);
+                        }
+                        break;
+                    case 82:
+                        {
+                            Prods1 node = new Prods1();
+                            node.setNode2((Prods) pop());
+                            node.setNode1((Prod) pop());
+                            push(gotoTable[state()][46], node);
+                        }
+                        break;
+                    case 83:
+                        {
+                            Prods2 node = new Prods2();
+                            push(gotoTable[state()][46], node);
+                        }
+                        break;
+                    case 84:
+                        {
+                            Prod1 node = new Prod1();
+                            node.setNode4((TSemicolon) pop());
+                            node.setNode3((Alts) pop());
+                            node.setNode2((TEqual) pop());
+                            node.setNode1((TId) pop());
+                            push(gotoTable[state()][47], node);
+                        }
+                        break;
+                    case 85:
+                        {
+                            Alts1 node = new Alts1();
+                            node.setNode2((AltsTails) pop());
+                            node.setNode1((Alt) pop());
+                            push(gotoTable[state()][48], node);
+                        }
+                        break;
+                    case 86:
+                        {
+                            AltsTails1 node = new AltsTails1();
+                            node.setNode2((AltsTails) pop());
+                            node.setNode1((AltsTail) pop());
+                            push(gotoTable[state()][49], node);
+                        }
+                        break;
+                    case 87:
+                        {
+                            AltsTails2 node = new AltsTails2();
+                            push(gotoTable[state()][49], node);
+                        }
+                        break;
+                    case 88:
+                        {
+                            AltsTail1 node = new AltsTail1();
+                            node.setNode2((Alt) pop());
+                            node.setNode1((TBar) pop());
+                            push(gotoTable[state()][50], node);
+                        }
+                        break;
+                    case 89:
+                        {
+                            Alt1 node = new Alt1();
+                            node.setNode2((Elems) pop());
+                            node.setNode1((AltNameOpt) pop());
+                            push(gotoTable[state()][51], node);
+                        }
+                        break;
+                    case 90:
+                        {
+                            Alt2 node = new Alt2();
+                            node.setNode4((TRPar) pop());
+                            node.setNode3((Elems) pop());
+                            node.setNode2((AltNameOpt) pop());
+                            node.setNode1((TLPar) pop());
+                            push(gotoTable[state()][51], node);
+                        }
+                        break;
+                    case 91:
+                        {
+                            AltNameOpt1 node = new AltNameOpt1();
+                            node.setNode1((AltName) pop());
+                            push(gotoTable[state()][52], node);
+                        }
+                        break;
+                    case 92:
+                        {
+                            AltNameOpt2 node = new AltNameOpt2();
+                            push(gotoTable[state()][52], node);
+                        }
+                        break;
+                    case 93:
+                        {
+                            AltName1 node = new AltName1();
+                            node.setNode3((TRBrace) pop());
+                            node.setNode2((TId) pop());
+                            node.setNode1((TLBrace) pop());
+                            push(gotoTable[state()][53], node);
+                        }
+                        break;
+                    case 94:
+                        {
+                            Elems1 node = new Elems1();
+                            node.setNode2((Elems) pop());
+                            node.setNode1((Elem) pop());
+                            push(gotoTable[state()][54], node);
+                        }
+                        break;
+                    case 95:
+                        {
+                            Elems2 node = new Elems2();
+                            push(gotoTable[state()][54], node);
+                        }
+                        break;
+                    case 96:
+                        {
+                            Elem1 node = new Elem1();
+                            node.setNode4((UnOpOpt) pop());
+                            node.setNode3((TId) pop());
+                            node.setNode2((SpecifierOpt) pop());
+                            node.setNode1((ElemNameOpt) pop());
+                            push(gotoTable[state()][55], node);
+                        }
+                        break;
+                    case 97:
+                        {
+                            ElemNameOpt1 node = new ElemNameOpt1();
+                            node.setNode1((ElemName) pop());
+                            push(gotoTable[state()][56], node);
+                        }
+                        break;
+                    case 98:
+                        {
+                            ElemNameOpt2 node = new ElemNameOpt2();
+                            push(gotoTable[state()][56], node);
+                        }
+                        break;
+                    case 99:
+                        {
+                            ElemName1 node = new ElemName1();
+                            node.setNode4((TColon) pop());
+                            node.setNode3((TRBkt) pop());
+                            node.setNode2((TId) pop());
+                            node.setNode1((TLBkt) pop());
+                            push(gotoTable[state()][57], node);
+                        }
+                        break;
+                    case 100:
+                        {
+                            SpecifierOpt1 node = new SpecifierOpt1();
+                            node.setNode1((Specifier) pop());
+                            push(gotoTable[state()][58], node);
+                        }
+                        break;
+                    case 101:
+                        {
+                            SpecifierOpt2 node = new SpecifierOpt2();
+                            push(gotoTable[state()][58], node);
+                        }
+                        break;
+                    case 102:
+                        {
+                            Specifier1 node = new Specifier1();
+                            node.setNode2((TDot) pop());
+                            node.setNode1((TTokenSpecifier) pop());
+                            push(gotoTable[state()][59], node);
+                        }
+                        break;
+                    case 103:
+                        {
+                            Specifier2 node = new Specifier2();
+                            node.setNode2((TDot) pop());
+                            node.setNode1((TProductionSpecifier) pop());
+                            push(gotoTable[state()][59], node);
+                        }
+                        break;
+                    }
+                    break;
+                case ACCEPT:
+                    {
+                        Start1 node = new Start1();
+                        node.setNode1((Grammar) pop());
+                        node.setNode2((EOF) lexer.next());
+                        return node;
+                    }
+                case ERROR:
+                    throw new ParserException(
+                        "[" + last_line + "," + last_pos + "] " +
+//                        errors[last_shift]);
+                        errors[action[1]]);
+            }
+        }
+    }
+
+    private final static int SHIFT = 0;
+    private final static int REDUCE = 1;
+    private final static int ACCEPT = 2;
+    private final static int ERROR = 3;
+    private /*final*/ static int[][][] actionTable; /* =
+        {
+            {{SHIFT, 1}, {REDUCE, 2}, {REDUCE, 2}, {REDUCE, 2}, {REDUCE, 2}, {REDUCE, 2}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {ERROR, 0}, {REDUCE, 2}, },
+            {{SHIFT, 5}, {SHIFT, 6}, {SHIFT, 7}, {SHIFT, 8}, {SHIFT, 9}, {SHIFT, 10}, {SHIFT, 11}, {SHIFT, 12}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {SHIFT, 13}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {ERROR, 1}, {SHIFT, 14}, {ERROR, 1}, },
+            {{ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ERROR, 2}, {ACCEPT}, },
+            {{ERROR, 3}, {REDUCE, 20}, {SHIFT, 18}, {REDUCE, 20}, {REDUCE, 20}, {REDUCE, 20}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {ERROR, 3}, {REDUCE, 20}, },
+            {{ERROR, 4}, {REDUCE, 1}, {REDUCE, 1}, {REDUCE, 1}, {REDUCE, 1}, {REDUCE, 1}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {ERROR, 4}, {REDUCE, 1}, },
+            {{ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {REDUCE, 9}, {ERROR, 5}, {REDUCE, 9}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, {ERROR, 5}, },
+            {{ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {REDUCE, 10}, {ERROR, 6}, {REDUCE, 10}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, {ERROR, 6}, },
+            {{ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {REDUCE, 11}, {ERROR, 7}, {REDUCE, 11}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, {ERROR, 7}, },
+            {{ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {REDUCE, 12}, {ERROR, 8}, {REDUCE, 12}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, {ERROR, 8}, },
+            {{ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {REDUCE, 13}, {ERROR, 9}, {REDUCE, 13}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, {ERROR, 9}, },
+            {{ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {REDUCE, 14}, {ERROR, 10}, {REDUCE, 14}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, {ERROR, 10}, },
+            {{ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {REDUCE, 15}, {ERROR, 11}, {REDUCE, 15}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, {ERROR, 11}, },
+            {{ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {REDUCE, 16}, {ERROR, 12}, {REDUCE, 16}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, {ERROR, 12}, },
+            {{ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {REDUCE, 17}, {ERROR, 13}, {REDUCE, 17}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, {ERROR, 13}, },
+            {{ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {REDUCE, 18}, {ERROR, 14}, {REDUCE, 18}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, {ERROR, 14}, },
+            {{ERROR, 15}, {REDUCE, 3}, {REDUCE, 3}, {REDUCE, 3}, {REDUCE, 3}, {REDUCE, 3}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {ERROR, 15}, {REDUCE, 3}, },
+            {{ERROR, 16}, {REDUCE, 4}, {REDUCE, 4}, {REDUCE, 4}, {REDUCE, 4}, {REDUCE, 4}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {ERROR, 16}, {REDUCE, 4}, },
+            {{ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {SHIFT, 21}, {ERROR, 17}, {REDUCE, 7}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, {ERROR, 17}, },
+            {{ERROR, 18}, {REDUCE, 23}, {ERROR, 18}, {REDUCE, 23}, {REDUCE, 23}, {REDUCE, 23}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {SHIFT, 24}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {ERROR, 18}, {REDUCE, 23}, },
+            {{ERROR, 19}, {SHIFT, 27}, {ERROR, 19}, {REDUCE, 26}, {REDUCE, 26}, {REDUCE, 26}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {ERROR, 19}, {REDUCE, 26}, },
+            {{ERROR, 20}, {REDUCE, 19}, {ERROR, 20}, {REDUCE, 19}, {REDUCE, 19}, {REDUCE, 19}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {ERROR, 20}, {REDUCE, 19}, },
+            {{SHIFT, 5}, {SHIFT, 6}, {SHIFT, 7}, {SHIFT, 8}, {SHIFT, 9}, {SHIFT, 10}, {SHIFT, 11}, {SHIFT, 12}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {SHIFT, 13}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {ERROR, 21}, {SHIFT, 14}, {ERROR, 21}, },
+            {{ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {SHIFT, 31}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, {ERROR, 22}, },
+            {{ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {SHIFT, 21}, {ERROR, 23}, {REDUCE, 7}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, {ERROR, 23}, },
+            {{ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {SHIFT, 33}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, {ERROR, 24}, },
+            {{ERROR, 25}, {REDUCE, 21}, {ERROR, 25}, {REDUCE, 21}, {REDUCE, 21}, {REDUCE, 21}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {ERROR, 25}, {REDUCE, 21}, },
+            {{ERROR, 26}, {REDUCE, 23}, {ERROR, 26}, {REDUCE, 23}, {REDUCE, 23}, {REDUCE, 23}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {SHIFT, 24}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {ERROR, 26}, {REDUCE, 23}, },
+            {{ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {SHIFT, 35}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, {ERROR, 27}, },
+            {{ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {SHIFT, 38}, {REDUCE, 34}, {REDUCE, 34}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {ERROR, 28}, {REDUCE, 34}, },
+            {{ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {REDUCE, 25}, {REDUCE, 25}, {REDUCE, 25}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {ERROR, 29}, {REDUCE, 25}, },
+            {{ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {REDUCE, 8}, {ERROR, 30}, {REDUCE, 8}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, {ERROR, 30}, },
+            {{ERROR, 31}, {REDUCE, 5}, {REDUCE, 5}, {REDUCE, 5}, {REDUCE, 5}, {REDUCE, 5}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {ERROR, 31}, {REDUCE, 5}, },
+            {{ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {REDUCE, 6}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, {ERROR, 32}, },
+            {{ERROR, 33}, {ERROR, 33}, {ERROR, 33}, {ERROR, 33}, {ERROR, 33}, {ERROR, 33}, {ERROR, 33}, {ERROR, 33}, {ERROR, 33}, {ERROR, 33}, {REDUCE, 60}, {ERROR, 33}, {SHIFT, 41}, {ERROR, 33}, {SHIFT, 42}, {ERROR, 33}, {ERROR, 33}, {ERROR, 33}, {ERROR, 33}, {ERROR, 33}, {ERROR, 33}, {ERROR, 33}, {REDUCE, 60}, {ERROR, 33}, {ERROR, 33}, {ERROR, 33}, {ERROR, 33}, {SHIFT, 43}, {SHIFT, 44}, {SHIFT, 45}, {SHIFT, 46}, {SHIFT, 47}, {ERROR, 33}, {ERROR, 33}, },
+            {{ERROR, 34}, {REDUCE, 22}, {ERROR, 34}, {REDUCE, 22}, {REDUCE, 22}, {REDUCE, 22}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {ERROR, 34}, {REDUCE, 22}, },
+            {{ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {REDUCE, 31}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {SHIFT, 55}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, {ERROR, 35}, },
+            {{ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {SHIFT, 58}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, {ERROR, 36}, },
+            {{ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {REDUCE, 28}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, {ERROR, 37}, },
+            {{ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {REDUCE, 37}, {REDUCE, 37}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {SHIFT, 59}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {REDUCE, 40}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {ERROR, 38}, {REDUCE, 37}, },
+            {{ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {SHIFT, 64}, {REDUCE, 49}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {ERROR, 39}, {REDUCE, 49}, },
+            {{ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {REDUCE, 33}, {REDUCE, 33}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {ERROR, 40}, {REDUCE, 33}, },
+            {{ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {SHIFT, 41}, {ERROR, 41}, {SHIFT, 42}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {ERROR, 41}, {SHIFT, 43}, {SHIFT, 44}, {SHIFT, 45}, {SHIFT, 46}, {SHIFT, 47}, {ERROR, 41}, {ERROR, 41}, },
+            {{ERROR, 42}, {ERROR, 42}, {ERROR, 42}, {ERROR, 42}, {ERROR, 42}, {ERROR, 42}, {ERROR, 42}, {ERROR, 42}, {ERROR, 42}, {ERROR, 42}, {ERROR, 42}, {ERROR, 42}, {SHIFT, 41}, {ERROR, 42}, {SHIFT, 42}, {REDUCE, 60}, {ERROR, 42}, {ERROR, 42}, {ERROR, 42}, {ERROR, 42}, {ERROR, 42}, {ERROR, 42}, {REDUCE, 60}, {ERROR, 42}, {ERROR, 42}, {ERROR, 42}, {ERROR, 42}, {SHIFT, 43}, {SHIFT, 44}, {SHIFT, 45}, {SHIFT, 46}, {SHIFT, 47}, {ERROR, 42}, {ERROR, 42}, },
+            {{ERROR, 43}, {ERROR, 43}, {ERROR, 43}, {ERROR, 43}, {ERROR, 43}, {ERROR, 43}, {ERROR, 43}, {ERROR, 43}, {ERROR, 43}, {ERROR, 43}, {REDUCE, 65}, {ERROR, 43}, {REDUCE, 65}, {REDUCE, 65}, {REDUCE, 65}, {REDUCE, 65}, {ERROR, 43}, {ERROR, 43}, {REDUCE, 65}, {REDUCE, 65}, {REDUCE, 65}, {REDUCE, 65}, {REDUCE, 65}, {ERROR, 43}, {REDUCE, 65}, {ERROR, 43}, {ERROR, 43}, {REDUCE, 65}, {REDUCE, 65}, {REDUCE, 65}, {REDUCE, 65}, {REDUCE, 65}, {ERROR, 43}, {ERROR, 43}, },
+            {{ERROR, 44}, {ERROR, 44}, {ERROR, 44}, {ERROR, 44}, {ERROR, 44}, {ERROR, 44}, {ERROR, 44}, {ERROR, 44}, {ERROR, 44}, {REDUCE, 67}, {REDUCE, 67}, {ERROR, 44}, {REDUCE, 67}, {REDUCE, 67}, {REDUCE, 67}, {REDUCE, 67}, {ERROR, 44}, {ERROR, 44}, {REDUCE, 67}, {REDUCE, 67}, {REDUCE, 67}, {REDUCE, 67}, {REDUCE, 67}, {ERROR, 44}, {REDUCE, 67}, {ERROR, 44}, {ERROR, 44}, {REDUCE, 67}, {REDUCE, 67}, {REDUCE, 67}, {REDUCE, 67}, {REDUCE, 67}, {ERROR, 44}, {ERROR, 44}, },
+            {{ERROR, 45}, {ERROR, 45}, {ERROR, 45}, {ERROR, 45}, {ERROR, 45}, {ERROR, 45}, {ERROR, 45}, {ERROR, 45}, {ERROR, 45}, {REDUCE, 68}, {REDUCE, 68}, {ERROR, 45}, {REDUCE, 68}, {REDUCE, 68}, {REDUCE, 68}, {REDUCE, 68}, {ERROR, 45}, {ERROR, 45}, {REDUCE, 68}, {REDUCE, 68}, {REDUCE, 68}, {REDUCE, 68}, {REDUCE, 68}, {ERROR, 45}, {REDUCE, 68}, {ERROR, 45}, {ERROR, 45}, {REDUCE, 68}, {REDUCE, 68}, {REDUCE, 68}, {REDUCE, 68}, {REDUCE, 68}, {ERROR, 45}, {ERROR, 45}, },
+            {{ERROR, 46}, {ERROR, 46}, {ERROR, 46}, {ERROR, 46}, {ERROR, 46}, {ERROR, 46}, {ERROR, 46}, {ERROR, 46}, {ERROR, 46}, {REDUCE, 69}, {REDUCE, 69}, {ERROR, 46}, {REDUCE, 69}, {REDUCE, 69}, {REDUCE, 69}, {REDUCE, 69}, {ERROR, 46}, {ERROR, 46}, {REDUCE, 69}, {REDUCE, 69}, {REDUCE, 69}, {REDUCE, 69}, {REDUCE, 69}, {ERROR, 46}, {REDUCE, 69}, {ERROR, 46}, {ERROR, 46}, {REDUCE, 69}, {REDUCE, 69}, {REDUCE, 69}, {REDUCE, 69}, {REDUCE, 69}, {ERROR, 46}, {ERROR, 46}, },
+            {{ERROR, 47}, {ERROR, 47}, {ERROR, 47}, {ERROR, 47}, {ERROR, 47}, {ERROR, 47}, {ERROR, 47}, {ERROR, 47}, {ERROR, 47}, {ERROR, 47}, {REDUCE, 64}, {ERROR, 47}, {REDUCE, 64}, {REDUCE, 64}, {REDUCE, 64}, {REDUCE, 64}, {ERROR, 47}, {ERROR, 47}, {REDUCE, 64}, {REDUCE, 64}, {REDUCE, 64}, {REDUCE, 64}, {REDUCE, 64}, {ERROR, 47}, {REDUCE, 64}, {ERROR, 47}, {ERROR, 47}, {REDUCE, 64}, {REDUCE, 64}, {REDUCE, 64}, {REDUCE, 64}, {REDUCE, 64}, {ERROR, 47}, {ERROR, 47}, },
+            {{ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {SHIFT, 70}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, {ERROR, 48}, },
+            {{ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {REDUCE, 56}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {REDUCE, 56}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {SHIFT, 71}, {ERROR, 49}, {REDUCE, 56}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, {ERROR, 49}, },
+            {{ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {REDUCE, 58}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {REDUCE, 58}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {REDUCE, 58}, {ERROR, 50}, {REDUCE, 58}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, {ERROR, 50}, },
+            {{ERROR, 51}, {ERROR, 51}, {ERROR, 51}, {ERROR, 51}, {ERROR, 51}, {ERROR, 51}, {ERROR, 51}, {ERROR, 51}, {ERROR, 51}, {ERROR, 51}, {REDUCE, 60}, {ERROR, 51}, {SHIFT, 41}, {ERROR, 51}, {SHIFT, 42}, {REDUCE, 60}, {ERROR, 51}, {ERROR, 51}, {ERROR, 51}, {ERROR, 51}, {ERROR, 51}, {ERROR, 51}, {REDUCE, 60}, {ERROR, 51}, {REDUCE, 60}, {ERROR, 51}, {ERROR, 51}, {SHIFT, 43}, {SHIFT, 44}, {SHIFT, 45}, {SHIFT, 46}, {SHIFT, 47}, {ERROR, 51}, {ERROR, 51}, },
+            {{ERROR, 52}, {ERROR, 52}, {ERROR, 52}, {ERROR, 52}, {ERROR, 52}, {ERROR, 52}, {ERROR, 52}, {ERROR, 52}, {ERROR, 52}, {ERROR, 52}, {REDUCE, 73}, {ERROR, 52}, {REDUCE, 73}, {ERROR, 52}, {REDUCE, 73}, {REDUCE, 73}, {ERROR, 52}, {ERROR, 52}, {SHIFT, 75}, {ERROR, 52}, {SHIFT, 76}, {SHIFT, 77}, {REDUCE, 73}, {ERROR, 52}, {REDUCE, 73}, {ERROR, 52}, {ERROR, 52}, {REDUCE, 73}, {REDUCE, 73}, {REDUCE, 73}, {REDUCE, 73}, {REDUCE, 73}, {ERROR, 52}, {ERROR, 52}, },
+            {{ERROR, 53}, {ERROR, 53}, {ERROR, 53}, {ERROR, 53}, {ERROR, 53}, {ERROR, 53}, {ERROR, 53}, {ERROR, 53}, {ERROR, 53}, {ERROR, 53}, {REDUCE, 62}, {ERROR, 53}, {REDUCE, 62}, {REDUCE, 62}, {REDUCE, 62}, {REDUCE, 62}, {ERROR, 53}, {ERROR, 53}, {REDUCE, 62}, {ERROR, 53}, {REDUCE, 62}, {REDUCE, 62}, {REDUCE, 62}, {ERROR, 53}, {REDUCE, 62}, {ERROR, 53}, {ERROR, 53}, {REDUCE, 62}, {REDUCE, 62}, {REDUCE, 62}, {REDUCE, 62}, {REDUCE, 62}, {ERROR, 53}, {ERROR, 53}, },
+            {{ERROR, 54}, {ERROR, 54}, {ERROR, 54}, {ERROR, 54}, {ERROR, 54}, {ERROR, 54}, {ERROR, 54}, {ERROR, 54}, {ERROR, 54}, {ERROR, 54}, {REDUCE, 63}, {ERROR, 54}, {REDUCE, 63}, {REDUCE, 63}, {REDUCE, 63}, {REDUCE, 63}, {ERROR, 54}, {ERROR, 54}, {REDUCE, 63}, {REDUCE, 63}, {REDUCE, 63}, {REDUCE, 63}, {REDUCE, 63}, {ERROR, 54}, {REDUCE, 63}, {ERROR, 54}, {ERROR, 54}, {REDUCE, 63}, {REDUCE, 63}, {REDUCE, 63}, {REDUCE, 63}, {REDUCE, 63}, {ERROR, 54}, {ERROR, 54}, },
+            {{ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {SHIFT, 80}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, {ERROR, 55}, },
+            {{ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {REDUCE, 29}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, {ERROR, 56}, },
+            {{ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {REDUCE, 31}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {SHIFT, 55}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, {ERROR, 57}, },
+            {{ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {REDUCE, 27}, {REDUCE, 27}, {REDUCE, 27}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {ERROR, 58}, {REDUCE, 27}, },
+            {{ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {SHIFT, 82}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, {ERROR, 59}, },
+            {{ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {REDUCE, 35}, {REDUCE, 35}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {ERROR, 60}, {REDUCE, 35}, },
+            {{ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {REDUCE, 37}, {REDUCE, 37}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {SHIFT, 59}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {REDUCE, 40}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {ERROR, 61}, {REDUCE, 37}, },
+            {{ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {SHIFT, 84}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, {ERROR, 62}, },
+            {{ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {REDUCE, 39}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, {ERROR, 63}, },
+            {{ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {SHIFT, 85}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, {ERROR, 64}, },
+            {{ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {SHIFT, 86}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {ERROR, 65}, {REDUCE, 80}, },
+            {{ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {REDUCE, 48}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {ERROR, 66}, {REDUCE, 48}, },
+            {{ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {SHIFT, 89}, {SHIFT, 90}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, {ERROR, 67}, },
+            {{ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {SHIFT, 92}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {REDUCE, 62}, {REDUCE, 62}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, {ERROR, 68}, },
+            {{ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {SHIFT, 93}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, {ERROR, 69}, },
+            {{ERROR, 70}, {REDUCE, 24}, {ERROR, 70}, {REDUCE, 24}, {REDUCE, 24}, {REDUCE, 24}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {REDUCE, 24}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {ERROR, 70}, {REDUCE, 24}, },
+            {{ERROR, 71}, {ERROR, 71}, {ERROR, 71}, {ERROR, 71}, {ERROR, 71}, {ERROR, 71}, {ERROR, 71}, {ERROR, 71}, {ERROR, 71}, {ERROR, 71}, {REDUCE, 60}, {ERROR, 71}, {SHIFT, 41}, {ERROR, 71}, {SHIFT, 42}, {REDUCE, 60}, {ERROR, 71}, {ERROR, 71}, {ERROR, 71}, {ERROR, 71}, {ERROR, 71}, {ERROR, 71}, {REDUCE, 60}, {ERROR, 71}, {REDUCE, 60}, {ERROR, 71}, {ERROR, 71}, {SHIFT, 43}, {SHIFT, 44}, {SHIFT, 45}, {SHIFT, 46}, {SHIFT, 47}, {ERROR, 71}, {ERROR, 71}, },
+            {{ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {REDUCE, 54}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {REDUCE, 54}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {REDUCE, 54}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, {ERROR, 72}, },
+            {{ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {REDUCE, 56}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {REDUCE, 56}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {SHIFT, 71}, {ERROR, 73}, {REDUCE, 56}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, {ERROR, 73}, },
+            {{ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {REDUCE, 59}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {REDUCE, 59}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {REDUCE, 59}, {ERROR, 74}, {REDUCE, 59}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, {ERROR, 74}, },
+            {{ERROR, 75}, {ERROR, 75}, {ERROR, 75}, {ERROR, 75}, {ERROR, 75}, {ERROR, 75}, {REDUCE, 76}, {REDUCE, 76}, {ERROR, 75}, {ERROR, 75}, {REDUCE, 76}, {ERROR, 75}, {REDUCE, 76}, {ERROR, 75}, {REDUCE, 76}, {REDUCE, 76}, {ERROR, 75}, {ERROR, 75}, {ERROR, 75}, {ERROR, 75}, {ERROR, 75}, {ERROR, 75}, {REDUCE, 76}, {ERROR, 75}, {REDUCE, 76}, {ERROR, 75}, {ERROR, 75}, {REDUCE, 76}, {REDUCE, 76}, {REDUCE, 76}, {REDUCE, 76}, {REDUCE, 76}, {ERROR, 75}, {ERROR, 75}, },
+            {{ERROR, 76}, {ERROR, 76}, {ERROR, 76}, {ERROR, 76}, {ERROR, 76}, {ERROR, 76}, {REDUCE, 75}, {REDUCE, 75}, {ERROR, 76}, {ERROR, 76}, {REDUCE, 75}, {ERROR, 76}, {REDUCE, 75}, {ERROR, 76}, {REDUCE, 75}, {REDUCE, 75}, {ERROR, 76}, {ERROR, 76}, {ERROR, 76}, {ERROR, 76}, {ERROR, 76}, {ERROR, 76}, {REDUCE, 75}, {ERROR, 76}, {REDUCE, 75}, {ERROR, 76}, {ERROR, 76}, {REDUCE, 75}, {REDUCE, 75}, {REDUCE, 75}, {REDUCE, 75}, {REDUCE, 75}, {ERROR, 76}, {ERROR, 76}, },
+            {{ERROR, 77}, {ERROR, 77}, {ERROR, 77}, {ERROR, 77}, {ERROR, 77}, {ERROR, 77}, {REDUCE, 74}, {REDUCE, 74}, {ERROR, 77}, {ERROR, 77}, {REDUCE, 74}, {ERROR, 77}, {REDUCE, 74}, {ERROR, 77}, {REDUCE, 74}, {REDUCE, 74}, {ERROR, 77}, {ERROR, 77}, {ERROR, 77}, {ERROR, 77}, {ERROR, 77}, {ERROR, 77}, {REDUCE, 74}, {ERROR, 77}, {REDUCE, 74}, {ERROR, 77}, {ERROR, 77}, {REDUCE, 74}, {REDUCE, 74}, {REDUCE, 74}, {REDUCE, 74}, {REDUCE, 74}, {ERROR, 77}, {ERROR, 77}, },
+            {{ERROR, 78}, {ERROR, 78}, {ERROR, 78}, {ERROR, 78}, {ERROR, 78}, {ERROR, 78}, {ERROR, 78}, {ERROR, 78}, {ERROR, 78}, {ERROR, 78}, {REDUCE, 61}, {ERROR, 78}, {REDUCE, 61}, {ERROR, 78}, {REDUCE, 61}, {REDUCE, 61}, {ERROR, 78}, {ERROR, 78}, {ERROR, 78}, {ERROR, 78}, {ERROR, 78}, {ERROR, 78}, {REDUCE, 61}, {ERROR, 78}, {REDUCE, 61}, {ERROR, 78}, {ERROR, 78}, {REDUCE, 61}, {REDUCE, 61}, {REDUCE, 61}, {REDUCE, 61}, {REDUCE, 61}, {ERROR, 78}, {ERROR, 78}, },
+            {{ERROR, 79}, {ERROR, 79}, {ERROR, 79}, {ERROR, 79}, {ERROR, 79}, {ERROR, 79}, {REDUCE, 72}, {REDUCE, 72}, {ERROR, 79}, {ERROR, 79}, {REDUCE, 72}, {ERROR, 79}, {REDUCE, 72}, {ERROR, 79}, {REDUCE, 72}, {REDUCE, 72}, {ERROR, 79}, {ERROR, 79}, {ERROR, 79}, {ERROR, 79}, {ERROR, 79}, {ERROR, 79}, {REDUCE, 72}, {ERROR, 79}, {REDUCE, 72}, {ERROR, 79}, {ERROR, 79}, {REDUCE, 72}, {REDUCE, 72}, {REDUCE, 72}, {REDUCE, 72}, {REDUCE, 72}, {ERROR, 79}, {ERROR, 79}, },
+            {{ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {REDUCE, 32}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {REDUCE, 32}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, {ERROR, 80}, },
+            {{ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {REDUCE, 30}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, {ERROR, 81}, },
+            {{ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {REDUCE, 46}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {REDUCE, 46}, {ERROR, 82}, {SHIFT, 96}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, {ERROR, 82}, },
+            {{ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {REDUCE, 36}, {REDUCE, 36}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {ERROR, 83}, {REDUCE, 36}, },
+            {{ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {SHIFT, 99}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, {ERROR, 84}, },
+            {{ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {SHIFT, 35}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, {ERROR, 85}, },
+            {{ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {SHIFT, 101}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {ERROR, 86}, {REDUCE, 83}, },
+            {{ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {ERROR, 87}, {REDUCE, 0}, },
+            {{ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {ERROR, 88}, {REDUCE, 79}, },
+            {{ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {REDUCE, 77}, {ERROR, 89}, {REDUCE, 77}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {ERROR, 89}, {REDUCE, 77}, {REDUCE, 77}, {REDUCE, 77}, {REDUCE, 77}, {REDUCE, 77}, {ERROR, 89}, {ERROR, 89}, },
+            {{ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {REDUCE, 78}, {ERROR, 90}, {REDUCE, 78}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {ERROR, 90}, {REDUCE, 78}, {REDUCE, 78}, {REDUCE, 78}, {REDUCE, 78}, {REDUCE, 78}, {ERROR, 90}, {ERROR, 90}, },
+            {{ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {SHIFT, 41}, {ERROR, 91}, {SHIFT, 42}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {ERROR, 91}, {SHIFT, 43}, {SHIFT, 44}, {SHIFT, 45}, {SHIFT, 46}, {SHIFT, 47}, {ERROR, 91}, {ERROR, 91}, },
+            {{ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, {SHIFT, 44}, {SHIFT, 45}, {SHIFT, 46}, {ERROR, 92}, {ERROR, 92}, {ERROR, 92}, },
+            {{ERROR, 93}, {ERROR, 93}, {ERROR, 93}, {ERROR, 93}, {ERROR, 93}, {ERROR, 93}, {ERROR, 93}, {ERROR, 93}, {ERROR, 93}, {ERROR, 93}, {REDUCE, 66}, {ERROR, 93}, {REDUCE, 66}, {REDUCE, 66}, {REDUCE, 66}, {REDUCE, 66}, {ERROR, 93}, {ERROR, 93}, {REDUCE, 66}, {REDUCE, 66}, {REDUCE, 66}, {REDUCE, 66}, {REDUCE, 66}, {ERROR, 93}, {REDUCE, 66}, {ERROR, 93}, {ERROR, 93}, {REDUCE, 66}, {REDUCE, 66}, {REDUCE, 66}, {REDUCE, 66}, {REDUCE, 66}, {ERROR, 93}, {ERROR, 93}, },
+            {{ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {REDUCE, 57}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {REDUCE, 57}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {REDUCE, 57}, {ERROR, 94}, {REDUCE, 57}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, {ERROR, 94}, },
+            {{ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {REDUCE, 55}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {REDUCE, 55}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {REDUCE, 55}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, {ERROR, 95}, },
+            {{ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {SHIFT, 106}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, {ERROR, 96}, },
+            {{ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {REDUCE, 43}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {SHIFT, 107}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, {ERROR, 97}, },
+            {{ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {REDUCE, 45}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {REDUCE, 45}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, {ERROR, 98}, },
+            {{ERROR, 99}, {ERROR, 99}, {ERROR, 99}, {ERROR, 99}, {ERROR, 99}, {ERROR, 99}, {ERROR, 99}, {ERROR, 99}, {ERROR, 99}, {ERROR, 99}, {REDUCE, 60}, {ERROR, 99}, {SHIFT, 41}, {ERROR, 99}, {SHIFT, 42}, {ERROR, 99}, {ERROR, 99}, {ERROR, 99}, {ERROR, 99}, {ERROR, 99}, {ERROR, 99}, {ERROR, 99}, {REDUCE, 60}, {ERROR, 99}, {REDUCE, 60}, {ERROR, 99}, {ERROR, 99}, {SHIFT, 43}, {SHIFT, 44}, {SHIFT, 45}, {SHIFT, 46}, {SHIFT, 47}, {ERROR, 99}, {ERROR, 99}, },
+            {{ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {SHIFT, 111}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, {ERROR, 100}, },
+            {{ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {SHIFT, 112}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, {ERROR, 101}, },
+            {{ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {ERROR, 102}, {REDUCE, 81}, },
+            {{ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {SHIFT, 101}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {ERROR, 103}, {REDUCE, 83}, },
+            {{ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {SHIFT, 114}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, {ERROR, 104}, },
+            {{ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {SHIFT, 115}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, {ERROR, 105}, },
+            {{ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {REDUCE, 47}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {REDUCE, 47}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, {ERROR, 106}, },
+            {{ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {SHIFT, 116}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, {ERROR, 107}, },
+            {{ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {SHIFT, 117}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, {ERROR, 108}, },
+            {{ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {REDUCE, 43}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {SHIFT, 107}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, {ERROR, 109}, },
+            {{ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {REDUCE, 52}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {SHIFT, 119}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, {ERROR, 110}, },
+            {{ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {REDUCE, 50}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {ERROR, 111}, {REDUCE, 50}, },
+            {{ERROR, 112}, {ERROR, 112}, {ERROR, 112}, {ERROR, 112}, {ERROR, 112}, {ERROR, 112}, {REDUCE, 92}, {REDUCE, 92}, {ERROR, 112}, {ERROR, 112}, {REDUCE, 92}, {ERROR, 112}, {REDUCE, 92}, {ERROR, 112}, {SHIFT, 122}, {ERROR, 112}, {SHIFT, 123}, {ERROR, 112}, {ERROR, 112}, {ERROR, 112}, {ERROR, 112}, {ERROR, 112}, {REDUCE, 92}, {ERROR, 112}, {ERROR, 112}, {ERROR, 112}, {ERROR, 112}, {REDUCE, 92}, {ERROR, 112}, {ERROR, 112}, {ERROR, 112}, {ERROR, 112}, {ERROR, 112}, {ERROR, 112}, },
+            {{ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {ERROR, 113}, {REDUCE, 82}, },
+            {{ERROR, 114}, {ERROR, 114}, {ERROR, 114}, {ERROR, 114}, {ERROR, 114}, {ERROR, 114}, {ERROR, 114}, {ERROR, 114}, {ERROR, 114}, {ERROR, 114}, {REDUCE, 70}, {ERROR, 114}, {REDUCE, 70}, {REDUCE, 70}, {REDUCE, 70}, {REDUCE, 70}, {ERROR, 114}, {ERROR, 114}, {REDUCE, 70}, {REDUCE, 70}, {REDUCE, 70}, {REDUCE, 70}, {REDUCE, 70}, {ERROR, 114}, {REDUCE, 70}, {ERROR, 114}, {ERROR, 114}, {REDUCE, 70}, {REDUCE, 70}, {REDUCE, 70}, {REDUCE, 70}, {REDUCE, 70}, {ERROR, 114}, {ERROR, 114}, },
+            {{ERROR, 115}, {ERROR, 115}, {ERROR, 115}, {ERROR, 115}, {ERROR, 115}, {ERROR, 115}, {ERROR, 115}, {ERROR, 115}, {ERROR, 115}, {ERROR, 115}, {REDUCE, 71}, {ERROR, 115}, {REDUCE, 71}, {REDUCE, 71}, {REDUCE, 71}, {REDUCE, 71}, {ERROR, 115}, {ERROR, 115}, {REDUCE, 71}, {REDUCE, 71}, {REDUCE, 71}, {REDUCE, 71}, {REDUCE, 71}, {ERROR, 115}, {REDUCE, 71}, {ERROR, 115}, {ERROR, 115}, {REDUCE, 71}, {REDUCE, 71}, {REDUCE, 71}, {REDUCE, 71}, {REDUCE, 71}, {ERROR, 115}, {ERROR, 115}, },
+            {{ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {REDUCE, 46}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {REDUCE, 46}, {ERROR, 116}, {SHIFT, 96}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, {ERROR, 116}, },
+            {{ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {REDUCE, 41}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, {ERROR, 117}, },
+            {{ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {REDUCE, 42}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, {ERROR, 118}, },
+            {{ERROR, 119}, {ERROR, 119}, {ERROR, 119}, {ERROR, 119}, {ERROR, 119}, {ERROR, 119}, {ERROR, 119}, {ERROR, 119}, {ERROR, 119}, {ERROR, 119}, {REDUCE, 60}, {ERROR, 119}, {SHIFT, 41}, {ERROR, 119}, {SHIFT, 42}, {ERROR, 119}, {ERROR, 119}, {ERROR, 119}, {ERROR, 119}, {ERROR, 119}, {ERROR, 119}, {ERROR, 119}, {REDUCE, 60}, {ERROR, 119}, {ERROR, 119}, {ERROR, 119}, {ERROR, 119}, {SHIFT, 43}, {SHIFT, 44}, {SHIFT, 45}, {SHIFT, 46}, {SHIFT, 47}, {ERROR, 119}, {ERROR, 119}, },
+            {{ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {SHIFT, 130}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, {ERROR, 120}, },
+            {{ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {REDUCE, 51}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, {ERROR, 121}, },
+            {{ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {REDUCE, 92}, {REDUCE, 92}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {REDUCE, 92}, {ERROR, 122}, {ERROR, 122}, {REDUCE, 92}, {SHIFT, 123}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {REDUCE, 92}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, {ERROR, 122}, },
+            {{ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {SHIFT, 132}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, {ERROR, 123}, },
+            {{ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {SHIFT, 133}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, {ERROR, 124}, },
+            {{ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {REDUCE, 87}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {SHIFT, 134}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, {ERROR, 125}, },
+            {{ERROR, 126}, {ERROR, 126}, {ERROR, 126}, {ERROR, 126}, {ERROR, 126}, {ERROR, 126}, {REDUCE, 98}, {REDUCE, 98}, {ERROR, 126}, {ERROR, 126}, {REDUCE, 95}, {ERROR, 126}, {SHIFT, 137}, {ERROR, 126}, {ERROR, 126}, {ERROR, 126}, {ERROR, 126}, {ERROR, 126}, {ERROR, 126}, {ERROR, 126}, {ERROR, 126}, {ERROR, 126}, {REDUCE, 95}, {ERROR, 126}, {ERROR, 126}, {ERROR, 126}, {ERROR, 126}, {REDUCE, 98}, {ERROR, 126}, {ERROR, 126}, {ERROR, 126}, {ERROR, 126}, {ERROR, 126}, {ERROR, 126}, },
+            {{ERROR, 127}, {ERROR, 127}, {ERROR, 127}, {ERROR, 127}, {ERROR, 127}, {ERROR, 127}, {REDUCE, 91}, {REDUCE, 91}, {ERROR, 127}, {ERROR, 127}, {REDUCE, 91}, {ERROR, 127}, {REDUCE, 91}, {ERROR, 127}, {ERROR, 127}, {REDUCE, 91}, {ERROR, 127}, {ERROR, 127}, {ERROR, 127}, {ERROR, 127}, {ERROR, 127}, {ERROR, 127}, {REDUCE, 91}, {ERROR, 127}, {ERROR, 127}, {ERROR, 127}, {ERROR, 127}, {REDUCE, 91}, {ERROR, 127}, {ERROR, 127}, {ERROR, 127}, {ERROR, 127}, {ERROR, 127}, {ERROR, 127}, },
+            {{ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {REDUCE, 44}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {REDUCE, 44}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, {ERROR, 128}, },
+            {{ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {REDUCE, 53}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, {ERROR, 129}, },
+            {{ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {REDUCE, 38}, {REDUCE, 38}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {REDUCE, 38}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {REDUCE, 38}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {ERROR, 130}, {REDUCE, 38}, },
+            {{ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {REDUCE, 98}, {REDUCE, 98}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {SHIFT, 137}, {ERROR, 131}, {ERROR, 131}, {REDUCE, 95}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {REDUCE, 98}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, {ERROR, 131}, },
+            {{ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {SHIFT, 143}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, {ERROR, 132}, },
+            {{ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {REDUCE, 84}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {ERROR, 133}, {REDUCE, 84}, },
+            {{ERROR, 134}, {ERROR, 134}, {ERROR, 134}, {ERROR, 134}, {ERROR, 134}, {ERROR, 134}, {REDUCE, 92}, {REDUCE, 92}, {ERROR, 134}, {ERROR, 134}, {REDUCE, 92}, {ERROR, 134}, {REDUCE, 92}, {ERROR, 134}, {SHIFT, 122}, {ERROR, 134}, {SHIFT, 123}, {ERROR, 134}, {ERROR, 134}, {ERROR, 134}, {ERROR, 134}, {ERROR, 134}, {REDUCE, 92}, {ERROR, 134}, {ERROR, 134}, {ERROR, 134}, {ERROR, 134}, {REDUCE, 92}, {ERROR, 134}, {ERROR, 134}, {ERROR, 134}, {ERROR, 134}, {ERROR, 134}, {ERROR, 134}, },
+            {{ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {REDUCE, 85}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, {ERROR, 135}, },
+            {{ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {REDUCE, 87}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {SHIFT, 134}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, {ERROR, 136}, },
+            {{ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {SHIFT, 146}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, {ERROR, 137}, },
+            {{ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {REDUCE, 89}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {REDUCE, 89}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, {ERROR, 138}, },
+            {{ERROR, 139}, {ERROR, 139}, {ERROR, 139}, {ERROR, 139}, {ERROR, 139}, {ERROR, 139}, {REDUCE, 98}, {REDUCE, 98}, {ERROR, 139}, {ERROR, 139}, {REDUCE, 95}, {ERROR, 139}, {SHIFT, 137}, {ERROR, 139}, {ERROR, 139}, {REDUCE, 95}, {ERROR, 139}, {ERROR, 139}, {ERROR, 139}, {ERROR, 139}, {ERROR, 139}, {ERROR, 139}, {REDUCE, 95}, {ERROR, 139}, {ERROR, 139}, {ERROR, 139}, {ERROR, 139}, {REDUCE, 98}, {ERROR, 139}, {ERROR, 139}, {ERROR, 139}, {ERROR, 139}, {ERROR, 139}, {ERROR, 139}, },
+            {{ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {SHIFT, 148}, {SHIFT, 149}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {REDUCE, 101}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, {ERROR, 140}, },
+            {{ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {REDUCE, 97}, {REDUCE, 97}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {REDUCE, 97}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, {ERROR, 141}, },
+            {{ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {SHIFT, 152}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, {ERROR, 142}, },
+            {{ERROR, 143}, {ERROR, 143}, {ERROR, 143}, {ERROR, 143}, {ERROR, 143}, {ERROR, 143}, {REDUCE, 93}, {REDUCE, 93}, {ERROR, 143}, {ERROR, 143}, {REDUCE, 93}, {ERROR, 143}, {REDUCE, 93}, {ERROR, 143}, {ERROR, 143}, {REDUCE, 93}, {ERROR, 143}, {ERROR, 143}, {ERROR, 143}, {ERROR, 143}, {ERROR, 143}, {ERROR, 143}, {REDUCE, 93}, {ERROR, 143}, {ERROR, 143}, {ERROR, 143}, {ERROR, 143}, {REDUCE, 93}, {ERROR, 143}, {ERROR, 143}, {ERROR, 143}, {ERROR, 143}, {ERROR, 143}, {ERROR, 143}, },
+            {{ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {REDUCE, 88}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {REDUCE, 88}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, {ERROR, 144}, },
+            {{ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {REDUCE, 86}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, {ERROR, 145}, },
+            {{ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {SHIFT, 153}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, {ERROR, 146}, },
+            {{ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {REDUCE, 94}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {REDUCE, 94}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {REDUCE, 94}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, {ERROR, 147}, },
+            {{ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {SHIFT, 154}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, {ERROR, 148}, },
+            {{ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {SHIFT, 155}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, {ERROR, 149}, },
+            {{ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {SHIFT, 156}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, {ERROR, 150}, },
+            {{ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {REDUCE, 100}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, {ERROR, 151}, },
+            {{ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {REDUCE, 90}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {REDUCE, 90}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, {ERROR, 152}, },
+            {{ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {SHIFT, 157}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, {ERROR, 153}, },
+            {{ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {REDUCE, 102}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, {ERROR, 154}, },
+            {{ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {REDUCE, 103}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, {ERROR, 155}, },
+            {{ERROR, 156}, {ERROR, 156}, {ERROR, 156}, {ERROR, 156}, {ERROR, 156}, {ERROR, 156}, {REDUCE, 73}, {REDUCE, 73}, {ERROR, 156}, {ERROR, 156}, {REDUCE, 73}, {ERROR, 156}, {REDUCE, 73}, {ERROR, 156}, {ERROR, 156}, {REDUCE, 73}, {ERROR, 156}, {ERROR, 156}, {SHIFT, 75}, {ERROR, 156}, {SHIFT, 76}, {SHIFT, 77}, {REDUCE, 73}, {ERROR, 156}, {ERROR, 156}, {ERROR, 156}, {ERROR, 156}, {REDUCE, 73}, {ERROR, 156}, {ERROR, 156}, {ERROR, 156}, {ERROR, 156}, {ERROR, 156}, {ERROR, 156}, },
+            {{ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {REDUCE, 99}, {REDUCE, 99}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {REDUCE, 99}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, {ERROR, 157}, },
+            {{ERROR, 158}, {ERROR, 158}, {ERROR, 158}, {ERROR, 158}, {ERROR, 158}, {ERROR, 158}, {REDUCE, 96}, {REDUCE, 96}, {ERROR, 158}, {ERROR, 158}, {REDUCE, 96}, {ERROR, 158}, {REDUCE, 96}, {ERROR, 158}, {ERROR, 158}, {REDUCE, 96}, {ERROR, 158}, {ERROR, 158}, {ERROR, 158}, {ERROR, 158}, {ERROR, 158}, {ERROR, 158}, {REDUCE, 96}, {ERROR, 158}, {ERROR, 158}, {ERROR, 158}, {ERROR, 158}, {REDUCE, 96}, {ERROR, 158}, {ERROR, 158}, {ERROR, 158}, {ERROR, 158}, {ERROR, 158}, {ERROR, 158}, },
+        }; */
+    private /*final*/ static int[][] gotoTable; /* =
+        {
+            {2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 15, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 32, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 49, 50, 51, 52, 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 68, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 49, 50, 51, 52, 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 51, 52, 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 61, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 50, 51, 52, 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 49, 50, 51, 52, 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 125, 126, 127, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 49, 50, 51, 52, 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 127, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 139, 140, 141, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 139, 140, 141, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 126, 127, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 139, 140, 141, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 151, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
+        }; */
+    private /*final*/ static String[] errors; /* =
+        {
+            "TPackage TStates THelpers TTokens TIgnored TProductions *EOF* expected.",
+            "TPackage TStates THelpers TTokens TIgnored TProductions TTokenSpecifier TProductionSpecifier TId TPkgId expected.",
+            "*EOF* expected.",
+            "TStates THelpers TTokens TIgnored TProductions *EOF* expected.",
+            "TStates THelpers TTokens TIgnored TProductions *EOF* expected.",
+            "TDot TSemicolon expected.",
+            "TDot TSemicolon expected.",
+            "TDot TSemicolon expected.",
+            "TDot TSemicolon expected.",
+            "TDot TSemicolon expected.",
+            "TDot TSemicolon expected.",
+            "TDot TSemicolon expected.",
+            "TDot TSemicolon expected.",
+            "TDot TSemicolon expected.",
+            "TDot TSemicolon expected.",
+            "TStates THelpers TTokens TIgnored TProductions *EOF* expected.",
+            "TStates THelpers TTokens TIgnored TProductions *EOF* expected.",
+            "TDot TSemicolon expected.",
+            "TStates TTokens TIgnored TProductions TId *EOF* expected.",
+            "TStates TTokens TIgnored TProductions *EOF* expected.",
+            "TStates TTokens TIgnored TProductions *EOF* expected.",
+            "TPackage TStates THelpers TTokens TIgnored TProductions TTokenSpecifier TProductionSpecifier TId TPkgId expected.",
+            "TSemicolon expected.",
+            "TDot TSemicolon expected.",
+            "TEqual expected.",
+            "TStates TTokens TIgnored TProductions *EOF* expected.",
+            "TStates TTokens TIgnored TProductions TId *EOF* expected.",
+            "TId expected.",
+            "TTokens TIgnored TProductions *EOF* expected.",
+            "TTokens TIgnored TProductions *EOF* expected.",
+            "TDot TSemicolon expected.",
+            "TStates THelpers TTokens TIgnored TProductions *EOF* expected.",
+            "TSemicolon expected.",
+            "TSemicolon TLBkt TLPar TBar TId TChar TDecChar THexChar TString expected.",
+            "TStates TTokens TIgnored TProductions *EOF* expected.",
+            "TSemicolon TComma expected.",
+            "TSemicolon expected.",
+            "TSemicolon expected.",
+            "TIgnored TProductions TLBrace TId *EOF* expected.",
+            "TIgnored TProductions *EOF* expected.",
+            "TIgnored TProductions *EOF* expected.",
+            "TLBkt TLPar TId TChar TDecChar THexChar TString expected.",
+            "TLBkt TLPar TRPar TBar TId TChar TDecChar THexChar TString expected.",
+            "TSemicolon TLBkt TRBkt TLPar TRPar TPlus TMinus TQMark TStar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TDDot TSemicolon TLBkt TRBkt TLPar TRPar TPlus TMinus TQMark TStar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TDDot TSemicolon TLBkt TRBkt TLPar TRPar TPlus TMinus TQMark TStar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TDDot TSemicolon TLBkt TRBkt TLPar TRPar TPlus TMinus TQMark TStar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TSemicolon TLBkt TRBkt TLPar TRPar TPlus TMinus TQMark TStar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TSemicolon expected.",
+            "TSemicolon TRPar TBar TSlash expected.",
+            "TSemicolon TRPar TBar TSlash expected.",
+            "TSemicolon TLBkt TLPar TRPar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TSemicolon TLBkt TLPar TRPar TPlus TQMark TStar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TSemicolon TLBkt TRBkt TLPar TRPar TPlus TQMark TStar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TSemicolon TLBkt TRBkt TLPar TRPar TPlus TMinus TQMark TStar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TId expected.",
+            "TSemicolon expected.",
+            "TSemicolon TComma expected.",
+            "TTokens TIgnored TProductions *EOF* expected.",
+            "TId expected.",
+            "TIgnored TProductions *EOF* expected.",
+            "TIgnored TProductions TLBrace TId *EOF* expected.",
+            "TId expected.",
+            "TId expected.",
+            "TTokens expected.",
+            "TProductions *EOF* expected.",
+            "TProductions *EOF* expected.",
+            "TPlus TMinus expected.",
+            "TDDot TPlus TMinus expected.",
+            "TRPar expected.",
+            "TStates TTokens TIgnored TProductions TId *EOF* expected.",
+            "TSemicolon TLBkt TLPar TRPar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TSemicolon TRPar TSlash expected.",
+            "TSemicolon TRPar TBar TSlash expected.",
+            "TSemicolon TRPar TBar TSlash expected.",
+            "TTokenSpecifier TProductionSpecifier TSemicolon TLBkt TLPar TRPar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TTokenSpecifier TProductionSpecifier TSemicolon TLBkt TLPar TRPar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TTokenSpecifier TProductionSpecifier TSemicolon TLBkt TLPar TRPar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TSemicolon TLBkt TLPar TRPar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TTokenSpecifier TProductionSpecifier TSemicolon TLBkt TLPar TRPar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TSemicolon TComma expected.",
+            "TSemicolon expected.",
+            "TRBrace TComma TArrow expected.",
+            "TIgnored TProductions *EOF* expected.",
+            "TEqual expected.",
+            "TId expected.",
+            "TId *EOF* expected.",
+            "*EOF* expected.",
+            "*EOF* expected.",
+            "TLBkt TLPar TId TChar TDecChar THexChar TString expected.",
+            "TLBkt TLPar TId TChar TDecChar THexChar TString expected.",
+            "TLBkt TLPar TId TChar TDecChar THexChar TString expected.",
+            "TChar TDecChar THexChar expected.",
+            "TSemicolon TLBkt TRBkt TLPar TRPar TPlus TMinus TQMark TStar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TSemicolon TRPar TBar TSlash expected.",
+            "TSemicolon TRPar TSlash expected.",
+            "TId expected.",
+            "TRBrace TComma expected.",
+            "TRBrace TComma expected.",
+            "TSemicolon TLBkt TLPar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TSemicolon expected.",
+            "TEqual expected.",
+            "*EOF* expected.",
+            "TId *EOF* expected.",
+            "TRBkt expected.",
+            "TRBkt expected.",
+            "TRBrace TComma expected.",
+            "TId expected.",
+            "TRBrace expected.",
+            "TRBrace TComma expected.",
+            "TSemicolon TSlash expected.",
+            "TProductions *EOF* expected.",
+            "TTokenSpecifier TProductionSpecifier TSemicolon TLBkt TLPar TLBrace TBar TId expected.",
+            "*EOF* expected.",
+            "TSemicolon TLBkt TRBkt TLPar TRPar TPlus TMinus TQMark TStar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TSemicolon TLBkt TRBkt TLPar TRPar TPlus TMinus TQMark TStar TBar TSlash TId TChar TDecChar THexChar TString expected.",
+            "TRBrace TComma TArrow expected.",
+            "TId expected.",
+            "TRBrace expected.",
+            "TSemicolon TLBkt TLPar TBar TId TChar TDecChar THexChar TString expected.",
+            "TSemicolon expected.",
+            "TSemicolon expected.",
+            "TTokenSpecifier TProductionSpecifier TLBkt TRPar TLBrace TId expected.",
+            "TId expected.",
+            "TSemicolon expected.",
+            "TSemicolon TBar expected.",
+            "TTokenSpecifier TProductionSpecifier TSemicolon TLBkt TBar TId expected.",
+            "TTokenSpecifier TProductionSpecifier TSemicolon TLBkt TRPar TBar TId expected.",
+            "TRBrace TComma expected.",
+            "TSemicolon expected.",
+            "TIgnored TProductions TLBrace TId *EOF* expected.",
+            "TTokenSpecifier TProductionSpecifier TLBkt TRPar TId expected.",
+            "TRBrace expected.",
+            "TId *EOF* expected.",
+            "TTokenSpecifier TProductionSpecifier TSemicolon TLBkt TLPar TLBrace TBar TId expected.",
+            "TSemicolon expected.",
+            "TSemicolon TBar expected.",
+            "TId expected.",
+            "TSemicolon TBar expected.",
+            "TTokenSpecifier TProductionSpecifier TSemicolon TLBkt TRPar TBar TId expected.",
+            "TTokenSpecifier TProductionSpecifier TId expected.",
+            "TTokenSpecifier TProductionSpecifier TId expected.",
+            "TRPar expected.",
+            "TTokenSpecifier TProductionSpecifier TSemicolon TLBkt TRPar TBar TId expected.",
+            "TSemicolon TBar expected.",
+            "TSemicolon expected.",
+            "TRBkt expected.",
+            "TSemicolon TRPar TBar expected.",
+            "TDot expected.",
+            "TDot expected.",
+            "TId expected.",
+            "TId expected.",
+            "TSemicolon TBar expected.",
+            "TColon expected.",
+            "TId expected.",
+            "TId expected.",
+            "TTokenSpecifier TProductionSpecifier TSemicolon TLBkt TRPar TPlus TQMark TStar TBar TId expected.",
+            "TTokenSpecifier TProductionSpecifier TId expected.",
+            "TTokenSpecifier TProductionSpecifier TSemicolon TLBkt TRPar TBar TId expected.",
+        }; */
+}

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/ParserException.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/ParserException.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/ParserException.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,16 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.parser;
+
+public class ParserException extends Exception
+{
+    ParserException(String  message)
+    {
+        super(message);
+    }
+}

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/State.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/State.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/State.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,20 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.parser;
+
+final class State
+{
+    final int state;
+    final Object node;
+
+    State(int state, Object node)
+    {
+        this.state = state;
+        this.node = node;
+    }
+}

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/TokenIndex.java
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/TokenIndex.java	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/TokenIndex.java	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,186 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.parser;
+
+import org.sablecc.sablecc.analysis.AnalysisAdapter;
+import org.sablecc.sablecc.node.*;
+
+class TokenIndex extends AnalysisAdapter
+{
+    int index;
+
+    public void caseTPackage(TPackage node)
+    {
+        index = 0;
+    }
+
+    public void caseTStates(TStates node)
+    {
+        index = 1;
+    }
+
+    public void caseTHelpers(THelpers node)
+    {
+        index = 2;
+    }
+
+    public void caseTTokens(TTokens node)
+    {
+        index = 3;
+    }
+
+    public void caseTIgnored(TIgnored node)
+    {
+        index = 4;
+    }
+
+    public void caseTProductions(TProductions node)
+    {
+        index = 5;
+    }
+
+    public void caseTTokenSpecifier(TTokenSpecifier node)
+    {
+        index = 6;
+    }
+
+    public void caseTProductionSpecifier(TProductionSpecifier node)
+    {
+        index = 7;
+    }
+
+    public void caseTDot(TDot node)
+    {
+        index = 8;
+    }
+
+    public void caseTDDot(TDDot node)
+    {
+        index = 9;
+    }
+
+    public void caseTSemicolon(TSemicolon node)
+    {
+        index = 10;
+    }
+
+    public void caseTEqual(TEqual node)
+    {
+        index = 11;
+    }
+
+    public void caseTLBkt(TLBkt node)
+    {
+        index = 12;
+    }
+
+    public void caseTRBkt(TRBkt node)
+    {
+        index = 13;
+    }
+
+    public void caseTLPar(TLPar node)
+    {
+        index = 14;
+    }
+
+    public void caseTRPar(TRPar node)
+    {
+        index = 15;
+    }
+
+    public void caseTLBrace(TLBrace node)
+    {
+        index = 16;
+    }
+
+    public void caseTRBrace(TRBrace node)
+    {
+        index = 17;
+    }
+
+    public void caseTPlus(TPlus node)
+    {
+        index = 18;
+    }
+
+    public void caseTMinus(TMinus node)
+    {
+        index = 19;
+    }
+
+    public void caseTQMark(TQMark node)
+    {
+        index = 20;
+    }
+
+    public void caseTStar(TStar node)
+    {
+        index = 21;
+    }
+
+    public void caseTBar(TBar node)
+    {
+        index = 22;
+    }
+
+    public void caseTComma(TComma node)
+    {
+        index = 23;
+    }
+
+    public void caseTSlash(TSlash node)
+    {
+        index = 24;
+    }
+
+    public void caseTArrow(TArrow node)
+    {
+        index = 25;
+    }
+
+    public void caseTColon(TColon node)
+    {
+        index = 26;
+    }
+
+    public void caseTId(TId node)
+    {
+        index = 27;
+    }
+
+    public void caseTChar(TChar node)
+    {
+        index = 28;
+    }
+
+    public void caseTDecChar(TDecChar node)
+    {
+        index = 29;
+    }
+
+    public void caseTHexChar(THexChar node)
+    {
+        index = 30;
+    }
+
+    public void caseTString(TString node)
+    {
+        index = 31;
+    }
+
+    public void caseTPkgId(TPkgId node)
+    {
+        index = 32;
+    }
+
+    public void caseEOF(EOF node)
+    {
+        index = 33;
+    }
+}

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/parser.dat
===================================================================
(Binary files differ)


Property changes on: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser/parser.dat
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser.txt
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser.txt	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/parser.txt	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,445 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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;
+
+public class Parser
+{
+    public final Analysis ignoredTokens = new AnalysisAdapter();
+
+    protected Node node;
+
+    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;
+
+    protected void filter() throws ParserException, LexerException, IOException
+    {
+    }
+
+    public Parser(Lexer lexer)
+    {
+        this.lexer = lexer;
+
+        if(actionTable == null)
+        {
+            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.");
+            }
+        }
+    }
+
+    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 void push(int state, Node node, boolean filter) throws ParserException, LexerException, IOException
+    {
+        this.node = node;
+
+        if(filter)
+        {
+            filter();
+        }
+
+        if(!stack.hasNext())
+        {
+            stack.add(new State(state, this.node));
+            return;
+        }
+
+        State s = (State) stack.next();
+        s.state = state;
+        s.node = this.node;
+    }
+
+    private int state()
+    {
+        State s = (State) stack.previous();
+        stack.next();
+        return s.state;
+    }
+
+    private Node pop()
+    {
+        return (Node) ((State) stack.previous()).node;
+    }
+
+    private int index(Switchable token)
+    {
+        converter.index = -1;
+        token.apply(converter);
+        return converter.index;
+    }
+
+    public Start parse() throws ParserException, LexerException, IOException
+    {
+        push(0, null, false);
+
+        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:
+                    push(action[1], lexer.next(), true);
+                    last_shift = action[1];
+                    break;
+                case REDUCE:
+                    switch(action[1])
+                    {
+
+$
+
+Macro:ParserReduceFilter
+                    case $0$: { Node node = new$0$(); push(goTo($1$), node, true); } break;
+
+$
+
+Macro:ParserReduceNoFilter
+                    case $0$: { Node node = new$0$(); push(goTo($1$), node, false); } break;
+
+$
+
+Macro:ParserParseTail
+                    }
+                    break;
+                case ACCEPT:
+                    {
+                        EOF node2 = (EOF) lexer.next();
+                        $0$ node1 = ($0$) pop();
+                        Start node = new Start(node1, node2);
+                        return node;
+                    }
+                case ERROR:
+                    throw new ParserException(last_token,
+                        "[" + last_line + "," + last_pos + "] " +
+                        errorMessages[errors[action[1]]]);
+            }
+        }
+    }
+
+
+$
+
+Macro:ParserNewHeader
+    Node new$0$()
+    {
+
+$
+
+Macro:ParserNewBodyDecl
+        $0$ node$1$ = ($0$) pop();
+
+$
+
+Macro:ParserNewBodyDeclNull
+        $0$ node$1$ = null;
+
+$
+
+Macro:ParserNewBodyNew
+        $0$ node = new $0$(
+$
+
+Macro:ParserNewBodyParams
+$0$node$1$
+$
+
+Macro:ParserNewTail
+);
+        return node;
+    }
+
+
+$
+
+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
+}
+
+$
+
+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
+
+    public void case$0$($0$ node)
+    {
+        index = $1$;
+    }
+
+$
+
+Macro:TokenIndexTail
+
+    public void caseEOF(EOF node)
+    {
+        index = $0$;
+    }
+}
+
+$
+
+Macro:ParserException
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import $1$.*;
+
+public class ParserException extends Exception
+{
+    Token token;
+
+    public ParserException(Token token, String  message)
+    {
+        super(message);
+        this.token = token;
+    }
+
+    public Token getToken()
+    {
+        return token;
+    }
+}
+
+$
+
+Macro:State
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+final class State
+{
+    int state;
+    Object node;
+
+    State(int state, Object node)
+    {
+        this.state = state;
+        this.node = node;
+    }
+}
+
+$
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/productions.txt
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/productions.txt	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/productions.txt	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,245 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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
+{
+}
+
+$
+
+Macro:HiddenAlternative0
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import $1$.*;
+
+public final class $2$ extends $3$
+{
+    public $2$()
+    {
+    }
+
+    public Object clone()
+    {
+        throw new RuntimeException("Unsupported Operation");
+    }
+
+    public void apply(Switch sw)
+    {
+        throw new RuntimeException("Switch not supported.");
+    }
+
+    void removeChild(Node child)
+    {
+    }
+
+    void replaceChild(Node oldChild, Node newChild)
+    {
+    }
+
+    public String toString()
+    {
+        return "";
+    }
+}
+
+$
+
+Macro:HiddenAlternative1
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import $1$.*;
+
+public final class $2$ extends $3$
+{
+    private $4$ _$5$_;
+
+    public $2$()
+    {
+    }
+
+    public $2$(
+        $4$ _$5$_)
+    {
+        set$4$(_$5$_);
+    }
+
+    public Object clone()
+    {
+        throw new RuntimeException("Unsupported Operation");
+    }
+
+    public void apply(Switch sw)
+    {
+        throw new RuntimeException("Switch not supported.");
+    }
+
+    public $4$ get$4$()
+    {
+        return _$5$_;
+    }
+
+    public void set$4$($4$ node)
+    {
+        if(_$5$_ != null)
+        {
+            _$5$_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        _$5$_ = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(_$5$_ == child)
+        {
+            _$5$_ = null;
+        }
+    }
+
+    void replaceChild(Node oldChild, Node newChild)
+    {
+    }
+
+    public String toString()
+    {
+        return "" +
+            toString(_$5$_);
+    }
+}
+
+$
+
+Macro:HiddenAlternative2
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import $1$.*;
+
+public final class $2$ extends $3$
+{
+    private $3$ _$6$_;
+    private $4$ _$5$_;
+
+    public $2$()
+    {
+    }
+
+    public $2$(
+        $3$ _$6$_,
+        $4$ _$5$_)
+    {
+        set$3$(_$6$_);
+        set$4$(_$5$_);
+    }
+
+    public Object clone()
+    {
+        throw new RuntimeException("Unsupported Operation");
+    }
+
+    public void apply(Switch sw)
+    {
+        throw new RuntimeException("Switch not supported.");
+    }
+
+    public $3$ get$3$()
+    {
+        return _$6$_;
+    }
+
+    public void set$3$($3$ node)
+    {
+        if(_$6$_ != null)
+        {
+            _$6$_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        _$6$_ = node;
+    }
+
+    public $4$ get$4$()
+    {
+        return _$5$_;
+    }
+
+    public void set$4$($4$ node)
+    {
+        if(_$5$_ != null)
+        {
+            _$5$_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        _$5$_ = node;
+    }
+
+    void removeChild(Node child)
+    {
+        if(_$6$_ == child)
+        {
+            _$6$_ = null;
+        }
+
+        if(_$5$_ == child)
+        {
+            _$5$_ = null;
+        }
+    }
+
+    void replaceChild(Node oldChild, Node newChild)
+    {
+    }
+
+    public String toString()
+    {
+        return "" +
+            toString(_$6$_) +
+            toString(_$5$_);
+    }
+}
+
+$
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/tokens.txt
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/tokens.txt	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/tokens.txt	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,87 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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$.*;
+
+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);
+    }
+
+    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$.*;
+
+public final class $2$ extends Token
+{
+    public $2$()
+    {
+        super.setText("$3$");
+    }
+
+    public $2$(int line, int pos)
+    {
+        super.setText("$3$");
+        setLine(line);
+        setPos(pos);
+    }
+
+    public Object clone()
+    {
+      return new $2$(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).case$2$(this);
+    }
+
+    public void setText(String text)
+    {
+        throw new RuntimeException("Cannot change $2$ text.");
+    }
+}
+
+$
+

Added: sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/utils.txt
===================================================================
--- sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/utils.txt	                        (rev 0)
+++ sablecc/sablecc/branches/upstream/current/src/org/sablecc/sablecc/utils.txt	2012-07-12 16:49:25 UTC (rev 248)
@@ -0,0 +1,529 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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$.*;
+
+public final class Start extends Node
+{
+    private $2$ _$3$_;
+    private EOF _eof_;
+
+    public Start()
+    {
+    }
+
+    public Start(
+        $2$ _$3$_,
+        EOF _eof_)
+    {
+        set$2$(_$3$_);
+        setEOF(_eof_);
+    }
+
+    public Object clone()
+    {
+        return new Start(
+            ($2$) cloneNode(_$3$_),
+            (EOF) cloneNode(_eof_));
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseStart(this);
+    }
+
+    public $2$ get$2$()
+    {
+        return _$3$_;
+    }
+
+    public void set$2$($2$ node)
+    {
+        if(_$3$_ != null)
+        {
+            _$3$_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        _$3$_ = 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(_$3$_ == child)
+        {
+            _$3$_ = null;
+            return;
+        }
+
+        if(_eof_ == child)
+        {
+            _eof_ = null;
+            return;
+        }
+    }
+
+    void replaceChild(Node oldChild, Node newChild)
+    {
+        if(_$3$_ == oldChild)
+        {
+            set$2$(($2$) newChild);
+            return;
+        }
+
+        if(_eof_ == oldChild)
+        {
+            setEOF((EOF) newChild);
+            return;
+        }
+    }
+
+    public String toString()
+    {
+        return "" +
+            toString(_$3$_) +
+            toString(_eof_);
+    }
+}
+
+$
+
+Macro:EOF
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import $1$.*;
+
+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);
+    }
+}
+
+$
+
+Macro:Token
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+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)
+    {
+    }
+}
+
+$
+
+Macro:Node
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+import java.util.*;
+import $1$.*;
+
+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;
+    }
+}
+
+$
+
+Macro:NodeCast
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+
+public class NodeCast implements Cast
+{
+    public final static NodeCast instance = new NodeCast();
+
+    private NodeCast()
+    {
+    }
+
+    public Object cast(Object o)
+    {
+        return (Node) o;
+    }
+}
+
+$
+
+Macro:Switch
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+public interface Switch
+{
+}
+
+$
+
+Macro:Switchable
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+public interface Switchable
+{
+    void apply(Switch sw);
+}
+
+$
+
+Macro:TypedLinkedList
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+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)
+    {
+        for(Iterator i = c.iterator(); i.hasNext(); )
+        {
+            super.add(cast.cast(i.next()));
+        }
+        return true;
+    }
+
+    public boolean addAll(int index, Collection c)
+    {
+        int pos = index;
+        for(Iterator i = c.iterator(); i.hasNext(); )
+        {
+            super.add(pos++, cast.cast(i.next()));
+        }
+        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));
+        }
+    }
+}
+
+$
+
+Macro:Cast
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+public interface Cast
+{
+    Object cast(Object o);
+}
+
+$
+
+Macro:NoCast
+/* This file was generated by SableCC (http://www.sablecc.org/). */
+
+package $0$;
+
+public class NoCast implements Cast
+{
+    public final static NoCast instance = new NoCast();
+
+    private NoCast()
+    {
+    }
+
+    public Object cast(Object o)
+    {
+        return o;
+    }
+}
+
+$




More information about the pkg-eucalyptus-commits mailing list