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

📄 nlist.c

📁 lcc,一个可变目标c语言编译器的源码
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "cpp.h"extern	int getopt(int, char *const *, const char *);extern	char	*optarg;extern	int	optind;extern	int	verbose;extern	int	Cplusplus;Nlist	*kwdefined;#define	NLSIZE	128static Nlist	*nlist[NLSIZE];struct	kwtab {	char	*kw;	int	val;	int	flag;} kwtab[] = {	"if",		KIF,		ISKW,	"ifdef",	KIFDEF,		ISKW,	"ifndef",	KIFNDEF,	ISKW,	"elif",		KELIF,		ISKW,	"else",		KELSE,		ISKW,	"endif",	KENDIF,		ISKW,	"include",	KINCLUDE,	ISKW,	"define",	KDEFINE,	ISKW,	"undef",	KUNDEF,		ISKW,	"line",		KLINE,		ISKW,	"error",	KERROR,		ISKW,	"pragma",	KPRAGMA,	ISKW,	"eval",		KEVAL,		ISKW,	"defined",	KDEFINED,	ISDEFINED+ISUNCHANGE,	"ident",	KPRAGMA,	ISKW,	/* treat like pragma (ignored) */	"__LINE__",	KLINENO,	ISMAC+ISUNCHANGE,	"__FILE__",	KFILE,		ISMAC+ISUNCHANGE,	"__DATE__",	KDATE,		ISMAC+ISUNCHANGE,	"__TIME__",	KTIME,		ISMAC+ISUNCHANGE,	"__STDC__",	KSTDC,		ISUNCHANGE,	NULL};unsigned long	namebit[077+1];Nlist 	*np;voidsetup_kwtab(void){	struct kwtab *kp;	Nlist *np;	Token t;	static Token deftoken[1] = {{ NAME, 0, 0, 0, 7, (uchar*)"defined" }};	static Tokenrow deftr = { deftoken, deftoken, deftoken+1, 1 };	for (kp=kwtab; kp->kw; kp++) {		t.t = (uchar*)kp->kw;		t.len = strlen(kp->kw);		np = lookup(&t, 1);		np->flag = kp->flag;		np->val = kp->val;		if (np->val == KDEFINED) {			kwdefined = np;			np->val = NAME;			np->vp = &deftr;			np->ap = 0;		}	}}Nlist *lookup(Token *tp, int install){	unsigned int h;	Nlist *np;	uchar *cp, *cpe;	h = 0;	for (cp=tp->t, cpe=cp+tp->len; cp<cpe; )		h += *cp++;	h %= NLSIZE;	np = nlist[h];	while (np) {		if (*tp->t==*np->name && tp->len==np->len 		 && strncmp((char*)tp->t, (char*)np->name, tp->len)==0)			return np;		np = np->next;	}	if (install) {		np = new(Nlist);		np->vp = NULL;		np->ap = NULL;		np->flag = 0;		np->val = 0;		np->len = tp->len;		np->name = newstring(tp->t, tp->len, 0);		np->next = nlist[h];		nlist[h] = np;		quickset(tp->t[0], tp->len>1? tp->t[1]:0);		return np;	}	return NULL;}

⌨️ 快捷键说明

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