📄 analyze.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 + -