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 + -
显示快捷键?