亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
成人黄色电影在线| 欧美色网一区二区| 欧美精品一卡二卡| 精品一区二区日韩| 亚洲精品中文在线观看| 日韩视频免费观看高清完整版在线观看 | 国产视频一区二区在线观看| 91久久精品一区二区三区| 精品一区二区三区免费播放| 亚洲美女一区二区三区| 亚洲精品在线观看网站| 欧美日韩中文字幕一区| 成人福利视频网站| 久久99国产乱子伦精品免费| 亚洲电影激情视频网站| 中文字幕亚洲在| 337p粉嫩大胆色噜噜噜噜亚洲| 在线这里只有精品| 97se狠狠狠综合亚洲狠狠| 国产曰批免费观看久久久| 亚洲1区2区3区4区| 亚洲激情综合网| 综合色中文字幕| 国产欧美综合在线观看第十页| 日韩一区二区免费电影| 欧美无砖专区一中文字| 99在线精品一区二区三区| 国产精品一级二级三级| 久久精品国产99久久6| 婷婷一区二区三区| 亚洲午夜视频在线观看| 一区二区在线电影| 亚洲人亚洲人成电影网站色| 国产欧美va欧美不卡在线| 久久综合网色—综合色88| 欧美一个色资源| 欧美一区二区成人6969| 欧美日韩三级视频| 精品视频在线免费观看| 欧美中文字幕不卡| 在线观看一区二区视频| 91丨九色porny丨蝌蚪| 成人免费视频国产在线观看| 国产美女在线观看一区| 国产永久精品大片wwwapp| 国产伦理精品不卡| 国产精品1区2区| 国产成人日日夜夜| 成人福利电影精品一区二区在线观看| 豆国产96在线|亚洲| 成人久久18免费网站麻豆| 成人免费毛片app| 99久久精品久久久久久清纯| 成人高清免费观看| 色国产综合视频| 欧美亚洲高清一区| 欧美二区三区91| 日韩一卡二卡三卡| 久久综合九色综合久久久精品综合| 精品国产三级a在线观看| 久久综合狠狠综合久久综合88 | 91免费精品国自产拍在线不卡| 不卡免费追剧大全电视剧网站| 91玉足脚交白嫩脚丫在线播放| 色哟哟国产精品| 在线不卡的av| 337p日本欧洲亚洲大胆精品 | 亚洲成人在线网站| 美女爽到高潮91| 国产精品18久久久久久vr| 懂色av中文字幕一区二区三区| av在线不卡网| 欧美精品乱码久久久久久按摩 | 欧美精品一区二区三区蜜桃 | 欧美日韩精品专区| 精品毛片乱码1区2区3区| 欧美极品美女视频| 亚洲国产视频一区二区| 精品一区二区在线播放| 成人午夜免费视频| 欧美日韩五月天| 国产亚洲成aⅴ人片在线观看| 亚洲精品乱码久久久久久黑人| 视频一区在线播放| 国产成人亚洲综合a∨婷婷| 色婷婷av一区二区三区软件| 91精品国产综合久久小美女 | 日韩av电影免费观看高清完整版在线观看 | 久久亚洲一级片| 亚洲区小说区图片区qvod| 亚洲午夜久久久久久久久电影网| 日本伊人午夜精品| 成av人片一区二区| 日韩欧美在线综合网| 亚洲区小说区图片区qvod| 免费成人你懂的| 一本到不卡精品视频在线观看| 欧美一级黄色大片| 亚洲自拍偷拍欧美| 国产**成人网毛片九色| 91麻豆精品国产自产在线观看一区 | 91麻豆精品国产无毒不卡在线观看| 欧美韩日一区二区三区| 美女一区二区久久| 在线日韩av片| 中文子幕无线码一区tr| 日韩国产精品久久久久久亚洲| 91免费视频网址| 久久久久久99久久久精品网站| 亚洲国产三级在线| 99精品一区二区| 337p日本欧洲亚洲大胆色噜噜| 午夜免费久久看| 欧美综合视频在线观看| 国产精品久久看| 国产一区二区不卡在线| 日韩一区二区三区四区| 亚洲大尺度视频在线观看| 91在线精品一区二区| 国产婷婷一区二区| 激情五月婷婷综合网| 7799精品视频| 午夜精品一区二区三区三上悠亚| 99精品久久只有精品| 欧美国产日韩a欧美在线观看| 美女脱光内衣内裤视频久久网站| 欧美日韩在线播放三区四区| 国产精品久久久久久久久免费桃花| 国模大尺度一区二区三区| 欧美日本韩国一区| 亚洲成在人线在线播放| 色天使久久综合网天天| 亚洲欧美日韩在线不卡| www.综合网.com| 久久久精品2019中文字幕之3| 精品一区二区三区av| 精品毛片乱码1区2区3区| 久久疯狂做爰流白浆xx| 精品国精品国产| 免费看日韩精品| 精品国产成人系列| 九一久久久久久| 日韩一级免费一区| 激情图区综合网| 久久青草国产手机看片福利盒子| 精品亚洲欧美一区| 久久久久国产精品免费免费搜索| 国产精品一区三区| 日韩精品电影一区亚洲| 欧美乱熟臀69xxxxxx| 美女mm1313爽爽久久久蜜臀| 欧美大片在线观看一区| 极品销魂美女一区二区三区| 久久久精品国产免费观看同学| 丁香婷婷综合色啪| 亚洲欧洲av一区二区三区久久| 91性感美女视频| 亚洲综合色婷婷| 欧美肥妇free| 国产精品乡下勾搭老头1| 国产欧美一区二区三区在线看蜜臀| 国产精品一区二区久久不卡| 欧美一区二区成人| 亚洲成av人片在www色猫咪| 欧洲av一区二区嗯嗯嗯啊| 一区二区三区四区在线免费观看| 在线观看欧美黄色| 亚洲一区欧美一区| 欧美日韩一区二区三区在线| 亚洲国产三级在线| 欧美一区二区在线免费播放| 婷婷久久综合九色综合绿巨人| 日韩美女主播在线视频一区二区三区 | 精品黑人一区二区三区久久| 久久99精品国产| 日本一区二区免费在线观看视频| 国产麻豆欧美日韩一区| 亚洲男人天堂av网| 欧美性大战久久久久久久| 五月婷婷久久综合| 精品三级在线看| 国产mv日韩mv欧美| 亚洲乱码中文字幕综合| 一本色道**综合亚洲精品蜜桃冫| 午夜影院在线观看欧美| 日韩欧美一级特黄在线播放| 在线成人免费观看| 国产成人av电影在线观看| 国产精品夫妻自拍| 欧美日韩国产一二三| 九色|91porny| 亚洲综合色丁香婷婷六月图片| 欧美一级日韩不卡播放免费| 国产激情91久久精品导航| 一区二区三区**美女毛片| 欧美电视剧在线观看完整版| 粉嫩欧美一区二区三区高清影视| 亚洲一区二区三区四区在线观看 | 精品99一区二区| 91亚洲男人天堂|