private void RegexButton_OnClick(object sender, RoutedEventArgs e) { try { if (string.IsNullOrEmpty(RegexTextBox.Text)) { MessageBox.Show("Строка пустая!"); } else { GrammarRichTextBox.Document.Blocks.Clear(); MainPanel.Children.Clear(); Regex rgx = new Regex(RegexTextBox.Text); var builder = new MachineBuilder(); var detBuilder = new DetermMachineBuilder(); var FSM = detBuilder.Build(builder.Build(rgx)); DetermFSM = FSM; GraphBuilder graphBuilder = new GraphBuilder(MainPanel, 50, 50); Graph = graphBuilder.BuildGraph(FSM, 300, 300, 200); var startState = Graph.Vertices.First(v => v.State == FSM.StartState); ScrollViewer.ScrollToHorizontalOffset(Canvas.GetTop(startState) - (Width - ScrollViewer.Margin.Right) / 2); ScrollViewer.ScrollToVerticalOffset(Canvas.GetLeft(startState) - Height / 2); if (DetermFSM.IsFinalState(DetermFSM.StartState)) { CheckImage.Source = new BitmapImage(new Uri("Images/true.png", UriKind.RelativeOrAbsolute)); } else { CheckImage.Source = new BitmapImage(new Uri("Images/wrong.png", UriKind.RelativeOrAbsolute)); } InitiateGrammarTextBox(); CheckWordButton.IsEnabled = true; CheckWordTempTextBox.IsEnabled = true; } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
static void Main(string[] args) { Regex rgx = new Regex("(a|b)*"); var builder = new MachineBuilder(); var fsm = builder.Build(rgx); var newFsm = GetDmk1kFSM(); var detBuilder = new DetermMachineBuilder(); var det = detBuilder.Build(newFsm); var det2 = detBuilder.Build(fsm); var another = GetAnotherFSM(); var det1 = detBuilder.Build(another); Console.WriteLine(det.GetAsRegularGrammar()); Console.WriteLine("abba is" + det2.CheckWord("abba")); Console.WriteLine("abbab is" + det2.CheckWord("abbab")); Console.ReadKey(); }