public static void CompSymbolSets() { CompDeletableSymbols(); CompFirstSets(); CompFollowSets(); CompAnySets(); CompSyncSets(); if (ddt[1]) { Trace.WriteLine(); Trace.WriteLine("First & follow symbols:"); Trace.WriteLine("----------------------"); Trace.WriteLine(); foreach (Symbol sym in Symbol.nonterminals) { Trace.WriteLine(sym.name); Trace.Write("first: "); Sets.PrintSet(sym.first, 10); Trace.Write("follow: "); Sets.PrintSet(sym.follow, 10); Trace.WriteLine(); } } if (ddt[4]) { Trace.WriteLine(); Trace.WriteLine("ANY and SYNC sets:"); Trace.WriteLine("-----------------"); foreach (Node p in Node.nodes) if (p.typ == Node.any || p.typ == Node.sync) { Trace.Write("{0,4} {1,4}: ", p.n, Node.nTyp[p.typ]); Sets.PrintSet(p.set, 11); } } }
/// <returns> /// BitArray which contains the first tokens. /// </returns> public static BitArray First(Node p) { BitArray fs = First0(p, new BitArray(Node.nodes.Count)); if (ddt[3]) { Trace.WriteLine(); if (p != null) Trace.WriteLine("First: node = {0}", p.n); else Trace.WriteLine("First: node = null"); Sets.PrintSet(fs, 0); } return fs; }