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

📄 form1.cs

📁 编译原理实验中的词法分析器,软件有待改进 但基本可用
💻 CS
📖 第 1 页 / 共 2 页
字号:
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;

namespace byylsy3
{
    public partial class Form1 : Form
    {
        public string filename;
        public char ch;
        public string strToken;
        public int len = -1;
        public int zhifulen = 0;
        public int changlianglen = 0;
        public SortedList<string, string> zhifulist = new SortedList<string, string>();
        public SortedList<int, int> changlianglist = new SortedList<int, int>();
        public class zhifuclass
        {
            public bool isVT;
            public string yuanvalue;
            public char zhuanhuavalue;
        }
        public class scls
        {
            public char E;
            public string val;
        }
        
        public SortedList<int,zhifuclass> zhifuls=new SortedList<int,zhifuclass>();
        int zhifulslen = 0;
        public void GetChar()
        {
            len++;
            ch = richTextBox1.Text[len];

        }
        public void GetBC()
        {
            while (ch == ' ')
            {
                GetChar();
            }
        }
        public void Concat()
        {
            strToken += ch;
        }
        public bool IsLetter()
        {

            if ((ch >= 65 && ch <= 90) || (ch >= 97 && ch <= 122))
            {
                return true;
            }
            else
                return false;
        }
        public bool IsDigit()
        {
            if (ch >= 48 && ch <= 57)
                return true;
            else
                return false;
        }
        public void Retract()
        {
            len--;
            ch = ' ';
        }
        public void InsertId()
        {
            if (!zhifulist.ContainsKey(strToken))
                zhifulist.Add(strToken, strToken);
            zhifulen++;
        }
        public void InsertConst()
        {
            changlianglist.Add(changlianglen, Convert.ToInt32(strToken));
            changlianglen++;
        }
        public int yuxianguanxi(char cha1,char cha2)
        {
           
                if(cha1== '+')
                    {
                        if (cha2 == '+') return 1;        
                        if (cha2 == '-') return 1; 
                        if (cha2 == '*') return -1; 
                        if (cha2 == '/') return -1; 
                        if (cha2 == '=') return 2; 
                        if (cha2 == 'i') return -1; 
                        if (cha2 == '(') return -1; 
                        if (cha2 == ')') return 1; 
                        if (cha2 == ';') return 1; 
                    }                 
                 if(cha1== '-')
                    {
                        if (cha2 == '+') return 1; 
                        if (cha2 == '-') return 1; 
                        if (cha2 == '*') return -1; 
                        if (cha2 == '/') return -1; 
                        if (cha2 == '=') return 2; 
                        if (cha2 == 'i') return -1; 
                        if (cha2 == '(') return -1; 
                        if (cha2 == ')') return 1; 
                        if (cha2 == ';') return 1; 
                    }
                if(cha1== '*')
                    {
                        if (cha2 == '+') return 1; 
                        if (cha2 == '-') return 1; 
                        if (cha2 == '*') return 1; 
                        if (cha2 == '/') return 1; 
                        if (cha2 == '=') return 2; 
                        if (cha2 == 'i') return -1; 
                        if (cha2 == '(') return -1; 
                        if (cha2 == ')') return 1; 
                        if (cha2 == ';') return 1; 
                    }
                if(cha1== '/')
                    {
                        if (cha2 == '+') return 1; 
                        if (cha2 == '-') return 1; 
                        if (cha2 == '*') return 1; 
                        if (cha2 == '/') return 1; 
                        if (cha2 == '=') return 2; 
                        if (cha2 == 'i') return -1; 
                        if (cha2 == '(') return -1; 
                        if (cha2 == ')') return 1; 
                        if (cha2 == ';') return 1; 
                    }
                if(cha1== '=')
                    {
                        if (cha2 == '+') return -1; 
                        if (cha2 == '-') return -1; 
                        if (cha2 == '*') return -1; 
                        if (cha2 == '/') return -1; 
                        if (cha2 == '=') return 2; 
                        if (cha2 == 'i') return -1; 
                        if (cha2 == '(') return -1;                                            
                        if (cha2 == ')') return 2; 
                        if (cha2 == ';') return 1; 
                    }
                 if(cha1== 'i')
                    {
                        if (cha2 == '+') return 1; 
                        if (cha2 == '-') return 1; 
                        if (cha2 == '*') return 1; 
                        if (cha2 == '/') return 1; 
                        if (cha2 == '=') return 1; 
                        if (cha2 == 'i') return 2; 
                        if (cha2 == '(') return 2; 
                        if (cha2 == ')') return 1; 
                        if (cha2 == ';') return 1; 
                    }
                if(cha1== '(')
                    {
                        if (cha2 == '+') return -1; 
                        if (cha2 == '-') return -1; 
                        if (cha2 == '*') return -1; 
                        if (cha2 == '/') return -1; 
                        if (cha2 == '=') return 2; 
                        if (cha2 == 'i') return -1; 
                        if (cha2 == '(') return -1; 
                        if (cha2 == ')') return 0; 
                        if (cha2 == ';') return 2; 
                    }
                 if(cha1== ')')
                    {
                        if (cha2 == '+') return 1; 
                        if (cha2 == '-') return 1; 
                        if (cha2 == '*') return 1; 
                        if (cha2 == '/') return 1; 
                        if (cha2 == '=') return 2; 
                        if (cha2 == 'i') return 2; 
                        if (cha2 == '(') return 2; 
                        if (cha2 == ')') return 1; 
                        if (cha2 == ';') return 1; 
                    }
                 if(cha1== '#')
                    {
                        if (cha2 == '+') return -1; 
                        if (cha2 == '-') return -1; 
                        if (cha2 == '*') return -1; 
                        if (cha2 == '/') return -1;
                        if (cha2 == '=') return -1; 
                        if (cha2 == 'i') return -1; 
                        if (cha2 == '(') return -1; 
                        if (cha2 == ')') return 2; 
                        if (cha2 == ';') return 0; 
                    }
                    

            
            return 3;
        }
        public bool isvt(char charvt)
        {
            switch (charvt)
            {
                case '+':
                case '-':
                case '*':
                case '/':
                case '=':
                case '(':
                case ')':
                case 'i':
                case '#':
                case ';': return true; break;
            }
            return false;
        }
        public Form1()
        {
            InitializeComponent();
        }

