public GrammarNodeD AddAfter(NonterminalHeadD nonterminalHeadD, GrammarNodeV target, VADG.Global.SymbolType symbolType) { GrammarNodeDAddAfterVisitor visitor = new GrammarNodeDAddAfterVisitor(); visitor.Target = target.getReference(); visitor.SymbolType = symbolType; visitor.visit(nonterminalHeadD); return visitor.Item; }
public GrammarNodeD AddBefore(NonterminalHeadD nonterminalHeadD, GrammarNodeV grammarNodeV, VADG.Global.SymbolType symbolType) { GrammarNodeDAddBeforeVisitor visitor = new GrammarNodeDAddBeforeVisitor(); visitor.Target = grammarNodeV.getReference(); visitor.SymbolType = symbolType; visitor.visit(nonterminalHeadD); return visitor.Item; }
public GrammarNodeD Replace(GrammarNodeD itemToReplace, VADG.Global.SymbolType symbolType, string name) { OperationD parent = itemToReplace.Parent as OperationD; if (parent == null) throw new Exception("The item to replace does not have an operation D as a parent, fail."); // the rule we are editing NonterminalHeadD rule = itemToReplace.getMyRule(); if (rule == null) throw new Exception("The item to replace could not find a nonterminalhead D associated with it."); // remove old item int index = parent.Children.IndexOf(itemToReplace); parent.Children.Remove(itemToReplace); itemToReplace.Dispose(); // create new item to add GrammarNodeD newItem; if (symbolType == VADG.Global.SymbolType.Terminal) { // create new Terminal newItem = new TerminalD(name, parent); } else { // If the nont head doesn't exist, create and add to grammar NonterminalHeadD nontHead = model.DefinitiveGrammar.getNonterminal(name); if (nontHead == null) nontHead = CreateNewNonterminal(name); newItem = nontHead.CreateNonterminalTailD(parent); } // insert new item into parent parent.insertChild(index, newItem); return newItem; }