⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 if.cpp

📁 一个简单的语法分析器,实现对布尔表达式,算术表达式的分析,以及if语句,FOR语句,WHILE语句,DO_WHILE语句的分析
💻 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 + -