1 Star 4 Fork 0

red1y/SimpleC-Compiler

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
translate_utils.h 2.45 KB
一键复制 编辑 原始数据 按行查看 历史
red1y 提交于 2022-04-24 00:06 +08:00 . compiler 1.0
typedef struct OPERAND Operand;
typedef struct INTERCODE InterCode;
#define OPERAND_VARIABLE 0
#define OPERAND_CONSTANT 1
#define OPERAND_ADDRESS 2
#define OPERATION_ADD 41
#define OPERATION_SUB 42
#define OPERATION_MUL 43
#define OPERATION_DIV 37
struct OPERAND {
enum {
VARIABLE,
CONSTANT,
ADDRESS
} kind;
union {
int var_no;
int value;
} attr;
};
struct INTERCODE {
enum {
ASSIGN,
ADD,
SUB,
MUL,
DIV,
RET,
IFJUMP,
GLABEL,
SLABEL,
FUNCTION_CALL,
ARGUMENT,
FLABEL,
PARAM,
ARRAY_DECLARATION,
ARRAY_ADDRESS
} kind;
union {
struct {
Operand* left;
Operand* right;
} assign;
struct {
Operand* result;
Operand* opt1;
Operand* opt2;
} calc;
struct {
Operand* retval;
} ret;
struct {
Operand* var1;
Operand* var2;
char* opt;
int labelTrue;
int laeblFalse;
} ifjump;
struct {
int label;
} label;
struct {
Operand* var;
char* funcName;
} cfunc;
struct {
Operand* arg;
} farg;
struct {
char* funcName;
} lfunc;
struct {
Operand* param;
} fparam;
struct {
Operand* array;
int size;
} darray;
struct {
Operand* address;
Operand* array;
int index;
int offset;
} aarray;
} attr;
};
int newTemp();
int newLabel();
void genConstantAssign(int var, int value);
void genVariableAssign(int var1, int var2);
void genVariableOperation(int res, int var1, int var2, int type);
void genMinusOperation(int res, int var);
void genFunctionReturn(int ret);
void genIFJump(int var1, int var2, char* opt, int labelTrue, int labelFalse);
void genGotoLabel(int label);
void genLabel(int label);
void genIFNotNullJump(int var, int labelTrue);
void genCallFunction(int var, char* name);
void genCallFunctionNoReturnValue(char* name);
void genFunctionArgument(int arg);
void genFunctionLabel(char *name);
void genFunctionParam(int param);
void genArrayDeclaration(int array,int size);
void genArrayAddress(int addr, int arrno, int index, int offset);
void printCodes(char* out);
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/red1y/simplec-compiler.git
git@gitee.com:red1y/simplec-compiler.git
red1y
simplec-compiler
SimpleC-Compiler
master

搜索帮助