/// <summary> /// Creates a visualised grammar based on the definitive grammar passed. /// </summary> /// <param name="dGrammarIn"></param> internal VisualisedGrammar(DefinitiveGrammar dGrammarIn) { // obsolete - using vistor pattern //startSymbol = dGrammarIn.StartSymbol.CreateVisualGrammar(true); // create visitor GrammarNodeDCreateVisualVisitor visitor = new GrammarNodeDCreateVisualVisitor(); // traverse tree dGrammarIn.StartSymbol.accept(visitor); if (visitor.CurrentNodeV as NonterminalHeadV == null) throw new Exception("Creating the visualised grammar from the definitive failed."); startSymbol = (NonterminalHeadV)visitor.CurrentNodeV; }
public void Expand() { if (IsExpanded) throw new Exception("Cannot expand an expanded nonterminal tail V."); GrammarNodeDCreateVisualVisitor visitor = new GrammarNodeDCreateVisualVisitor(level); Reference.Reference.Rule.accept(visitor); if (visitor.CurrentNodeV as ChoiceLineV == null) throw new Exception("The node created in the visitor pattern returned null or is not of type ChoiceLineV"); else rule = (ChoiceLineV)visitor.CurrentNodeV; //rule = (ChoiceLineV)reference.Reference.Rule.CreateVisual(updateRef) }