express.c

来自「北京航空航天大学计算机系要求的编译器大作业。大概6000行代码。」· C语言 代码 · 共 115 行

C
115
字号
/***************************************
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 + =
减小字号Ctrl + -
显示快捷键?