internal static void InsertMaxDummyTerminalInDictionary(Dictionary <string, Terminal> table) { Terminal maxTerm = null; if (Terminal.Max != 0) { string maxChr = CharacterUtilities.QuoteMap(Terminal.Max); // FIXME maxTerm = table[maxChr]; } table["@Max@"] = maxTerm; }
private void GenerateInitializeMethod( List <AutomatonState> states, List <Production> productions, Dictionary <string, NonTerminal> nonTerminals) { // warning 649 : this field never assigned to. Console.WriteLine("#pragma warning disable 649"); Console.WriteLine(" private static Dictionary<int, string> aliasses;"); Console.WriteLine("#pragma warning restore 649"); Console.WriteLine(" private static Rule[] rules = new Rule[{0}];", productions.Count + 1); Console.WriteLine(" private static State[] states = new State[{0}];", states.Count); Console.WriteLine(" private static string[] nonTerms = new string[] {"); int length = 0; Console.Write(" "); 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("};"); Console.WriteLine(); Console.WriteLine(" static {0}() {{", grammar.ParserName); int state_nr = 0; foreach (AutomatonState state in states) { GenerateShiftReduceMachineState(state_nr++, state); } Console.WriteLine(); Console.WriteLine(" for (int sNo = 0; sNo < states.Length; sNo++) states[sNo].number = sNo;"); Console.WriteLine(); foreach (Production production in productions) { GenerateShiftReduceMachineRule(production); } 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(); Console.WriteLine(" protected override void Initialize() {"); Console.WriteLine(" this.InitSpecialTokens((int){0}.error, (int){0}.EOF);", grammar.TokenName); Console.WriteLine(" this.InitStates(states);"); Console.WriteLine(" this.InitRules(rules);"); Console.WriteLine(" this.InitNonTerminals(nonTerms);"); Console.WriteLine(" }"); Console.WriteLine(); }
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(); }