/// This module was generated by the StaticLang tool from
/// Goldie v0.4: http://www.semitwist.com/goldie/

// Goldie: GOLD Engine for D
// Written in the D programming language.

module goldie.langs.grm.lang;

version = GoldieStaticLang;

import std.stdio;
import std.string;

import semitwist.util.all;

import goldie.base;

import goldie.exception;
import goldie.lexer;
import goldie.parser;
import goldie.token;

import goldie.grmc.ast;
import goldie.langs.grm.all;

//TODO: Create a function to fix symbolLookup after changing the language details.
//      Maybe cause the accessors to set a "dirty" flag which will re-gen symbolLookup
//      next time symbolLookup is accessed.
//TODO: In SemiTwistLib, create an "accessor"/"property" mixin similar to "getter"

version(GoldieStaticLang)
{
	import goldie.lang;
	
	import goldie.langs.grm.lexer;
	import goldie.langs.grm.parser;

	// This mess is a workaround for the cyclic dependency probelms in static constructors
	private Language_grm language_grm_;
	private bool isInited = false;
	public @property ref Language_grm language_grm()
	{
		if(!isInited)
		{
			language_grm_ = new Language_grm();
			isInited = true;
		}
		return language_grm_;
	}
	/+static this()
	{
		language_grm = new Language_grm();
	}+/
}

public class Language_grm : Language
{
	
	
	static enum staticName   = "GOLD Meta-Language";
	static enum staticVer    = "2.6.0";
	static enum staticAuthor = "Devin Cook";
	static enum staticAbout  = "This grammar defines the GOLD Meta-Language.";
	static enum staticCaseSensitive = false;

	static enum staticStartSymbolIndex = 23;
	static enum staticInitialDFAState  = 0;
	static enum staticInitialLALRState = 0;
	static enum staticEofSymbolIndex   = 0;
	static enum staticErrorSymbolIndex = 1;

	static enum staticUniqueSymbolNameArray = [
		"(",
		")",
		"*",
		"+",
		"-",
		"::=",
		"<Content>",
		"<Definition>",
		"<Grammar>",
		"<Handle>",
		"<Handles>",
		"<Kleene Opt>",
		"<Parameter Body>",
		"<Parameter Item>",
		"<Parameter Items>",
		"<Parameter>",
		"<Reg Exp 2>",
		"<Reg Exp Item>",
		"<Reg Exp Seq>",
		"<Reg Exp>",
		"<Rule Decl>",
		"<Set Decl>",
		"<Set Exp>",
		"<Set Item>",
		"<Symbol>",
		"<Terminal Decl>",
		"<Terminal Name>",
		"<nl opt>",
		"<nl>",
		"=",
		"?",
		"Comment End",
		"Comment Line",
		"Comment Start",
		"EOF",
		"Error",
		"Newline",
		"Nonterminal",
		"ParameterName",
		"SetLiteral",
		"SetName",
		"Terminal",
		"Whitespace",
		"|",
	];

	static enum staticSymbolTable = [
		Symbol("EOF",SymbolType.EOF,0),
		Symbol("Error",SymbolType.Error,1),
		Symbol("Whitespace",SymbolType.Whitespace,2),
		Symbol("Comment End",SymbolType.CommentEnd,3),
		Symbol("Comment Line",SymbolType.CommentLine,4),
		Symbol("Comment Start",SymbolType.CommentStart,5),
		Symbol("-",SymbolType.Terminal,6),
		Symbol("(",SymbolType.Terminal,7),
		Symbol(")",SymbolType.Terminal,8),
		Symbol("*",SymbolType.Terminal,9),
		Symbol("::=",SymbolType.Terminal,10),
		Symbol("?",SymbolType.Terminal,11),
		Symbol("|",SymbolType.Terminal,12),
		Symbol("+",SymbolType.Terminal,13),
		Symbol("=",SymbolType.Terminal,14),
		Symbol("Newline",SymbolType.Terminal,15),
		Symbol("Nonterminal",SymbolType.Terminal,16),
		Symbol("ParameterName",SymbolType.Terminal,17),
		Symbol("SetLiteral",SymbolType.Terminal,18),
		Symbol("SetName",SymbolType.Terminal,19),
		Symbol("Terminal",SymbolType.Terminal,20),
		Symbol("<Content>",SymbolType.NonTerminal,21),
		Symbol("<Definition>",SymbolType.NonTerminal,22),
		Symbol("<Grammar>",SymbolType.NonTerminal,23),
		Symbol("<Handle>",SymbolType.NonTerminal,24),
		Symbol("<Handles>",SymbolType.NonTerminal,25),
		Symbol("<Kleene Opt>",SymbolType.NonTerminal,26),
		Symbol("<nl>",SymbolType.NonTerminal,27),
		Symbol("<nl opt>",SymbolType.NonTerminal,28),
		Symbol("<Parameter>",SymbolType.NonTerminal,29),
		Symbol("<Parameter Body>",SymbolType.NonTerminal,30),
		Symbol("<Parameter Item>",SymbolType.NonTerminal,31),
		Symbol("<Parameter Items>",SymbolType.NonTerminal,32),
		Symbol("<Reg Exp>",SymbolType.NonTerminal,33),
		Symbol("<Reg Exp 2>",SymbolType.NonTerminal,34),
		Symbol("<Reg Exp Item>",SymbolType.NonTerminal,35),
		Symbol("<Reg Exp Seq>",SymbolType.NonTerminal,36),
		Symbol("<Rule Decl>",SymbolType.NonTerminal,37),
		Symbol("<Set Decl>",SymbolType.NonTerminal,38),
		Symbol("<Set Exp>",SymbolType.NonTerminal,39),
		Symbol("<Set Item>",SymbolType.NonTerminal,40),
		Symbol("<Symbol>",SymbolType.NonTerminal,41),
		Symbol("<Terminal Decl>",SymbolType.NonTerminal,42),
		Symbol("<Terminal Name>",SymbolType.NonTerminal,43),
	];
	
