?? main.cs
字號:
{
return shuru_s[tip];//返回常整數的值
}
if (now == 27)//當是字符常數的時候執行
{
xiayige();//跳過‘
linshi = "'" + shuru_s[tip] + " '";//輸出字符常數
xiayige();//跳過’
return linshi;
}
if (now == 15 || now == 16)//如果是乘除的話執行
{
//textBox1.Text =" eeee";
chenchus();//調用chechu()
return huacunpdcuan();//測試用
}
if (now == 13 || now == 14)//如果是加減的話執行
{
jiajians();//調用jiajian()
//textBox1.Text = huacunpdcuan();//檢測用
return huacunpdcuan();//測試用
}
xiayige();//下一個運算符
}
return "error";
//return huacunpdcuan();//返回
}
//由于多項式的計算只涉及加減乘除的運算而不涉及括號的先后優先級在此作為簡化但是留下括弧的擴展接口待擴展
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public string jiajians()//加減 的功能【完成】
{
shangyige();//前一個id1
switch (now)
{
case 25:
return "此處作為待擴展部分";
case 30:
{
xiayige();//op使指針指向運算符
//////////////////////////////////////連乘的情況
if (lian_chen == true)//如果在前面已經有了連乘的計算,適用于t+a(且t為連乘)
{
lian_chen = false;//將連乘的狀態清除,防止下一次再進入這個狀態形成錯誤
siyuanshi[1] = huacunpdcuan();//在連乘的情況下將t賦給第一個變量
siyuanshi[0] = shuru_s[tip];//取符號op
xiayige(); xiayige();//下兩個符號,可能是 ; 或 乘除 或 +- 或 ) 之一
siyuanshi4[0] = siyuanshi[0];//由于加法和乘法的優先級關系,所以在遇到后面有乘法的時候,需要先計算后面乘法的四元式,然后再計算前面加法的四元式
siyuanshi4[1] = siyuanshi[1];//t 此處由于后面的chenchu()會將siyuanhsi[]中的內容替換,所以使用siyuanshi1[]進行暫時的存儲
if (now == 15 || now == 16)// 后面的符號為乘除的情況 形如a+b*t
{
siyuanshi[2] = chenchus();//先計算后面的乘除(此處為嵌套)
//textBox1.Text = siyuanshi[2]; textBox2.Text = huancun.ToString();//檢測用
siyuanshi[0] = siyuanshi4[0];//取符號
siyuanshi[1] = siyuanshi4[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] = siyuanshi4[0];//取符號
siyuanshi[1] = siyuanshi4[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 if (chen_chu == true)//在前面或者后面有乘法運算的時候,形如t+t,a+t等
{
chen_chu = false;//將乘除的狀態清除防止出現下一次再進入的錯誤
siyuanshi[1] = huacunpdcuan();//t 此處的第一個變量指代的是chechu()的函數所返回的t
siyuanshi[0] = shuru_s[tip];//取符號
xiayige(); xiayige();//下兩個符號,可能是 ; 或 乘除 或 +- 或 ) 之一
siyuanshi1[0] = siyuanshi[0];//由于加法和乘法的優先級關系,所以在遇到后面有乘法的時候,需要先計算后面乘法的四元式,然后再計算前面加法的四元式
siyuanshi1[1] = siyuanshi[1];//t 此處由于后面的chenchu()會將siyuanhsi[]中的內容替換,所以使用siyuanshi1[]進行暫時的存儲
if (now == 15 || now == 16)// 后面的符號為乘除的情況 形如a+b*t
{
siyuanshi[2] = chenchus();//先計算后面的乘除(此處為嵌套)
//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(); //返回
}
}
}
case 32://與30相同
xiayige();//op使指針指向運算符
//////////////////////////////////連乘的情況
if (lian_chen == true)//如果在前面已經有了連乘的計算,適用于t+a(且t為連乘)
{
lian_chen = false;//將連乘的狀態清除,防止下一次再進入這個狀態形成錯誤
siyuanshi[1] = huacunpdcuan();//在連乘的情況下將t賦給第一個變量
siyuanshi[0] = shuru_s[tip];//取符號op
xiayige(); xiayige();//下兩個符號,可能是 ; 或 乘除 或 +- 或 ) 之一
siyuanshi4[0] = siyuanshi[0];//由于加法和乘法的優先級關系,所以在遇到后面有乘法的時候,需要先計算后面乘法的四元式,然后再計算前面加法的四元式
siyuanshi4[1] = siyuanshi[1];//t 此處由于后面的chenchu()會將siyuanhsi[]中的內容替換,所以使用siyuanshi1[]進行暫時的存儲
if (now == 15 || now == 16)// 后面的符號為乘除的情況 形如a+b*t
{
siyuanshi[2] = chenchus();//先計算后面的乘除(此處為嵌套)
//textBox1.Text = siyuanshi[2]; textBox2.Text = huancun.ToString();//檢測用
siyuanshi[0] = siyuanshi4[0];//取符號
siyuanshi[1] = siyuanshi4[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] = siyuanshi4[0];//取符號
siyuanshi[1] = siyuanshi4[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 if (chen_chu == true)//在前面或者后面有乘法運算的時候,形如t+t,a+t等
{
chen_chu = false;//將乘除的狀態清除防止出現下一次再進入的錯誤
siyuanshi[1] = huacunpdcuan();//t 此處的第一個變量指代的是chechu()的函數所返回的t
siyuanshi[0] = shuru_s[tip];//取符號
xiayige(); xiayige();//下兩個符號,可能是 ; 或 乘除 或 +- 或 ) 之一
siyuanshi1[0] = siyuanshi[0];//由于加法和乘法的優先級關系,所以在遇到后面有乘法的時候,需要先計算后面乘法的四元式,然后再計算前面加法的四元式
siyuanshi1[1] = siyuanshi[1];//t 此處由于后面的chenchu()會將siyuanhsi[]中的內容替換,所以使用siyuanshi1[]進行暫時的存儲
if (now == 15 || now == 16)// 后面的符號為乘除的情況 形如a+b*t
{
siyuanshi[2] = chenchus();//先計算后面的乘除(此處為嵌套)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -