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

📄 lex.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <ctype.h>#define	EXTERN#include "a.h"#include "y.tab.h"voidmain(int argc, char *argv[]){	char *p;	int nout, nproc, status, i, c;	thechar = '1';	thestring = "68000";	memset(debug, 0, sizeof(debug));	cinit();	outfile = 0;	include[ninclude++] = ".";	ARGBEGIN {	default:		c = ARGC();		if(c >= 0 || c < sizeof(debug))			debug[c] = 1;		break;	case 'o':		outfile = ARGF();		break;	case 'D':		p = ARGF();		if(p)			Dlist[nDlist++] = p;		break;	case 'I':		p = ARGF();		setinclude(p);		break;	} ARGEND	if(*argv == 0) {		print("usage: %ca [-options] file.s\n", thechar);		errorexit();	}	if(argc > 1 && systemtype(Windows)){		print("can't assemble multiple files on windows\n");		errorexit();	}	if(argc > 1 && !systemtype(Windows)) {		nproc = 1;		if(p = getenv("NPROC"))			nproc = atol(p);	/* */		c = 0;		nout = 0;		for(;;) {			while(nout < nproc && argc > 0) {				i = myfork();				if(i < 0) {					i = mywait(&status);					if(i < 0)						errorexit();					if(status)						c++;					nout--;					continue;				}				if(i == 0) {					print("%s:\n", *argv);					if(assemble(*argv))						errorexit();					exits(0);				}				nout++;				argc--;				argv++;			}			i = mywait(&status);			if(i < 0) {				if(c)					errorexit();				exits(0);			}			if(status)				c++;			nout--;		}	}	if(assemble(argv[0]))		errorexit();	exits(0);}intassemble(char *file){	char ofile[100], incfile[20], *p;	int i, of;	strcpy(ofile, file);	p = utfrrune(ofile, pathchar());	if(p) {		include[0] = ofile;		*p++ = 0;	} else		p = ofile;	if(outfile == 0) {		outfile = p;		if(outfile){			p = utfrrune(outfile, '.');			if(p)				if(p[1] == 's' && p[2] == 0)					p[0] = 0;			p = utfrune(outfile, 0);			p[0] = '.';			p[1] = thechar;			p[2] = 0;		} else			outfile = "/dev/null";	}	p = getenv("INCLUDE");	if(p) {		setinclude(p);	} else {		if(systemtype(Plan9)) {			sprint(incfile,"/%s/include", thestring);			setinclude(strdup(incfile));		}	}	of = mycreat(outfile, 0664);	if(of < 0) {		yyerror("%ca: cannot create %s", thechar, outfile);		errorexit();	}	Binit(&obuf, of, OWRITE);	pass = 1;	pinit(file);	for(i=0; i<nDlist; i++)		dodefine(Dlist[i]);	yyparse();	if(nerrors) {		cclean();		return nerrors;	}	pass = 2;	outhist();	pinit(file);	for(i=0; i<nDlist; i++)		dodefine(Dlist[i]);	yyparse();	cclean();	return nerrors;}struct{	char	*name;	ushort	type;	ushort	value;} itab[] ={	"SP",		LSP,	D_AUTO,	"SB",		LSB,	D_EXTERN,	"FP",		LFP,	D_PARAM,	"PC",		LPC,	D_BRANCH,	"TOS",		LTOS,	D_TOS,	"CCR",		LTOS,	D_CCR,	"SR",		LTOS,	D_SR,	"SFC",		LTOS,	D_SFC,	"DFC",		LTOS,	D_DFC,	"CACR",		LTOS,	D_CACR,	"USP",		LTOS,	D_USP,	"VBR",		LTOS,	D_VBR,	"CAAR",		LTOS,	D_CAAR,	"MSP",		LTOS,	D_MSP,	"ISP",		LTOS,	D_ISP,	"FPCR",		LTOS,	D_FPCR,	"FPSR",		LTOS,	D_FPSR,	"FPIAR",	LTOS,	D_FPIAR,	"TC",		LTOS,	D_TC,	"ITT0",		LTOS,	D_ITT0,	"ITT1",		LTOS,	D_ITT1,	"DTT0",		LTOS,	D_DTT0,	"DTT1",		LTOS,	D_DTT1,	"MMUSR",	LTOS,	D_MMUSR,	"URP",		LTOS,	D_URP,	"SRP",		LTOS,	D_SRP,	"R0",		LDREG,	D_R0+0,	"R1",		LDREG,	D_R0+1,	"R2",		LDREG,	D_R0+2,	"R3",		LDREG,	D_R0+3,	"R4",		LDREG,	D_R0+4,	"R5",		LDREG,	D_R0+5,	"R6",		LDREG,	D_R0+6,	"R7",		LDREG,	D_R0+7,	"A0",		LAREG,	D_A0+0,	"A1",		LAREG,	D_A0+1,	"A2",		LAREG,	D_A0+2,	"A3",		LAREG,	D_A0+3,	"A4",		LAREG,	D_A0+4,	"A5",		LAREG,	D_A0+5,	"A6",		LAREG,	D_A0+6,	"A7",		LAREG,	D_A0+7,	"F0",		LFREG,	D_F0+0,	"F1",		LFREG,	D_F0+1,	"F2",		LFREG,	D_F0+2,	"F3",		LFREG,	D_F0+3,	"F4",		LFREG,	D_F0+4,	"F5",		LFREG,	D_F0+5,	"F6",		LFREG,	D_F0+6,	"F7",		LFREG,	D_F0+7,	"ABCD",		LTYPE1, AABCD,	"ADDB",		LTYPE1, AADDB,	"ADDL",		LTYPE1, AADDL,	"ADDW",		LTYPE1, AADDW,	"ADDXB",	LTYPE1, AADDXB,	"ADDXL",	LTYPE1, AADDXL,	"ADDXW",	LTYPE1, AADDXW,	"ADJSP",	LTYPE5, AADJSP,	"ANDB",		LTYPE1, AANDB,	"ANDL",		LTYPE1, AANDL,	"ANDW",		LTYPE1, AANDW,	"ASLB",		LTYPE1, AASLB,	"ASLL",		LTYPE1, AASLL,	"ASLW",		LTYPE1, AASLW,	"ASRB",		LTYPE1, AASRB,	"ASRL",		LTYPE1, AASRL,	"ASRW",		LTYPE1, AASRW,	"BCASE",	LTYPE7, ABCASE,	"BCC",		LTYPE6, ABCC,	"BCHG",		LTYPE1, ABCHG,	"BCLR",		LTYPE1, ABCLR,	"BCS",		LTYPE6, ABCS,	"BEQ",		LTYPE6, ABEQ,	"BFCHG",	LTYPEA, ABFCHG,	"BFCLR",	LTYPEA, ABFCLR,	"BFEXTS",	LTYPEA, ABFEXTS,	"BFEXTU",	LTYPEA, ABFEXTU,	"BFFFO",	LTYPEA, ABFFFO,	"BFINS",	LTYPEA, ABFINS,	"BFSET",	LTYPEA, ABFSET,	"BFTST",	LTYPEA, ABFTST,	"BGE",		LTYPE6, ABGE,	"BGT",		LTYPE6, ABGT,	"BHI",		LTYPE6, ABHI,	"BKPT",		LTYPE1, ABKPT,	"BLE",		LTYPE6, ABLE,	"BLS",		LTYPE6, ABLS,	"BLT",		LTYPE6, ABLT,	"BMI",		LTYPE6, ABMI,	"BNE",		LTYPE6, ABNE,	"BPL",		LTYPE6, ABPL,	"BRA",		LTYPE6, ABRA,	"BSET",		LTYPE1, ABSET,	"BSR",		LTYPE3, ABSR,	"BTST",		LTYPE1, ABTST,	"BVC",		LTYPE6, ABVC,	"BVS",		LTYPE6, ABVS,	"CALLM",	LTYPE1, ACALLM,	"CAS2B",	LTYPE1, ACAS2B,	"CAS2L",	LTYPE1, ACAS2L,	"CAS2W",	LTYPE1, ACAS2W,	"CASB",		LTYPE1, ACASB,	"CASEW",	LTYPE2, ACASEW,	"CASL",		LTYPE1, ACASL,	"CASW",		LTYPE1, ACASW,	"CHK2B",	LTYPE1, ACHK2B,	"CHK2L",	LTYPE1, ACHK2L,	"CHK2W",	LTYPE1, ACHK2W,	"CHKL",		LTYPE1, ACHKL,	"CHKW",		LTYPE1, ACHKW,	"CLRB",		LTYPE3, ACLRB,	"CLRL",		LTYPE3, ACLRL,	"CLRW",		LTYPE3, ACLRW,	"CMP2B",	LTYPE1, ACMP2B,	"CMP2L",	LTYPE1, ACMP2L,	"CMP2W",	LTYPE1, ACMP2W,	"CMPB",		LTYPE1, ACMPB,	"CMPL",		LTYPE1, ACMPL,	"CMPW",		LTYPE1, ACMPW,	"DATA",		LTYPE4, ADATA,	"DBCC",		LTYPE7, ADBCC,	"DBCS",		LTYPE7, ADBCS,	"DBEQ",		LTYPE7, ADBEQ,	"DBF",		LTYPE7, ADBF,	"DBGE",		LTYPE7, ADBGE,	"DBGT",		LTYPE7, ADBGT,	"DBHI",		LTYPE7, ADBHI,	"DBLE",		LTYPE7, ADBLE,	"DBLS",		LTYPE7, ADBLS,	"DBLT",		LTYPE7, ADBLT,	"DBMI",		LTYPE7, ADBMI,	"DBNE",		LTYPE7, ADBNE,	"DBPL",		LTYPE7, ADBPL,	"DBT",		LTYPE7, ADBT,	"DBVC",		LTYPE7, ADBVC,	"DBVS",		LTYPE7, ADBVS,	"DIVSL",	LTYPE1, ADIVSL,	"DIVSW",	LTYPE1, ADIVSW,	"DIVUL",	LTYPE1, ADIVUL,	"DIVUW",	LTYPE1, ADIVUW,	"END",		LTYPE2, AEND,	"EORB",		LTYPE1, AEORB,	"EORL",		LTYPE1, AEORL,	"EORW",		LTYPE1, AEORW,	"EXG",		LTYPE1, AEXG,	"EXTBL",	LTYPE3, AEXTBL,	"EXTBW",	LTYPE3, AEXTBW,	"EXTWL",	LTYPE3, AEXTWL,	"FABSB",	LTYPE1, AFABSB,	"FABSD",	LTYPE1, AFABSD,	"FABSF",	LTYPE1, AFABSF,	"FABSL",	LTYPE1, AFABSL,	"FABSW",	LTYPE1, AFABSW,	"FACOSB",	LTYPE1, AFACOSB,	"FACOSD",	LTYPE1, AFACOSD,	"FACOSF",	LTYPE1, AFACOSF,	"FACOSL",	LTYPE1, AFACOSL,	"FACOSW",	LTYPE1, AFACOSW,	"FADDB",	LTYPE1, AFADDB,	"FADDD",	LTYPE1, AFADDD,	"FADDF",	LTYPE1, AFADDF,	"FADDL",	LTYPE1, AFADDL,	"FADDW",	LTYPE1, AFADDW,	"FASINB",	LTYPE1, AFASINB,	"FASIND",	LTYPE1, AFASIND,	"FASINF",	LTYPE1, AFASINF,	"FASINL",	LTYPE1, AFASINL,	"FASINW",	LTYPE1, AFASINW,	"FATANB",	LTYPE1, AFATANB,	"FATAND",	LTYPE1, AFATAND,	"FATANF",	LTYPE1, AFATANF,	"FATANHB",	LTYPE1, AFATANHB,	"FATANHD",	LTYPE1, AFATANHD,	"FATANHF",	LTYPE1, AFATANHF,	"FATANHL",	LTYPE1, AFATANHL,	"FATANHW",	LTYPE1, AFATANHW,	"FATANL",	LTYPE1, AFATANL,	"FATANW",	LTYPE1, AFATANW,	"FBEQ",		LTYPE6, AFBEQ,	"FBF",		LTYPE6, AFBF,	"FBGE",		LTYPE6, AFBGE,	"FBGT",		LTYPE6, AFBGT,	"FBLE",		LTYPE6, AFBLE,	"FBLT",		LTYPE6, AFBLT,	"FBNE",		LTYPE6, AFBNE,	"FBT",		LTYPE6, AFBT,	"FCMPB",	LTYPE1, AFCMPB,	"FCMPD",	LTYPE1, AFCMPD,	"FCMPF",	LTYPE1, AFCMPF,	"FCMPL",	LTYPE1, AFCMPL,	"FCMPW",	LTYPE1, AFCMPW,	"FCOSB",	LTYPE1, AFCOSB,	"FCOSD",	LTYPE1, AFCOSD,	"FCOSF",	LTYPE1, AFCOSF,	"FCOSHB",	LTYPE1, AFCOSHB,	"FCOSHD",	LTYPE1, AFCOSHD,	"FCOSHF",	LTYPE1, AFCOSHF,	"FCOSHL",	LTYPE1, AFCOSHL,	"FCOSHW",	LTYPE1, AFCOSHW,	"FCOSL",	LTYPE1, AFCOSL,	"FCOSW",	LTYPE1, AFCOSW,	"FDBEQ",	LTYPE7, AFDBEQ,	"FDBF",		LTYPE7, AFDBF,	"FDBGE",	LTYPE7, AFDBGE,	"FDBGT",	LTYPE7, AFDBGT,	"FDBLE",	LTYPE7, AFDBLE,	"FDBLT",	LTYPE7, AFDBLT,	"FDBNE",	LTYPE7, AFDBNE,	"FDBT",		LTYPE7, AFDBT,	"FDIVB",	LTYPE1, AFDIVB,	"FDIVD",	LTYPE1, AFDIVD,	"FDIVF",	LTYPE1, AFDIVF,	"FDIVL",	LTYPE1, AFDIVL,	"FDIVW",	LTYPE1, AFDIVW,	"FETOXB",	LTYPE1, AFETOXB,	"FETOXD",	LTYPE1, AFETOXD,	"FETOXF",	LTYPE1, AFETOXF,	"FETOXL",	LTYPE1, AFETOXL,	"FETOXM1B",	LTYPE1, AFETOXM1B,	"FETOXM1D",	LTYPE1, AFETOXM1D,	"FETOXM1F",	LTYPE1, AFETOXM1F,	"FETOXM1L",	LTYPE1, AFETOXM1L,	"FETOXM1W",	LTYPE1, AFETOXM1W,	"FETOXW",	LTYPE1, AFETOXW,	"FGETEXPB",	LTYPE1, AFGETEXPB,	"FGETEXPD",	LTYPE1, AFGETEXPD,	"FGETEXPF",	LTYPE1, AFGETEXPF,	"FGETEXPL",	LTYPE1, AFGETEXPL,	"FGETEXPW",	LTYPE1, AFGETEXPW,	"FGETMANB",	LTYPE1, AFGETMANB,	"FGETMAND",	LTYPE1, AFGETMAND,	"FGETMANF",	LTYPE1, AFGETMANF,	"FGETMANL",	LTYPE1, AFGETMANL,	"FGETMANW",	LTYPE1, AFGETMANW,	"FINTB",	LTYPE1, AFINTB,	"FINTD",	LTYPE1, AFINTD,	"FINTF",	LTYPE1, AFINTF,	"FINTL",	LTYPE1, AFINTL,	"FINTRZB",	LTYPE1, AFINTRZB,	"FINTRZD",	LTYPE1, AFINTRZD,	"FINTRZF",	LTYPE1, AFINTRZF,	"FINTRZL",	LTYPE1, AFINTRZL,	"FINTRZW",	LTYPE1, AFINTRZW,	"FINTW",	LTYPE1, AFINTW,	"FLOG10B",	LTYPE1, AFLOG10B,	"FLOG10D",	LTYPE1, AFLOG10D,	"FLOG10F",	LTYPE1, AFLOG10F,	"FLOG10L",	LTYPE1, AFLOG10L,	"FLOG10W",	LTYPE1, AFLOG10W,	"FLOG2B",	LTYPE1, AFLOG2B,	"FLOG2D",	LTYPE1, AFLOG2D,	"FLOG2F",	LTYPE1, AFLOG2F,	"FLOG2L",	LTYPE1, AFLOG2L,	"FLOG2W",	LTYPE1, AFLOG2W,	"FLOGNB",	LTYPE1, AFLOGNB,	"FLOGND",	LTYPE1, AFLOGND,	"FLOGNF",	LTYPE1, AFLOGNF,	"FLOGNL",	LTYPE1, AFLOGNL,	"FLOGNP1B",	LTYPE1, AFLOGNP1B,	"FLOGNP1D",	LTYPE1, AFLOGNP1D,	"FLOGNP1F",	LTYPE1, AFLOGNP1F,	"FLOGNP1L",	LTYPE1, AFLOGNP1L,	"FLOGNP1W",	LTYPE1, AFLOGNP1W,	"FLOGNW",	LTYPE1, AFLOGNW,	"FMODB",	LTYPE1, AFMODB,	"FMODD",	LTYPE1, AFMODD,	"FMODF",	LTYPE1, AFMODF,	"FMODL",	LTYPE1, AFMODL,	"FMODW",	LTYPE1, AFMODW,	"FMOVEB",	LTYPE1, AFMOVEB,	"FMOVED",	LTYPE1, AFMOVED,	"FMOVEF",	LTYPE1, AFMOVEF,	"FMOVEL",	LTYPE1, AFMOVEL,	"FMOVEW",	LTYPE1, AFMOVEW,	"FMULB",	LTYPE1, AFMULB,	"FMULD",	LTYPE1, AFMULD,	"FMULF",	LTYPE1, AFMULF,	"FMULL",	LTYPE1, AFMULL,	"FMULW",	LTYPE1, AFMULW,	"FNEGB",	LTYPE8, AFNEGB,	"FNEGD",	LTYPE8, AFNEGD,	"FNEGF",	LTYPE8, AFNEGF,	"FNEGL",	LTYPE8, AFNEGL,	"FNEGW",	LTYPE8, AFNEGW,	"FREMB",	LTYPE1, AFREMB,	"FREMD",	LTYPE1, AFREMD,	"FREMF",	LTYPE1, AFREMF,	"FREML",	LTYPE1, AFREML,	"FREMW",	LTYPE1, AFREMW,	"FSCALEB",	LTYPE1, AFSCALEB,	"FSCALED",	LTYPE1, AFSCALED,	"FSCALEF",	LTYPE1, AFSCALEF,	"FSCALEL",	LTYPE1, AFSCALEL,	"FSCALEW",	LTYPE1, AFSCALEW,	"FSEQ",		LTYPE1, AFSEQ,	"FSF",		LTYPE1, AFSF,	"FSGE",		LTYPE1, AFSGE,	"FSGT",		LTYPE1, AFSGT,

⌨️ 快捷键说明

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