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

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

?? enode.c

?? unix環境下實現的cmm語言編譯器
?? C
字號:
/*enode.c:進行語義處理并建立抽象語法樹*/#include "cmm.h"static Tree addtree(int op, Tree l,Tree r);static Tree cmptree(int op, Tree l, Tree r);static int compatible(Type ty1, Type ty2);static int isnullptr(Tree e);static Tree subtree(int op, Tree l, Tree r);static Tree multree(int op, Tree l, Tree r);Tree (*optree[])(int op, Tree l, Tree r) = {/*二元表達式處理函數*/#define xx(a,b,c,d,e,f,g)	f,#define yy(a,b,c,d,e,f,g)	f,#include "token.h"};/*call:為函數調用生成調用樹。 *call用函數原型對實參進行類型檢查。 */Tree call(Tree f, Type fty, Coordinate *src){	int n = 0;	Tree args = NULL;	Type *proto, rty = freturn(fty);		DEBUG(fprint(2,"function call begin\n")); 	proto = fty->proto;	if (t != ')')		for (;;) {			Tree q = pointer(expr(0));			if (proto && *proto && *proto != voidtype) {				Type aty;				aty = assign(*proto,q);				if (aty)					q = cast(q, aty);				else 					error("type error in argument %d to\					 %s;found '%t'\expected '%t'\n", 					n+1,funcname(f),q->type,*proto);				if (ischar(q->type)) /*將字符參數類型提升為整形*/					q = cast(q, promote(q->type));				proto++;			}			else {				if (NULL == proto || NULL == *proto|| *proto == voidtype)					error("too many arguments to %s\n",funcname(f));			}			args = tree(ARG + ttob(q->type),q->type,q,args);			n++;			if(t != ',')				break;			t = gettoken();		}		expect(')');		if (proto && *proto)			error("insufficient number of arguments to %s\n",			funcname(f));	DEBUG(fprint(2,"function call end\n")); 	return  tree(CALL + ttob(rty), promote(rty),args,f);}/*addtree:為加運算生成樹*/static Tree addtree(int op, Tree l,Tree r){	Type ty = inttype;		if (isarith(l->type) && isarith(r->type)) {		ty = binary(l->type, r->type);		l = cast(l,ty);		r = cast(r,ty);	}else if(isptr(l->type) && isarith(r->type))		return addtree(op, r, l);	else if(isptr(r->type) && isarith(l->type)	 &&!isfunc(r->type->type)) {		/*對于指針與算術類型的運算,總是使指針成為右操作數*/		int n;		ty = r->type;		n = ty->type->size;		if(0 == n)			error("unknown size for type '%t' \n",ty->type);		l = cast(l, promote(l->type));		if(n > 1) /*計算偏移量*/			l = multree(MUL, consttree(n,inttype),l);		return simplify(ADD+P, ty, l, r);	}else		typeerror(op, l,r);	return simplify(op, ty, l, r);			}/*consttree:生成類型為ty值為n的常量樹*/Tree consttree(int n, Type ty){	Tree p;		if(isarray(ty))		ty = atop(ty);	p = tree(CNST+ttob(ty),ty,NULL,NULL);	p->u.v.i = n;	return p;}/*cmptree:為比較運算生成樹*/static Tree cmptree(int op, Tree l, Tree r){	Type ty = inttype;	if(isarith(l->type) && isarith(r->type)) {		ty = binary(l->type, r->type);		l = cast(l,ty);		r = cast(r,ty);	}else if(compatible(l->type,r->type)){		/*比較可以兼容的指針類型,并把它們轉換成無符號數的比較*/		ty = unsignedtype;				 		l = cast(l, ty);		r = cast(r,ty);		}else 		typeerror(op,l,r);		return simplify(op + ttob(ty),inttype,l,r);	}static int compatible(Type ty1, Type ty2){	return (isptr(ty1) && !isfunc(ty1->type)			&& isptr(ty2) && !isfunc(ty2->type)			&& eqtype(ty1->type,ty2->type));}static int isnullptr(Tree e){	return (isint(e->type) && CNST == generic(e->op)		&& 0 == e->u.v.i) 		|| (isvoidptype(e->type) && CNST+P == e->op		 &&NULL == e->u.v.p);}Tree eqtree(int op, Tree l, Tree r){	Type xty = l->type, yty = r->type;	if((isptr(xty) && isnullptr(r))	|| (isptr(xty) && !isfunc(xty->type) && isvoidptype(yty))	|| (isptr(xty) && isptr(yty) && eqtype(xty->type,yty->type))) {		Type ty = unsignedtype;		l = cast(l, ty);		r = cast(r, ty);		return simplify(op + ttob(ty),inttype, l, r);	}else if((isptr(yty) && isnullptr(l))	|| (isptr(yty) && !isfunc(yty->type) && isvoidptype(xty))) {		return eqtree(op, r, l);		}	return cmptree(op, l, r);}Type assign(Type xty, Tree e){	if(isarith(e->type) && isarith(xty))		return xty;	else if(isptr(xty) && isnullptr(e))		return xty;	else if((isvoidptype(xty) && isptr(e->type))	|| (isvoidptype(e->type) && isptr(xty)))		return xty;	else if(isptr(xty) && isptr(e->type)	&& eqtype(xty, e->type))		return xty;	return NULL;}/*asgntree:生成賦值樹*/Tree asgntree(int op, Tree l, Tree r){	Type  ty;		r = pointer(r);/*將數組和函數做為指針*/	ty = assign(l->type, r);	if(ty)		r = cast(r, ty);	else {		typeerror(ASGN, l,r);		if(r->type == voidtype)			r = retype(r, inttype);		ty = r->type;	}	l = lvalue(l); /*使用l的左值*/	return tree(op + ttob(ty), ty, l, r);}Tree asgn(Symbol p, Tree e){	if(isarray(p->type)) /*對局部數組進行初始化賦值*/		e = tree(ASGN + A, p->type, idtree(p),			tree(INDIR + A, e->type, e, NULL));	else  		e = asgntree(ASGN, idtree(p),e);	return e;	}/*subtree:處理減法運算*/static Tree subtree(int op, Tree l, Tree r){	Type ty = inttype;	int n;	DEBUG(fprint(2,"subtree begin\n")); 	if(isarith(l->type) && isarith(r->type)) {		l = cast(l, ty);		r = cast(r, ty);		}else if(isptr(l->type) && !isfunc(l->type->type) && isarith(r->type)) { /*指針減去一個整形數后其結果為指針*/		ty = l->type;		n = ty->size;		if(0 == n)			error("unknown size for type '%t'\n",ty->type);		if(n > 1)			r = multree(MUL, consttree(n, inttype), r);		return simplify(SUB+P, ty, l, r);	}else if(compatible(l->type, r->type)) {		/*兼容指針相減的結果為指針引用元素的個數*/		ty = l->type;		n = ty->type->size;		if(0 == n)			error("unknown size for type '%t'\n", ty->type);		l = simplify(SUB+I, inttype, cast(l,unsignedtype),cast(r,unsignedtype));		return simplify(DIV+I,inttype,l, consttree(n,inttype));	}else		typeerror(op,l,r);	DEBUG(fprint(2,"subtree end\n")); 	return simplify(op, ty,l,r);}/*multree:處理乘法,除法,求余運算*/static Tree multree(int op, Tree l, Tree r){	Type ty = inttype;	if(isarith(l->type) && isarith(r->type)) {		l = cast(l, inttype);		r = cast(r, inttype);	}else		typeerror(op, l, r);	return simplify(op, ty, l, r);}void typeerror(int op, Tree l, Tree r){	int i;	static struct {int op; char *name;} ops[] = {		{ASGN, "="},	{INDIR, "*"},	{NEG, "-"},		{ADD, "+"},	{SUB, "-"},	{MOD, "%"},		{DIV, "/"},	{MUL, "*"},	{EQ, "=="},		{GE, ">="},	{GT, ">"},	{LE, "<="},		{LT, "<"},	{NE, "!="},	{NOT, "!"},		{0,0}	};	op = generic(op);	for(i = 0; ops[i].op; i++)		if(op == ops[i].op)			break;	assert(ops[i].name);	if(r)		error("operands of %s have illegal types '%t' and '%t'\n",		ops[i].name, l->type, r->type);	else		error("operand of unary %s has illegal type '%t'\n",		ops[i].name,l->type);	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区视频在线看| 99精品视频免费在线观看| 久久久久久久免费视频了| 精品一区二区三区久久| 最近日韩中文字幕| 精品国精品自拍自在线| 男男视频亚洲欧美| 久久久美女毛片| 亚洲高清免费视频| 91在线看国产| 久久99精品网久久| 图片区小说区国产精品视频| 国产精品情趣视频| 久久久www免费人成精品| 欧美喷水一区二区| 在线观看亚洲精品视频| 成人免费va视频| 韩国av一区二区三区| 五月激情丁香一区二区三区| 亚洲色图视频免费播放| 久久久亚洲欧洲日产国码αv| 欧美日本韩国一区| 欧美特级限制片免费在线观看| 成人毛片在线观看| 国产一区二区三区在线观看精品| 青青国产91久久久久久 | aaa欧美日韩| 国产精品一区二区男女羞羞无遮挡 | 日韩avvvv在线播放| 国产精品成人午夜| 国产日韩欧美激情| 久久影院电视剧免费观看| 欧美大片在线观看一区| 日韩一区二区三区免费观看| 欧美一区日本一区韩国一区| 欧美男人的天堂一二区| 欧美性猛交一区二区三区精品| 99国产精品99久久久久久| aaa亚洲精品| 91免费国产在线观看| 99久久婷婷国产| 色婷婷亚洲综合| 欧美在线影院一区二区| 欧美视频在线观看一区二区| 欧美午夜宅男影院| 日本精品裸体写真集在线观看 | 蜜桃久久久久久| 蜜臀精品久久久久久蜜臀| 久久久亚洲国产美女国产盗摄| 国产一区二区三区在线观看精品| 欧美在线观看你懂的| 狠狠色丁香久久婷婷综合_中| 91精品国产91久久综合桃花| 亚洲国产高清在线| 日韩午夜精品视频| 欧美日韩1区2区| 51精品久久久久久久蜜臀| 国产a久久麻豆| 亚洲国产精品99久久久久久久久 | 日本不卡视频在线| 久久福利视频一区二区| 国产99一区视频免费| 93久久精品日日躁夜夜躁欧美| 色婷婷av一区二区| 欧美区视频在线观看| 久久综合狠狠综合久久激情| 午夜欧美在线一二页| 不卡的av在线| 在线精品国精品国产尤物884a| 在线观看视频一区| 日韩视频在线你懂得| 26uuu成人网一区二区三区| 亚洲国产高清在线| 午夜欧美2019年伦理| 经典三级一区二区| 91伊人久久大香线蕉| 7799精品视频| 欧美激情在线观看视频免费| 亚洲精品成a人| 久久国产麻豆精品| 成人av电影在线| 91精品国产91久久久久久一区二区 | 亚洲精品网站在线观看| 青青草国产精品亚洲专区无| 高清国产一区二区三区| 欧美日韩中文国产| 欧美高清在线精品一区| 日韩国产在线观看一区| 国产成人在线视频播放| 欧美三级电影精品| 国产日韩成人精品| 免费观看91视频大全| 91视频你懂的| 26uuu亚洲| 午夜精品福利一区二区三区av| 国产成人精品三级麻豆| 91麻豆精品91久久久久久清纯| 国产精品久久午夜| 极品少妇xxxx精品少妇偷拍| 色天使色偷偷av一区二区| 国产日韩v精品一区二区| 日韩影视精彩在线| 欧美伊人精品成人久久综合97| 国产亚洲欧美在线| 美女精品一区二区| 欧美日本韩国一区二区三区视频| 国产精品对白交换视频| 国产一区二区三区| 欧美一级夜夜爽| 婷婷久久综合九色综合绿巨人| 91丨porny丨国产入口| 久久精品一区蜜桃臀影院| 日韩国产欧美在线观看| 欧美视频在线不卡| 亚洲欧美激情小说另类| 成人97人人超碰人人99| 欧美国产精品一区二区三区| 黄色小说综合网站| 精品国精品自拍自在线| 日韩av午夜在线观看| 欧美唯美清纯偷拍| 亚洲永久免费av| 色综合中文字幕| 国产精品国产自产拍在线| 国产夫妻精品视频| 欧美国产一区视频在线观看| 国产成人亚洲精品狼色在线| 欧美精品一区二区三区在线| 蜜臀va亚洲va欧美va天堂| 日韩一级片网址| 日本不卡123| 欧美福利视频一区| 日本成人在线电影网| 欧美日韩一区久久| 午夜不卡av在线| 在线91免费看| 日韩成人免费看| 精品视频在线看| 国产精品午夜在线| 99视频有精品| 日韩理论片一区二区| 色婷婷av一区二区三区软件| 亚洲一区二区成人在线观看| 在线看一区二区| 视频一区国产视频| 日韩精品一区二区三区视频在线观看 | aaa亚洲精品| 一区二区视频免费在线观看| 欧美在线制服丝袜| 男女男精品视频网| 国产婷婷色一区二区三区四区| 成人免费的视频| 一区二区三区毛片| 在线综合+亚洲+欧美中文字幕| 看电视剧不卡顿的网站| 国产日本一区二区| 色域天天综合网| 日日摸夜夜添夜夜添精品视频| 日韩一区二区三区视频| 国产成人精品一区二区三区四区 | 亚洲香蕉伊在人在线观| 欧美日韩亚洲综合一区二区三区| 日本亚洲欧美天堂免费| 久久久久88色偷偷免费| 色综合久久久久综合99| 日韩成人午夜精品| 国产欧美一区二区在线观看| 色丁香久综合在线久综合在线观看| 爽好多水快深点欧美视频| 国产欧美综合在线| 欧美日韩高清在线播放| 国产呦萝稀缺另类资源| 亚洲综合小说图片| 精品久久久久久久久久久院品网| 成人av在线影院| 日本欧美一区二区在线观看| 国产区在线观看成人精品| 欧美色视频在线| 国产成人夜色高潮福利影视| 中文字幕在线视频一区| 日韩一区二区精品| 91在线观看地址| 久久99蜜桃精品| 亚洲一区二区高清| 欧美高清在线一区| 日韩欧美一区中文| 日本韩国精品在线| 国产精品白丝av| 日韩成人精品在线| 亚洲美女淫视频| 国产欧美日韩在线| 欧美一区二区三区视频免费播放| 99国产欧美另类久久久精品| 六月丁香综合在线视频| 亚洲女与黑人做爰| 国产欧美一区二区三区沐欲| 欧美精品久久99久久在免费线| 丁香婷婷综合色啪| 经典一区二区三区| 水野朝阳av一区二区三区|