/// <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)
        }