private void GenerateInitializeMethod(
List<AutomatonState> states,
List<Production> productions,
Dictionary<string, NonTerminal> nonTerminals)
{
Console.WriteLine("#pragma warning disable 649");
Console.WriteLine(" private Dictionary<int, string> aliasses;");
Console.WriteLine("#pragma warning restore 649");
Console.WriteLine();
Console.WriteLine(" protected override void Initialize()");
Console.WriteLine(" {");
//Console.WriteLine(" this.errorToken = (int){0}.error;", grammar.TokenName);
//Console.WriteLine(" this.endOfFileToken = (int){0}.EOF;", grammar.TokenName);
Console.WriteLine(" this.InitSpecialTokens((int){0}.error, (int){0}.EOF);", grammar.TokenName);
Console.WriteLine();
Console.WriteLine(" this.InitStateTable({0});", states.Count);
int state_nr = 0;
foreach (AutomatonState state in states)
GenerateState(state_nr++, state);
Console.WriteLine();
Console.WriteLine(" Rule[] rules=new Rule[{0}];", productions.Count+1);
foreach (Production production in productions)
GenerateRule(production);
Console.WriteLine(" this.InitRules(rules);");
Console.WriteLine();
Console.Write(" this.InitNonTerminals(new string[] {\"\", ");
int length = 37;
foreach (NonTerminal nonTerminal in nonTerminals.Values)
{
string ss = String.Format(CultureInfo.InvariantCulture, "\"{0}\", ", nonTerminal.ToString());
length += ss.Length;
Console.Write(ss);
if (length > 70)
{
Console.WriteLine();
Console.Write(" ");
length = 0;
}
}
Console.WriteLine("});");
//
// Now initialize the terminal alias list, if needed.
//
List<Terminal> aliasList = new List<Terminal>();
foreach (KeyValuePair<string, Terminal> pair in grammar.terminals)
{
Terminal term = pair.Value;
if (term.Alias != null)
aliasList.Add(term);
}
if (aliasList.Count > 0)
{
Console.WriteLine();
Console.WriteLine(" aliasses = new Dictionary<int, string>();");
foreach (Terminal termWithAlias in aliasList)
{
Console.WriteLine(" aliasses.Add({0}, {1});",
termWithAlias.num,
CharacterUtilities.QuoteMap(termWithAlias.Alias));
}
}
Console.WriteLine(" }");
Console.WriteLine();
}