📄 if.cpp
字号:
//分析if条件语句
#include "Parser.h"
int Sen_If()
{
int First_Addr = lineOfEqu + 1;
int bool_value = Bool_Analysis();
int TRUE_ADDR, FALSE_ADDR, JMP_ADDR;
int rtn1 = 0;
int rtn2 = 0;
if(curr_code == 21) //then
{
TRUE_ADDR = EquPush(11, bool_value, ZERO, 0);
FALSE_ADDR = EquPush(6, 0, 0, 0);
GetNextSymble();
switch(curr_code)
{
case 27: //标志符,说明是赋值语句
Sen_Assign();
rtn1 = expr_rtn_addr;
break;
case 12:
rtn1 = Sen_For(); //for语句
break;
case 13: //if语句
rtn1 = Sen_If();
break;
case 20: //repeat循环语句
rtn1 = Sen_Repeat();
break;
case 26: //while循环语句
rtn1 = Sen_While();
break;
case 2: //begin
rtn1 = Begin();
break;
default: //其他语句为错误
Error(COMMON_ERROR);
break;
}
BackPatch(TRUE_ADDR, rtn1);
BackPatch(FALSE_ADDR, lineOfEqu + 1);
JMP_ADDR = EquPush(6, 0, 0, lineOfEqu + 2);
}
else
{
Error(IF_ERROR);
}
GetNextSymble();
if(curr_code == 9) //后跟有else语句
{
GetNextSymble();
switch(curr_code)
{
case 27: //标志符,说明是赋值语句
Sen_Assign();
rtn2 = expr_rtn_addr;
break;
case 12:
rtn2 = Sen_For(); //for语句
break;
case 13: //if语句
rtn2 = Sen_If();
break;
case 20: //repeat循环语句
rtn2 = Sen_Repeat();
break;
case 26: //while循环语句
rtn2 = Sen_While();
break;
case 2: //begin
rtn2 = Begin();
break;
default: //其他语句为错误
Error(8);
break;
}
BackPatch(FALSE_ADDR, rtn2);
BackPatch(JMP_ADDR, lineOfEqu + 1);
}
return First_Addr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -