Exemplo n.º 1
0
        private void Grammar_MenuItem_Click( object sender, EventArgs e )
        {
            if( this.parser.IsParsing )
                return; //TODO: ask user?

            using( var dlg = new GrammarForm() )
            {
                dlg.Text = "Nyelvtan szerkesztő";
                dlg.Grammar = this.ext_grammar != null ? this.ext_grammar.RestrictedGrammar.BaseGrammar : null;

                if( dlg.ShowDialog(this) == System.Windows.Forms.DialogResult.OK )
                {
                    try
                    {
                        var grammar = dlg.Grammar;
                        var rst_grammar = new RestrictedStartSymbolGrammar(grammar);
                        this.ext_grammar = new ExtendedGrammar(rst_grammar);
                        this.canonical_sets = SyntacticAnalysis.LR.LR0CanonicalSets.Build(rst_grammar);
                        this.epsilon_grammaticals = EpsilonGrammaticals.Build(grammar);
                        this.follow_sets = FollowSets.Build(this.ext_grammar, this.epsilon_grammaticals);
                        this.parser_table = SyntacticAnalysis.LR.SLR1ParserTableBuilder.Build(
                            this.ext_grammar, this.canonical_sets, this.follow_sets);
                    }
                    catch( Exception ex )
                    {
                        MessageBox.Show(this,
                            ex.Message, "A Nyelvtant nem tudom használni",
                            MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

                        this.ext_grammar = null;
                        this.canonical_sets = null;
                        this.epsilon_grammaticals = null;
                        this.follow_sets = null;
                        this.parser_table = null;
                    }

                    // Update controls
                    if( this.ext_grammar != null )
                    {
                        this.ParserStart_ToolButton.Enabled = true;

                        this.ParserView.ClearInputHistory();

                        this.ParserTable.SetTable(this.ext_grammar, this.parser_table);

                        this.DfsmView.SetCanonicalSets(this.ext_grammar.RestrictedGrammar.BaseGrammar, this.canonical_sets);
                        this.DfsmView.Invalidate();

                        this.SyntacticTreeView.ClearNodes();
                    }
                    else
                    {
                        this.ParserStart_ToolButton.Enabled = false;
                    }
                }
            }
        }
Exemplo n.º 2
0
 public void SetTable( SyntacticAnalysis.ExtendedGrammar grammar, SyntacticAnalysis.LR.ParserTable table )
 {
     this.grammar = grammar;
     this.table = table;
     this.UpdateTable();
 }