mainform.cs

来自「编译原理语法分析和词法分析综合实验: 源程序、可执行程序、测试程序文件、程序运行」· CS 代码 · 共 134 行

CS
134
字号
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using Lane.Compiler.WordAnalyser.Core;
using Lane.Compiler.WordAnalyser.ExpressionCalculation;

namespace Lane.Compiler.WordAnalyser
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            //listBox1.Items.Clear();
            //listBox1.Items.Add(new GroupText());

            btnGo.Text = Properties.Settings.Default.Button1Text;
        }

        LexicalAnalyser lexical = new LexicalAnalyser();
        SyntaxAnalyser syntax = new SyntaxAnalyser();

        private void btnGo_Click(object sender, EventArgs e)
        {
            Analysis();
        }

        private void Analysis()
        {
            AddLexicalItems();
            AddSyntaxItems();
            AddExpressionItems();
        }

        private void AddLexicalItems()
        {
            lsbLexical.Items.Clear();
            string text = txtSource.Text;

            lexical.Source = text;

            lsbLexical.Items.AddRange(lexical.Tokens);

            if (lsbLexical.Items.Count == 0)
            {
                lsbLexical.Items.Add("No matches");
            }
        }

        private void AddSyntaxItems()
        {
            lsbSyntax.Items.Clear();
            if (syntax.Analysis(lexical.Tokens))
            {
                lsbSyntax.Items.Add("Success");
            }
            else
            {
                lsbSyntax.Items.AddRange(syntax.Errors.ToArray());
            }
        }

        private void AddExpressionItems()
        {
            lsbExpression.Items.Clear();
            if (syntax.Expressions.Count > 0)
            {
                lsbExpression.Items.AddRange(syntax.Expressions.ToArray());
            }
        }


        private void lsbLexical_SelectedIndexChanged(object sender, EventArgs e)
        {
            int index = this.lsbLexical.SelectedIndex;
            if (index >= 0)
            {
                Token t = lsbLexical.Items[index] as Token;
                if (t == null)
                    return;                
                this.txtSource.Select(t.Index, t.Length);                
            }
        }

        private void MainForm_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F5)
            {
                Analysis();
            }
            else if (e.KeyCode == Keys.Escape)
            {
                Application.Exit();
            }
        }

        private void lsbSyntax_SelectedIndexChanged(object sender, EventArgs e)
        {
            int index = this.lsbSyntax.SelectedIndex;
            if (index >= 0)
            {
                SyntaxError s = lsbSyntax.Items[index] as SyntaxError;
                if (s == null)
                    return;
                Token t = s.ErrorToken;
                if (t == null)
                    return;
                this.txtSource.Select(t.Index, t.Length);
            }
        }

        private void lsbExpression_SelectedIndexChanged(object sender, EventArgs e)
        {
            int index = this.lsbExpression.SelectedIndex;
            if (index >= 0)
            {
                Expression s = lsbExpression.Items[index] as Expression;
                if (s == null)
                    return;
                Token t = s.Token;
                if (t == null)
                    return;
                this.txtSource.Select(t.Index, t.Length);
            }
        }

    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?