亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? symtab.h

?? C編譯器,在VC6.0環境下開發
?? H
字號:
#ifndef	_C_SYMTAB_H_
#define	_C_SYMTAB_H_

#include	"Common.h"

// for string tab
#include	"GBStrTab.h"

// the first three char must be this
#define		_GLOBE_VAL_NAME		"mm_%s"

// struct _specifier_
#define		SPEC_UNKNOW		0	// only for function return value

	// noun
#define		SPEC_VOID		1	// only for function return value
#define		SPEC_CHAR		2
#define		SPEC_INT		3
#define		SPEC_FLOAT		4	// can be ingored in gen code
#define		SPEC_DOUBLE		5	// can be ingored in gen code
#define		SPEC_LABEL		6

	// sclass
#define		SPEC_AUTO		1
#define		SPEC_REGISTER	2
#define		SPEC_CONSTANT	3
#define		SPEC_TYPEDEF	4

#define		_MAIN_FUNC_NAME		"main"

// const value
typedef union _const_value_
{
	char			v_c;
	unsigned char	v_uc;
	int				v_i;
	unsigned int	v_ui;
	float			f;		// never used
	double			lf;		// never used
	const_string	*v_str; // pointer to the string in table
} const_value;

typedef	struct _specifier_
{
	unsigned	noun;		// CHAR INT FLOAT DOUBLE STRING LABEL
	unsigned	sclass;		// REGISTER AUTO CONSTANT TYPEDEF
	unsigned	is_long;	// 1 = long , 0 = short , can be ingore in code gen
	unsigned	is_unsigned;// 1 = unsigned, 0 = signed
	unsigned	is_static;	// 1 = static keyword found in declaration
	unsigned	is_extern;	// 1 = extern keyword found in declaration

	const_value	v;			// const value
} specifier;

typedef struct _symbol_
{
	char		name[NAME_LEN];		// Input name of symbol
	char		rname[LABEL_LEN];	// Output name of symbol in .asm

	unsigned	is_symtab;			// 1 == symtab ; means is tab head
	unsigned	is_function;		// 1 == the symbol is function
	unsigned	is_declaration;		// 1 == the function is only declaration, not defined
									//  or the label only declaration
	unsigned	is_array;			// 1 == the symbol is array
	unsigned	is_argument;		// 1 == the symbol is argument in function declaration
	unsigned	is_assign;			// 1 == the symbol is var and be assigned
	unsigned	is_cl;				// 1 == the symbol is const value, not var
	unsigned	is_rvalue;			// 1 == the symbol is a rvalue
	unsigned	is_pushed;			// 1 == the symbol has push itself
	int			num_ele;			// if is array use this field to show element number
	specifier	basetype;			// if func, is fun's return value
	int			offset;				// Offset of variable , if var

	struct _symbol_ *next;			// Next symbol in the table
									// if is args, use this to link next args symbol

	struct _symbol_ *args;			// if the symbol stand for function
									// use this to link args
									// if the symbol is not function, it has initalizer
									// use this pointer reference to initalizer
									// if the symbol is array in expression, use this
									// to refer to index expression

	struct _symbol_ *lchild,*rchild;// 二叉樹組織
} symbol;

#define		NOUN			basetype.noun
#define		SCLASS			basetype.sclass
#define		IS_LONG			basetype.is_long
#define		IS_UNSIGNED		basetype.is_unsigned
#define		IS_STATIC		basetype.is_static
#define		IS_EXTERN		basetype.is_extern

#define		V_C				basetype.v.v_c
#define		V_UC			basetype.v.v_uc
#define		V_I				basetype.v.v_i
#define		V_UI			basetype.v.v_ui
#define		V_F				basetype.v.f
#define		V_LF			basetype.v.lf
#define		V_STR			basetype.v.v_str

#define		IS_SYMTAB(x)	( (x)->is_symtab )
#define		IS_FUNCTION(x)	( (x)->is_function )
#define		IS_FUNC_DECL(x)	( IS_FUNCTION(x) && (x)->is_declaration )
#define		IS_ARGUMENT(x)	( (x)->is_argument )
#define		IS_ASSIGN(x)	( (x)->is_assign )
#define		IS_ARRAY(x)		( (x)->is_array ) 
#define		IS_LABEL(x)		( (x)->NOUN == SPEC_LABEL )
#define		IS_CL(x)		( (x)->is_cl )
#define		IS_RVALUE(x)	( (x)->is_rvalue )
#define		IS_PUSHED(x)	( (x)->is_pushed )
#define		IS_LAB_DECL(x)	( (x)->NOUN == SPEC_LABEL && (x)->is_declaration )

#define		IS_LOCAL_VAR(x)	( !IS_FUNCTION(x)	&& \
							  !IS_SYMTAB(x)		&& \
							  !IS_ARGUMENT(x)	&& \
							  !IS_TYPEDEF(x)	&& \
							  !IS_CL(x)			&& \
							  !IS_RVALUE(x)		&& \
							  !IS_LABEL(x) )

#define		IS_VAR(x)		( !IS_FUNCTION(x)	&& \
							  !IS_SYMTAB(x)		&& \
							  !IS_TYPEDEF(x)	&& \
							  !IS_CL(x)			&& \
							  !IS_RVALUE(x)		&& \
							  !IS_LABEL(x) )

// tmp array symbol has index expression
#define		IS_ARRAY_HAS_INDEX(x)	( IS_ARRAY(x) && (x)->args )

#define		IS_LVALUE(x)	( ( IS_VAR(x) && !IS_ARRAY(x) )	|| \
								IS_ARRAY_HAS_INDEX(x) )

#define		IS_GLOBE(x)		( !strncmp((x)->rname,_GLOBE_VAL_NAME, 3) )

#define		IS_AUTO(x)		( (x)->SCLASS == SPEC_AUTO )
#define		IS_REGISTER(x)	( (x)->SCLASS == SPEC_REGISTER )
#define		IS_CONSTANT(x)	( (x)->SCLASS == SPEC_CONSTANT )
#define		IS_TYPEDEF(x)	( (x)->SCLASS == SPEC_TYPEDEF )

#define		IS_MAIN_FUNC(x)	( IS_FUNCTION(x)	&&	\
							  !strcmp(_MAIN_FUNC_NAME, (x)->name) )

#define		_CL_SINGLE_OPERATION(x, o)	\
		switch((x)->NOUN)				\
		{								\
		case	SPEC_CHAR:				\
			(x)->V_C = (o((x)->V_C));	\
			break;						\
		case	SPEC_INT:				\
			(x)->V_I = (o((x)->V_I));	\
			break;						\
		case	SPEC_DOUBLE:			\
			(x)->V_LF = (o((x)->V_LF));	\
			break;						\
		case	SPEC_FLOAT:				\
			(x)->V_F = (o((x)->V_F));	\
			break;						\
		default:						\
			yyerror("can't do cl operator");	\
			user_exit(1);						\
		}

#define		_CL_SINGLE_BIT_OPERATION(x, o)	\
		switch((x)->NOUN)				\
		{								\
		case	SPEC_CHAR:				\
			(x)->V_C = (o((x)->V_C));	\
			break;						\
		case	SPEC_INT:				\
			(x)->V_I = (o((x)->V_I));	\
			break;						\
		default:						\
			yyerror("can't do cl bit operator");	\
			user_exit(1);							\
		}

#define		_CL_DOUBLE_OPERATION(x,y,o)			\
		switch((x)->NOUN)						\
		{										\
		case	SPEC_CHAR:						\
			(x)->V_C = ((x)->V_C o ((y)->V_C));	\
			break;								\
		case	SPEC_INT:						\
			(x)->V_I = ((x)->V_I o ((y)->V_I));	\
			break;								\
		case	SPEC_DOUBLE:					\
			(x)->V_LF = ((x)->V_LF o ((y)->V_LF));	\
			break;								\
		case	SPEC_FLOAT:						\
			(x)->V_F = ((x)->V_F o ((y)->V_F));	\
			break;								\
		default:								\
			yyerror("can't do cl operator");	\
			user_exit(1);						\
		}