	static enum staticCharSetTable = [
		CharSet("\t  "d),
		CharSet("("d),
		CharSet(")"d),
		CharSet(":"d),
		CharSet("?"d),
		CharSet("|"d),
		CharSet("+"d),
		CharSet("="d),
		CharSet("\n"d),
		CharSet("<"d),
		CharSet("\""d),
		CharSet("["d),
		CharSet("{"d),
		CharSet(".0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"d),
		CharSet("'"d),
		CharSet("\r"d),
		CharSet("!"d),
		CharSet("*"d),
		CharSet("-"d),
		CharSet(" -.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"d),
		CharSet(">"d),
		CharSet(" !#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ "d),
		CharSet(" !\"#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\\^_`abcdefghijklmnopqrstuvwxyz{|}~ "d),
		CharSet("]"d),
		CharSet(" !\"#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ "d),
		CharSet(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz|~ "d),
		CharSet("}"d),
		CharSet("-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"d),
	];
	
	static enum staticRuleTable = [
		Rule( 23, [28,21] ),
		Rule( 21, [21,22] ),
		Rule( 21, [22] ),
		Rule( 22, [29] ),
		Rule( 22, [38] ),
		Rule( 22, [42] ),
		Rule( 22, [37] ),
		Rule( 28, [15,28] ),
		Rule( 28, [] ),
		Rule( 27, [15,27] ),
		Rule( 27, [15] ),
		Rule( 29, [17,28,14,30,27] ),
		Rule( 30, [30,28,12,32] ),
		Rule( 30, [32] ),
		Rule( 32, [32,31] ),
		Rule( 32, [31] ),
		Rule( 31, [17] ),
		Rule( 31, [20] ),
		Rule( 31, [18] ),
		Rule( 31, [19] ),
		Rule( 31, [16] ),
		Rule( 38, [19,28,14,39,27] ),
		Rule( 39, [39,28,13,40] ),
		Rule( 39, [39,28,6,40] ),
		Rule( 39, [40] ),
		Rule( 40, [18] ),
		Rule( 40, [19] ),
		Rule( 42, [43,28,14,33,27] ),
		Rule( 43, [43,20] ),
		Rule( 43, [20] ),
		Rule( 33, [33,28,12,36] ),
		Rule( 33, [36] ),
		Rule( 36, [36,35] ),
		Rule( 36, [35] ),
		Rule( 35, [18,26] ),
		Rule( 35, [19,26] ),
		Rule( 35, [20,26] ),
		Rule( 35, [7,34,8,26] ),
		Rule( 34, [34,12,36] ),
		Rule( 34, [36] ),
		Rule( 26, [13] ),
		Rule( 26, [11] ),
		Rule( 26, [9] ),
		Rule( 26, [] ),
		Rule( 37, [16,28,10,25,27] ),
		Rule( 25, [25,28,12,24] ),
		Rule( 25, [24] ),
		Rule( 24, [24,41] ),
		Rule( 24, [] ),
		Rule( 41, [20] ),
		Rule( 41, [16] ),
	];
	
	static enum staticDFATable = [
		DFAState( false, -1, [DFAStateEdge(0,1),DFAStateEdge(1,2),DFAStateEdge(2,3),DFAStateEdge(3,4),DFAStateEdge(4,7),DFAStateEdge(5,8),DFAStateEdge(6,9),DFAStateEdge(7,10),DFAStateEdge(8,11),DFAStateEdge(9,12),DFAStateEdge(10,15),DFAStateEdge(11,18),DFAStateEdge(12,24),DFAStateEdge(13,27),DFAStateEdge(14,28),DFAStateEdge(15,31),DFAStateEdge(16,33),DFAStateEdge(17,35),DFAStateEdge(18,37)] ),
		DFAState( true, 2, [DFAStateEdge(0,1)] ),
		DFAState( true, 7, [] ),
		DFAState( true, 8, [] ),
		DFAState( false, -1, [DFAStateEdge(3,5)] ),
		DFAState( false, -1, [DFAStateEdge(7,6)] ),
		DFAState( true, 10, [] ),
		DFAState( true, 11, [] ),
		DFAState( true, 12, [] ),
		DFAState( true, 13, [] ),
		DFAState( true, 14, [] ),
		DFAState( true, 15, [] ),
		DFAState( false, -1, [DFAStateEdge(19,13)] ),
		DFAState( false, -1, [DFAStateEdge(19,13),DFAStateEdge(20,14)] ),
		DFAState( true, 16, [] ),
		DFAState( false, -1, [DFAStateEdge(21,16)] ),
		DFAState( false, -1, [DFAStateEdge(21,16),DFAStateEdge(10,17)] ),
		DFAState( true, 17, [] ),
		DFAState( false, -1, [DFAStateEdge(22,19),DFAStateEdge(14,20)] ),
		DFAState( false, -1, [DFAStateEdge(22,19),DFAStateEdge(14,20),DFAStateEdge(23,23)] ),
		DFAState( false, -1, [DFAStateEdge(24,21),DFAStateEdge(14,22)] ),
		DFAState( false, -1, [DFAStateEdge(24,21),DFAStateEdge(14,22)] ),
		DFAState( false, -1, [DFAStateEdge(22,19),DFAStateEdge(14,20),DFAStateEdge(23,23)] ),
		DFAState( true, 18, [] ),
		DFAState( false, -1, [DFAStateEdge(25,25)] ),
		DFAState( false, -1, [DFAStateEdge(25,25),DFAStateEdge(26,26)] ),
		DFAState( true, 19, [] ),
		DFAState( true, 20, [DFAStateEdge(27,27)] ),
		DFAState( false, -1, [DFAStateEdge(24,29),DFAStateEdge(14,30)] ),
		DFAState( false, -1, [DFAStateEdge(24,29),DFAStateEdge(14,30)] ),
		DFAState( true, 20, [] ),
		DFAState( true, 15, [DFAStateEdge(8,32)] ),
		DFAState( true, 15, [] ),
		DFAState( true, 4, [DFAStateEdge(17,34)] ),
		DFAState( true, 5, [] ),
		DFAState( true, 9, [DFAStateEdge(16,36)] ),
		DFAState( true, 3, [] ),
		DFAState( true, 6, [DFAStateEdge(27,27)] ),
	];
	
	static enum staticLALRTable = [
		LALRState( [LALRAction(15,LALRAction.Type.Shift,1),LALRAction(23,LALRAction.Type.Goto,2),LALRAction(28,LALRAction.Type.Goto,3),LALRAction(16,LALRAction.Type.Reduce,8),LALRAction(17,LALRAction.Type.Reduce,8),LALRAction(19,LALRAction.Type.Reduce,8),LALRAction(20,LALRAction.Type.Reduce,8)] ),
		LALRState( [LALRAction(15,LALRAction.Type.Shift,1),LALRAction(28,LALRAction.Type.Goto,4),LALRAction(10,LALRAction.Type.Reduce,8),LALRAction(14,LALRAction.Type.Reduce,8),LALRAction(16,LALRAction.Type.Reduce,8),LALRAction(17,LALRAction.Type.Reduce,8),LALRAction(19,LALRAction.Type.Reduce,8),LALRAction(20,LALRAction.Type.Reduce,8)] ),
		LALRState( [LALRAction(0,LALRAction.Type.Accept,0)] ),
		LALRState( [LALRAction(16,LALRAction.Type.Shift,5),LALRAction(17,LALRAction.Type.Shift,6),LALRAction(19,LALRAction.Type.Shift,7),LALRAction(20,LALRAction.Type.Shift,8),LALRAction(21,LALRAction.Type.Goto,9),LALRAction(22,LALRAction.Type.Goto,10),LALRAction(29,LALRAction.Type.Goto,11),LALRAction(37,LALRAction.Type.Goto,12),LALRAction(38,LALRAction.Type.Goto,13),LALRAction(42,LALRAction.Type.Goto,14),LALRAction(43,LALRAction.Type.Goto,15)] ),
		LALRState( [LALRAction(6,LALRAction.Type.Reduce,7),LALRAction(10,LALRAction.Type.Reduce,7),LALRAction(12,LALRAction.Type.Reduce,7),LALRAction(13,LALRAction.Type.Reduce,7),LALRAction(14,LALRAction.Type.Reduce,7),LALRAction(16,LALRAction.Type.Reduce,7),LALRAction(17,LALRAction.Type.Reduce,7),LALRAction(19,LALRAction.Type.Reduce,7),LALRAction(20,LALRAction.Type.Reduce,7)] ),
		LALRState( [LALRAction(15,LALRAction.Type.Shift,1),LALRAction(28,LALRAction.Type.Goto,16),LALRAction(10,LALRAction.Type.Reduce,8)] ),
		LALRState( [LALRAction(15,LALRAction.Type.Shift,1),LALRAction(28,LALRAction.Type.Goto,17),LALRAction(14,LALRAction.Type.Reduce,8)] ),
		LALRState( [LALRAction(15,LALRAction.Type.Shift,1),LALRAction(28,LALRAction.Type.Goto,18),LALRAction(14,LALRAction.Type.Reduce,8)] ),
		LALRState( [LALRAction(14,LALRAction.Type.Reduce,29),LALRAction(15,LALRAction.Type.Reduce,29),LALRAction(20,LALRAction.Type.Reduce,29)] ),
		LALRState( [LALRAction(16,LALRAction.Type.Shift,5),LALRAction(17,LALRAction.Type.Shift,6),LALRAction(19,LALRAction.Type.Shift,7),LALRAction(20,LALRAction.Type.Shift,8),LALRAction(22,LALRAction.Type.Goto,19),LALRAction(29,LALRAction.Type.Goto,11),LALRAction(37,LALRAction.Type.Goto,12),LALRAction(38,LALRAction.Type.Goto,13),LALRAction(42,LALRAction.Type.Goto,14),LALRAction(43,LALRAction.Type.Goto,15),LALRAction(0,LALRAction.Type.Reduce,0)] ),
		LALRState( [LALRAction(0,LALRAction.Type.Reduce,2),LALRAction(16,LALRAction.Type.Reduce,2),LALRAction(17,LALRAction.Type.Reduce,2),LALRAction(19,LALRAction.Type.Reduce,2),LALRAction(20,LALRAction.Type.Reduce,2)] ),
		LALRState( [LALRAction(0,LALRAction.Type.Reduce,3),LALRAction(16,LALRAction.Type.Reduce,3),LALRAction(17,LALRAction.Type.Reduce,3),LALRAction(19,LALRAction.Type.Reduce,3),LALRAction(20,LALRAction.Type.Reduce,3)] ),
		LALRState( [LALRAction(0,LALRAction.Type.Reduce,6),LALRAction(16,LALRAction.Type.Reduce,6),LALRAction(17,LALRAction.Type.Reduce,6),LALRAction(19,LALRAction.Type.Reduce,6),LALRAction(20,LALRAction.Type.Reduce,6)] ),
		LALRState( [LALRAction(0,LALRAction.Type.Reduce,4),LALRAction(16,LALRAction.Type.Reduce,4),LALRAction(17,LALRAction.Type.Reduce,4),LALRAction(19,LALRAction.Type.Reduce,4),LALRAction(20,LALRAction.Type.Reduce,4)] ),
		LALRState( [LALRAction(0,LALRAction.Type.Reduce,5),LALRAction(16,LALRAction.Type.Reduce,5),LALRAction(17,LALRAction.Type.Reduce,5),LALRAction(19,LALRAction.Type.Reduce,5),LALRAction(20,LALRAction.Type.Reduce,5)] ),
		LALRState( [LALRAction(15,LALRAction.Type.Shift,1),LALRAction(20,LALRAction.Type.Shift,20),LALRAction(28,LALRAction.Type.Goto,21),LALRAction(14,LALRAction.Type.Reduce,8)] ),
		LALRState( [LALRAction(10,LALRAction.Type.Shift,22)] ),
		LALRState( [LALRAction(14,LALRAction.Type.Shift,23)] ),
		LALRState( [LALRAction(14,LALRAction.Type.Shift,24)] ),
		LALRState( [LALRAction(0,LALRAction.Type.Reduce,1),LALRAction(16,LALRAction.Type.Reduce,1),LALRAction(17,LALRAction.Type.Reduce,1),LALRAction(19,LALRAction.Type.Reduce,1),LALRAction(20,LALRAction.Type.Reduce,1)] ),
		LALRState( [LALRAction(14,LALRAction.Type.Reduce,28),LALRAction(15,LALRAction.Type.Reduce,28),LALRAction(20,LALRAction.Type.Reduce,28)] ),
		LALRState( [LALRAction(14,LALRAction.Type.Shift,25)] ),
		LALRState( [LALRAction(24,LALRAction.Type.Goto,26),LALRAction(25,LALRAction.Type.Goto,27),LALRAction(12,LALRAction.Type.Reduce,48),LALRAction(15,LALRAction.Type.Reduce,48),LALRAction(16,LALRAction.Type.Reduce,48),LALRAction(20,LALRAction.Type.Reduce,48)] ),
		LALRState( [LALRAction(16,LALRAction.Type.Shift,28),LALRAction(17,LALRAction.Type.Shift,29),LALRAction(18,LALRAction.Type.Shift,30),LALRAction(19,LALRAction.Type.Shift,31),LALRAction(20,LALRAction.Type.Shift,32),LALRAction(30,LALRAction.Type.Goto,33),LALRAction(31,LALRAction.Type.Goto,34),LALRAction(32,LALRAction.Type.Goto,35)] ),
		LALRState( [LALRAction(18,LALRAction.Type.Shift,36),LALRAction(19,LALRAction.Type.Shift,37),LALRAction(39,LALRAction.Type.Goto,38),LALRAction(40,LALRAction.Type.Goto,39)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Shift,40),LALRAction(18,LALRAction.Type.Shift,41),LALRAction(19,LALRAction.Type.Shift,42),LALRAction(20,LALRAction.Type.Shift,43),LALRAction(33,LALRAction.Type.Goto,44),LALRAction(35,LALRAction.Type.Goto,45),LALRAction(36,LALRAction.Type.Goto,46)] ),
		LALRState( [LALRAction(16,LALRAction.Type.Shift,47),LALRAction(20,LALRAction.Type.Shift,48),LALRAction(41,LALRAction.Type.Goto,49),LALRAction(12,LALRAction.Type.Reduce,46),LALRAction(15,LALRAction.Type.Reduce,46)] ),
		LALRState( [LALRAction(15,LALRAction.Type.Shift,50),LALRAction(27,LALRAction.Type.Goto,51),LALRAction(28,LALRAction.Type.Goto,52),LALRAction(12,LALRAction.Type.Reduce,8)] ),
		LALRState( [LALRAction(12,LALRAction.Type.Reduce,20),LALRAction(15,LALRAction.Type.Reduce,20),LALRAction(16,LALRAction.Type.Reduce,20),LALRAction(17,LALRAction.Type.Reduce,20),LALRAction(18,LALRAction.Type.Reduce,20),LALRAction(19,LALRAction.Type.Reduce,20),LALRAction(20,LALRAction.Type.Reduce,20)] ),
		LALRState( [LALRAction(12,LALRAction.Type.Reduce,16),LALRAction(15,LALRAction.Type.Reduce,16),LALRAction(16,LALRAction.Type.Reduce,16),LALRAction(17,LALRAction.Type.Reduce,16),LALRAction(18,LALRAction.Type.Reduce,16),LALRAction(19,LALRAction.Type.Reduce,16),LALRAction(20,LALRAction.Type.Reduce,16)] ),
		LALRState( [LALRAction(12,LALRAction.Type.Reduce,18),LALRAction(15,LALRAction.Type.Reduce,18),LALRAction(16,LALRAction.Type.Reduce,18),LALRAction(17,LALRAction.Type.Reduce,18),LALRAction(18,LALRAction.Type.Reduce,18),LALRAction(19,LALRAction.Type.Reduce,18),LALRAction(20,LALRAction.Type.Reduce,18)] ),
		LALRState( [LALRAction(12,LALRAction.Type.Reduce,19),LALRAction(15,LALRAction.Type.Reduce,19),LALRAction(16,LALRAction.Type.Reduce,19),LALRAction(17,LALRAction.Type.Reduce,19),LALRAction(18,LALRAction.Type.Reduce,19),LALRAction(19,LALRAction.Type.Reduce,19),LALRAction(20,LALRAction.Type.Reduce,19)] ),
		LALRState( [LALRAction(12,LALRAction.Type.Reduce,17),LALRAction(15,LALRAction.Type.Reduce,17),LALRAction(16,LALRAction.Type.Reduce,17),LALRAction(17,LALRAction.Type.Reduce,17),LALRAction(18,LALRAction.Type.Reduce,17),LALRAction(19,LALRAction.Type.Reduce,17),LALRAction(20,LALRAction.Type.Reduce,17)] ),
		LALRState( [LALRAction(15,LALRAction.Type.Shift,50),LALRAction(27,LALRAction.Type.Goto,53),LALRAction(28,LALRAction.Type.Goto,54),LALRAction(12,LALRAction.Type.Reduce,8)] ),
		LALRState( [LALRAction(12,LALRAction.Type.Reduce,15),LALRAction(15,LALRAction.Type.Reduce,15),LALRAction(16,LALRAction.Type.Reduce,15),LALRAction(17,LALRAction.Type.Reduce,15),LALRAction(18,LALRAction.Type.Reduce,15),LALRAction(19,LALRAction.Type.Reduce,15),LALRAction(20,LALRAction.Type.Reduce,15)] ),
		LALRState( [LALRAction(16,LALRAction.Type.Shift,28),LALRAction(17,LALRAction.Type.Shift,29),LALRAction(18,LALRAction.Type.Shift,30),LALRAction(19,LALRAction.Type.Shift,31),LALRAction(20,LALRAction.Type.Shift,32),LALRAction(31,LALRAction.Type.Goto,55),LALRAction(12,LALRAction.Type.Reduce,13),LALRAction(15,LALRAction.Type.Reduce,13)] ),
		LALRState( [LALRAction(6,LALRAction.Type.Reduce,25),LALRAction(13,LALRAction.Type.Reduce,25),LALRAction(15,LALRAction.Type.Reduce,25)] ),
		LALRState( [LALRAction(6,LALRAction.Type.Reduce,26),LALRAction(13,LALRAction.Type.Reduce,26),LALRAction(15,LALRAction.Type.Reduce,26)] ),
		LALRState( [LALRAction(15,LALRAction.Type.Shift,50),LALRAction(27,LALRAction.Type.Goto,56),LALRAction(28,LALRAction.Type.Goto,57),LALRAction(6,LALRAction.Type.Reduce,8),LALRAction(13,LALRAction.Type.Reduce,8)] ),
		LALRState( [LALRAction(6,LALRAction.Type.Reduce,24),LALRAction(13,LALRAction.Type.Reduce,24),LALRAction(15,LALRAction.Type.Reduce,24)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Shift,40),LALRAction(18,LALRAction.Type.Shift,41),LALRAction(19,LALRAction.Type.Shift,42),LALRAction(20,LALRAction.Type.Shift,43),LALRAction(34,LALRAction.Type.Goto,58),LALRAction(35,LALRAction.Type.Goto,45),LALRAction(36,LALRAction.Type.Goto,59)] ),
		LALRState( [LALRAction(9,LALRAction.Type.Shift,60),LALRAction(11,LALRAction.Type.Shift,61),LALRAction(13,LALRAction.Type.Shift,62),LALRAction(26,LALRAction.Type.Goto,63),LALRAction(7,LALRAction.Type.Reduce,43),LALRAction(8,LALRAction.Type.Reduce,43),LALRAction(12,LALRAction.Type.Reduce,43),LALRAction(15,LALRAction.Type.Reduce,43),LALRAction(18,LALRAction.Type.Reduce,43),LALRAction(19,LALRAction.Type.Reduce,43),LALRAction(20,LALRAction.Type.Reduce,43)] ),
		LALRState( [LALRAction(9,LALRAction.Type.Shift,60),LALRAction(11,LALRAction.Type.Shift,61),LALRAction(13,LALRAction.Type.Shift,62),LALRAction(26,LALRAction.Type.Goto,64),LALRAction(7,LALRAction.Type.Reduce,43),LALRAction(8,LALRAction.Type.Reduce,43),LALRAction(12,LALRAction.Type.Reduce,43),LALRAction(15,LALRAction.Type.Reduce,43),LALRAction(18,LALRAction.Type.Reduce,43),LALRAction(19,LALRAction.Type.Reduce,43),LALRAction(20,LALRAction.Type.Reduce,43)] ),
		LALRState( [LALRAction(9,LALRAction.Type.Shift,60),LALRAction(11,LALRAction.Type.Shift,61),LALRAction(13,LALRAction.Type.Shift,62),LALRAction(26,LALRAction.Type.Goto,65),LALRAction(7,LALRAction.Type.Reduce,43),LALRAction(8,LALRAction.Type.Reduce,43),LALRAction(12,LALRAction.Type.Reduce,43),LALRAction(15,LALRAction.Type.Reduce,43),LALRAction(18,LALRAction.Type.Reduce,43),LALRAction(19,LALRAction.Type.Reduce,43),LALRAction(20,LALRAction.Type.Reduce,43)] ),
		LALRState( [LALRAction(15,LALRAction.Type.Shift,50),LALRAction(27,LALRAction.Type.Goto,66),LALRAction(28,LALRAction.Type.Goto,67),LALRAction(12,LALRAction.Type.Reduce,8)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Reduce,33),LALRAction(8,LALRAction.Type.Reduce,33),LALRAction(12,LALRAction.Type.Reduce,33),LALRAction(15,LALRAction.Type.Reduce,33),LALRAction(18,LALRAction.Type.Reduce,33),LALRAction(19,LALRAction.Type.Reduce,33),LALRAction(20,LALRAction.Type.Reduce,33)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Shift,40),LALRAction(18,LALRAction.Type.Shift,41),LALRAction(19,LALRAction.Type.Shift,42),LALRAction(20,LALRAction.Type.Shift,43),LALRAction(35,LALRAction.Type.Goto,68),LALRAction(12,LALRAction.Type.Reduce,31),LALRAction(15,LALRAction.Type.Reduce,31)] ),
		LALRState( [LALRAction(12,LALRAction.Type.Reduce,50),LALRAction(15,LALRAction.Type.Reduce,50),LALRAction(16,LALRAction.Type.Reduce,50),LALRAction(20,LALRAction.Type.Reduce,50)] ),
		LALRState( [LALRAction(12,LALRAction.Type.Reduce,49),LALRAction(15,LALRAction.Type.Reduce,49),LALRAction(16,LALRAction.Type.Reduce,49),LALRAction(20,LALRAction.Type.Reduce,49)] ),
		LALRState( [LALRAction(12,LALRAction.Type.Reduce,47),LALRAction(15,LALRAction.Type.Reduce,47),LALRAction(16,LALRAction.Type.Reduce,47),LALRAction(20,LALRAction.Type.Reduce,47)] ),
		LALRState( [LALRAction(15,LALRAction.Type.Shift,50),LALRAction(27,LALRAction.Type.Goto,69),LALRAction(28,LALRAction.Type.Goto,4),LALRAction(0,LALRAction.Type.Reduce,10),LALRAction(16,LALRAction.Type.Reduce,10),LALRAction(17,LALRAction.Type.Reduce,10),LALRAction(19,LALRAction.Type.Reduce,10),LALRAction(20,LALRAction.Type.Reduce,10),LALRAction(6,LALRAction.Type.Reduce,8),LALRAction(12,LALRAction.Type.Reduce,8),LALRAction(13,LALRAction.Type.Reduce,8)] ),
		LALRState( [LALRAction(0,LALRAction.Type.Reduce,44),LALRAction(16,LALRAction.Type.Reduce,44),LALRAction(17,LALRAction.Type.Reduce,44),LALRAction(19,LALRAction.Type.Reduce,44),LALRAction(20,LALRAction.Type.Reduce,44)] ),
		LALRState( [LALRAction(12,LALRAction.Type.Shift,70)] ),
		LALRState( [LALRAction(0,LALRAction.Type.Reduce,11),LALRAction(16,LALRAction.Type.Reduce,11),LALRAction(17,LALRAction.Type.Reduce,11),LALRAction(19,LALRAction.Type.Reduce,11),LALRAction(20,LALRAction.Type.Reduce,11)] ),
		LALRState( [LALRAction(12,LALRAction.Type.Shift,71)] ),
		LALRState( [LALRAction(12,LALRAction.Type.Reduce,14),LALRAction(15,LALRAction.Type.Reduce,14),LALRAction(16,LALRAction.Type.Reduce,14),LALRAction(17,LALRAction.Type.Reduce,14),LALRAction(18,LALRAction.Type.Reduce,14),LALRAction(19,LALRAction.Type.Reduce,14),LALRAction(20,LALRAction.Type.Reduce,14)] ),
		LALRState( [LALRAction(0,LALRAction.Type.Reduce,21),LALRAction(16,LALRAction.Type.Reduce,21),LALRAction(17,LALRAction.Type.Reduce,21),LALRAction(19,LALRAction.Type.Reduce,21),LALRAction(20,LALRAction.Type.Reduce,21)] ),
		LALRState( [LALRAction(6,LALRAction.Type.Shift,72),LALRAction(13,LALRAction.Type.Shift,73)] ),
		LALRState( [LALRAction(8,LALRAction.Type.Shift,74),LALRAction(12,LALRAction.Type.Shift,75)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Shift,40),LALRAction(18,LALRAction.Type.Shift,41),LALRAction(19,LALRAction.Type.Shift,42),LALRAction(20,LALRAction.Type.Shift,43),LALRAction(35,LALRAction.Type.Goto,68),LALRAction(8,LALRAction.Type.Reduce,39),LALRAction(12,LALRAction.Type.Reduce,39)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Reduce,42),LALRAction(8,LALRAction.Type.Reduce,42),LALRAction(12,LALRAction.Type.Reduce,42),LALRAction(15,LALRAction.Type.Reduce,42),LALRAction(18,LALRAction.Type.Reduce,42),LALRAction(19,LALRAction.Type.Reduce,42),LALRAction(20,LALRAction.Type.Reduce,42)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Reduce,41),LALRAction(8,LALRAction.Type.Reduce,41),LALRAction(12,LALRAction.Type.Reduce,41),LALRAction(15,LALRAction.Type.Reduce,41),LALRAction(18,LALRAction.Type.Reduce,41),LALRAction(19,LALRAction.Type.Reduce,41),LALRAction(20,LALRAction.Type.Reduce,41)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Reduce,40),LALRAction(8,LALRAction.Type.Reduce,40),LALRAction(12,LALRAction.Type.Reduce,40),LALRAction(15,LALRAction.Type.Reduce,40),LALRAction(18,LALRAction.Type.Reduce,40),LALRAction(19,LALRAction.Type.Reduce,40),LALRAction(20,LALRAction.Type.Reduce,40)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Reduce,34),LALRAction(8,LALRAction.Type.Reduce,34),LALRAction(12,LALRAction.Type.Reduce,34),LALRAction(15,LALRAction.Type.Reduce,34),LALRAction(18,LALRAction.Type.Reduce,34),LALRAction(19,LALRAction.Type.Reduce,34),LALRAction(20,LALRAction.Type.Reduce,34)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Reduce,35),LALRAction(8,LALRAction.Type.Reduce,35),LALRAction(12,LALRAction.Type.Reduce,35),LALRAction(15,LALRAction.Type.Reduce,35),LALRAction(18,LALRAction.Type.Reduce,35),LALRAction(19,LALRAction.Type.Reduce,35),LALRAction(20,LALRAction.Type.Reduce,35)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Reduce,36),LALRAction(8,LALRAction.Type.Reduce,36),LALRAction(12,LALRAction.Type.Reduce,36),LALRAction(15,LALRAction.Type.Reduce,36),LALRAction(18,LALRAction.Type.Reduce,36),LALRAction(19,LALRAction.Type.Reduce,36),LALRAction(20,LALRAction.Type.Reduce,36)] ),
		LALRState( [LALRAction(0,LALRAction.Type.Reduce,27),LALRAction(16,LALRAction.Type.Reduce,27),LALRAction(17,LALRAction.Type.Reduce,27),LALRAction(19,LALRAction.Type.Reduce,27),LALRAction(20,LALRAction.Type.Reduce,27)] ),
		LALRState( [LALRAction(12,LALRAction.Type.Shift,76)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Reduce,32),LALRAction(8,LALRAction.Type.Reduce,32),LALRAction(12,LALRAction.Type.Reduce,32),LALRAction(15,LALRAction.Type.Reduce,32),LALRAction(18,LALRAction.Type.Reduce,32),LALRAction(19,LALRAction.Type.Reduce,32),LALRAction(20,LALRAction.Type.Reduce,32)] ),
		LALRState( [LALRAction(0,LALRAction.Type.Reduce,9),LALRAction(16,LALRAction.Type.Reduce,9),LALRAction(17,LALRAction.Type.Reduce,9),LALRAction(19,LALRAction.Type.Reduce,9),LALRAction(20,LALRAction.Type.Reduce,9)] ),
		LALRState( [LALRAction(24,LALRAction.Type.Goto,77),LALRAction(12,LALRAction.Type.Reduce,48),LALRAction(15,LALRAction.Type.Reduce,48),LALRAction(16,LALRAction.Type.Reduce,48),LALRAction(20,LALRAction.Type.Reduce,48)] ),
		LALRState( [LALRAction(16,LALRAction.Type.Shift,28),LALRAction(17,LALRAction.Type.Shift,29),LALRAction(18,LALRAction.Type.Shift,30),LALRAction(19,LALRAction.Type.Shift,31),LALRAction(20,LALRAction.Type.Shift,32),LALRAction(31,LALRAction.Type.Goto,34),LALRAction(32,LALRAction.Type.Goto,78)] ),
		LALRState( [LALRAction(18,LALRAction.Type.Shift,36),LALRAction(19,LALRAction.Type.Shift,37),LALRAction(40,LALRAction.Type.Goto,79)] ),
		LALRState( [LALRAction(18,LALRAction.Type.Shift,36),LALRAction(19,LALRAction.Type.Shift,37),LALRAction(40,LALRAction.Type.Goto,80)] ),
		LALRState( [LALRAction(9,LALRAction.Type.Shift,60),LALRAction(11,LALRAction.Type.Shift,61),LALRAction(13,LALRAction.Type.Shift,62),LALRAction(26,LALRAction.Type.Goto,81),LALRAction(7,LALRAction.Type.Reduce,43),LALRAction(8,LALRAction.Type.Reduce,43),LALRAction(12,LALRAction.Type.Reduce,43),LALRAction(15,LALRAction.Type.Reduce,43),LALRAction(18,LALRAction.Type.Reduce,43),LALRAction(19,LALRAction.Type.Reduce,43),LALRAction(20,LALRAction.Type.Reduce,43)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Shift,40),LALRAction(18,LALRAction.Type.Shift,41),LALRAction(19,LALRAction.Type.Shift,42),LALRAction(20,LALRAction.Type.Shift,43),LALRAction(35,LALRAction.Type.Goto,45),LALRAction(36,LALRAction.Type.Goto,82)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Shift,40),LALRAction(18,LALRAction.Type.Shift,41),LALRAction(19,LALRAction.Type.Shift,42),LALRAction(20,LALRAction.Type.Shift,43),LALRAction(35,LALRAction.Type.Goto,45),LALRAction(36,LALRAction.Type.Goto,83)] ),
		LALRState( [LALRAction(16,LALRAction.Type.Shift,47),LALRAction(20,LALRAction.Type.Shift,48),LALRAction(41,LALRAction.Type.Goto,49),LALRAction(12,LALRAction.Type.Reduce,45),LALRAction(15,LALRAction.Type.Reduce,45)] ),
		LALRState( [LALRAction(16,LALRAction.Type.Shift,28),LALRAction(17,LALRAction.Type.Shift,29),LALRAction(18,LALRAction.Type.Shift,30),LALRAction(19,LALRAction.Type.Shift,31),LALRAction(20,LALRAction.Type.Shift,32),LALRAction(31,LALRAction.Type.Goto,55),LALRAction(12,LALRAction.Type.Reduce,12),LALRAction(15,LALRAction.Type.Reduce,12)] ),
		LALRState( [LALRAction(6,LALRAction.Type.Reduce,23),LALRAction(13,LALRAction.Type.Reduce,23),LALRAction(15,LALRAction.Type.Reduce,23)] ),
		LALRState( [LALRAction(6,LALRAction.Type.Reduce,22),LALRAction(13,LALRAction.Type.Reduce,22),LALRAction(15,LALRAction.Type.Reduce,22)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Reduce,37),LALRAction(8,LALRAction.Type.Reduce,37),LALRAction(12,LALRAction.Type.Reduce,37),LALRAction(15,LALRAction.Type.Reduce,37),LALRAction(18,LALRAction.Type.Reduce,37),LALRAction(19,LALRAction.Type.Reduce,37),LALRAction(20,LALRAction.Type.Reduce,37)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Shift,40),LALRAction(18,LALRAction.Type.Shift,41),LALRAction(19,LALRAction.Type.Shift,42),LALRAction(20,LALRAction.Type.Shift,43),LALRAction(35,LALRAction.Type.Goto,68),LALRAction(8,LALRAction.Type.Reduce,38),LALRAction(12,LALRAction.Type.Reduce,38)] ),
		LALRState( [LALRAction(7,LALRAction.Type.Shift,40),LALRAction(18,LALRAction.Type.Shift,41),LALRAction(19,LALRAction.Type.Shift,42),LALRAction(20,LALRAction.Type.Shift,43),LALRAction(35,LALRAction.Type.Goto,68),LALRAction(12,LALRAction.Type.Reduce,30),LALRAction(15,LALRAction.Type.Reduce,30)] ),
	];
	
	version(GoldieStaticLang)
	{
		private this()
		{
			super();
			name   = staticName;
			ver    = staticVer;
			author = staticAuthor;
			about  = staticAbout;
			caseSensitive = staticCaseSensitive;

			startSymbolIndex = staticStartSymbolIndex;
			initialDFAState  = staticInitialDFAState;
			initialLALRState = staticInitialLALRState;
			eofSymbolIndex   = staticEofSymbolIndex;
			errorSymbolIndex = staticErrorSymbolIndex;

			symbolTable  = staticSymbolTable;
			charSetTable = staticCharSetTable;
			ruleTable    = staticRuleTable;
			dfaTable     = staticDFATable;
			lalrTable    = staticLALRTable;

			symbolLookup = [
				"("                  : [Symbol("(",SymbolType.Terminal,7)],
				")"                  : [Symbol(")",SymbolType.Terminal,8)],
				"*"                  : [Symbol("*",SymbolType.Terminal,9)],
				"+"                  : [Symbol("+",SymbolType.Terminal,13)],
				"-"                  : [Symbol("-",SymbolType.Terminal,6)],
				"::="                : [Symbol("::=",SymbolType.Terminal,10)],
				"<Content>"          : [Symbol("<Content>",SymbolType.NonTerminal,21)],
				"<Definition>"       : [Symbol("<Definition>",SymbolType.NonTerminal,22)],
				"<Grammar>"          : [Symbol("<Grammar>",SymbolType.NonTerminal,23)],
				"<Handle>"           : [Symbol("<Handle>",SymbolType.NonTerminal,24)],
				"<Handles>"          : [Symbol("<Handles>",SymbolType.NonTerminal,25)],
				"<Kleene Opt>"       : [Symbol("<Kleene Opt>",SymbolType.NonTerminal,26)],
				"<Parameter Body>"   : [Symbol("<Parameter Body>",SymbolType.NonTerminal,30)],
				"<Parameter Item>"   : [Symbol("<Parameter Item>",SymbolType.NonTerminal,31)],
				"<Parameter Items>"  : [Symbol("<Parameter Items>",SymbolType.NonTerminal,32)],
				"<Parameter>"        : [Symbol("<Parameter>",SymbolType.NonTerminal,29)],
				"<Reg Exp 2>"        : [Symbol("<Reg Exp 2>",SymbolType.NonTerminal,34)],
				"<Reg Exp Item>"     : [Symbol("<Reg Exp Item>",SymbolType.NonTerminal,35)],
				"<Reg Exp Seq>"      : [Symbol("<Reg Exp Seq>",SymbolType.NonTerminal,36)],
				"<Reg Exp>"          : [Symbol("<Reg Exp>",SymbolType.NonTerminal,33)],
				"<Rule Decl>"        : [Symbol("<Rule Decl>",SymbolType.NonTerminal,37)],
				"<Set Decl>"         : [Symbol("<Set Decl>",SymbolType.NonTerminal,38)],
				"<Set Exp>"          : [Symbol("<Set Exp>",SymbolType.NonTerminal,39)],
				"<Set Item>"         : [Symbol("<Set Item>",SymbolType.NonTerminal,40)],
				"<Symbol>"           : [Symbol("<Symbol>",SymbolType.NonTerminal,41)],
				"<Terminal Decl>"    : [Symbol("<Terminal Decl>",SymbolType.NonTerminal,42)],
				"<Terminal Name>"    : [Symbol("<Terminal Name>",SymbolType.NonTerminal,43)],
				"<nl opt>"           : [Symbol("<nl opt>",SymbolType.NonTerminal,28)],
				"<nl>"               : [Symbol("<nl>",SymbolType.NonTerminal,27)],
				"="                  : [Symbol("=",SymbolType.Terminal,14)],
				"?"                  : [Symbol("?",SymbolType.Terminal,11)],
				"Comment End"        : [Symbol("Comment End",SymbolType.CommentEnd,3)],
				"Comment Line"       : [Symbol("Comment Line",SymbolType.CommentLine,4)],
				"Comment Start"      : [Symbol("Comment Start",SymbolType.CommentStart,5)],
				"EOF"                : [Symbol("EOF",SymbolType.EOF,0)],
				"Error"              : [Symbol("Error",SymbolType.Error,1)],
				"Newline"            : [Symbol("Newline",SymbolType.Terminal,15)],
				"Nonterminal"        : [Symbol("Nonterminal",SymbolType.Terminal,16)],
				"ParameterName"      : [Symbol("ParameterName",SymbolType.Terminal,17)],
				"SetLiteral"         : [Symbol("SetLiteral",SymbolType.Terminal,18)],
				"SetName"            : [Symbol("SetName",SymbolType.Terminal,19)],
				"Terminal"           : [Symbol("Terminal",SymbolType.Terminal,20)],
				"Whitespace"         : [Symbol("Whitespace",SymbolType.Whitespace,2)],
				"|"                  : [Symbol("|",SymbolType.Terminal,12)]
			];
		}

		public Lexer_grm lexCode(string source, string filename="")
		{
			return cast(Lexer_grm)lexCodeX(source, filename);
		}
		
		public Parser_grm parseTokens(Token[] tokens, string filename="", Lexer lexerUsed=null)
		{
			return cast(Parser_grm)parseTokensX(tokens, filename, lexerUsed);
		}

		public Lexer_grm lexFile(string filename)
		{
			return cast(Lexer_grm)lexFileX(filename);
		}

		public Parser_grm parseFile(string filename)
		{
			return cast(Parser_grm)parseFileX(filename);
		}

		public Parser_grm parseCode(string source, string filename="")
		{
			return cast(Parser_grm)parseCodeX(source, filename);
		}
	}

	public override Lexer lexCodeX(string source, string filename="")
	{
		lexer = new Lexer_grm();
		lexer.process(source, this, filename);
		return lexer;
	}
	
	public override Parser parseTokensX(Token[] tokens, string filename="", Lexer lexerUsed=null)
	{
		parser = new Parser_grm();
		parser.process(tokens, this, filename, lexerUsed);
		return parser;
	}

	
	
	public static bool staticIsSymbolNameValid(string name)
	{
		return staticLookupSymbol(name).length >= 1;
	}
	
	public static bool staticIsSymbolNameAmbiguous(string name)
	{
		return staticLookupSymbol(name).length > 1;
	}
	
	public static string[] staticUniqueSymbolNames()
	{
		version(GoldieStaticLang)
			return staticUniqueSymbolNameArray;
		else
			return symbolLookup.keys;
	}
	
	public static Symbol staticEofSymbol()
	{
		version(GoldieStaticLang)
			return staticSymbolTable[staticEofSymbolIndex];
		else
			return symbolTable[eofSymbolIndex];
	}
	
	public static Symbol staticErrorSymbol()
	{
		version(GoldieStaticLang)
			return staticSymbolTable[staticErrorSymbolIndex];
		else
			return symbolTable[errorSymbolIndex];
	}
	
	version(GoldieStaticLang)
	{
		public override bool isSymbolNameValid(string name)
		{
			return typeof(this).staticIsSymbolNameValid(name);
		}
		
		public override bool isSymbolNameAmbiguous(string name)
		{
			return typeof(this).staticIsSymbolNameAmbiguous(name);
		}
		
		public override string[] uniqueSymbolNames()
		{
			return typeof(this).staticUniqueSymbolNames();
		}
		
		public override Symbol eofSymbol()
		{
			return typeof(this).staticEofSymbol();
		}
		
		public override Symbol errorSymbol()
		{
			return typeof(this).staticErrorSymbol();
		}

		protected static Symbol[] staticLookupSymbol(string symName)
		{
			switch(symName)
			{
			case "(":                 return [Symbol("(",SymbolType.Terminal,7)];
			case ")":                 return [Symbol(")",SymbolType.Terminal,8)];
			case "*":                 return [Symbol("*",SymbolType.Terminal,9)];
			case "+":                 return [Symbol("+",SymbolType.Terminal,13)];
			case "-":                 return [Symbol("-",SymbolType.Terminal,6)];
			case "::=":               return [Symbol("::=",SymbolType.Terminal,10)];
			case "<Content>":         return [Symbol("<Content>",SymbolType.NonTerminal,21)];
			case "<Definition>":      return [Symbol("<Definition>",SymbolType.NonTerminal,22)];
			case "<Grammar>":         return [Symbol("<Grammar>",SymbolType.NonTerminal,23)];
			case "<Handle>":          return [Symbol("<Handle>",SymbolType.NonTerminal,24)];
			case "<Handles>":         return [Symbol("<Handles>",SymbolType.NonTerminal,25)];
			case "<Kleene Opt>":      return [Symbol("<Kleene Opt>",SymbolType.NonTerminal,26)];
			case "<Parameter Body>":  return [Symbol("<Parameter Body>",SymbolType.NonTerminal,30)];
			case "<Parameter Item>":  return [Symbol("<Parameter Item>",SymbolType.NonTerminal,31)];
			case "<Parameter Items>": return [Symbol("<Parameter Items>",SymbolType.NonTerminal,32)];
			case "<Parameter>":       return [Symbol("<Parameter>",SymbolType.NonTerminal,29)];
			case "<Reg Exp 2>":       return [Symbol("<Reg Exp 2>",SymbolType.NonTerminal,34)];
			case "<Reg Exp Item>":    return [Symbol("<Reg Exp Item>",SymbolType.NonTerminal,35)];
			case "<Reg Exp Seq>":     return [Symbol("<Reg Exp Seq>",SymbolType.NonTerminal,36)];
			case "<Reg Exp>":         return [Symbol("<Reg Exp>",SymbolType.NonTerminal,33)];
			case "<Rule Decl>":       return [Symbol("<Rule Decl>",SymbolType.NonTerminal,37)];
			case "<Set Decl>":        return [Symbol("<Set Decl>",SymbolType.NonTerminal,38)];
			case "<Set Exp>":         return [Symbol("<Set Exp>",SymbolType.NonTerminal,39)];
			case "<Set Item>":        return [Symbol("<Set Item>",SymbolType.NonTerminal,40)];
			case "<Symbol>":          return [Symbol("<Symbol>",SymbolType.NonTerminal,41)];
			case "<Terminal Decl>":   return [Symbol("<Terminal Decl>",SymbolType.NonTerminal,42)];
			case "<Terminal Name>":   return [Symbol("<Terminal Name>",SymbolType.NonTerminal,43)];
			case "<nl opt>":          return [Symbol("<nl opt>",SymbolType.NonTerminal,28)];
			case "<nl>":              return [Symbol("<nl>",SymbolType.NonTerminal,27)];
			case "=":                 return [Symbol("=",SymbolType.Terminal,14)];
			case "?":                 return [Symbol("?",SymbolType.Terminal,11)];
			case "Comment End":       return [Symbol("Comment End",SymbolType.CommentEnd,3)];
			case "Comment Line":      return [Symbol("Comment Line",SymbolType.CommentLine,4)];
			case "Comment Start":     return [Symbol("Comment Start",SymbolType.CommentStart,5)];
			case "EOF":               return [Symbol("EOF",SymbolType.EOF,0)];
			case "Error":             return [Symbol("Error",SymbolType.Error,1)];
			case "Newline":           return [Symbol("Newline",SymbolType.Terminal,15)];
			case "Nonterminal":       return [Symbol("Nonterminal",SymbolType.Terminal,16)];
			case "ParameterName":     return [Symbol("ParameterName",SymbolType.Terminal,17)];
			case "SetLiteral":        return [Symbol("SetLiteral",SymbolType.Terminal,18)];
			case "SetName":           return [Symbol("SetName",SymbolType.Terminal,19)];
			case "Terminal":          return [Symbol("Terminal",SymbolType.Terminal,20)];
			case "Whitespace":        return [Symbol("Whitespace",SymbolType.Whitespace,2)];
			case "|":                 return [Symbol("|",SymbolType.Terminal,12)];
			default:
				return [];
			}
		}

		protected override Symbol[] lookupSymbol(string symName)
		{
			return typeof(this).staticLookupSymbol(symName);
		}
	}

	
}
