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

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

?? plxcompiler.cpp

?? pl/x的編譯器
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
	
	}
	else //出錯了
	{
		error(14);
	}
	if(m_sym==EQL || m_sym==GTR || m_sym==GEQ || m_sym==LSS || m_sym==LEQ || m_sym==NEQ)
	{
		op=m_sym;
		getSym();
	}
	else
	{
		error(15);
	}
	this->ArithmeticExpression(level,fsys);
	switch(op)
	{
	case EQL:
		gen(OPR,0,9);
		break;
	case GTR:
		gen(OPR,0,13);
		break;
	case GEQ:
		gen(OPR,0,14);
		break;
	case LSS:
		gen(OPR,0,11);
		break;
	case LEQ:
		gen(OPR,0,12);
		break;
	case NEQ:
		gen(OPR,0,10);
		break;
	default:
		;
	}
}

//處理ae非終結符
void PLXCompiler::ArithmeticExpression(int level,symset fsys)
{
	symset tmp,tmp1;
	symbol minusOp=NUL;
	tmp=fsys;
	tmp.insert(PLUS);
	tmp.insert(MINUS);
	if(m_sym==MINUS)
	{
		getSym();
		minusOp=m_sym;
	}
	this->ArithmeticTerm(level,tmp);
	if(minusOp==MINUS)
	{
		gen(OPR,0,1);//取負
	}
	tmp1=this->m_firstaf;
	tmp1.insert(MINUS);
	tmp1.insert(PLUS);
	tmp1.insert(NUL);
	while(tmp1.find(m_sym)!=tmp1.end())
	{
		if(m_sym==MINUS || m_sym==PLUS)
		{
			minusOp=m_sym;
			getSym();
		}
		else if(m_sym==NUL)
		{
			error(38);
			getSym();
		}
		else
		{
			error(38);
		}
		this->ArithmeticTerm(level,tmp);
		if(minusOp==MINUS)
		{
			gen(OPR,0,3);//減
		}
		if(minusOp==PLUS)
		{
			gen(OPR,0,2);//加
		}
	}
}

//處理at非終結符
void PLXCompiler::ArithmeticTerm(int level,symset fsys)
{
	symset tmp,tmp1;
	symbol op=NUL;
	tmp=fsys;
	tmp.insert(TIMES);
	tmp.insert(SLASH);
	this->ArithmeticFactor(level,tmp);
	while(m_sym==TIMES || m_sym==SLASH)
	{
		op=m_sym;
		getSym();
		this->ArithmeticFactor(level,tmp);
		if(op==TIMES)
		{
			gen(OPR,0,4);
		}
		if(op==SLASH)
		{
			gen(OPR,0,5);
		}
	}
}

//處理af非終結符
void PLXCompiler::ArithmeticFactor(int level,symset fsys)
{
	symset tmp;
	test(this->m_firstaf,fsys,32);
	if(m_sym==IDENT)
	{
		//查找符號表
		vector<item>::iterator iter=this->position(m_id);
		if(NULL==iter)
		{
			error(1); //變量為定義
		}
		else
		{
			if(iter->kind!=aident)
			{
				error(2);//此處變量需為整型
			}
			else
			{
				gen(LOD,level-iter->level,iter->adr);
			}
		}
		getSym();
	}

	else if(m_sym==NUMBER)
	{
		gen(LIT,0,this->m_num);
		getSym();
	}
	else if(m_sym==LPAREN)
	{
		getSym();
		tmp.clear();
		tmp=fsys;
		tmp.insert(RPAREN);
		this->ArithmeticExpression(level,tmp);
		if(m_sym!=RPAREN)
		{
			error(3);//缺了')'
		}
		else
			getSym();
	}
	else
	{
		error(4);//
	}
}

//處理非終結符be
void PLXCompiler::BoolExpression(int level,symset fsys)
{
	symset tmp=fsys;
	symbol op=NUL;
	tmp.insert(ORSYM);
	this->BoolTerm(level,tmp);
	while(m_sym==ORSYM)
	{
		op=m_sym;
		getSym();
		this->BoolTerm(level,tmp);
		if(op==ORSYM)
		{
			gen(OPR,0,6);//OR
		}
	}
	tmp.clear();
	tmp.insert(THENSYM);
	tmp.insert(DOSYM);
	test(fsys,tmp,34);
}

//處理非終結符bt
void PLXCompiler::BoolTerm(int level,symset fsys)
{
	symset tmp=fsys;
	symbol op;
	tmp.insert(ANDSYM);
	this->BoolFactor(level,tmp);
	while(m_sym==ANDSYM)
	{
		op=m_sym;
		getSym();
		this->BoolFactor(level,tmp);
		if(op==ANDSYM)
		{
			gen(OPR,0,7);//AND
		}
	}
}

//處理非終結符bf
void PLXCompiler::BoolFactor(int level,symset fsys)
{
	symset tmp;
	symbol op;
	test(this->m_firstbf,fsys,6);
	if(m_sym==IDENT)
	{
		//查找符號表
		vector<item>::iterator iter=this->position(m_id);
		if(NULL==iter)
		{
			error(1); //變量為定義
			getSym();
		}
		else
		{
			if(iter->kind==bident)
			{
				gen(LOD,level-iter->level,iter->adr);
				getSym();
			}
			else if(iter->kind==aident)
			{
				tmp.clear();
				tmp=fsys;
				this->RelationExpression(level,fsys);
			}
			else
			{
				error(5);//非法的變量
				getSym();
			}
		}
	}
	else if(m_sym==TRUESYM || m_sym==FALSESYM)
	{
		if(m_sym==TRUESYM)
		{
			gen(LIT,0,1);
		}
		else
		{
			gen(LIT,0,0);
		}
		getSym();
	}
	else if(m_sym==NOTSYM)
	{
		op=m_sym;
		getSym();
		tmp.clear();
		tmp=fsys;
		this->BoolFactor(level,tmp);
		if(op==NOTSYM)
		{
			gen(OPR,0,8);//NOT
		}
	}
	else if(m_sym==LPAREN)
	{
		getSym();
		tmp.clear();
		tmp=fsys;
		tmp.insert(RPAREN);
		this->BoolExpression(level,tmp);
		if(m_sym!=RPAREN)
		{
			error(3);//缺少')'
		}
		else
			getSym();
	}
	else if(m_sym==NUMBER)
	{
	    tmp.clear();
		tmp=fsys;
		this->RelationExpression(level,tmp);
	}
	else
	{
		error(6);
	}
//	tmp.clear();
//	tmp.insert(DOSYM);
	//tmp.insert(THENSYM);
//	tmp.insert(ENDSYM);
	//test(fsys,tmp,34);
}

//
void PLXCompiler::ProcedureSque(int level,symset fsys)
{
	symset tmp;
	while(m_sym==PROSYM)
	{
		this->Procedure(level,fsys);
	}
	tmp.clear();
	tmp=this->m_firsts;
	tmp.insert(ENDSYM);
	test(fsys,tmp,35);
}
//處理非終結符proc
void PLXCompiler::Procedure(int level,symset fsys)
{
	symset tmp,stop;
	alfa   name;//保存函數名
	vector<item>::iterator iter=NULL;
	int k=0;

	vector<item>::iterator pt;
	int dx=3,tx=m_tx,cx=m_cx;
	

	if(m_sym==PROSYM)
	{
		gen(JMP,0,0);

		getSym();
		if(m_sym==IDENT)
		{
			//在符號表中登記函數名
			enter(pident,level);
			strcpy(name,m_id);
		}
		else
		{
			error(7); //非法的變量名
		}
		getSym();
		if(m_sym!=LPAREN)
		{
			error(33);//缺了'('
		}
		else
			getSym();
		if(m_sym==INTESYM)
		{
			getSym();
			k++;
			if(m_sym==IDENT)
			{
				enter(aident,dx,level+1);
			}
			else
			{
				error(9);//非法的參數名
			}
			getSym();
			while(m_sym==COMMA || m_sym==IDENT)
			{
				if(m_sym==COMMA)
					getSym();
				else
					error(19);
				if(m_sym==IDENT)
				{
					enter(aident,dx,level+1);
					k++;
				}
				else
				{
					error(9);//非法的參數名
					k++;
				}
				getSym();
			}
			
		}
		if(m_sym!=RPAREN)
		{
			error(3);//缺了')'
		}
		else
			getSym();
		
		//
		this->DefinitionSque(level+1,dx,fsys);
		if(m_sym!=BEGINSYM)
		{
			error(10);//缺了begin
		}
		else
			getSym();

		this->Procedure(level+1,fsys);
		tmp.clear();
		tmp=fsys;
		tmp.insert(ENDSYM);

        //修改參數信息,函數的局部變量所需空間大小,函數地址
		pt=m_table.begin()+tx;
		if(pt!=NULL)
		{
			(*((m_code.begin()+cx))).a=m_cx;
			pt->num=k;
			pt->adr=m_cx;
			pt->size=dx;
		}
		
        gen(INT,0,dx);

		this->SentenceSque(level+1,tmp);
		gen(OPR,0,0);

		if(m_sym!=ENDSYM)
		{
			error(11);//缺了end
		}
		else
			getSym();
		tmp=fsys;
		tmp.insert(PROSYM);
		stop.clear();
		stop=this->m_firsts;
		stop.insert(ENDSYM);
		test(tmp,stop,35);
	}
}

