private void UnselectAll() { // unselect all GrammarNodeDUnselectVisitor visitor = new GrammarNodeDUnselectVisitor(); foreach (NonterminalHeadD nont in model.DefinitiveGrammar.Nonterminals) { visitor.visit(nont); } }
private void previewButton_Click(object sender, RoutedEventArgs e) { try { this.Cursor = Cursors.Wait; Factorisation factorisation = analysisOptions.SelectedItem as Factorisation; if (factorisation == null) throw new Exception("You did not select a factorisation option"); String newRule = "NewRule_" + new Random().Next(0, 9999).ToString(); String currentGrammarStr = model.DefinitiveGrammar.PrintGrammar(); String newGrammarStr = factorisation.applyRule(currentGrammarStr, newRule); GrammarModel newModel = new GrammarModel(newGrammarStr); newGrammar = new GrammarModel(newModel.DefinitiveGrammar); // highlight rules that are being factorised // first unselect any rules selected GrammarNodeDUnselectVisitor visitor = new GrammarNodeDUnselectVisitor(); model.DefinitiveGrammar.StartSymbol.accept(visitor); newModel.DefinitiveGrammar.StartSymbol.accept(visitor); foreach (NonterminalHeadD nont in factorisation.NontHeads) { model.DefinitiveGrammar.getNonterminal(nont.Name).IsSelected = true; newModel.DefinitiveGrammar.getNonterminal(nont.Name).IsSelected = true; } newModel.DefinitiveGrammar.getNonterminal(newRule).IsSelected = true; // print grammars currentGrammar.Document = model.DefinitiveGrammar.PrintGrammarRich(); previewGrammar.Document = newModel.DefinitiveGrammar.PrintGrammarRich(); this.Cursor = Cursors.Arrow; } catch (Exception ex) { this.Cursor = Cursors.Arrow; MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); this.Close(); } }