/// <summary> /// Creates parser, from given grammar /// (Accepts all CFG forms) /// </summary> /// <param name="grammar">Grammar specifing parsing rules</param> public Parser(GrammarBase grammar) { _grammar = grammar; grammar.Build(); var nonTerminals = grammar.CollectNonTerminals(grammar.Root); //prepare edges foreach (var nonTerm in nonTerminals) { foreach (var sequence in nonTerm.Rule.Sequences) { var activeLabel = new ActiveLabel(sequence); _activeChains.Add(sequence, activeLabel); } } buildEdgeTransitions(); //set root transitions _rootTransitions = getRootTransitions().ToArray(); }