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

📄 analyze.cs

📁 用microsoft vc++6.0制作
💻 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.IO;
using System.Collections;

namespace Analyzer
{
    public partial class Analyze : Form
    {
        private FileStream fileoutput;//文件流
        private string filename = "";//打开文件名字
        private string oringal = "";//原始代码字符串
        string aftertreat = "";//预处理之后的源代码字符串

        public Analyze()
        {
            InitializeComponent();
        }

        private void openFile_Click(object sender, EventArgs e)
        {
            DialogResult result = openFileDialog.ShowDialog();
            filename = openFileDialog.FileName;
            if (result == DialogResult.Cancel)return;
            if (filename == "" || filename == null)
                MessageBox.Show("Invalid File Name", "Error",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            else
            {
                try
                {
                    fileoutput = new FileStream(filename, FileMode.Open, FileAccess.Read);//打开文件流
                    StreamReader reader = new StreamReader(fileoutput);//建立读文件流
                    richTextOpen.Text = reader.ReadToEnd();//全部读出送显
                    reader.Close();//关闭读文件流
                    oringal = richTextOpen.Text;//保留原始读取的源代码集           
                             
                }
                catch(IOException)
                {
                    MessageBox.Show("File Does Not Exits", "Error", 
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                fileoutput.Close();//关闭文件流
            }
        }

        private void saveFile_Click(object sender, EventArgs e)
        {

            DialogResult result = saveFileDialog.ShowDialog();
            filename = saveFileDialog.FileName;
            if (result == DialogResult.Cancel) return;
            if (filename == "" || filename == null)
                MessageBox.Show("Invalid File Name", "Error",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            else
            {
                try
                {
                    fileoutput = new FileStream(filename, FileMode.Create, FileAccess.Write);
                    StreamWriter writer = new StreamWriter(fileoutput);
                    writer.Write(richTextOpen.Text.ToString());
                    writer.Flush();//刷新缓冲区把字符写入文件
                    writer.Close();//关闭写文件流
                }
                catch (IOException)
                {
                    MessageBox.Show("File Does Not Exits", "Error",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                fileoutput.Close();
            }
        }

        private string treatment(string orstring)//预处理函数
        {
            string backup = "";
            string result = "";
            int length = orstring.Length;
            for (int i = 0; i < length; i++)
            {
                if (orstring[i] == '/')
                {
                    bool flag = false;//注视是否正确标志
                    i++;
                    if (orstring[i] == '/')
                    {
                        i++;
                        flag = true;
                        while (i < length && orstring[i] != '\n')
                        {
                            i++;
                        }
                    }
                    else if (orstring[i] == '*')
                    {
                        while (i < length - 1 && flag == false)
                        {
                            i++;
                            if (orstring[i] == '*' && orstring[i + 1] == '/')
                            {
                                flag = true;
                                i += 2;
                            }
                        }
                    }
                    if (flag != true)
                    {
                        MessageBox.Show("注释标记错误!",
                            "出现错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return "";
                    }
                }
                backup += orstring[i];//不是注释内的字符都写入backup字符串
            }
            int l = backup.Length;
            for (int i = 0; i < l - 1; i++)
            {
                if (backup[i] == '\t') i++;//处理tab字符,与空格
                if (backup[i] == ' ')//多个空格则只保留一个
                {
                    while (backup[i+1] == ' ')
                    i++;
                }
                result += backup[i];
            }
            result += backup[l - 1];
            return result;
        }

        private void pretreatment_Click(object sender, EventArgs e)
        {
            textBox.Text = treatment(richTextOpen.Text);//预处理后的原代码送显
            aftertreat = textBox.Text; //保存原处理之后的字符串
        }

        private void analyzer_Click(object sender, EventArgs e)
        {
            LexicalAnalyze lexical = new LexicalAnalyze(aftertreat);
            richTextResult.Text = lexical.getSymbolTable();//返回词法分析表格送显
        }

        private void newFile_Click(object sender, EventArgs e)
        {
            textBox.Clear();
            richTextOpen.Clear();
            richTextResult.Clear();
        }

        private void 帮助LToolStripButton_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Powered by 卢洋 040656", "卢洋 040656", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

    }
}

⌨️ 快捷键说明

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