📄 main.cs
字号:
//textBox1.Text = siyuanshi[2]; textBox2.Text = huancun.ToString();//检测用
siyuanshi[0] = siyuanshi1[0];//取符号
siyuanshi[1] = siyuanshi1[1];//t 取第一个变量
siyuanshi[3] = huacunpd();//返回出口
printf(siyuanshi[0], siyuanshi[1], siyuanshi[2], siyuanshi[3]);//进行具体的输出
return huacunpdcuan();//返回
}
else//此处的else为无连乘的情况,形如t+a,t+t等
{
shangyige();//向前一个到第一个变量
if (now == 13 || now == 14 || now == 15 || now == 16)//在此判断指针是否指向了最后的一个字符(一般这种情况不会发生,但是以防万一)
{ xiayige(); }//如果指针指向了最后的字符,向前移动一个位置保证读入的是id
siyuanshi[0] = siyuanshi1[0];//取符号
siyuanshi[1] = siyuanshi1[1]; //由于前面的siyuanshi[1] 值为id 而不是t,所以在此重新赋值
siyuanshi[2] = shuru_s[tip]; siyuanshi[3] = huacunpd();//为四元式的第二个变量和出口赋值
printf(siyuanshi[0], siyuanshi[1], siyuanshi[2], siyuanshi[3]);//进行具体的输出
return huacunpdcuan();//返回
}
}
else//此处的else为前面无连乘也无乘除的情况,形如a+b,a+t
{
siyuanshi[0] = shuru_s[tip];//四元式的符号赋值
shangyige();//取第一个变量
siyuanshi[1] = shuru_s[tip];//四元式的第一个值赋值
xiayige();//返回op
xiayige();//取第二个变量
siyuanshi2[0] = siyuanshi[0]; //由于加法和乘法的优先级关系,所以在遇到后面有乘法的时候,需要先计算后面乘法的四元式,然后再计算前面加法的四元式
siyuanshi2[1] = siyuanshi[1]; //此处由于后面的chenchu()会将siyuanhsi[]中的内容替换,所以使用siyuanshi1[]进行暂时的存储
//textBox1.Text = siyuanshi1[1].ToString();//检测用
xiayige();//下两个符号,可能是 ; 或 乘除 或 +- 或 ) 之一
if (now == 15 || now == 16)// 后面的符号为乘除的情况 形如a*t
{
siyuanshi[2] = chenchus();// 先计算后面的乘除(此处为嵌套)
//textBox1.Text = siyuanshi[2]; textBox2.Text = huancun.ToString();// 检测用
siyuanshi[0] = siyuanshi2[0];//取符号
siyuanshi[1] = siyuanshi2[1];// 取第一个变量
siyuanshi[3] = huacunpd();//返回出口
printf(siyuanshi[0], siyuanshi[1], siyuanshi[2], siyuanshi[3]);//进行具体的输出
return huacunpdcuan();//返回
}
else//此处的else为前面无连乘也无乘除的情况,形如a+b
{
shangyige();//取第一个变量
if (now == 13 || now == 14 || now == 15 || now == 16)//在此判断指针是否指向了最后的一个字符(一般这种情况不会发生,但是以防万一)
{ xiayige(); }//如果指针指向了最后的字符,向前移动一个位置保证读入的是id
siyuanshi[0] = siyuanshi2[0];//取符号
siyuanshi[1] = siyuanshi2[1]; //由于前面的siyuanshi[1] 值为id 而不是t,所以在此重新赋值
siyuanshi[2] = shuru_s[tip]; siyuanshi[3] = huacunpd();//为四元式的第二个变量和出口赋值
printf(siyuanshi[0], siyuanshi[1], siyuanshi[2], siyuanshi[3]);//进行具体的输出
return huacunpdcuan(); //返回
}
}
}
return "error";
}
public string chenchus()//乘除 的功能【完成】
{
shangyige();//前一个id1
switch (now)//判断now的值从而得到shuru[]中的值
{
case 25://待扩展
return "此处作为待扩展部分";
case 30://整常数
{
siyuanshi[1] = shuru_s[tip];//取第一个id
xiayige();//取下一元素
siyuanshi[0] = shuru_s[tip];//取符号
xiayige();//取下一元素
{
siyuanshi[2] = shuru_s[tip]; siyuanshi[3] = huacunpd(); //取第三个id以及出口(由于括弧不参与计算,所以乘除的优先级最高)
printf(siyuanshi[0], siyuanshi[1], siyuanshi[2], siyuanshi[3]); //进行具体的输出
chen_chu = true;//由于进行的乘除的计算,所以置标识为true
{
xiayige();//向下
if (now == 13 || now == 14) { jiajians(); }//后面有加减法的情况
shangyige();//向上
}
lianchenpd();//调用连乘判断的函数进行判断
return huacunpdcuan();//返回
}
}
case 32://id
{
siyuanshi[1] = shuru_s[tip];//取第一个id
xiayige();//取下一元素
siyuanshi[0] = shuru_s[tip];//取符号
xiayige();//取下一元素
{
siyuanshi[2] = shuru_s[tip]; siyuanshi[3] = huacunpd(); //取第三个id以及出口(由于括弧不参与计算,所以乘除的优先级最高)
printf(siyuanshi[0], siyuanshi[1], siyuanshi[2], siyuanshi[3]); //进行具体的输出
chen_chu = true;//由于进行的乘除的计算,所以置标识为true
{
xiayige();//向下
if (now == 13 || now == 14) { jiajians(); }//后面有加减法的情况
else shangyige();//向上
}
lianchenpd();//调用连乘判断的函数进行判断
return huacunpdcuan();//返回
}
}
}
return "error";//返回错误
}
//以下的部分两个加起来完成连乘的功能
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public string lianchen() //连乘的功能,与lianchenpd()函数一起完成形如 a+b*c*d*e*...*z 的运算式【完成】
{
siyuanshi[1] = huacunpdcuan(); siyuanshi[0] = shuru_s[tip];//取第一个id和op
xiayige(); siyuanshi[2] = shuru_s[tip]; siyuanshi[3] = huacunpd();//取第二个id和出口
printf(siyuanshi[0], siyuanshi[1], siyuanshi[2], siyuanshi[3]);//输出
lian_chen = true;//将lianchen()的状态符设为true
return huacunpdcuan();//返回
}
public string lianchenpd()//进行是否需要连乘的判断,与lianchen()函数一起完成形如 a+b*c*d*e*...*z 的运算式【完成】
{
xiayige();//下一个
while (now == 15 || now == 16)//如果指向的符号是乘除的话说明需要连乘
{
lianchen();//进行连乘的计算
lianchenpd();//再次判断(嵌套)
}
//if (now == 26) { return ""; } if (now == 25) { return ""; }//测试用
return huacunpdcuan();//返回
}
//以下的部分为数组操纵的设置
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public int scan()//按字符读取源文件【完成】
{
now = shuru[tip];//获得当前数组
return tip;//返回数组tip
}
public void getnext()//获取下一个编号【完成】
{
tip++;//将数组号加一
}
public void getforward()//获取上一个编号【完成】
{
tip--;//将数组号减一
}
public string xiayige()//判断是否可以取下一个元素并且使数组加一//下一个【完成】
{
if (tip < shuru.Length - 1)//判断tip的值在最大值以内
{ getnext(); scan(); return "succeed"; }//向下一个元素,并且读取,返回succeed(其中返回的succeed为检测使用,不会显示)
else { return "error"; }//如果超出范围返回error
}
public string shangyige()//判断是否可以取上一个元素并且使数组减一//上一个【完成】
{
if (tip >= 0)//判断tip的值在最大值以内
{ getforward(); scan(); return "succeed"; }//向上一个元素,并且读取,返回succeed(其中返回的succeed为检测使用,不会显示)
else { return "error"; }//超出范围返回error
}
//以下的部分为缓存部分
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public string huacunpd()//缓存判断(加一)【完成】
{
if (huancun == 0) { huancun++; return "t0"; }//如果缓存的数值为0时返回t0并且将缓存的值设为一,下同
else if (huancun == 1) { huancun++; return "t1"; }
else if (huancun == 2) { huancun++; return "t2"; }
else if (huancun == 3) { huancun++; return "t3"; }
else if (huancun == 4) { huancun++; return "t4"; }
else if (huancun == 5) { huancun++; return "t5"; }
else if (huancun == 6) { huancun++; return "t6"; }
else if (huancun == 7) { huancun++; return "t7"; }
else if (huancun == 8) { huancun++; return "t8"; }
else if (huancun == 9) { huancun++; return "t9"; }
else if (huancun == 10) { huancun++; return "t10"; }
else if (huancun == 11) { huancun++; return "t11"; }
else if (huancun == 12) { huancun++; return "t12"; }
else if (huancun == 13) { huancun++; return "t13"; }
else if (huancun == 14) { huancun++; return "t14"; }
else if (huancun == 15) { huancun++; return "t15"; }
else if (huancun == 16) { huancun++; return "t16"; }
else if (huancun == 17) { huancun++; return "t17"; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -