⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tacconst.cpp

📁 一个用C++实现的C的Compiler。 代码风格良好。 原作者自己写了这个编译器
💻 CPP
字号:
#ifndef __TACCONST_CPP__
#define __TACCONST_CPP__

const		int			TAC_oper_type_NULL			=		-1;
const		int			TAC_oper_type_variable		=		0;
const		int			TAC_oper_type_label			=		1;
const		int			TAC_oper_type_constint		=		2;
const		int			TAC_oper_type_constdouble	=		3;
const		int			TAC_oper_type_ints			=		4;

const		int			TAC_single_char_size		=		4;

const		int			TAC_OP_ADD					=		0;
const		int			TAC_OP_SUB					=		1;
const		int			TAC_OP_MUL					=		2;
const		int			TAC_OP_DIV					=		3;
const		int			TAC_OP_MOD					=		4;
const		int			TAC_OP_LET					=		5;
const		int			TAC_OP_LABEL				=		6;
const		int			TAC_OP_JE					=		7;
const		int			TAC_OP_JNE					=		8;
const		int			TAC_OP_JL					=		9;
const		int			TAC_OP_JLE					=		10;
const		int			TAC_OP_JG					=		11;
const		int			TAC_OP_JGE					=		12;
const		int			TAC_OP_JMP					=		13;
const		int			TAC_OP_AND					=		14;
const		int			TAC_OP_OR					=		15;
const		int			TAC_OP_NOT					=		16;
const		int			TAC_OP_LEA					=		17;
const		int			TAC_OP_LOAD					=		18;
const		int			TAC_OP_STORE				=		19;
const		int			TAC_OP_PUSH					=		20;
const		int			TAC_OP_POP					=		21;
const		int			TAC_OP_CALL					=		22;
const		int			TAC_OP_RCALL				=		23;
const		int			TAC_OP_ICALL				=		24;
const		int			TAC_OP_RICALL				=		25;
const		int			TAC_OP_RET					=		26;
const		int			TAC_OP_EXIT					=		27;
const		int			TAC_OP_GETVP				=		28;
const		int			TAC_OP_MEMCPY				=		29;
const		int			TAC_OP_LEAFUNC				=		30;
const		int			TAC_OP_XOR					=		31;
const		int			TAC_OP_SHL					=		32;
const		int			TAC_OP_SHR					=		33;
const		int			TAC_OP_RREAD				=		34;
const		int			TAC_OP_RWRITE				=		35;
const		int			TAC_OP_ASM					=		36;
const		int			TAC_OP_HALT					=		40;
const		int			TAC_OP_END					=		42;

const		int			TAC_FUNC_PRINTINT			=		-1;
const		int			TAC_FUNC_PRINTDOUBLE		=		-2;
const		int			TAC_FUNC_READINT			=		-3;
const		int			TAC_FUNC_READDOUBLE			=		-4;
const		int			TAC_FUNC_ALLOCATEMEM		=		-5;
const		int			TAC_FUNC_PRINTSTR			=		-6;
const		int			TAC_FUNC_READLINE			=		-7;

const		int			TAC_SRC_relational_LES		=		0;
const		int			TAC_SRC_relational_LEQ		=		1;
const		int			TAC_SRC_relational_GTR		=		2;
const		int			TAC_SRC_relational_GEQ		=		3;
const		int			TAC_SRC_relational_EQL		=		4;
const		int			TAC_SRC_relational_NEQ		=		5;
const		int			TAC_SRC_logical_NOT			=		6;
const		int			TAC_SRC_logical_AND			=		7;
const		int			TAC_SRC_logical_OR			=		8;
const		int			TAC_SRC_calculational_ADD	=		9;
const		int			TAC_SRC_calculational_MINUS	=		10;
const		int			TAC_SRC_calculational_MUL	=		11;
const		int			TAC_SRC_calculational_DIV	=		12;
const		int			TAC_SRC_calculational_MOD	=		13;
const		int			TAC_SRC_calculational_AND	=		14;
const		int			TAC_SRC_calculational_OR	=		15;
const		int			TAC_SRC_calculational_XOR	=		16;
const		int			TAC_SRC_calculational_SHL	=		17;
const		int			TAC_SRC_calculational_SHR	=		18;
const		int			TAC_SRC_calculational_NOT	=		19;

const		int			REG_OP_READ					=		0;
const		int			REG_OP_WRITE				=		1;

const		int			PROGRAM_runtime_range_check_error		=	201;
const		int			PROGRAM_runtime_protection_error		=	216;


struct TASMop {
	char* op_name;
	char* code;
};

const		TASMop		ASMops[]				=		{	{"ADDSP3",			"00000xxxYYYYYYYY"},
															{"B",				"00010XXXXXXXXXXX"},
															{"BEQZ",			"00100xxxYYYYYYYY"},
															{"BNEZ",			"00101xxxYYYYYYYY"},
															{"SLL",				"00110xxxyyyZZZ00"},
															{"SRL",				"00110xxxyyyZZZ10"},
															{"SRA",				"00110xxxyyyZZZ11"},
															{"ADDIU3",			"01000xxxyyy0ZZZZ"},
															{"ADDIU",			"01001xxxYYYYYYYY"},
															{"SLTI",			"01010xxxYYYYYYYY"},
															{"SLTUI",			"01011xxxYYYYYYYY"},
															{"BTEQZ",			"01100000XXXXXXXX"},
															{"BTNEZ",			"01100001XXXXXXXX"},
															{"SW-RS",			"01100010XXXXXXXX"},
															{"ADDSP",			"01100011XXXXXXXX"},
															{"MTSP",			"01100100xxx00000"},
															{"MOVE",			"01100111xxx00yyy"},
															{"LI",				"01101xxxYYYYYYYY"},
															{"CMPI",			"01110xxxYYYYYYYY"},
															{"LW-SP",			"10010xxxYYYYYYYY"},
															{"LW",				"10011xxxyyyZZZZZ"},
															{"SW-SP",			"11010xxxYYYYYYYY"},
															{"SW",				"11011xxxyyyZZZZZ"},
															{"ADDU",			"11100xxxyyyzzz01"},
															{"SUBU",			"11100xxxyyyzzz11"},
															{"JR",				"11101xxx00000000"},
															{"MFHI",			"11101xxx00010000"},
															{"MFLO",			"11101xxx00010010"},
															{"MFPC",			"11101xxx01000000"},
															{"SLT",				"11101xxxyyy00010"},
															{"SLTU",			"11101xxxyyy00011"},
															{"SLLV",			"11101xxxyyy00100"},
															{"SRLV",			"11101xxxyyy00110"},
															{"SRAV",			"11101xxxyyy00111"},
															{"CMP",				"11101xxxyyy01010"},
															{"NEG",				"11101xxxyyy01011"},
															{"AND",				"11101xxxyyy01100"},
															{"OR",				"11101xxxyyy01101"},
															{"XOR",				"11101xxxyyy01110"},
															{"NOT",				"11101xxxyyy01111"},
															{"MULT",			"11101xxxyyy11000"},
															{"MULTU",			"11101xxxyyy11001"},
															{"DIV",				"11101xxxyyy11010"},
															{"DIVU",			"11101xxxyyy11011"},
															{"NOP",				"0000100000000000"},
															{"MFIH",			"11110xxx00000000"},
															{"MTIH",			"11110xxx00000001"},
															{"INT",				"111110000000XXXX"}
														};

#endif							// __TACCONST_CPP__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -