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

📄 gencode.h

📁 C编译器,在VC6.0环境下开发
💻 H
字号:
#ifndef	_C_GEN_CODE_H_
#define	_C_GEN_CODE_H_

#include	"SymTab.h"
#include	"GBStrTab.h"

#define		MAX_CHAR_IN_LINE		255

#define		GEN_END_EXPRESS(x)			\
			if ( x )					\
			{							\
				if ( IS_PUSHED(x) )		\
				{						\
					gen_pop_reg("ax");	\
				}									\
				else if ( IS_ARRAY_HAS_INDEX(x) )	\
				{									\
					if ( IS_PUSHED((x)->args) )		\
					{								\
						gen_pop_reg("ax");			\
					}								\
					del_symbol((x)->args);			\
					(x)->args = NULL;				\
				}									\
			}

void	open_code2();
void	close_code2();
void	write_to_code2(char *p_code);
void	write_to_code(char *p_code);
void	write_to_data(char *p_code);
void	write_to_decl(char *p_code);
void	copy_code2_code();
void	gen_func_head(symbol *func);
void	gen_func_end(symbol *func);

void	gen_cmp(char *p1, char *p2);
void	gen_cmp_cl(char *p1, int num);
void	gen_mov(char *p1, char *p2);
void	gen_mov_cl(char *p1, int num);
void	gen_lea(char *p1, char *p2);
void	gen_add(char *p1, char *p2);
void	gen_add_cl(char *p1, int num);
void	gen_sub(char *p1, char *p2);
void	gen_sub_cl(char *p1, int num);
void	gen_xor(char *p1, char *p2);
void	gen_or(char *p1, char *p2);
void	gen_and(char *p1, char *p2);
void	gen_shl(char *p1, char *p2);
void	gen_shr(char *p1, char *p2);
void	gen_neg(char *p);
void	gen_inc(char *p);
void	gen_dec(char *p);
void	gen_call(char *name);
void	gen_not(char *p);
void	gen_mul(char *p);
void	gen_div(char *p);

void	gen_label(char *lb);
void	gen_jump(char *jp, char *lb);
void	gen_push_reg(char *reg);
void	gen_pop_reg(char *reg);

// gen globe value
void	gen_globe_var_list(symbol *p);
// gen string code
void	gen_string_tab(const_string *head);
// gen data segment head
void	gen_data_segment_head();
// gen data segment end
void	gen_data_segment_end();
// gen code segment start & end
void	gen_code_segment_head();
void	gen_code_segment_end();
// is main function exist
int		is_main_function_exist();
// get match regist xx, or xl
char	*get_match_reg(symbol *p, char *reg);
// clear reg high position if needed
void	clear_reg_high_if_needed(symbol *p,char *reg);
// get a not dup label for gen code
char	*get_a_label();
// gen mov	not pushed cl or var to reg
void	gen_mov_nopush_to_reg(symbol *p, char *reg);
// mov value (pushed or no pushed) to reg
void	gen_mov_value_to_reg(symbol *p,char *reg);
// get two operator , at least one is not cl
// return value is the attribute that be translate
symbol	*gen_get_two_op_not_cl(symbol *p1, symbol *p2, char *reg1, char *reg2);
// gen code that mov reg to a var address
void	gen_mov_reg_to_var(char *reg, symbol *p);
// gen array code
void	gen_get_array_element(symbol *a);
// gen push argument code
void	gen_push_argument(symbol *a);
// gen assign init
void	gen_var_assign_init(symbol *v);
// gen extern file declaration
void	gen_extern_func(symbol *func);

// remove all tmp file
void	remove_all_tmp();

void	InitGenCode();
void	DestoryGenCode(char *out_name);

#endif


⌨️ 快捷键说明

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