📄 express.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 + -