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

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

?? yufa.cpp.bak

?? pl/0語言分析程序
?? BAK
字號:
#include "yufa.h"
#include "errors.h"
#include "cifa.h"
#include "biaoge.h"
#include "daima.h"

CYufa::CYufa(CPlCompiler *p)
{
	pl=p;
	declbegsys+=constsym;
	declbegsys+=varsym;
	declbegsys+=procsym;
	statbegsys+=beginsym;
	statbegsys+=callsym;
	statbegsys+=ifsym;
	statbegsys+=whilesym;
	statbegsys+=repeatsym;
	facbegsys+=ident;
	facbegsys+=number;
	facbegsys+=lparen;
}
void CYufa::Analysis()
{
	getsym();
	lev=-1;
	CSymbolSet s;
	s=declbegsys;
	s+=statbegsys;
	s+=period;
	block(s);
}
void CYufa::test(CSymbolSet s1,CSymbolSet s2,int n)
{
	if (!s1.InSet(sym))
	{
		pl->errors->Add(n);
		s1+=s2;
		while (!s1.InSet(sym)) getsym();
	}
}
void CYufa::block(CSymbolSet fsys)
{
	lev++;

	int tx0,cx0;
	CSymbolSet s;
	CErrors *err=pl->errors;
	CDaima *dm=pl->daima;
	CBiaoge *bg=pl->biaoge;

	dx[lev]=3;
	tx0=bg->TableIndex();
	bg->table[tx0].adr=dm->cx;
	dm->Gen(jmp,0,0);
	if (lev>MAX_LEVEL) err->Add(32);
	do{
		if (sym==constsym)
		{
			getsym();
			do{
				constdeclaration();
				while (sym==comma)
				{
					getsym();
					constdeclaration();
				}
				if (sym==semicolon) getsym(); else err->Add(5);
			}while (sym==ident);
		}
		if (sym==varsym)
		{
			getsym();
			do{
				vardeclaration();
				while (sym==comma)
				{
					getsym();
					vardeclaration();
				}
				if (sym==semicolon) getsym(); else err->Add(5);
			}while (sym==ident);
		}
		while (sym==procsym)
		{
			getsym();
			if (sym==ident)
			{
				bg->Enter(procedure);
				getsym();
			}
			else err->Add(4);
			if (sym==semicolon) getsym(); else err->Add(5);
			s=fsys;
			s+=semicolon;
			block(s);
			if (sym==semicolon)
			{
				getsym();
				s=statbegsys;
				s+=ident;
				s+=procsym;
				test(s,fsys,6);
			}
			else
				err->Add(5);
		}
		s=statbegsys;
		s+=ident;
		test(s,declbegsys,7);
	}while (declbegsys.InSet(sym));

	dm->code[bg->table[tx0].adr].a=dm->cx;
	bg->table[tx0].adr=dm->cx;
	bg->table[tx0].size=dx[lev];
	cx0=dm->cx;
	dm->Gen(intint,0,dx[lev]);
	s=fsys;
	s+=semicolon;
	s+=endsym;
	statement(s);
	dm->Gen(opr,0,0);
	test(fsys,CSymbolSet(),8);

	lev--;
}
void CYufa::constdeclaration()
{
	CErrors *err=pl->errors;
	CBiaoge *bg=pl->biaoge;

	if (sym==ident)
	{
		getsym();
		if (sym==eql || sym==becomes)
		{
			if (sym==becomes)
				err->Add(1);
			getsym();
			if (sym==number)
			{
				bg->Enter(constant);
				getsym();
			}
			else
				err->Add(2);
		}
		else
			err->Add(3);
	}
	else
		err->Add(4);
}
void CYufa::vardeclaration()
{
	CErrors *err=pl->errors;
	CDaima *dm=pl->daima;
	CBiaoge *bg=pl->biaoge;

	if (sym==ident)
	{
		bg->Enter(variable);
		dx[lev]++;
		getsym();
	}
	else
		err->Add(4);
}
void CYufa::factor(CSymbolSet fsys)
{
	int i;
	CErrors *err=pl->errors;
	table_type *table=pl->biaoge->table;
	CDaima *dm=pl->daima;

	test(facbegsys,fsys,24);
	while (facbegsys.InSet(sym))
	{
		switch (sym)
		{
		case ident:
			i=pl->biaoge->Position(pl->cifa->id);
			if (i==0)
				err->Add(11);
			else
			{
				switch (table[i].kind)
				{
				case constant:
					dm->Gen(lit,0,table[i].val);
					break;
				case variable:
					dm->Gen(lod,lev-table[i].level,table[i].adr);
					break;
				case procedure:
					err->Add(21);
					break;
				}
			}
			getsym();
			break;
		case number:
			if (pl->cifa->num>MAX_NUMBER)
			{
				err->Add(31);
				pl->cifa->num=0;
			}
			dm->Gen(lit,0,pl->cifa->num);
			getsym();
			break;
		case lparen:
			getsym();
			expression(fsys+=rparen);
			if (sym==rparen)
				getsym();
			else
				err->Add(22);
			break;
		}
		test(fsys,facbegsys,23);
	}
}
void CYufa::term(CSymbolSet fsys)
{
	symbol mulop;
	CSymbolSet symset;
	symset+=fsys;
	symset+=times;
	symset+=slash;

	factor(symset);
	while (sym==times||sym==slash)
	{
		mulop=sym;
		getsym();
		factor(symset);
		if (mulop==times)
			pl->daima->Gen(opr,0,4);
		else
			pl->daima->Gen(opr,0,5);
	}
}
void CYufa::expression(CSymbolSet fsys)
{
	symbol addop;
	CSymbolSet symset;
	symset+=fsys;
	symset+=plus;
	symset+=minus;

	if (sym==plus||sym==minus)
	{
		addop=sym;
		getsym();
		term(symset);
		if (addop==minus)
			pl->daima->Gen(opr,0,1);
	}
	else
		term(symset);

	while (sym==plus||sym==minus)
	{
		addop=sym;
		getsym();
		term(symset);
		if (addop==plus)
			pl->daima->Gen(opr,0,2);
		else
			pl->daima->Gen(opr,0,3);
	}
}
void CYufa::condition(CSymbolSet fsys)
{
	symbol relop;
	CSymbolSet s1,s2;
	s1+=eql;
	s1+=neq;
	s1+=lss;
	s1+=leq;
	s1+=gtr;
	s1+=geq;

	if (sym==oddsym)
	{
		getsym();
		expression(fsys);
		pl->daima->Gen(opr,0,6);
	}
	else
	{
		s2+=s1;
		expression(s2+=fsys);
		if (!s1.InSet(sym))
			pl->errors->Add(20);
		else
		{
			relop=sym;
			getsym();
			expression(fsys);
			switch (relop)
			{
			case eql:pl->daima->Gen(opr,0,8);break;
			case neq:pl->daima->Gen(opr,0,9);break;
			case lss:pl->daima->Gen(opr,0,10);break;
			case geq:pl->daima->Gen(opr,0,11);break;
			case gtr:pl->daima->Gen(opr,0,12);break;
			case leq:pl->daima->Gen(opr,0,13);break;
			}
		}
	}
}
void CYufa::statement(CSymbolSet fsys)
{
	int i,cx1,cx2;
	table_type *table=pl->biaoge->table;
	CErrors *err=pl->errors;
	CDaima *dm=pl->daima;
	CSymbolSet s,s2;

	switch (sym)
	{
	case ident:
		i=pl->biaoge->Position(pl->cifa->id);
		if (i==0)
			err->Add(11);
		else if (table[i].kind!=variable)
		{err->Add(12);i=0;}
		getsym();
		if (sym==becomes)
			getsym();
		else
			err->Add(13);
		expression(fsys);
		if (i>0)
			dm->Gen(sto,lev-table[i].level,table[i].adr);
		break;
	case readsym:
		getsym();
		if (sym!=lparen)
			err->Add(34);
		else
			do{
				getsym();
				i=(sym==ident) ? pl->biaoge->Position(pl->cifa->id):0;
				if (i==0)
					err->Add(35);
				else
				{
					dm->Gen(opr,0,16);
					dm->Gen(sto,lev-table[i].level,table[i].adr);
				}
				getsym();
			}while (sym==comma);

		if (sym!=rparen)
		{
			err->Add(33);
			while (fsys.InSet(sym)) getsym();
		}
		else getsym();
		break;
	case writesym:
		s=fsys;
		s+=rparen;
		s+=comma;
		getsym();
		if (sym==lparen)
		{
			do{
				getsym();
				expression(s);
				pl->daima->Gen(opr,0,14);
			}while (sym==comma);
			if (sym!=rparen)
				err->Add(33);
			else
				getsym();
		}
		dm->Gen(opr,0,15);
		break;
	case callsym:
		getsym();
		if (sym!=ident)
			err->Add(14);
		else
		{
			i=pl->biaoge->Position(pl->cifa->id);
			if (i==0) err->Add(11);
			else if (table[i].kind==procedure)
				dm->Gen(cal,lev-table[i].level,table[i].adr);
			else
				err->Add(15);
			getsym();
		}
		break;
	case ifsym:
		s=fsys;
		s+=thensym;
		s+=dosym;
		getsym();
		condition(s);
		if (sym==thensym) getsym();else err->Add(16);
		cx1=dm->cx;
		dm->Gen(jpc,0,0);
		s=fsys;
		s+=elsesym;
		statement(s);
		if (sym==elsesym)
		{
			getsym();
			cx2=dm->cx;
			dm->Gen(jmp,0,0);
			statement(fsys);
			dm->code[cx1].a=cx2+1;
			dm->code[cx2].a=dm->cx;
		}
		else
			dm->code[cx1].a=dm->cx;
		break;
	case beginsym:
		s=fsys;
		s+=semicolon;
		s+=endsym;
		s2=statbegsys;
		s2+=semicolon;
		getsym();
		statement(s);
		while (s2.InSet(sym))
		{
			if (sym==semicolon) getsym();else err->Add(10);
			statement(s);
		}
		if (sym==endsym) getsym(); else err->Add(17);
		break;
	case whilesym:
		cx1=dm->cx;
		getsym();
		s=fsys;
		s+=dosym;
		condition(s);
		cx2=dm->cx;
		dm->Gen(jpc,0,0);
		if (sym==dosym) getsym(); else err->Add(18);
		statement(fsys);
		dm->Gen(jmp,0,cx1);
		dm->code[cx2].a=dm->cx;
		break;
	case repeatsym:
		getsym();
		s=fsys;
		s+=semicolon;
		s+=untilsym;
		cx1=dm->cx;
		statement(s);
		s2=statbegsys;
		s2+=semicolon;
		while (s2.InSet(sym))
		{
			if (sym==semicolon) getsym();else err->Add(10);
			statement(s);
		}
		if (sym==untilsym)
		{
			getsym();
			condition(fsys);
			dm->Gen(jpc,0,cx1);
		}
		else
			err->Add(25);
		break;
	}
	test(fsys,CSymbolSet(),19);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费视频成人| 久久久亚洲午夜电影| 成人污污视频在线观看| 欧美a级理论片| 国产精品―色哟哟| 精品久久久久久久久久久久久久久久久| 国产成人午夜电影网| 亚洲bdsm女犯bdsm网站| 美女一区二区视频| 五月天婷婷综合| 欧美中文一区二区三区| 韩国av一区二区三区| 午夜电影一区二区三区| 久久亚洲私人国产精品va媚药| 色嗨嗨av一区二区三区| 一本一本久久a久久精品综合麻豆| 国产精品18久久久久久久久久久久 | 精品国产乱子伦一区| 欧美一区二区三区在线电影 | 亚洲精品欧美在线| 18涩涩午夜精品.www| 久久久www成人免费毛片麻豆| 91麻豆精品国产91久久久| 91麻豆精品国产91久久久久久| 欧美日韩国产一级| 日韩欧美亚洲国产另类| 久久久99免费| 一级做a爱片久久| 免费在线欧美视频| 狠狠色综合播放一区二区| 91麻豆产精品久久久久久| av激情亚洲男人天堂| 欧美性感一类影片在线播放| 91精品国产高清一区二区三区| 欧美一级艳片视频免费观看| 26uuu亚洲婷婷狠狠天堂| 久久久久国产精品麻豆| 亚洲女同女同女同女同女同69| 日日欢夜夜爽一区| 久久激情综合网| 色哟哟日韩精品| 国产免费久久精品| 蜜臀精品久久久久久蜜臀| 色综合视频一区二区三区高清| 欧美日韩小视频| 国产成人av电影在线观看| 日韩电影在线免费看| 成人h版在线观看| 精品国产1区二区| 免费观看成人鲁鲁鲁鲁鲁视频| 91天堂素人约啪| 一区二区三区高清| 99久久精品免费看| 亚洲乱码中文字幕| 一本色道亚洲精品aⅴ| 亚洲精品你懂的| 欧美片网站yy| 美腿丝袜一区二区三区| 91精品国产综合久久久久久久久久 | 国产老女人精品毛片久久| 奇米一区二区三区| 欧美一区二区三区系列电影| 久久精品噜噜噜成人av农村| 欧美理论片在线| 国产精品一区一区| 亚洲精品国产一区二区三区四区在线 | 91精品国产91热久久久做人人| 国产亚洲成年网址在线观看| 国产一区在线观看麻豆| 久久五月婷婷丁香社区| 94色蜜桃网一区二区三区| 欧美国产精品劲爆| 97se亚洲国产综合自在线 | 精品区一区二区| 粉嫩一区二区三区性色av| 综合电影一区二区三区| 在线观看视频一区| 国产精品1区2区3区在线观看| 中文字幕中文字幕一区| 日韩午夜激情视频| 欧洲精品一区二区| 99久久综合国产精品| 国产成人av在线影院| 久久成人麻豆午夜电影| 欧美国产激情一区二区三区蜜月| 欧美日本国产视频| 99久久伊人精品| 国产一区二区三区免费在线观看| 亚洲成a天堂v人片| 午夜国产精品影院在线观看| 性感美女极品91精品| 亚洲成av人片www| 免费观看在线综合| 日本成人在线视频网站| 香蕉加勒比综合久久| 污片在线观看一区二区| 蜜桃视频免费观看一区| 成+人+亚洲+综合天堂| 91在线视频官网| 在线观看网站黄不卡| 久久五月婷婷丁香社区| 91精品国产综合久久久久久| 欧美日本乱大交xxxxx| 欧美久久高跟鞋激| 亚洲精品一线二线三线| 亚洲素人一区二区| 久久国产成人午夜av影院| 日韩二区三区在线观看| 国产主播一区二区三区| 一本一道波多野结衣一区二区| 欧美日韩国产123区| 国产亚洲欧美色| 一区二区免费在线| 精品中文字幕一区二区| 国产黄色成人av| 欧美三级韩国三级日本三斤| 欧美mv日韩mv国产| 亚洲精品国产品国语在线app| 久久99精品国产.久久久久| 97精品国产露脸对白| 欧美精品丝袜久久久中文字幕| 国产精品三级电影| 成av人片一区二区| 国产欧美一二三区| 日韩中文字幕av电影| 成人性生交大合| 欧美精品在欧美一区二区少妇| 国产精品盗摄一区二区三区| 极品美女销魂一区二区三区免费| 欧美三级欧美一级| 亚洲一区二区视频在线| 99在线视频精品| 亚洲视频在线一区观看| 在线国产电影不卡| 免费的国产精品| 99精品视频在线免费观看| 国产亚洲欧洲997久久综合| 久久精品国产亚洲高清剧情介绍| 制服丝袜亚洲精品中文字幕| 午夜精品久久久久久久久| 日韩视频免费直播| 国产成人精品亚洲午夜麻豆| 欧美韩国日本不卡| 成人aaaa免费全部观看| 亚洲精品免费一二三区| 在线播放91灌醉迷j高跟美女| 日韩精品亚洲专区| 国产欧美一区视频| 欧美日韩日日骚| 国产白丝精品91爽爽久久| 中文字幕国产一区二区| 91久久一区二区| 国产一区二区三区蝌蚪| 香蕉成人伊视频在线观看| 国产亚洲精品超碰| 在线观看视频欧美| 老司机精品视频导航| 国产拍欧美日韩视频二区| 91在线一区二区三区| 亚洲综合免费观看高清完整版在线 | 7777精品伊人久久久大香线蕉完整版 | 亚洲精品欧美激情| 国产女人aaa级久久久级| 91精品国产综合久久蜜臀| 狠狠色狠狠色综合日日91app| 亚洲人成网站精品片在线观看| 中文字幕精品一区二区精品绿巨人| 欧美熟乱第一页| 在线日韩av片| 91美女精品福利| 92国产精品观看| 国产成人99久久亚洲综合精品| 国产高清一区日本| 久久av资源网| 精品一区二区三区免费观看| 一区二区三区四区中文字幕| 久久久精品国产免费观看同学| 欧美一区二区三区在线视频| 日韩亚洲欧美高清| 精品国产伦一区二区三区观看体验 | 日日嗨av一区二区三区四区| 一区二区三区在线免费播放| 亚洲欧美日韩电影| 一区二区不卡在线播放| 五月天中文字幕一区二区| 亚洲欧美一区二区三区久本道91| 国产精品女人毛片| 亚洲同性gay激情无套| 亚洲伊人色欲综合网| 亚洲午夜久久久久中文字幕久| 亚洲国产精品久久人人爱| 日韩不卡在线观看日韩不卡视频| 日韩专区在线视频| 国产麻豆视频一区二区| 在线免费亚洲电影| ww亚洲ww在线观看国产| 亚洲欧美日韩国产手机在线| 视频一区中文字幕国产| 国产成人精品一区二区三区四区 | 在线精品国精品国产尤物884a|