📄 form1.cs
字号:
}
private void button3_Click(object sender, EventArgs e)
{
if (richTextBox1.Text[richTextBox1.Text.Length - 1] != ';')
{
richTextBox3.Text+="无终结符!"+"\r\n";
return;
}
richTextBox3.Text = "";
richTextBox2.Text = "";
zhifuclass zhifuclsm = new zhifuclass();
zhifuclsm.isVT=true;
zhifuclsm.yuanvalue = Convert.ToString('#');
zhifuclsm.zhuanhuavalue = '#';
zhifuls.Add(0, zhifuclsm);
zhifulslen++;
if (richTextBox1.Text == "")
{
MessageBox.Show("没有表达式,无法完成分析" + "\r\n" + "请您输入或选择表达式");
return;
}
GetChar();
while (ch != ';')
{
strToken = null;
GetBC();
if (IsLetter())
{
while (IsLetter() || IsDigit())
{
Concat();
GetChar();
}
Retract();
InsertId();
//richTextBox2.Text += strToken + " " + "字符" + "\r\n";
zhifuclass zhifucl = new zhifuclass();
zhifucl.isVT = true;
zhifucl.yuanvalue = strToken;
zhifucl.zhuanhuavalue = 'i';
zhifuls.Add(zhifulslen,zhifucl);
zhifulslen++;
}
else if (IsDigit())
{
while (IsDigit())
{
Concat();
GetChar();
}
Retract();
InsertConst();
//richTextBox2.Text += strToken + " " + "常量" + "\r\n";
zhifuclass zhifucl = new zhifuclass();
zhifucl.isVT = true;
zhifucl.yuanvalue = strToken;
zhifucl.zhuanhuavalue = 'i';
zhifuls.Add(zhifulslen, zhifucl);
zhifulslen++;
}
else if (ch == '(')
{
//richTextBox2.Text += ch + " " + "分隔符" + "\r\n";
zhifuclass zhifucl = new zhifuclass();
zhifucl.isVT = true;
zhifucl.yuanvalue = Convert.ToString(ch);
zhifucl.zhuanhuavalue = '(';
zhifuls.Add(zhifulslen, zhifucl);
zhifulslen++;
}
else if (ch == ')')
{
//richTextBox2.Text += ch + " " + "分隔符" + "\r\n";
zhifuclass zhifucl = new zhifuclass();
zhifucl.isVT = true;
zhifucl.yuanvalue = Convert.ToString(ch);
zhifucl.zhuanhuavalue = ')';
zhifuls.Add(zhifulslen, zhifucl);
zhifulslen++;
}
else if (ch == '=')
{
//richTextBox2.Text += ch + " " + "分隔符" + "\r\n";
zhifuclass zhifucl = new zhifuclass();
zhifucl.isVT = true;
zhifucl.yuanvalue = Convert.ToString(ch);
zhifucl.zhuanhuavalue = '=';
zhifuls.Add(zhifulslen, zhifucl);
zhifulslen++;
}
else if (ch == '+')
{
//richTextBox2.Text += ch + " " + "分隔符" + "\r\n";
zhifuclass zhifucl = new zhifuclass();
zhifucl.isVT = true;
zhifucl.yuanvalue = Convert.ToString(ch);
zhifucl.zhuanhuavalue = '+';
zhifuls.Add(zhifulslen, zhifucl);
zhifulslen++;
}
else if (ch =='-')
{
//richTextBox2.Text += ch + " " + "分隔符" + "\r\n";
zhifuclass zhifucl = new zhifuclass();
zhifucl.isVT = true;
zhifucl.yuanvalue = Convert.ToString(ch);
zhifucl.zhuanhuavalue = '-';
zhifuls.Add(zhifulslen, zhifucl);
zhifulslen++;
}
else if (ch == '*')
{
//richTextBox2.Text += ch + " " + "分隔符" + "\r\n";
zhifuclass zhifucl = new zhifuclass();
zhifucl.isVT = true;
zhifucl.yuanvalue = Convert.ToString(ch);
zhifucl.zhuanhuavalue = '*';
zhifuls.Add(zhifulslen, zhifucl);
zhifulslen++;
}
else if (ch == '/')
{
//richTextBox2.Text += ch + " " + "分隔符" + "\r\n";
zhifuclass zhifucl = new zhifuclass();
zhifucl.isVT = true;
zhifucl.yuanvalue = Convert.ToString(ch);
zhifucl.zhuanhuavalue = '/';
zhifuls.Add(zhifulslen, zhifucl);
zhifulslen++;
}
else
{
richTextBox3.Text+="表达式出错!"+"\r\n";
}
GetChar();
}
zhifuclass zhifucls=new zhifuclass();
zhifucls.isVT = true;
int x=1;
zhifucls.yuanvalue = Convert.ToString(';');
zhifucls.zhuanhuavalue = ';';
zhifuls.Add(zhifulslen, zhifucls);
int k = 0; scls[] s = new scls[100]; s[k] = new scls(); s[k].E = '#'; s[k].val = Convert.ToString('#');
int j;
char EX = 'A';
char a; int lent = 1; char q;
bool bl = false;
for (int i = 0; i < zhifuls.Count; i++)
{
if (zhifuls.Values[i].zhuanhuavalue == '=')
{
bl = true;
break;
}
}
if (bl==false)
{
richTextBox3.Text+="不是表达式"+"\r\n";
return;
}
do
{
a = zhifuls.Values[lent].zhuanhuavalue;
lent++;
if (isvt(s[k].E))
j = k;
else
j = k - 1;
while (yuxianguanxi(s[j].E, a) == 1)
{
do
{
q = s[j].E;
if (isvt(s[j - 1].E))
j = j - 1;
else
j = j - 2;
} while (yuxianguanxi(s[j].E, q) != -1);
if ((j + 1) == k)
{
k = j + 1;
s[k].E = EX;
EX++;
}
else
if (k - (j + 1) == 1)
{
k = j + 1;
s[k].E = EX;
richTextBox2.Text += "(" + Convert.ToString(s[j + 1].val) + "," + Convert.ToString(s[k].val) + "-" + "T" + Convert.ToString(x) + ")" + "\r\n";
EX++;
x++;
}
else
if (k - (j + 1) == 2)
{
if ((s[j + 1].E == '(') && s[j + 3].E == ')')
{
k = j + 1;
s[k].E = EX;
s[k].val = s[j + 2].val;
EX++;
}
if ((s[j + 1].E != '(')&&s[j+3].E!=')')
{
k = j + 1;
s[k].E = EX;
if (s[k + 1].E != '=')
{
richTextBox2.Text += "(" + s[j + 2].val + "," + Convert.ToString(s[j + 1].val) + "," + Convert.ToString(s[j + 3].val) + "," + "T" + Convert.ToString(x) + ")"+"\r\n";
s[k].val = "T" + Convert.ToString(x );
x++;
EX++;
}
if (s[k + 1].E == '=')
{
richTextBox2.Text += "(" + s[j + 2].val + "," + Convert.ToString(s[j + 1].val) + "," + Convert.ToString(s[j + 3].val) + "," + "-" + ")" + "\r\n";
EX++;
x++;
}
}
}
}
if (((yuxianguanxi(s[j].E, a)) == -1) || ((yuxianguanxi(s[j].E, a)) == 0))
{
k = k + 1;
s[k] = new scls();
s[k] .E= a;
s[k].val = Convert.ToString(zhifuls.Values[lent-1].yuanvalue);
}
else
richTextBox3.Text+="表达式中存在无优先关系的字符!"+"\r\n";
} while (a != ';');
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button4_Click(object sender, EventArgs e)
{
if (richTextBox2.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 = richTextBox2.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 + -