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

📄 asscanl.h

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 H
字号:
/* *	Copyright (c) 1982 Regents of the University of California *	@(#)asscanl.h 4.5 6/30/83 *//* *	This file contains definitions local to the files implementing *	the character scanner and the token buffer managers. *	It is not intended to be shared with any other parts of the *	assembler. *	The file ``asscan.h'' is shared with other parts of the assembler *//************************************************************************ *									* *			Modification History				* * * 001  Tanya Klinchina, 20-Nov-1989 *      Added support for vector instructions. * ************************************************************************/#include <stdio.h>#include "as.h"#include "asscan.h"#define EOFCHAR	(-1)/* *	The table of possible uses for each character to test set inclusion. */#define	HEXFLAG		01		/* 'x' or 'X' */#define	HEXLDIGIT	02		/* 'a' .. 'f' */#define	HEXUDIGIT	04		/* 'A' .. 'F' */#define	ALPHA		010		/* 'A' .. 'Z', 'a' .. 'z', '_'*/#define	DIGIT		020		/* '0' .. '9' */#define	FLOATEXP	040		/* 'd' 'e' 'D' 'E' 'g' 'h' 'G' 'H' */#define	SIGN		0100		/* '+' .. '-'*/#define	REGDIGIT	0200		/* '0' .. '5' */#define	SZSPECBEGIN	0400		/* 'b', 'B', 'l', 'L', 'w', 'W' */#define	POINT		01000		/* '.' */#define	SPACE		02000		/* '\t' or ' ' */#define	BSESCAPE	04000		/* bnrtf */#define	STRESCAPE	010000		/* '"', '\\', '\n' */#define	OCTDIGIT	020000		/* '0' .. '7' */#define	FLOATFLAG	040000		/* 'd', 'D', 'f', 'F' */#define MODIFIER        0100000         /* 'm' 'M','u','U','v','V','0','1' */#define	INCHARSET(val, kind) (charsets[val] & (kind) )/* *	We use our own version of getchar/ungetc to get *	some speed improvement */extern	char	*Ginbufptr;extern	int	Ginbufcnt;#define	REGTOMEMBUF	Ginbufptr = inbufptr, Ginbufcnt = inbufcnt#define	MEMTOREGBUF	inbufptr = Ginbufptr, inbufcnt = Ginbufcnt#undef getchar#define	getchar() \	(inbufcnt-- > 0 ? (*inbufptr++) : \		(fillinbuffer(), \		MEMTOREGBUF, \		inbufptr[-1]))#undef ungetc#define ungetc(ch) \	(++inbufcnt, *--inbufptr = ch)/* *	Variables and definitions to manage the token buffering. *	We scan (lexically analyze) a large number of tokens, and *	then parse all of the tokens in the scan buffer. *	This reduces procedure call overhead when the parser *	demands a token, allows for an efficient reread during *	the second pass, and confuses the line number reporting *	for errors encountered in the scanner and in the parser. */#define TOKDALLOP	8struct	tokbufdesc *bufstart;	/*where the buffer list begins*/struct	tokbufdesc *buftail;	/*last one on the list*/struct	tokbufdesc *emptybuf;	/*the one being filled*//* *	If we are using VM, during the second pass we reclaim the used *	token buffers for saving the relocation information */struct	tokbufdesc *tok_free;	/* free pool */struct	tokbufdesc *tok_temp;	/* temporary for doing list manipulation *//* *	Other token buffer managers */int	bufno;			/*which buffer number: 0,1 for tmp file*/struct 	tokbufdesc tokbuf[2];	/*our initial increment of buffers*/ptrall	tokptr;			/*where the current token comes from*/ptrall	tokub;			/*the last token in the current token buffer*//* *	as does not use fread and fwrite for the token buffering. *	The token buffers are integrals of BUFSIZ *	at all times, so we use direct read and write. *	fread and fwrite in stdio are HORRENDOUSLY inefficient, *	as they use putchar for each character, nested two deep in loops. */#define writeTEST(pointer, size, nelements, ioptr) \	write(ioptr->_file, pointer, nelements * size) != nelements * size#define readTEST(pointer, size, nelements, ioptr) \	read(ioptr->_file, pointer, nelements * size) != nelements * size#define bskiplg(from, length) \	*(lgtype *)from = length; \	(bytetoktype *)from += sizeof(lgtype) + length#define bskipfromto(from, to) \	*(lgtype *)from = (bytetoktype *)to - (bytetoktype *)from - sizeof(lgtype); \	(bytetoktype *)from += sizeof (lgtype) + (bytetoktype *)to - (bytetoktype *)from#define eatskiplg(from) \	(bytetoktype *)from += sizeof(lgtype) + *(lgtype *)from#ifdef DEBUG	ptrall	firsttoken;#endif /* DEBUG *//* *	The following three variables are the slots for global *	communication with the parser. *	They are the semantic values associated with a particular token. *	The token itself is the return value from yylex() */int	yylval;			/* normal semantic value */Bignum	yybignum;		/* a big number */struct	Opcode	yyopcode;	/* a structure opcode */int	newfflag;char	*newfname;int	scanlineno;		/*the scanner's linenumber*//* *	Definitions for sets of characters */readonly short charsets[];readonly short type[];

⌨️ 快捷键说明

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