代码拉取完成,页面将自动刷新
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);
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。