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

📄 lex.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
📖 第 1 页 / 共 2 页
字号:
	"FSINF",	LTYPE1, AFSINF,	"FSINHB",	LTYPE1, AFSINHB,	"FSINHD",	LTYPE1, AFSINHD,	"FSINHF",	LTYPE1, AFSINHF,	"FSINHL",	LTYPE1, AFSINHL,	"FSINHW",	LTYPE1, AFSINHW,	"FSINL",	LTYPE1, AFSINL,	"FSINW",	LTYPE1, AFSINW,	"FSLE",		LTYPE1, AFSLE,	"FSLT",		LTYPE1, AFSLT,	"FSNE",		LTYPE1, AFSNE,	"FSQRTB",	LTYPE1, AFSQRTB,	"FSQRTD",	LTYPE1, AFSQRTD,	"FSQRTF",	LTYPE1, AFSQRTF,	"FSQRTL",	LTYPE1, AFSQRTL,	"FSQRTW",	LTYPE1, AFSQRTW,	"FST",		LTYPE1, AFST,	"FSUBB",	LTYPE1, AFSUBB,	"FSUBD",	LTYPE1, AFSUBD,	"FSUBF",	LTYPE1, AFSUBF,	"FSUBL",	LTYPE1, AFSUBL,	"FSUBW",	LTYPE1, AFSUBW,	"FTANB",	LTYPE1, AFTANB,	"FTAND",	LTYPE1, AFTAND,	"FTANF",	LTYPE1, AFTANF,	"FTANHB",	LTYPE1, AFTANHB,	"FTANHD",	LTYPE1, AFTANHD,	"FTANHF",	LTYPE1, AFTANHF,	"FTANHL",	LTYPE1, AFTANHL,	"FTANHW",	LTYPE1, AFTANHW,	"FTANL",	LTYPE1, AFTANL,	"FTANW",	LTYPE1, AFTANW,	"FTENTOXB",	LTYPE1, AFTENTOXB,	"FTENTOXD",	LTYPE1, AFTENTOXD,	"FTENTOXF",	LTYPE1, AFTENTOXF,	"FTENTOXL",	LTYPE1, AFTENTOXL,	"FTENTOXW",	LTYPE1, AFTENTOXW,	"FTSTB",	LTYPE1, AFTSTB,	"FTSTD",	LTYPE1, AFTSTD,	"FTSTF",	LTYPE1, AFTSTF,	"FTSTL",	LTYPE1, AFTSTL,	"FTSTW",	LTYPE1, AFTSTW,	"FTWOTOXB",	LTYPE1, AFTWOTOXB,	"FTWOTOXD",	LTYPE1, AFTWOTOXD,	"FTWOTOXF",	LTYPE1, AFTWOTOXF,	"FTWOTOXL",	LTYPE1, AFTWOTOXL,	"FTWOTOXW",	LTYPE1, AFTWOTOXW,	"FMOVEM",	LTYPE1, AFMOVEM,	"FMOVEMC",	LTYPE1, AFMOVEMC,	"FRESTORE",	LTYPE3, AFRESTORE,	"FSAVE",	LTYPE3, AFSAVE,	"GLOBL",	LTYPE1, AGLOBL,	"GOK",		LTYPE2, AGOK,	"HISTORY",	LTYPE2, AHISTORY,	"ILLEG",	LTYPE2, AILLEG,	"INSTR",	LTYPE3, AINSTR,	"JMP",		LTYPE3, AJMP,	"JSR",		LTYPE3, AJSR,	"LEA",		LTYPE1, ALEA,	"LINKL",	LTYPE1, ALINKL,	"LINKW",	LTYPE1, ALINKW,	"LOCATE",	LTYPE1, ALOCATE,	"LONG",		LTYPE3, ALONG,	"LSLB",		LTYPE1, ALSLB,	"LSLL",		LTYPE1, ALSLL,	"LSLW",		LTYPE1, ALSLW,	"LSRB",		LTYPE1, ALSRB,	"LSRL",		LTYPE1, ALSRL,	"LSRW",		LTYPE1, ALSRW,	"MOVB",		LTYPE1, AMOVB,	"MOVEM",	LTYPE1, AMOVEM,	"MOVEPL",	LTYPE1, AMOVEPL,	"MOVEPW",	LTYPE1, AMOVEPW,	"MOVESB",	LTYPE1, AMOVESB,	"MOVESL",	LTYPE1, AMOVESL,	"MOVESW",	LTYPE1, AMOVESW,	"MOVL",		LTYPE1, AMOVL,	"MOVW",		LTYPE1, AMOVW,	"MULSL",	LTYPE1, AMULSL,	"MULSW",	LTYPE1, AMULSW,	"MULUL",	LTYPE1, AMULUL,	"MULUW",	LTYPE1, AMULUW,	"NAME",		LTYPE1, ANAME,	"NBCD",		LTYPE3, ANBCD,	"NEGB",		LTYPE3, ANEGB,	"NEGL",		LTYPE3, ANEGL,	"NEGW",		LTYPE3, ANEGW,	"NEGXB",	LTYPE3, ANEGXB,	"NEGXL",	LTYPE3, ANEGXL,	"NEGXW",	LTYPE3, ANEGXW,	"NOP",		LTYPE9, ANOP,	"NOTB",		LTYPE3, ANOTB,	"NOTL",		LTYPE3, ANOTL,	"NOTW",		LTYPE3, ANOTW,	"ORB",		LTYPE1, AORB,	"ORL",		LTYPE1, AORL,	"ORW",		LTYPE1, AORW,	"PACK",		LTYPE1, APACK,	"PEA",		LTYPE3, APEA,	"RESET",	LTYPE2, ARESET,	"ROTLB",	LTYPE1, AROTLB,	"ROTLL",	LTYPE1, AROTLL,	"ROTLW",	LTYPE1, AROTLW,	"ROTRB",	LTYPE1, AROTRB,	"ROTRL",	LTYPE1, AROTRL,	"ROTRW",	LTYPE1, AROTRW,	"ROXLB",	LTYPE1, AROXLB,	"ROXLL",	LTYPE1, AROXLL,	"ROXLW",	LTYPE1, AROXLW,	"ROXRB",	LTYPE1, AROXRB,	"ROXRL",	LTYPE1, AROXRL,	"ROXRW",	LTYPE1, AROXRW,	"RTD",		LTYPE3, ARTD,	"RTE",		LTYPE2, ARTE,	"RTM",		LTYPE3, ARTM,	"RTR",		LTYPE2, ARTR,	"RTS",		LTYPE2, ARTS,	"SBCD",		LTYPE1, ASBCD,	"SCC",		LTYPE3, ASCC,	"SCS",		LTYPE3, ASCS,	"SEQ",		LTYPE3, ASEQ,	"SF",		LTYPE3, ASF,	"SGE",		LTYPE3, ASGE,	"SGT",		LTYPE3, ASGT,	"SHI",		LTYPE3, ASHI,	"SLE",		LTYPE3, ASLE,	"SLS",		LTYPE3, ASLS,	"SLT",		LTYPE3, ASLT,	"SMI",		LTYPE3, ASMI,	"SNE",		LTYPE3, ASNE,	"SPL",		LTYPE3, ASPL,	"ST",		LTYPE3, AST,	"STOP",		LTYPE3, ASTOP,	"SUBB",		LTYPE1, ASUBB,	"SUBL",		LTYPE1, ASUBL,	"SUBW",		LTYPE1, ASUBW,	"SUBXB",	LTYPE1, ASUBXB,	"SUBXL",	LTYPE1, ASUBXL,	"SUBXW",	LTYPE1, ASUBXW,	"SVC",		LTYPE2, ASVC,	"SVS",		LTYPE2, ASVS,	"SWAP",		LTYPE3, ASWAP,	"SYS",		LTYPE2, ASYS,	"TAS",		LTYPE3, ATAS,	"TEXT",		LTYPEB, ATEXT,	"TRAP",		LTYPE3, ATRAP,	"TRAPCC",	LTYPE2, ATRAPCC,	"TRAPCS",	LTYPE2, ATRAPCS,	"TRAPEQ",	LTYPE2, ATRAPEQ,	"TRAPF",	LTYPE2, ATRAPF,	"TRAPGE",	LTYPE2, ATRAPGE,	"TRAPGT",	LTYPE2, ATRAPGT,	"TRAPHI",	LTYPE2, ATRAPHI,	"TRAPLE",	LTYPE2, ATRAPLE,	"TRAPLS",	LTYPE2, ATRAPLS,	"TRAPLT",	LTYPE2, ATRAPLT,	"TRAPMI",	LTYPE2, ATRAPMI,	"TRAPNE",	LTYPE2, ATRAPNE,	"TRAPPL",	LTYPE2, ATRAPPL,	"TRAPT",	LTYPE2, ATRAPT,	"TRAPV",	LTYPE2, ATRAPV,	"TRAPVC",	LTYPE2, ATRAPVC,	"TRAPVS",	LTYPE2, ATRAPVS,	"TSTB",		LTYPE3, ATSTB,	"TSTL",		LTYPE3, ATSTL,	"TSTW",		LTYPE3, ATSTW,	"UNLK",		LTYPE3, AUNLK,	"UNPK",		LTYPE1, AUNPK,	"WORD",		LTYPE3, AWORD,	0};voidcinit(void){	Sym *s;	int i;	nullgen.sym = S;	nullgen.offset = 0;	nullgen.type = D_NONE;	if(FPCHIP)		nullgen.dval = 0;	for(i=0; i<sizeof(nullgen.sval); i++)		nullgen.sval[i] = 0;	nullgen.displace = 0;	nullgen.type = D_NONE;	nullgen.index = D_NONE;	nullgen.scale = 0;	nullgen.field = 0;	nerrors = 0;	iostack = I;	iofree = I;	peekc = IGN;	nhunk = 0;	for(i=0; i<NHASH; i++)		hash[i] = S;	for(i=0; itab[i].name; i++) {		s = slookup(itab[i].name);		s->type = itab[i].type;		s->value = itab[i].value;	}	pathname = allocn(pathname, 0, 100);	if(mygetwd(pathname, 99) == 0) {		pathname = allocn(pathname, 100, 900);		if(mygetwd(pathname, 999) == 0)			strcpy(pathname, "/???");	}}voidsyminit(Sym *s){	s->type = LNAME;	s->value = 0;}voidcclean(void){	Gen2 g2;	g2.from = nullgen;	g2.to = nullgen;	outcode(AEND, &g2);	Bflush(&obuf);}voidzname(char *n, int t, int s){	Bputc(&obuf, ANAME);	/* as */	Bputc(&obuf, ANAME>>8);	Bputc(&obuf, t);		/* type */	Bputc(&obuf, s);		/* sym */	while(*n) {		Bputc(&obuf, *n);		n++;	}	Bputc(&obuf, 0);}voidzaddr(Gen *a, int s){	long l;	int i, t;	char *n;	Ieee e;	t = 0;	if(a->field)		t |= T_FIELD;	if(a->index != D_NONE || a->displace != 0)		t |= T_INDEX;	if(a->offset != 0)		t |= T_OFFSET;	if(s != 0)		t |= T_SYM;	if(a->type == D_FCONST)		t |= T_FCONST;	else	if(a->type == D_SCONST)		t |= T_SCONST;	else	if(a->type & ~0xff)		t |= T_TYPE;	Bputc(&obuf, t);	if(t & T_FIELD) {	/* implies field */		i = a->field;		Bputc(&obuf, i);		Bputc(&obuf, i>>8);	}	if(t & T_INDEX) {	/* implies index, scale, displace */		i = a->index;		Bputc(&obuf, i);		Bputc(&obuf, i>>8);		Bputc(&obuf, a->scale);		l = a->displace;		Bputc(&obuf, l);		Bputc(&obuf, l>>8);		Bputc(&obuf, l>>16);		Bputc(&obuf, l>>24);	}	if(t & T_OFFSET) {	/* implies offset */		l = a->offset;		Bputc(&obuf, l);		Bputc(&obuf, l>>8);		Bputc(&obuf, l>>16);		Bputc(&obuf, l>>24);	}	if(t & T_SYM)		/* implies sym */		Bputc(&obuf, s);	if(t & T_FCONST) {		ieeedtod(&e, a->dval);		l = e.l;		Bputc(&obuf, l);		Bputc(&obuf, l>>8);		Bputc(&obuf, l>>16);		Bputc(&obuf, l>>24);		l = e.h;		Bputc(&obuf, l);		Bputc(&obuf, l>>8);		Bputc(&obuf, l>>16);		Bputc(&obuf, l>>24);		return;	}	if(t & T_SCONST) {		n = a->sval;		for(i=0; i<NSNAME; i++) {			Bputc(&obuf, *n);			n++;		}		return;	}	i = a->type;	Bputc(&obuf, i);	if(t & T_TYPE)		Bputc(&obuf, i>>8);}voidoutcode(int a, Gen2 *g2){	int sf, st, t;	Sym *s;	if(pass == 1)		goto out;jackpot:	sf = 0;	s = g2->from.sym;	while(s != S) {		sf = s->sym;		if(sf < 0 || sf >= NSYM)			sf = 0;		t = g2->from.type & D_MASK;		if(h[sf].type == t)		if(h[sf].sym == s)			break;		zname(s->name, t, sym);		s->sym = sym;		h[sym].sym = s;		h[sym].type = t;		sf = sym;		sym++;		if(sym >= NSYM)			sym = 1;		break;	}	st = 0;	s = g2->to.sym;	while(s != S) {		st = s->sym;		if(st < 0 || st >= NSYM)			st = 0;		t = g2->to.type & D_MASK;		if(h[st].type == t)		if(h[st].sym == s)			break;		zname(s->name, t, sym);		s->sym = sym;		h[sym].sym = s;		h[sym].type = t;		st = sym;		sym++;		if(sym >= NSYM)			sym = 1;		if(st == sf)			goto jackpot;		break;	}	Bputc(&obuf, a);	Bputc(&obuf, a>>8);	Bputc(&obuf, lineno);	Bputc(&obuf, lineno>>8);	Bputc(&obuf, lineno>>16);	Bputc(&obuf, lineno>>24);	zaddr(&g2->from, sf);	zaddr(&g2->to, st);out:	if(a != AGLOBL && a != ADATA)		pc++;}voidouthist(void){	Gen g;	Hist *h;	char *p, *q, *op, c;	int n;	g = nullgen;	c = pathchar();	for(h = hist; h != H; h = h->link) {		p = h->name;		op = 0;		/* on windows skip drive specifier in pathname */		if(systemtype(Windows) && p && p[1] == ':'){			p += 2;			c = *p;		}		if(p && p[0] != c && h->offset == 0 && pathname){			/* on windows skip drive specifier in pathname */			if(systemtype(Windows) && pathname[1] == ':') {				op = p;				p = pathname+2;				c = *p;			} else if(pathname[0] == c){				op = p;				p = pathname;			}		}		while(p) {			q = strchr(p, c);			if(q) {				n = q-p;				if(n == 0){					n = 1;	/* leading "/" */					*p = '/';	/* don't emit "\" on windows */				}				q++;			} else {				n = strlen(p);				q = 0;			}			if(n) {				Bputc(&obuf, ANAME);				Bputc(&obuf, ANAME>>8);				Bputc(&obuf, D_FILE);	/* type */				Bputc(&obuf, 1);	/* sym */				Bputc(&obuf, '<');				Bwrite(&obuf, p, n);				Bputc(&obuf, 0);			}			p = q;			if(p == 0 && op) {				p = op;				op = 0;			}		}		g.offset = h->offset;		Bputc(&obuf, AHISTORY);		Bputc(&obuf, AHISTORY>>8);		Bputc(&obuf, h->line);		Bputc(&obuf, h->line>>8);		Bputc(&obuf, h->line>>16);		Bputc(&obuf, h->line>>24);		zaddr(&nullgen, 0);		zaddr(&g, 0);	}}#include "../cc/lexbody"#include "../cc/macbody"#include "../cc/compat"

⌨️ 快捷键说明

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