#define		_CL_DOUBLE_BIT_OPERATION(x,y,o)			\
		switch((x)->NOUN)						\
		{										\
		case	SPEC_CHAR:						\
			(x)->V_C = ((x)->V_C o ((y)->V_C));	\
			break;								\
		case	SPEC_INT:						\
			(x)->V_I = ((x)->V_I o ((y)->V_I));	\
			break;								\
		default:								\
			yyerror("can't do cl bit operator");	\
			user_exit(1);							\
		}

#define		CHECK_BIT_OP_TYPE(x)	\
				if ( (x)->NOUN == SPEC_DOUBLE || (x)->NOUN == SPEC_FLOAT )	\
				{															\
					yyerror("illegal on operands of type 'float ' or 'double'");	\
					user_exit(1);													\
				}

// globe value

// for symtab
symbol	*new_symbol();
void	del_symbol(symbol *p);
void	remove_symtab(symbol *head);
// delete a symtab except function args
void	remove_symtab_except_args(symbol *head);
// delete a function symtab include function args
void	remove_function_symtab_include_args(symbol *func);
// remove the linked symbol
// eg. not use declaration list
void	remove_symbol_list(symbol *p);
symbol	*create_symtab(const char *name);
// return NULL means not found
symbol	*search_symbol_in_symtab(symbol *tab, char *name);
// return NULL means not found
symbol	*search_symbol_to_top(char *name);
int		add_symbol_to_symtab(symbol *tab, symbol *p);
// add symbol to current symtab
// return 0 means ok, otherwise return 1 means already exist
int		add_symbol_to_current_symtab(symbol *p);
// add symbol list to symtab, use ->next to link
int		add_symbol_list_to_current_symtab(symbol *p);
// link two symbol list to one list
// link p2 at ->next of p1's last symbol
symbol	*link_symbol_list(symbol *p1, symbol *p2);
// union the specifier symbol
// change p1
void	union_specifier_symbol(symbol *p1, symbol *p2);
// check declarator
void	check_var_declarator(symbol *decl);
// union the specifier to declarator
// at same time check declarator , not be void
void	unoin_specifier_to_declarator(symbol *spec, symbol *decl);
// union the specifier to declarator list
void	unoin_specifier_to_declarator_list(symbol *spec, symbol *decl_list);
// new symbol from a typedef symbol
symbol	*new_symbol_from_typedef(symbol *def_sym);
// search for typedef name
// return not NULL means found
symbol	*find_symtab_typedef(char *name);
// create compound symtab , and push it
symbol	*new_compound_symtab();
// pop a compound symtab, and destory it
void	del_compound_symtab();
// check args type in function call
int		check_args_type_in_function_call(symbol *p1,symbol *p2);
// check args type
int		check_args_type(symbol *p1,symbol *p2);
// check the function parameter and return type
int		check_func_args_type(symbol *func,symbol *decl);
// add function definition to function tab
// if declaration if exist, check parameter type, 
// and overwrite parameter's name
// actual delete the declaration list
// and add itself to function symtab
symbol	*add_function_def_to_functab(symbol *func);
// only declaration
// add or only check parameter type
// not overwrite parameter's type
void	add_function_decl_to_functab(symbol *decl);
// check function return value
// array can't be return value
void	check_function_retval(symbol *func);
// get symbol 's size
int		get_symbol_size(symbol *p);
// set local value or args rname
void	set_local_or_args_rname(symbol *p);
// get local value or args asm attrib "word ptr [bp-%d]" or "byte ptr [bp-%d]"
// or "word ptr [bp+%d]" or "byte ptr [bp+%d]"
char	*get_asm_attri(symbol *p);
// assign parameters rname
void	assign_parameters_rname(symbol *args_list);
// assign symbol a unused name
void	assign_symbol_unusedname(symbol *p);
// set function 's offset to sub sp, offset
void	set_func_offset(symbol *func);
// change cl value if necessary
void	cast_cl_type(symbol *c1, symbol *c2);
// get symbol value as int
int		get_sym_value(symbol *c);
// clone a symbol with symbol
symbol	*clone_symbol(symbol *p);
// calcu function argument size
int		get_function_args_size(symbol *func);
// create goto label symtab 
void	create_goto_label_symtab();
// destory goto label symtab
void	destory_goto_label_symtab();
// found the goto label in goto label symtab
symbol	*search_goto_label(char *name);
// add goto label to goto label symtab
void	add_goto_label(symbol *lb);

void	InitSymTab();
void	DestorySymTab();

//  dump symbol for debug
void	dump_symbol(symbol *p);
void	dump_function(symbol *func);
void	dump_current_symtab();
void	dump_function_symtab();

#endif


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区公司| 亚洲成人黄色影院| a4yy欧美一区二区三区| 夜夜亚洲天天久久| 91精品国产综合久久久久久久久久 | zzijzzij亚洲日本少妇熟睡| 亚洲欧美在线视频| 欧美精品在线观看一区二区| 国产高清不卡一区二区| 午夜久久久久久久久久一区二区| 欧美高清视频一二三区| 久久成人麻豆午夜电影| 亚洲免费在线观看视频| 精品少妇一区二区| 欧美精品视频www在线观看| 91在线视频播放地址| 天天av天天翘天天综合网色鬼国产| 精品福利在线导航| 欧美三级电影网站| 色综合久久综合网欧美综合网| 免费在线一区观看| 天天色天天爱天天射综合| 亚洲欧美中日韩| 国产精品久久午夜| 欧美经典三级视频一区二区三区| 欧美一级xxx| 日韩视频免费观看高清完整版在线观看 | 亚洲成人免费影院| 国产精品美女久久久久久| 精品国产一区久久| 久久久久一区二区三区四区| 日韩欧美激情四射| 久久久精品蜜桃| 中文字幕亚洲一区二区av在线 | 成人三级伦理片| 国产高清精品网站| 成人av在线影院| 欧美亚洲一区二区在线| 欧美丰满美乳xxx高潮www| 欧美一级艳片视频免费观看| 亚洲精品一线二线三线无人区| 精品成人一区二区三区四区| 久久免费国产精品| 亚洲精品欧美专区| 日本女人一区二区三区| 国产91丝袜在线播放九色| 97精品久久久久中文字幕| 欧美色综合网站| 亚洲国产成人私人影院tom| 亚洲国产精品麻豆| 成人性生交大片免费看视频在线| 欧美日韩成人一区| 日本一区二区三区电影| 午夜精品一区二区三区电影天堂 | 日韩成人午夜精品| 99免费精品视频| 久久久国产精华| 国产成人自拍在线| 欧美变态tickle挠乳网站| 亚洲精选在线视频| 国产不卡在线一区| 2024国产精品| 精品一区精品二区高清| 制服丝袜中文字幕一区| 亚洲色图欧洲色图婷婷| 国产精品99久久久久久有的能看| 精品日产卡一卡二卡麻豆| 亚洲国产日产av| 欧美综合视频在线观看| 亚洲精品成人天堂一二三| 91亚洲精品久久久蜜桃| 国产精品家庭影院| 一本色道久久综合亚洲aⅴ蜜桃| 久久九九久精品国产免费直播| 色综合天天综合在线视频| 国产精品高潮久久久久无| 9人人澡人人爽人人精品| 亚洲精品免费一二三区| 欧美日韩综合在线| 国产一区二区伦理片| 国产精品国模大尺度视频| 91欧美激情一区二区三区成人| ㊣最新国产の精品bt伙计久久| 一本一道久久a久久精品| 婷婷综合五月天| 国产午夜精品久久久久久久 | 一区二区在线观看免费视频播放| 在线免费亚洲电影| 狠狠狠色丁香婷婷综合激情 | 欧美成人伊人久久综合网| av一区二区三区在线| 青椒成人免费视频| 亚洲成人自拍偷拍| 久久久一区二区| 欧美日韩国产综合一区二区| 国产成人精品影院| 天天免费综合色| 一区二区三区日韩在线观看| 中文字幕精品一区二区精品绿巨人| 日本国产一区二区| 91小视频免费看| 国产二区国产一区在线观看| 亚洲电影一区二区| 亚洲欧美国产高清| 中文字幕日韩欧美一区二区三区| 欧美mv日韩mv国产| 91麻豆精品国产91久久久久| 91麻豆国产在线观看| 成人理论电影网| 成人激情综合网站| 国产不卡视频一区二区三区| 老色鬼精品视频在线观看播放| 亚洲一区在线观看免费观看电影高清| 国产精品免费网站在线观看| 精品卡一卡二卡三卡四在线| 日韩欧美一区电影| 精品国产电影一区二区| 精品国产露脸精彩对白| 精品国产乱码久久久久久1区2区 | 精品无码三级在线观看视频| 奇米综合一区二区三区精品视频| 人人超碰91尤物精品国产| 韩国av一区二区| 国产99久久久国产精品| 欧美日韩免费视频| 一区视频在线播放| 午夜在线成人av| 国产精品一二三区| 日本韩国欧美国产| 欧美一级二级三级乱码| 国产精品久久久一本精品| 亚洲一线二线三线久久久| 激情久久久久久久久久久久久久久久| 国产成人精品三级| 91麻豆精品国产91久久久资源速度 | 91在线porny国产在线看| 777a∨成人精品桃花网| 亚洲丝袜另类动漫二区| 久久不见久久见免费视频7| 91在线国产福利| 国产精品无遮挡| 精品午夜久久福利影院| 欧美日韩电影在线播放| 一区二区三区国产精品| av成人免费在线观看| 久久蜜桃av一区精品变态类天堂 | 国产精品麻豆99久久久久久| 日本视频免费一区| 欧美丝袜第三区| 亚洲综合一区二区三区| 91一区二区三区在线观看| 久久精品欧美日韩精品| 精品在线你懂的| 欧美精品一区二区在线播放| 亚洲.国产.中文慕字在线| 91激情五月电影| 亚洲国产毛片aaaaa无费看 | 欧美精品在线视频| 日本女优在线视频一区二区| 欧美欧美欧美欧美首页| 日韩成人免费电影| 久久久国产一区二区三区四区小说 | 精品精品欲导航| 亚洲视频在线一区二区| 色综合天天做天天爱| 精品一区二区三区久久| 日本中文字幕一区二区视频| 亚洲男同性视频| 最新高清无码专区| 国产欧美日韩三级| 久久久久亚洲蜜桃| 久久免费国产精品| 久久香蕉国产线看观看99| 一本久道中文字幕精品亚洲嫩| 日韩高清不卡一区二区| 欧美激情综合五月色丁香小说| 欧美日韩精品欧美日韩精品一综合| 久久精品国产网站| 午夜精品久久久久久| 亚洲三级电影网站| 亚洲国产精品精华液ab| 欧美一区二区三区四区五区| av爱爱亚洲一区| 成人综合激情网| 国产不卡视频在线观看| 麻豆高清免费国产一区| 亚洲成人激情自拍| 亚洲日本在线观看| 中文字幕一区日韩精品欧美| 久久综合久久综合亚洲| 日韩欧美在线观看一区二区三区| 欧美中文一区二区三区| 欧美精品1区2区3区| 欧美三级午夜理伦三级中视频| 91亚洲精品乱码久久久久久蜜桃| 不卡一卡二卡三乱码免费网站| 国内欧美视频一区二区| 国产福利91精品| 99久久婷婷国产| 在线国产亚洲欧美|