⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainform.cs

📁 编译原理语法分析和词法分析综合实验: 源程序、可执行程序、测试程序文件、程序运行说明文件、实验报告。
💻 CS
字号:
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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -