亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? parser.c

?? OXCC is a multipass, interpreting C compiler with several language extensions. It generates an Archi
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* parser.c -- derived from the `LALR' parser written by Paul Mann */

#define CLASS Parser

#include <oxbow.h>

object CLASS;

instanceVars {
	PG pg;
};
#define HOWBIG 1
#define DEBUG 1

#if HOWBIG
static int maxXX_parse;
static int maxSS_parse;
static int maxSS_lex;
static int maxNS_parse;
static int maxLS_parse;
static int maxRS_parse;
#endif


/* Built in standard actions */
static void nullaction();
static void classify();
static void require();
static void doline();
static void dyntoken();

static void LoadParserPointers();

/* some imported functions */
char *strchr();
char *strrchr();
int atol();
int _strcpy(void *dst, const void *src);
void *strcpy(void *dst, const void *src);
void *strcat(void *dst, const void *src);
void *memcpy(void *dst, const void *src, int len);


/* All chunk types have the same number of bytes */

#define ASTCHUNK (pg->astchunk)
#define SYMBOLCHUNK (pg->symbolchunk)
#define TEXTCHUNK (pg->textchunk)
#define ASTSIZE (pg->astsize)


typedef struct _key
{
	unsigned long key;
	unsigned long hv;
} KEY, *KEYP;

typedef struct _psym
{/* Fits in a minimal sized AST node */
	unsigned short dat[4];		/* 8 bytes */
	KEY cat;					/* 8 bytes */
	struct _psym *next;			/* 4 bytes */
} Psym, *PsymP;

typedef struct _pbuf
{/* parser symbol table struct */
	int	size;
	void *lastbin;	/* for DelLast */
	int headbin;	/* for seq access */
	PsymP headptr;	/* ditto */
	PG *wpg;
	PsymP bins[0];
} *PbufP;

void *
NewParserSymTable(PG *pg, int size)
{
PbufP buf = callocC(pg->category, 1, size*sizeof(PsymP) + sizeof(struct _pbuf));
	buf->size = size;
	buf->wpg = pg;
	return buf;
}

cmethod vobject
New(object self, char *language, int astsize)
{
void *lfile;
char lodname[200];
char filename[40];
char *cp;
PTABLE *pp;
LTABLE *lp;
long *symbase;
char *symptr;
char buf[100];
Item item;
int i;
object instance;
PG *pg;
int oldload = 0;
AstP fnode;

	if(IsaClass(self))
		instance  = cSuper(gNew)(self);
	else {
		instance = self;
	}
	pg = (PG *)ivPtr(instance);
	pg->category = NewMallocCategory();

	strcpy(pg->language, language);
	strcpy(filename, language);
	strcat(filename, ".lod");

	if((cf_find_file("oxlib.cff", lodname)))
	{/* The archive file */
		strcat(lodname, "/language/");
		strcat(lodname, filename);
	} else {
		pg->errors = 1;
		return instance;
	}
	if(cfqget(MEMTEMP, filename, strlen(filename), &item, 8) == FOUND)
	{/* Parser tables for this language have been loaded earlier */
		pg->lod_table = item.a1;
		oldload = 1;
	}
	else
	{/* Load the parser tables for this language */
		if((lfile = cfopen(lodname, F_STAT, NULL)))
		{
		int size;
			size = cfseek(lfile, 0, S_END);
			pg->lod_table = malloc(size);
			cfseek(lfile, 0, S_SET);
			cfread(lfile, pg->lod_table, size);
			cfclose(lfile);
			item.item = 0;
			item.a1 = pg->lod_table;
			cfinsert(MEMTEMP, filename, strlen(filename), &item);
		}
		else {
			pg->errors = 2;
			return instance;
		}
	}

	/* using the size of the caller's AST node, compute suitable chunks */

	if(astsize < sizeof(AST_NODE))
		astsize = sizeof(AST_NODE);

	if(astsize & 3)
		astsize += 4-(astsize&3);

	ASTCHUNK = 8184/astsize;
	TEXTCHUNK = ASTCHUNK * astsize;
	SYMBOLCHUNK = TEXTCHUNK / 4;
	ASTSIZE = astsize;
	
	/* Parser table init */
	pg->ptab = callocC(pg->category, 1, sizeof(PTABLE));	
	pp = pg->ptab;
	pp->pg = pg;
	LoadParserPointers(pp, pg->lod_table, 1);
	pp->linksize = SYMBOLCHUNK;
	pp->link = callocC(pg->category, 1, SYMBOLCHUNK*sizeof(void*));


	/* Lexer table init */
	pg->ltab = callocC(pg->category, 1, sizeof(LTABLE));
	lp = pg->ltab;
	lp->pg = pg;
	LoadParserPointers(lp, (LODTABLE *)(((char *)pg->lod_table) + pg->lod_table->next), 0);

	/* Action pointers, applies to both parser and lexer */
	pg->n_actions = lp->n_actions;	/* lexer has the best action count */
	pg->ACTIONS = (PACTIONS)lp->ACTIONS;
	pg->ACTIONSTRINGS = lp->ACTIONSTRINGS;

	/* Allocate the initial ast space */
	pg->pat.free = callocC(pg->category, 1, ASTCHUNK*astsize);	
	pg->pat.freecnt = pg->pat.cnt = ASTCHUNK;
	fnode = pg->pat.free;
	for(i = 0; i < ASTCHUNK-1; ++i)
	{
		fnode->down = (AstP)(((char*)fnode)+ASTSIZE);
		fnode = fnode->down;
	}

	/* Allocate and initialize the parser symbol table */
	PARSERSYMBOLS = callocC(pg->category, 1, SYMBOLCHUNK*sizeof(PARSER_SYMBOL));
	pg->symhandle = NewParserSymTable(pg, 2003);

	/* Allocate and initialize the first text accumulation chunk */
	pg->chunkbase = callocC(pg->category, 1, TEXTCHUNK);
	pg->chunkend = pg->chunkbase+TEXTCHUNK-1;
	pg->symbase = pg->chunkbase+4;
	pg->symend = pg->symbase;

	/* Enter all the terminal symbols of the grammar */
	symbase = pp->G_symbol;
	symptr = (char *)symbase;

	for(i = 0; i < pp->n_terms; ++i)
	{
		NewParserSymbol(pg, symptr+symbase[i]);
	}

	/* Set the values for the automatic node ids */
	{
	int	symnum = -1;
	int symval;
	int subsym = 0;
	char *cp = NULL;
		for(i = 0; i < pp->n_rules; ++i)
		{
		long *vp;	/* assume callers node ids are sizeof(long) */
			if(pp->PL[i] & PL_MAKENODE)
			{
				if(pp->Head[i] != symnum)
				{
					subsym = 0;
					symnum = pp->Head[i];
					cp = symptr + symbase[symnum];
				}
				/* e.g. _cInitDeclarator_0 */
				cfsprintf(buf, "_%s%s_%d", pg->language, cp, subsym);

				/* use dynamic linker here */
				symval = (symnum<<6) | subsym;
				if((vp = oxlink_find_bare_symb(buf)) != NULL)
				{/* vp is now the address of the symbol in caller memory */
					*vp = symval;  /* caller defined a global symbol he wants */
				}
				++subsym;
			}
		}
	}
	/* Set up the function pointers for actions */
	if(!oldload)
	{/* THIS WOULD WORK WITHOUT TESTING FOR 'oldload', just saving time */
	PACTIONS pa = pg->ACTIONS;
	char *cp;
	int mask;
	int j;

		for(i = 0; i < pg->n_actions; ++i, ++pa)
		{
		/* 
			pa->func is initially set to an offset into ACTIONSTRINGS 
					convert it into a function pointer
		*/
			cp = pg->ACTIONSTRINGS + (int)pa->func; /* funcname is first entry */
			if(!strcmp(cp, "classify"))
				pa->func = classify;
			else if(!strcmp(cp, "require"))
				pa->func = require;
			else if(!strcmp(cp, "doline"))
				pa->func = doline;
			else if(!strcmp(cp, "dyntoken"))
				pa->func = dyntoken;
			else
			{/* Concoct the real user action name and find the function */
				/* e.g. _dosomething_ada_ */
				cfsprintf(buf, "_%s_%s_", cp, pg->language);
				if((pa->func = oxlink_find_bare_func(buf)) == NULL)
				{/* Not already in core */
					if((pa->func = oxlink_load_bare_symb(buf, 1)) == NULL)
					{/* And can't load it from the archive, punt to nothing */
						pa->func = nullaction;
					}
				}
			}
			/* 
				Set up the args:
				arg[0] contains a bitmask in the high order 16 bits
					and argcnt in the low 16 bits 
			*/
			mask = (pa->args[0] & 0xffff0000) >> 16;
			pa->args[0] &= 0x0000ffff;
			for(j = 1; j <= pa->args[0]; ++j)
			{
				if(mask & 1)
				{/* This arg is really a pointer to a string */
					pa->args[j] += (int)pg->ACTIONSTRINGS;
				}
				mask >>= 1;
			}
		}
	}
	/* Set a few constants */
	pg->parsecnt = 2;
	pg->ROOT = 0;
	pg->root = 0;
	pg->line_numb = 1;
	pg->line_char = 0;
#if HOWBIG
	maxXX_parse = 
		maxSS_parse =
			maxSS_lex =
				maxNS_parse =
					maxLS_parse = 
						maxRS_parse = 0;
#endif
	return instance;
}
imethod void
Dispose(object self)
{
PG *pg = (PG *)ivPtr(self);

	freecat(pg->category);
	super(gDispose)(self);
}


static unsigned short bitlist[16] = {
			0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
			0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000
	};
#define BITSET(a,b,c) ( a[b+(c>>4)] & bitlist[c&0xf] )

static int
do_parse (PTABLE *ptab)
{
short i, x;
short *r;
short rule;
unsigned base;
short state;
int token;
short stacktop, *SS;
PG *pg;
int rulesize;
int debug;
int xx;
AstP *link;
int lexindx;

/* NESTED SUBROUTINE Make AST node and/or call semantic action. */

static void attach ()
{
int k, i, j;
AstP np, lp, p;
int rulesize;
AstP newnode;
int savxx;
short *pxx;

	rulesize = ptab->PL[rule] & 0x000f;
	if(rulesize == 15)
		rulesize = -1;

	ptab->NS -= rulesize;         /* Reduce the stack.        */
	ptab->LS -= rulesize;

	for (k=0,np=0,i=rulesize; i >= 0; i--) /* Look at each tail spot.  */
	{
		if (ptab->NS[i])    /* If node pointer there.   */
		{
		int xxx;
			k++;							/* Active node marker.  */
			p = ptab->NS[i];				/* Last node in chain */
			xxx = ptab->LS[i];

			if (np)							/* If one waiting.          */
			{
				lp = link[xxx];
				lp->down = np;				/* Connect last to next.    */
				link[xxx] = link[savxx];	/* Move link */
#if DEBUG
if(debug)cfprintf("Parse: Set DOWN at %x to %x\n", lp, np);
#endif
			}
			np = p;							/* Get this ones address.    */
			savxx = xxx;
		}
	}
	if (ptab->PL [rule] & PL_MAKENODE)
	{
	  newnode = NewAstNode(pg,(ptab->Head[rule]<<6)|(rule-ptab->rBase[rule]),0);
		if(!pg->ROOT)
			pg->ROOT = newnode;

		if (k > 0)
		{/* Make branch */
			newnode->right = np;            /* Pointer to child.        */
			newnode->fileno = (unsigned char)pg->line_file; /* current file */
			newnode->colno = (unsigned char)pg->line_char; /* column of text */
			newnode->lineno = (unsigned short)pg->line_numb;/* Line number. */
			if (np == pg->ROOT) {
				pg->ROOT = newnode; /* Root points to parent.   */
#if DEBUG
if(debug)cfprintf("Parse: Reset ROOT to %x\n", newnode);
#endif
			}
#if DEBUG
if(debug)cfprintf("Parse: New Branch at %x %s_%d  right=%x down=%x\n",
	newnode,GetH_symbol(pg, ptab->Head[rule]),rule-ptab->rBase[rule],np, newnode->down);
#endif
		}
		else
		{/* Make leaf */
		int lookback = (pg->LSP-lexindx)&3;
			newnode->Tindx = pg->L_stack[lookback+1];	/* Terminal type */
			newnode->symb = pg->L_stack[lookback];		/* Symnum */
			newnode->fileno = (unsigned char)pg->line_file; /* current file */
			newnode->colno = (unsigned char)pg->line_char; /* column of text */
			newnode->lineno = (unsigned short)pg->line_numb;/* Line number. */
#if DEBUG
if(debug)cfprintf("Parse: New Leaf at %x %s_%d right=%x down=%x\n", 
	newnode,GetH_symbol(pg, ptab->Head[rule]),rule-ptab->rBase[rule], newnode->right, newnode->down);
#endif
		}

		/* Prevent the unconstrained growth of the link array */
		for(pxx = ptab->LStop, xx = 0; pxx <= ptab->LS; ++pxx)
		{
			if(*pxx > xx)
				xx = *pxx;
		}

		if(++xx == ptab->linksize)
		{/* Extend the link array */
			ptab->linksize += SYMBOLCHUNK;
			link = reallocC(pg->category, link, ptab->linksize*sizeof(int));
			ptab->link = link;
		}
		np = newnode; 
		link[xx] = np;
	}
	*(ptab->NS) = np;
	*(ptab->LS) = xx;

#if HOWBIG
	if(xx > maxXX_parse)
		maxXX_parse = xx;
#endif

/* Call actions for a rule */
	if (ptab->PL [rule] & PL_ACTION)        /* Call action?             */
	{
	PACTIONS ap = &pg->ACTIONS[(ptab->PL[rule]>>7)&511];
#if DEBUG
if(debug)cfprintf("Parse: Call Action for rule:%d\n", rule);
#endif
		ptab->node = np;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美美女一区二区在线观看| 一区二区三区中文字幕精品精品| 国产精品无码永久免费888| 一区二区三区小说| 麻豆91在线播放| 成人精品国产福利| 精品国产亚洲一区二区三区在线观看 | 性久久久久久久久久久久| 国产成人免费视频网站| 91精品在线观看入口| 亚洲婷婷国产精品电影人久久| 激情六月婷婷久久| 91麻豆精品国产91久久久久| 亚洲一区二区偷拍精品| 成人性生交大合| 欧美精品一区视频| 人人精品人人爱| 91麻豆精品国产91久久久更新时间 | 久久五月婷婷丁香社区| 日韩av电影天堂| 欧美视频一二三区| 亚洲综合自拍偷拍| 99国产精品久久久久久久久久 | 亚洲成av人片在线| 91视频91自| 亚洲欧洲av色图| 波多野结衣在线一区| 久久精品在线免费观看| 国产综合色在线视频区| 精品久久久久久久一区二区蜜臀| 日日嗨av一区二区三区四区| 欧美日韩电影一区| 日韩在线一区二区| 欧美日韩成人综合| 亚洲卡通动漫在线| 91免费国产在线观看| 亚洲激情在线激情| 欧美视频一区二区三区四区| 亚洲综合网站在线观看| 欧美欧美午夜aⅴ在线观看| 亚洲成av人片在线| 欧美www视频| 国产精品99久久久久久久女警| 久久精品视频网| 盗摄精品av一区二区三区| 国产精品久久久久影院老司| 色综合久久久久久久| 一区二区三区日韩欧美精品| 欧美视频你懂的| 丝袜脚交一区二区| 2019国产精品| 91视频在线看| 日日嗨av一区二区三区四区| 欧美精品一区二区三区蜜桃视频| 国产精品亚洲成人| 亚洲麻豆国产自偷在线| 欧美日韩色综合| 国产资源在线一区| 亚洲黄网站在线观看| 欧美一区二区在线不卡| 丁香亚洲综合激情啪啪综合| 亚洲欧美偷拍卡通变态| 欧美成人欧美edvon| 成人看片黄a免费看在线| 一区二区在线看| 欧美一区二区女人| 91亚洲精品久久久蜜桃网站 | 波多野结衣欧美| 午夜电影一区二区| 国产日韩欧美不卡在线| 色国产精品一区在线观看| 青青草原综合久久大伊人精品优势 | 国产精品乱码人人做人人爱| 欧美中文字幕不卡| 国产传媒久久文化传媒| 亚洲一区二区三区中文字幕在线| 2020国产精品| 欧美精品少妇一区二区三区| 成人午夜伦理影院| 三级一区在线视频先锋| 中文字幕日本乱码精品影院| 91精品国产综合久久香蕉的特点| 成人激情动漫在线观看| 日本 国产 欧美色综合| 亚洲免费电影在线| 国产亚洲欧美日韩日本| 日韩三级中文字幕| 91久久精品一区二区| 国产成人在线视频网址| 亚洲h精品动漫在线观看| 国产精品二区一区二区aⅴ污介绍| 欧美一区二区三区四区五区| 色噜噜久久综合| 不卡电影一区二区三区| 国产高清成人在线| 久久精品免费看| 视频在线在亚洲| 中文字幕视频一区二区三区久| 精品久久久网站| 日韩欧美电影在线| 91精品婷婷国产综合久久| 日本韩国视频一区二区| 99久久精品国产麻豆演员表| 国产69精品久久久久777| 国产中文字幕一区| 免费看日韩精品| 日本伊人精品一区二区三区观看方式 | 婷婷六月综合网| 一区二区不卡在线视频 午夜欧美不卡在| 国产偷国产偷精品高清尤物 | 欧美一区二区三区四区在线观看| 色欲综合视频天天天| 91亚洲精品久久久蜜桃网站 | 国产电影精品久久禁18| 国产一区二区伦理片| 精品一区二区免费| 国产精品亚洲午夜一区二区三区 | 日产国产欧美视频一区精品 | 亚洲资源中文字幕| 亚洲韩国一区二区三区| 亚洲高清久久久| 亚洲一区二区三区视频在线| 五月天视频一区| 日本sm残虐另类| 激情文学综合插| 国产一区二三区好的| 国产精品99精品久久免费| 成人av网站在线观看免费| 99久久国产综合精品色伊| 91女神在线视频| 欧美亚洲日本一区| 777奇米四色成人影色区| 精品欧美乱码久久久久久| 久久伊人中文字幕| 国产精品美女久久久久久久| 亚洲理论在线观看| 日本不卡的三区四区五区| 国产老妇另类xxxxx| 白白色亚洲国产精品| 欧美无乱码久久久免费午夜一区| 制服丝袜亚洲播放| 精品日韩成人av| 国产精品久久久久久福利一牛影视 | 麻豆国产精品视频| 国产ts人妖一区二区| 在线观看一区二区视频| 日韩欧美色综合网站| 国产欧美精品日韩区二区麻豆天美| 国产精品国产a| 日本视频中文字幕一区二区三区| 国精产品一区一区三区mba桃花| 99久久精品久久久久久清纯| 91精品国产高清一区二区三区| 国产视频一区二区在线观看| 亚洲午夜久久久久久久久电影网 | 日韩不卡一二三区| 国产成人av资源| 精品视频一区三区九区| 中文字幕国产精品一区二区| 亚洲成人一二三| 国产精品一卡二卡在线观看| 91丨porny丨最新| 成人午夜激情视频| 欧美二区三区的天堂| 国产精品美女久久久久久2018| 视频一区二区三区在线| a亚洲天堂av| 精品国产乱码久久久久久牛牛 | 国产精品嫩草99a| 日韩电影在线观看电影| av不卡在线观看| 精品免费日韩av| 天天综合色天天| 91视频在线观看| 国产精品私人影院| 国内精品不卡在线| 欧美日韩成人一区| 一区二区三区在线看| 播五月开心婷婷综合| 久久婷婷成人综合色| 日本成人在线看| 欧美精品日日鲁夜夜添| 亚洲午夜视频在线| 色综合婷婷久久| 国产精品久线在线观看| 极品瑜伽女神91| 欧美成人综合网站| 日韩激情一区二区| 欧美亚洲一区二区三区四区| 综合久久给合久久狠狠狠97色| 国产69精品久久久久毛片| 欧美一级生活片| 天天影视涩香欲综合网| 日本大香伊一区二区三区| 亚洲人123区| 91麻豆国产香蕉久久精品| **欧美大码日韩| a美女胸又www黄视频久久| 国产精品久久久久aaaa| 成人午夜精品在线|