        private void groupBox3_Enter(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = "";
            OpenFileDialog openfiledialog = new OpenFileDialog();
            DialogResult result = openfiledialog.ShowDialog();
            if (result == DialogResult.OK)
            {
                filename = openfiledialog.FileName;
                StreamReader sr;
                try
                {
                    sr = File.OpenText(filename);

                }
                catch
                {
                    MessageBox.Show("文件打开失败");
                    return;
                }
                while (sr.Peek() != -1)
                {
                    string str = sr.ReadToEnd();
                    richTextBox1.Text += str;
                }
                sr.Close();

            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
           
            if (richTextBox1.Text == "")
            {
                MessageBox.Show("没有表达式,无法完成保存" + "\r\n" + "请您输入或选择表达式");
                return;
            }
            SaveFileDialog savefiledialog = new SaveFileDialog();
            DialogResult result = savefiledialog.ShowDialog();
            if (result == DialogResult.OK)
            {
                filename = savefiledialog.FileName;
                StreamWriter sw;
                try
                {
                    sw = File.CreateText(filename);
                }
                catch
                {
                    MessageBox.Show("文件保存失败");
                    return;
                }
                string str = richTextBox1.Text;
                string[] arrystr = str.Split('\n');
                for (int i = 0; i < arrystr.Length; i++)
                {
                    sw.WriteLine(arrystr[i]);
                }

                sw.Close();
                MessageBox.Show("保存完毕!");
            }

⌨️ 快捷键说明

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