Пример #1
0
        private Dictionary <Nonterminal, Set <Terminal <TTokenKind> > > ComputeFirst(
            Grammar <TTokenKind, TNonterminal> grammar, IErasableSymbolsAnalyzer analyzer)
        {
            var(initFirstSets, graph) = DigraphAlgorithm.GetFirstGraph(grammar, analyzer);

            var firstSets = DigraphAlgorithm.Traverse(graph, initFirstSets);

            var firstMap = grammar.Nonterminals.ToDictionary(v => v, v => firstSets[v.Index]);

            return(firstMap);
        }