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

📄 express.c

📁 北京航空航天大学计算机系要求的编译器大作业。大概6000行代码。
💻 C
字号:
/***************************************
By BHU 35060122 Peng Hui;
2008.02
description:
A small compiler to translate a C program to 80X80 Assembly Code
***************************************/

#include"Global.h"

void Express()     // <表达式>
{
	if(strcmp(Symbol[1],"ADD_OP") == 0 || strcmp(Symbol[1],"SUB_OP") == 0)
	{
		NextSym(temp);
		Item();
		while(strcmp(Symbol[1],"ADD_OP") == 0 || strcmp(Symbol[1],"SUB_OP") == 0)
			Item();
	}
	else
	{
		Item();
		while(strcmp(Symbol[1],"ADD_OP") == 0 || strcmp(Symbol[1],"SUB_OP") == 0)
		{
			NextSym(temp);
			Item();
		}
	}
}

void ConstExpress()
{
	if(strcmp(Symbol[1],"ADD_OP") == 0 || strcmp(Symbol[1],"SUB_OP") == 0)
	{
		NextSym(temp);
		Item();
		while(strcmp(Symbol[1],"ADD_OP") == 0 || strcmp(Symbol[1],"SUB_OP") == 0)
			Item();
	}
	else
	{
		ConstItem();
		while(strcmp(Symbol[1],"ADD_OP") == 0 || strcmp(Symbol[1],"SUB_OP") == 0)
		{
			NextSym(temp);
			ConstItem();
		}
	}
}

void Item()        // <项>
{
	Factor();
	while(strcmp(Symbol[1],"MUL_OP") == 0 || strcmp(Symbol[1],"DIV_OP") == 0)
	{
		NextSym(temp);
		Factor();
	}
}

void ConstItem()
{
	ConstFactor();
	while(strcmp(Symbol[1],"MUL_OP") == 0 || strcmp(Symbol[1],"DIV_OP") == 0)
	{
		NextSym(temp);
		ConstFactor();
	}
}

void Factor()   	// <因子>
{
	if(strcmp(Symbol[1],"ID") == 0)  // 标识符
	{
		NextSym(temp);
		if(strcmp(Symbol[1],"LParen") == 0)  
		{
			NextSym(temp);
			if(strcmp(Symbol[1],"RParen") != 0)
				VParamList();
			if(strcmp(Symbol[1],"RParen") != 0)
			{
				Error(11);
			}
			else
				NextSym(temp);
		}
	}
	else if(strcmp(Symbol[1],"LParen") == 0)  // (表达式)
	{
		NextSym(temp);
		Express();
		if(strcmp(Symbol[1],"RParen") != 0)
			Error(11);
		else
			NextSym(temp);
	}
	else if(strcmp(Symbol[1],"INTEGER") == 0) // 整数
	{
		NextSym(temp);
	}
	
	else
	{
		Error(12);
	}
}
void ConstFactor()
{
	if(strcmp(Symbol[1],"INTEGER") == 0)
	{
		NextSym(temp);
	}
	else
		Error(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -