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

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

?? c01.c

?? unix v7是最后一個廣泛發布的研究型UNIX版本
?? C
字號:
#/* * C compiler * * */#include "c0.h"/* * Called from tree, this routine takes the top 1, 2, or 3 * operands on the expression stack, makes a new node with * the operator op, and puts it on the stack. * Essentially all the work is in inserting * appropriate conversions. */build(op){	register int t1;	int t2, t;	register struct tnode *p1, *p2;	struct tnode *p3;	int dope, leftc, cvn, pcvn;	/*	 * a[i] => *(a+i)	 */	if (op==LBRACK) {		build(PLUS);		op = STAR;	}	dope = opdope[op];	if ((dope&BINARY)!=0) {		p2 = chkfun(disarray(*--cp));		t2 = p2->type;	}	p1 = *--cp;	/*	 * sizeof gets turned into a number here.	 */	if (op==SIZEOF) {		t1 = cblock(length(p1));		t1->type = UNSIGN;		*cp++ = t1;		return;	}	if (op!=AMPER) {		p1 = disarray(p1);		if (op!=CALL)			p1 = chkfun(p1);	}	t1 = p1->type;	pcvn = 0;	t = INT;	switch (op) {	case CAST:		if ((t1&XTYPE)==FUNC || (t1&XTYPE)==ARRAY)			error("Disallowed conversion");		if (t1==UNSIGN && t2==CHAR) {			t2 = INT;			p2 = block(AND,INT,NULL,NULL,p2,cblock(0377));		}		break;	/* end of expression */	case 0:		*cp++ = p1;		return;	/* no-conversion operators */	case QUEST:		if (p2->op!=COLON)			error("Illegal conditional");		else			if (fold(QUEST, p1, p2))				return;	case SEQNC:		t = t2;	case COMMA:	case LOGAND:	case LOGOR:		*cp++ = block(op, t, NULL, NULL, p1, p2);		return;	case EXCLA:		t1 = INT;		break;	case CALL:		if ((t1&XTYPE) != FUNC)			error("Call of non-function");		*cp++ = block(CALL,decref(t1),p1->subsp,p1->strp,p1,p2);		return;	case STAR:		if ((t1&XTYPE) == FUNC)			error("Illegal indirection");		*cp++ = block(STAR, decref(t1), p1->subsp, p1->strp, p1);		return;	case AMPER:		if (p1->op==NAME || p1->op==STAR) {			*cp++ = block(op,incref(t1),p1->subsp,p1->strp,p1);			return;		}		error("Illegal lvalue");		break;	/*	 * a.b goes to (&a)->b	 */	case DOT:		if (p1->op==CALL && t1==STRUCT) {			t1 = incref(t1);			setype(p1, t1, p1);		} else {			*cp++ = p1;			build(AMPER);			p1 = *--cp;		}	/*	 * In a->b, a is given the type ptr-to-structure element;	 * then the offset is added in without conversion;	 * then * is tacked on to access the member.	 */	case ARROW:		if (p2->op!=NAME || p2->tr1->hclass!=MOS) {			error("Illegal structure ref");			*cp++ = p1;			return;		}		if (t2==INT && p2->tr1->hflag&FFIELD)			t2 = UNSIGN;		t = incref(t2);		chkw(p1, -1);		setype(p1, t, p2);		*cp++ = block(PLUS,t,p2->subsp,p2->strp,p1,cblock(p2->tr1->hoffset));		build(STAR);		if (p2->tr1->hflag&FFIELD)			*cp++ = block(FSEL,UNSIGN,NULL,NULL,*--cp,p2->tr1->hstrp);		return;	}	if ((dope&LVALUE)!=0)		chklval(p1);	if ((dope&LWORD)!=0)		chkw(p1, LONG);	if ((dope&RWORD)!=0)		chkw(p2, LONG);	if ((dope&BINARY)==0) {		if (op==ITOF)			t1 = DOUBLE;		else if (op==FTOI)			t1 = INT;		if (!fold(op, p1, 0))			*cp++ = block(op,t1,p1->subsp,p1->strp,p1);		return;	}	cvn = 0;	if (t1==STRUCT || t2==STRUCT) {		if (t1!=t2 || p1->strp != p2->strp)			error("Incompatible structures");		cvn = 0;	} else		cvn = cvtab[lintyp(t1)][lintyp(t2)];	leftc = (cvn>>4)&017;	cvn =& 017;	t = leftc? t2:t1;	if ((t==INT||t==CHAR) && (t1==UNSIGN||t2==UNSIGN))		t = UNSIGN;	if (dope&ASSGOP || op==CAST) {		t = t1;		if (op==ASSIGN || op==CAST) {			if (cvn==ITP||cvn==PTI)				cvn = leftc = 0;			else if (cvn==LTP) {				if (leftc==0)					cvn = LTI;				else {					cvn = ITL;					leftc = 0;				}			}		}		if (leftc)			cvn = leftc;		leftc = 0;	} else if (op==COLON || op==MAX || op==MIN) {		if (t1>=PTR && t1==t2)			cvn = 0;		if (op!=COLON && (t1>=PTR || t2>=PTR))			op =+ MAXP-MAX;	} else if (dope&RELAT) {		if (op>=LESSEQ && (t1>=PTR||t2>=PTR||(t1==UNSIGN||t2==UNSIGN)		 && (t==INT||t==CHAR||t==UNSIGN)))			op =+ LESSEQP-LESSEQ;		if (cvn==ITP || cvn==PTI)			cvn = 0;	}	if (cvn==PTI) {		cvn = 0;		if (op==MINUS) {			t = INT;			pcvn++;		} else {			if (t1!=t2 || t1!=(PTR+CHAR))				cvn = XX;		}	}	if (cvn) {		t1 = plength(p1);		t2 = plength(p2);		if (cvn==XX || (cvn==PTI&&t1!=t2))			error("Illegal conversion");		else if (leftc)			p1 = convert(p1, t, cvn, t2);		else			p2 = convert(p2, t, cvn, t1);	}	if (dope&RELAT)		t = INT;	if (t==FLOAT)		t = DOUBLE;	if (t==CHAR)		t = INT;	if (op==CAST) {		if (t!=DOUBLE && (t!=INT || p2->type!=CHAR)) {			p2->type = t;			p2->subsp = p1->subsp;			p2->strp = p1->strp;		}		if (t==INT && p1->type==CHAR)			p2 = block(ITOC, INT, NULL, NULL, p2);		*cp++ = p2;		return;	}	if (fold(op, p1, p2)==0) {		p3 = leftc?p2:p1;		*cp++ = block(op, t, p3->subsp, p3->strp, p1, p2);	}	if (pcvn && t1!=(PTR+CHAR)) {		p1 = *--cp;		*cp++ = convert(p1, 0, PTI, plength(p1->tr1));	}}/* * Generate the appropriate conversion operator. */struct tnode *convert(p, t, cvn, len)struct tnode *p;{	register int op;	op = cvntab[cvn];	if (opdope[op]&BINARY) {		if (len==0)			error("Illegal conversion");		return(block(op, t, NULL, NULL, p, cblock(len)));	}	return(block(op, t, NULL, NULL, p));}/* * Traverse an expression tree, adjust things * so the types of things in it are consistent * with the view that its top node has * type at. * Used with structure references. */setype(ap, at, anewp)struct tnode *ap, *anewp;{	register struct tnode *p, *newp;	register t;	p = ap;	t = at;	newp = anewp;	for (;; p = p->tr1) {		p->subsp = newp->subsp;		p->strp = newp->strp;		p->type = t;		if (p->op==AMPER)			t = decref(t);		else if (p->op==STAR)			t = incref(t);		else if (p->op!=PLUS)			break;	}}/* * A mention of a function name is turned into * a pointer to that function. */struct tnode *chkfun(ap)struct tnode *ap;{	register struct tnode *p;	register int t;	p = ap;	if (((t = p->type)&XTYPE)==FUNC && p->op!=ETYPE)		return(block(AMPER,incref(t),p->subsp,p->strp,p));	return(p);}/* * A mention of an array is turned into * a pointer to the base of the array. */struct tnode *disarray(ap)struct tnode *ap;{	register int t;	register struct tnode *p;	p = ap;	/* check array & not MOS and not typer */	if (((t = p->type)&XTYPE)!=ARRAY || p->op==NAME&&p->tr1->hclass==MOS	 || p->op==ETYPE)		return(p);	p->subsp++;	*cp++ = p;	setype(p, decref(t), p);	build(AMPER);	return(*--cp);}/* * make sure that p is a ptr to a node * with type int or char or 'okt.' * okt might be nonexistent or 'long' * (e.g. for <<). */chkw(p, okt)struct tnode *p;{	register int t;	if ((t=p->type)!=INT && t<PTR && t!=CHAR && t!=UNSIGN && t!=okt)		error("Illegal type of operand");	return;}/* *'linearize' a type for looking up in the * conversion table */lintyp(t){	switch(t) {	case INT:	case CHAR:	case UNSIGN:		return(0);	case FLOAT:	case DOUBLE:		return(1);	case LONG:		return(2);	default:		return(3);	}}/* * Report an error. */error(s, p1, p2, p3, p4, p5, p6){	nerror++;	if (filename[0])		fprintf(stderr, "%s:", filename);	fprintf(stderr, "%d: ", line);	fprintf(stderr, s, p1, p2, p3, p4, p5, p6);	fprintf(stderr, "\n");}/* * Generate a node in an expression tree, * setting the operator, type, dimen/struct table ptrs, * and the operands. */struct tnode *block(op, t, subs, str, p1,p2)int *subs;struct str *str;struct tnode *p1, *p2;{	register struct tnode *p;	p = gblock(sizeof(*p));	p->op = op;	p->type = t;	p->subsp = subs;	p->strp = str;	p->tr1 = p1;	if (opdope[op]&BINARY)		p->tr2 = p2;	else		p->tr2 = NULL;	return(p);}struct tnode *nblock(ads)struct hshtab *ads;{	register struct hshtab *ds;	ds = ads;	return(block(NAME, ds->htype, ds->hsubsp, ds->hstrp, ds));}/* * Generate a block for a constant */struct cnode *cblock(v){	register struct cnode *p;	p = gblock(sizeof(*p));	p->op = CON;	p->type = INT;	p->subsp = NULL;	p->strp = NULL;	p->value = v;	return(p);}/* * A block for a float or long constant */struct fnode *fblock(t, string)char *string;{	register struct fnode *p;	p = gblock(sizeof(*p));	p->op = FCON;	p->type = t;	p->subsp = NULL;	p->strp = NULL;	p->cstr = string;	return(p);}/* * Assign a block for use in the * expression tree. */char *gblock(n){	register int *p;	p = curbase;	if ((curbase =+ n) >= coremax) {		if (sbrk(1024) == -1) {			error("Out of space");			exit(1);		}		coremax =+ 1024;	}	return(p);}/* * Check that a tree can be used as an lvalue. */chklval(ap)struct tnode *ap;{	register struct tnode *p;	p = ap;	if (p->op==FSEL)		p = p->tr1;	if (p->op!=NAME && p->op!=STAR)		error("Lvalue required");}/* * reduce some forms of `constant op constant' * to a constant.  More of this is done in the next pass * but this is used to allow constant expressions * to be used in switches and array bounds. */fold(op, ap1, ap2)struct tnode *ap1, *ap2;{	register struct tnode *p1;	register int v1, v2;	int unsignf;	p1 = ap1;	if (p1->op!=CON)		return(0);	unsignf = p1->type==UNSIGN;	if (op==QUEST) {		if (ap2->tr1->op==CON && ap2->tr2->op==CON) {			p1->value = p1->value? ap2->tr1->value: ap2->tr2->value;			*cp++ = p1;			return(1);		}		return(0);	}	if (ap2) {		if (ap2->op!=CON)			return(0);		v2 = ap2->value;		unsignf |= ap2->type==UNSIGN;	}	v1 = p1->value;	switch (op) {	case PLUS:		v1 =+ v2;		break;	case MINUS:		v1 =- v2;		break;	case TIMES:		v1 =* v2;		break;	case DIVIDE:		if (v2==0)			goto divchk;		if (unsignf) {			v1 = (unsigned)v1 / v2;			break;		}		v1 =/ v2;		break;	case MOD:		if (v2==0)			goto divchk;		if (unsignf) {			v1 = (unsigned)v1 % v2;			break;		}		v1 =% v2;		break;	case AND:		v1 =& v2;		break;	case OR:		v1 =| v2;		break;	case EXOR:		v1 =^ v2;		break;	case NEG:		v1 = - v1;		break;	case COMPL:		v1 = ~ v1;		break;	case LSHIFT:		v1 =<< v2;		break;	case RSHIFT:		if (unsignf) {			v1 = (unsigned)v1 >> v2;			break;		}		v1 =>> v2;		break;	case EQUAL:		v1 = v1==v2;		break;	case NEQUAL:		v1 = v1!=v2;		break;	case LESS:		v1 = v1<v2;		break;	case GREAT:		v1 = v1>v2;		break;	case LESSEQ:		v1 = v1<=v2;		break;	case GREATEQ:		v1 = v1>=v2;		break;	divchk:		error("Divide check");	default:		return(0);	}	p1->value = v1;	*cp++ = p1;	return(1);}/* * Compile an expression expected to have constant value, * for example an array bound or a case value. */conexp(){	register struct tnode *t;	initflg++;	if (t = tree())		if (t->op != CON)			error("Constant required");	initflg--;	curbase = funcbase;	return(t->value);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品免费日韩av| 麻豆91精品91久久久的内涵| 国产精品美女www爽爽爽| www国产成人| 国产偷国产偷精品高清尤物| 欧美v亚洲v综合ⅴ国产v| 日韩一区二区三区在线| 91精品国产乱码| 日韩欧美一级在线播放| 精品国产免费视频| 2024国产精品| 国产日韩欧美一区二区三区综合| 久久综合国产精品| 久久久久国产精品厨房| 国产欧美精品国产国产专区| 中文字幕亚洲综合久久菠萝蜜| 国产精品免费看片| 亚洲美女淫视频| 亚洲成人在线免费| 久久综合综合久久综合| 国产福利一区二区三区视频| av激情综合网| 精品1区2区3区| 欧美一区在线视频| 久久婷婷国产综合精品青草| 国产色产综合产在线视频| 亚洲欧洲日产国码二区| 亚洲一区二区四区蜜桃| 青草av.久久免费一区| 国产精品一区二区91| 99久久99精品久久久久久| 色嗨嗨av一区二区三区| 91.com视频| 欧美—级在线免费片| 亚洲图片欧美视频| 狠狠色综合播放一区二区| 波多野结衣的一区二区三区| 欧美视频中文字幕| www国产精品av| 亚洲精品免费电影| 美国欧美日韩国产在线播放| 国产精品亚洲视频| 欧美午夜宅男影院| 久久日韩粉嫩一区二区三区| 怡红院av一区二区三区| 九色|91porny| 色婷婷久久久综合中文字幕 | 欧美在线观看一区| 精品91自产拍在线观看一区| 国产精品国模大尺度视频| 日本午夜一本久久久综合| 国产不卡免费视频| 欧美挠脚心视频网站| 国产亚洲成aⅴ人片在线观看 | 极品美女销魂一区二区三区免费| 99久久er热在这里只有精品15| 欧美精品电影在线播放| 中文字幕一区二区三区四区不卡| 免费高清视频精品| 91小视频在线免费看| 亚洲精品一区二区三区四区高清| 亚洲精品国久久99热| 国产精品乡下勾搭老头1| 欧美人体做爰大胆视频| 国产精品久久国产精麻豆99网站| 免费观看日韩av| 色婷婷久久99综合精品jk白丝| 久久奇米777| 免费黄网站欧美| 欧美视频一区二区三区在线观看| 国产精品妹子av| 精品一区二区免费看| 精品视频在线免费| 中文字幕亚洲区| 国产很黄免费观看久久| 日韩一二在线观看| 三级成人在线视频| 在线观看一区二区精品视频| 国产精品国模大尺度视频| 国产一区二区三区精品欧美日韩一区二区三区 | 国产69精品一区二区亚洲孕妇| 日韩一区二区免费高清| 亚洲不卡av一区二区三区| 91亚洲永久精品| 国产精品久久一级| 国产成人8x视频一区二区| 欧美精品一区二区在线播放| 日韩高清国产一区在线| 欧洲日韩一区二区三区| 亚洲欧美日韩久久| 成人av电影免费在线播放| 国产午夜精品美女毛片视频| 韩国一区二区视频| 日韩精品一区二区三区四区| 奇米影视在线99精品| 欧美日本一区二区三区| 午夜视频一区二区| 欧美三级日韩三级| 亚洲成人av在线电影| 欧美中文字幕一区二区三区| 亚洲乱码中文字幕综合| 91亚洲精品乱码久久久久久蜜桃| 中文字幕一区二| av在线播放成人| 亚洲免费av高清| 欧美怡红院视频| 亚洲成人av一区二区三区| 欧美精三区欧美精三区| 日韩av在线播放中文字幕| 欧美一区二区三区免费观看视频 | 成人97人人超碰人人99| 国产精品电影院| 色综合久久66| 午夜电影一区二区| 91麻豆精品国产| 激情久久五月天| 国产偷国产偷亚洲高清人白洁| 国产99久久久国产精品潘金| 国产精品人妖ts系列视频| 成人av在线播放网址| 亚洲免费观看视频| 欧美另类高清zo欧美| 麻豆91在线观看| 国产日韩欧美高清| 一本一道波多野结衣一区二区| 亚洲午夜久久久久中文字幕久| 91精品综合久久久久久| 国内久久精品视频| 最新不卡av在线| 在线成人av影院| 国产久卡久卡久卡久卡视频精品| 欧美—级在线免费片| 欧美怡红院视频| 精品综合免费视频观看| 国产精品乱码一区二三区小蝌蚪| 色综合久久久久综合体| 日本中文一区二区三区| 国产欧美一区二区三区在线看蜜臀| 91麻豆福利精品推荐| 日韩黄色片在线观看| 国产欧美综合在线观看第十页| 91年精品国产| 麻豆中文一区二区| 日韩美女视频一区| 日韩视频一区二区三区在线播放| 国产成人精品影视| 午夜视频在线观看一区二区 | 国产一区二区三区精品欧美日韩一区二区三区 | 秋霞成人午夜伦在线观看| 久久精品视频一区| 欧美私人免费视频| 国产精品自拍三区| 亚洲v日本v欧美v久久精品| 国产欧美一区二区精品秋霞影院 | 国产视频一区在线播放| 欧美性猛片aaaaaaa做受| 国产精品羞羞答答xxdd| 亚洲国产精品麻豆| 国产精品久久一卡二卡| 日韩亚洲电影在线| 日本丰满少妇一区二区三区| 精品一区二区三区香蕉蜜桃| 亚洲狼人国产精品| 久久久九九九九| 欧美一区二区啪啪| 色哟哟一区二区在线观看| 精品一区二区国语对白| 一区二区三区视频在线看| 国产亚洲欧美中文| 日韩久久免费av| 欧美日韩和欧美的一区二区| 岛国av在线一区| 免费黄网站欧美| 午夜精品久久久久久久久| 亚洲欧美综合另类在线卡通| 26uuu亚洲综合色欧美| 9191久久久久久久久久久| 91小宝寻花一区二区三区| 国产一区二区电影| 麻豆精品一区二区三区| 五月激情六月综合| 亚洲激情图片一区| 国产精品视频一二| 久久免费电影网| 欧美成人一区二区三区| 91麻豆精品国产91久久久使用方法 | 亚洲成人黄色影院| 亚洲精选视频免费看| 中文字幕在线不卡一区| 国产欧美一区二区精品久导航| 欧美成人一级视频| 日韩精品中文字幕一区二区三区 | 丝袜诱惑亚洲看片| 亚洲电影中文字幕在线观看| 亚洲欧洲综合另类| 亚洲欧洲国产日韩| 亚洲天堂福利av| 亚洲日本va午夜在线影院| 综合久久给合久久狠狠狠97色 | 天天色综合成人网|