/// <summary>
 /// Will construct a definitive grammar from an input string, throw exception with compiler error otherwise.
 /// Assumes first rule is the start symbol.
 /// </summary>
 /// <param name="input"></param>
 public void setDefinitiveGrammar(String input)
 {
     bool noError = bnfParser.Parse(input);
     if (noError)
     {
         // no start symbol specified, assume first entry
         definitiveGrammar = new DefinitiveGrammar(bnfParser.Rules, bnfParser.Rules[0]);
         visualisedGrammar = null;
     }
     else
     {
         throw new Exception(bnfParser.ErrorText);
     }
 }
        private void buildVisualisedGrammar()
        {
            if (definitiveGrammar == null)
                throw new Exception("You must set the definitive grammar first");

            visualisedGrammar = new VisualisedGrammar(definitiveGrammar);
        }
 public void setDefinitiveGrammar(DefinitiveGrammar dg)
 {
     definitiveGrammar = dg;
     visualisedGrammar = null;
 }
        public void setStartSymbol(string name)
        {
            NonterminalHeadD nont = definitiveGrammar.getNonterminal(name);
            if (nont != null)
            {
                definitiveGrammar.setStartSymbol(nont);
            }
            else
                throw new Exception("Could not find the Nonterminal from the name [" + name + "] given.");

            visualisedGrammar = null;
        }