//處理非終結符S
void PLXCompiler::Sentence(int level,symset fsys)
{
	int k=0,num=0; //用來記錄函數的參數個數
	vector<item>::iterator pfunction,pParameter;
	
	item _item;//
	int cx1,cx2,cx3;

	symset tmp;
	test(this->m_firsts,fsys,30);
	if(m_sym==IDENT)
	{
		//查找符號表
		vector<item>::iterator iter=this->position(m_id);
		if(NULL==iter)
		{
			error(1); //變量未定義
			getSym();
			//若變量沒定義則當作整型變量
			if(m_sym!=BECOMES)
				error(22); //此處應為":="
			else
				getSym();
			tmp.clear();
			set_union(fsys.begin(),fsys.end(),m_followae.begin(),m_followae.end(),insert_iterator<symset>(tmp,tmp.begin()));
			this->ArithmeticExpression(level,tmp);
		}
		else if(iter->kind==aident)
		{
			getSym();
			if(m_sym!=BECOMES)
				error(22); //此處應為":="
			else
				getSym();
			tmp.clear();
			set_union(fsys.begin(),fsys.end(),m_followae.begin(),m_followae.end(),insert_iterator<symset>(tmp,tmp.begin()));
			this->ArithmeticExpression(level,tmp);
			//產生一條賦值語句
			gen(STO,level-iter->level,iter->adr);
		}
		else if(iter->kind==bident)
		{
			getSym();
			if(m_sym!=BECOMES)
				error(22); //此處應為":="
			getSym();
			tmp.clear();
			set_union(fsys.begin(),fsys.end(),m_followbe.begin(),m_followbe.end(),insert_iterator<symset>(tmp,tmp.begin()));
			this->BoolExpression(level,tmp);
			//產生一條賦值語句
			gen(STO,level-iter->level,iter->adr);
		}
		else
		{
			error(23);//此處不能為函數名
			getSym();
		}
	}
	else if(m_sym==IFSYM)
	{
		getSym();
		tmp.clear();
		set_union(fsys.begin(),fsys.end(),m_followbe.begin(),m_followbe.end(),insert_iterator<symset>(tmp,tmp.begin()));
		this->BoolExpression(level,tmp);
		if(m_sym!=THENSYM)
			error(24); //缺了then
		else
			getSym();
		tmp.clear();
		set_union(fsys.begin(),fsys.end(),m_followss.begin(),m_followss.end(),insert_iterator<symset>(tmp,tmp.begin()));
		
		cx1=this->m_cx;
		gen(JPC,0,0);
		this->SentenceSque(level,tmp);
		cx2=this->m_cx;
		if(m_sym==ELSESYM)
		{
			gen(JMP,0,0);
			getSym();
			this->SentenceSque(level,tmp);
			(*(m_code.begin()+cx2)).a=m_cx;
			(*(m_code.begin()+cx1)).a=cx2+1;
		}
		else
			(*(m_code.begin()+cx1)).a=cx2;

		if(m_sym!=ENDSYM)
			error(11);//缺了end
		else
			getSym();
	}
	else if(m_sym==WHILESYM)
	{
		cx1=m_cx;

		getSym();
		tmp.clear();
		set_union(fsys.begin(),fsys.end(),m_followbe.begin(),m_followbe.end(),insert_iterator<symset>(tmp,tmp.begin()));
		this->BoolExpression(level,tmp);

		cx2=m_cx;
		gen(JPC,0,0);

		if(m_sym!=DOSYM)
			error(26);//缺了do
		else
			getSym();
		tmp.clear();
		set_union(fsys.begin(),fsys.end(),m_followss.begin(),m_followss.end(),insert_iterator<symset>(tmp,tmp.begin()));
		this->SentenceSque(level,tmp);

		gen(JMP,0,cx1);
		(*(m_code.begin()+cx2)).a=m_cx;

		if(m_sym!=ENDSYM)
			error(11);//缺了end
		getSym();
	}
	else if(m_sym==REPEATSYM)
	{
		cx1=m_cx;
		getSym();
		tmp.clear();
		set_union(fsys.begin(),fsys.end(),m_followss.begin(),m_followss.end(),insert_iterator<symset>(tmp,tmp.begin()));
		this->SentenceSque(level,tmp);
		if(m_sym!=UNTILSYM)
			error(27);
		else
			getSym();
		tmp.clear();
		set_union(fsys.begin(),fsys.end(),m_followbe.begin(),m_followbe.end(),insert_iterator<symset>(tmp,tmp.begin()));
		this->BoolExpression(level,tmp);
		gen(OPR,0,8);
		cx2=m_cx;
		gen(JPC,0,0);
		gen(JMP,0,cx1);
		(*(m_code.begin()+cx2)).a=m_cx;
	}
	else if(m_sym==WRITESYM)
	{
		getSym();
		tmp.clear();
		set_union(fsys.begin(),fsys.end(),m_followae.begin(),m_followae.end(),insert_iterator<symset>(tmp,tmp.begin()));
		this->ArithmeticExpression(level,tmp);
		gen(OPR,0,15);
	}
	else if(m_sym==READSYM)
	{
		getSym();
		if(m_sym==IDENT)
		{
			//查找符號表
			vector<item>::iterator iter=this->position(m_id);
			if(NULL==iter)
			{
				error(1); //變量為定義
				//getSym();
			}
			else
			{
				if(iter->kind!=aident)
					error(13);
				else
				{
					gen(OPR,0,16);
					gen(STO,level-iter->level,iter->adr);
				}
				//getSym();
			}
		}
		else
		{
			error(13);//此處為一個整型變量名
		
		}
		getSym();
	}
	else if(m_sym==FORSYM)
	{
		getSym();
		if(m_sym==IDENT)
		{
			//查找符號表
			vector<item>::iterator iter=this->position(m_id);
			if(NULL==iter)
			{
				error(1); //變量為定義
			}
			else
			{
				if(iter->kind!=aident)
				{
					error(13);
				}
				else
				{
					cx1=m_cx;
					_item.adr=iter->adr;
					_item.level=iter->level;
					gen(LOD,level-iter->level,iter->adr);
				}
			}
		}
		else
		{
			error(13);//此處為一個整型變量名
		}
		getSym();
		if(m_sym!=FROMSYM)
		{
			error(25);//缺了from
		}
		else
			getSym();
		if(m_sym==IDENT)
		{
			//查找符號表

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91免费在线视频观看| 亚洲女爱视频在线| 欧美一区二区国产| 51午夜精品国产| 欧美日韩一区二区三区四区五区| 91免费在线看| 欧美性猛片aaaaaaa做受| 色婷婷国产精品| 色综合久久88色综合天天| 91久久国产最好的精华液| 色婷婷精品大在线视频| 91福利资源站| 欧美丰满嫩嫩电影| 欧美α欧美αv大片| 精品久久久久久久久久久久久久久久久| 日韩精品中文字幕在线一区| 精品国产成人在线影院| 国产日韩欧美高清在线| 国产精品网曝门| 中文字幕在线观看不卡| 一区二区三区四区在线| 亚洲成a人v欧美综合天堂下载 | 久久综合九色综合久久久精品综合 | 欧美日韩大陆一区二区| 日韩一区二区精品在线观看| 精品美女一区二区| 国产亲近乱来精品视频| 亚洲视频在线一区| 婷婷成人综合网| 韩国v欧美v日本v亚洲v| 成人av影院在线| 欧美亚洲一区二区在线| 精品久久久久香蕉网| 国产精品白丝在线| 日韩国产精品91| 老汉av免费一区二区三区| 成人app网站| 欧美日韩日日骚| 久久午夜色播影院免费高清| 日韩伦理av电影| 久热成人在线视频| av在线一区二区三区| 7777精品伊人久久久大香线蕉完整版| 久久婷婷色综合| 亚洲精品老司机| 色综合天天综合网天天看片| 亚洲视频一区二区免费在线观看| 一区二区三区电影在线播| 亚洲成人av一区二区三区| 加勒比av一区二区| 99综合影院在线| 日韩视频在线你懂得| 中文字幕一区二区三区在线观看 | 日本特黄久久久高潮| 国产一区二区三区免费观看| 色狠狠色噜噜噜综合网| 精品国产一区二区三区四区四| 中文字幕在线不卡国产视频| 蜜桃视频免费观看一区| 91在线免费播放| 亚洲精品在线电影| 亚洲国产综合色| 成人在线视频一区二区| 欧美一区二区三区爱爱| 亚洲婷婷国产精品电影人久久| 久久精品国产澳门| 精品视频在线免费观看| 国产蜜臀av在线一区二区三区| 视频一区二区国产| 91在线国产福利| 久久久久久久久伊人| 丝袜a∨在线一区二区三区不卡| 成人午夜电影小说| 久久网这里都是精品| 日韩av一区二区在线影视| 色8久久人人97超碰香蕉987| 国产欧美日韩三级| 欧美aⅴ一区二区三区视频| 91成人在线免费观看| 国产精品日韩成人| 国产精品77777| 精品少妇一区二区三区在线播放| 亚洲第一精品在线| 91亚洲大成网污www| 国产无遮挡一区二区三区毛片日本| 免费久久99精品国产| 欧美高清dvd| 调教+趴+乳夹+国产+精品| 91极品美女在线| 亚洲视频一区二区在线| www.日韩精品| 国产精品久久久久三级| 国产成人在线视频免费播放| 久久先锋影音av鲁色资源网| 激情五月播播久久久精品| 日韩视频在线永久播放| 另类欧美日韩国产在线| 日韩欧美中文字幕一区| 免费av成人在线| 日韩欧美色综合网站| 日韩和欧美一区二区三区| 欧美色综合久久| 亚洲一区二区欧美激情| 在线观看日韩精品| 亚洲夂夂婷婷色拍ww47| 欧美色手机在线观看| 亚洲电影你懂得| 欧美三级视频在线播放| 亚洲一二三区在线观看| 日本电影亚洲天堂一区| 亚洲综合一二区| 欧美精选在线播放| 秋霞av亚洲一区二区三| 欧美成人a在线| 国产精品一卡二卡在线观看| 欧美激情中文字幕| 91一区二区在线| 亚洲午夜久久久久久久久久久 | 亚洲综合网站在线观看| 欧美在线不卡一区| 亚洲一区影音先锋| 欧美肥妇bbw| 九一九一国产精品| 国产日韩欧美激情| 91在线视频网址| 调教+趴+乳夹+国产+精品| 精品精品国产高清a毛片牛牛| 国产在线播放一区| 国产精品剧情在线亚洲| 色天使久久综合网天天| 午夜精品久久久久影视| 欧美成人video| 成人毛片老司机大片| 亚洲精品免费在线观看| 4hu四虎永久在线影院成人| 国产伦精一区二区三区| 国产精品乱码一区二区三区软件| 色婷婷综合久色| 美女视频一区二区三区| 欧美激情一区二区三区蜜桃视频 | 国产欧美一二三区| 欧美影视一区二区三区| 精品一区二区三区影院在线午夜 | 日本一二三不卡| 欧美日韩精品一区二区天天拍小说| 全部av―极品视觉盛宴亚洲| 中文字幕精品一区二区三区精品| 日本精品视频一区二区| 麻豆91精品视频| 亚洲精品国产视频| www国产亚洲精品久久麻豆| 色悠久久久久综合欧美99| 免费人成在线不卡| 国产精品夫妻自拍| 欧美一级黄色大片| 成人app网站| 久久精品国产一区二区三区免费看| 国产精品久久午夜| 欧美一区二区三区在线电影| 成人动漫一区二区三区| 欧美a级理论片| 亚洲免费av在线| 久久先锋资源网| 欧美精选在线播放| 色综合久久久久网| 国产九色sp调教91| 亚洲1区2区3区4区| 亚洲欧美欧美一区二区三区| 精品欧美黑人一区二区三区| 欧美三级一区二区| av激情亚洲男人天堂| 精品在线播放午夜| 爽好多水快深点欧美视频| 国产精品不卡在线观看| 久久综合色鬼综合色| 欧美一区二区在线看| 在线免费亚洲电影| 成人国产电影网| 国模一区二区三区白浆| 日本成人在线一区| 亚洲最色的网站| 日韩理论在线观看| 久久99热99| 亚洲午夜精品久久久久久久久| 中文字幕中文字幕中文字幕亚洲无线| 精品久久久久久久久久久久久久久久久 | 国产精品超碰97尤物18| 亚洲精品在线免费观看视频| 欧美高清视频在线高清观看mv色露露十八| 成人av资源网站| 成人一区二区三区中文字幕| 九九热在线视频观看这里只有精品| 午夜精品久久久久久久久| 亚洲激情一二三区| 专区另类欧美日韩| 中文字幕一区二区三区四区| 国产欧美精品一区aⅴ影院| 久久在线观看免费| 日韩一级完整毛片| 欧美一级午夜免费电影|