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

📄 asexpr.h

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 H
字号:
/* *	Copyright (c) 1982 Regents of the University of California *	@(#)asexpr.h 4.4 6/9/83 *//************************************************************************ *									* *			Modification History				* * * 001  Tanya Klinchina, 20-Nov-1989 *      Added support for vector instructions. * ************************************************************************//* *	Definitions to parse tokens */#define ERROR(string)		yyerror(string); goto errorfix#define peekahead (*tokptr)#define shift 			val = yylex()#define advance 	shift#define shiftover(token)	if (val != token) { \					shiftoerror(token); \					goto errorfix; \				} \				shift#define advanceover 	shiftover/* *	To speed up the expression processing, we class the input tokens *	into various sets. * *	We don't call the recursive descent expression analyzer if we can *	determine by looking at the next token after the first token in *	an expression that the expression is simple (name, integer or floating *	point value).  Expressions with operators are parsed using the recursive *	descent method. *//* *	Functional forwards for expression utility routines */struct	exp	*combine();struct	exp	*boolterm();struct	exp	*term();struct	exp	*factor();struct	exp	*yukkyexpr();/* *	The set definitions */extern	char	tokensets[(LASTTOKEN) - (FIRSTTOKEN) + 1];#define	LINSTBEGIN	01	/*SEMI, NL, NAME*/#define	EBEGOPS		02	/*LP, MINUS, TILDE*/#define	YUKKYEXPRBEG	04	/*NAME, INSTn, INST0, REG, BFINT*/#define	SAFEEXPRBEG	010	/*INT, FLTNUM*/#define	ADDOPS		020	/*PLUS, MINUS*/#define	BOOLOPS		040	/*IOR, XOR, AND*/#define	MULOPS		0100	/*LSH, RSH, MUL, DIV, TILDE*/#define	INTOKSET(val, set)	(tokensets[(val)] & (set) )inttoktype	exprparse();inttoktype	funnyreg();inttoktype	yylex();#define expr(xp, val) { \	if ( (!INTOKSET(val, EBEGOPS)) && (!INTOKSET(peekahead, ADDOPS+BOOLOPS+MULOPS))) { \		if (INTOKSET(val, YUKKYEXPRBEG)) xp = yukkyexpr(val, yylval); \		else xp = (struct exp *) yylval; \		shift; \	} else { \		val = exprparse(val, ptrloc1xp); \		xp = loc1xp; \	} \    }/* *	Registers can be either of the form r0...pc, or *	of the form % <expression> *	NOTE:	Reizers documentation on the assembler says that it *	can be of the form r0 + <expression>.. That's not true. * *	NOTE:	Reizer's yacc grammar would seem to allow an expression *	to be: (This is undocumented) *		a)	a register *		b)	an Instruction (INSTn or INST0) */#define findreg(regno) \	if (val == REG) { \		regno = yylval; \		shift; \	} else \	if (val == REGOP) { \		shift;	/*over the REGOP*/ \		val = funnyreg(val, ptrregno); \	} \	else { ERROR ("register expected"); }#define findvreg(regno) \	if (val == VREG) { \		regno = yylval; \		shift; \	} \	else { ERROR ("vector register expected"); }

⌨️ 快捷键说明

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