예제 #1
0
        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);
            }
        }
예제 #2
0
        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();
        }