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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? plxcompiler.cpp

?? pl/x的編譯器
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
			vector<item>::iterator iter=this->position(m_id);
			if(NULL==iter)
			{
				error(1); //變量為定義
			}
			else
			{
				if(iter->kind!=aident)
				{
					error(13);//getSym();
				}
				else
				{
					gen(LOD,level-iter->level,iter->adr);
				}
			}
			getSym();
		}
		else if(m_sym==NUMBER)
		{
			gen(LIT,0,this->m_num);
			getSym();
		}
		else
		{
			error(13);//此處為一個整型變量名
		}

		gen(OPR,0,14);//>
		cx2=m_cx;
		gen(JPC,0,0);

		if(m_sym!=TOSYM)
		{
			error(28);  //缺了to
		}
		else
			getSym();
		gen(LOD,level-_item.level,_item.adr);
		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
				{
					gen(LOD,level-iter->level,iter->adr);
				}
			}
			getSym();
		}
		else if(m_sym==NUMBER)
		{
			gen(LIT,0,this->m_num);
			getSym();
		}
		else
		{
			error(13);//此處為一個整型變量名
		}

		gen(OPR,0,11);//<
		cx3=m_cx;
		gen(JPC,0,0);

		if(m_sym!=DOSYM)
		{
			error(26);
		}
		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(LOD,level-_item.level,_item.adr);
		gen(OPR,0,17);
		gen(STO,level-_item.level,_item.adr);
		gen(JMP,0,cx1);
		(*(m_code.begin()+cx2)).a=m_cx;
		(*(m_code.begin()+cx3)).a=m_cx;


		if(m_sym==ENDSYM)
		{
			getSym();
		}
		else
		{
			error(11);//缺了end
		}
	}
	else if(m_sym==CALLSYM)
	{
		getSym();
		if(m_sym==IDENT)
		{
			//查找符號表
			pfunction=this->position(m_id);
			if(NULL==pfunction)
			{
				error(1); //變量為定義
			}
			else
			{
				if(pfunction->kind!=pident)
				{
					error(29);
				}
				else
				{
					cx1=m_cx;
					gen(CAL,level-pfunction->level,pfunction->adr);

					num=pfunction->num;
					pParameter=pfunction;
					getSym();
					while(m_sym==NUMBER || m_sym==IDENT)
					{
						if(num>0)
							pParameter++;
						if(m_sym==NUMBER)
						{
							gen(LIT,0,this->m_num);
							gen(ADP,0,pParameter->adr);
							getSym();
						}
						else
						{
							//查找符號表
							vector<item>::iterator iter=this->position(m_id);
							if(NULL==iter)
							{
								error(1); //變量為定義
							}
							else
							{
								if(iter->kind!=aident)
								{
									error(13);//getSym();
								}
								else
								{
									gen(LOD,pfunction->level+1-iter->level,iter->adr);
									gen(ADP,0,pParameter->adr);
								}
							}
							getSym();
						}
						k++;
					}
					if(k!=num)
					{
						error(39);//參數(shù)個數(shù)不符
					}
				}
				gen(JMP,0,pfunction->adr);
				(*(m_code.begin()+cx1)).a=m_cx;   ///?????
			}
		}
		else
		{
			error(29);
		}
	}
	else
	{
		error(30);
	}
	tmp.clear();
	tmp=this->m_firsts;
	tmp.insert(ENDSYM);
	test(fsys,tmp,31);
}

//處理非終結(jié)符d
void PLXCompiler::Definition(int level,int &dx,symset fsys)
{
    symset tmp,follow;
	tmp.insert(INTESYM);
	tmp.insert(LOGISYM);
	test(tmp,fsys,20);
	if(m_sym==INTESYM)
	{
		getSym();
		if(m_sym==IDENT)
		{
			//在符號表中登記變量
			enter(aident,dx,level);
		}
		else
		{
			error(7);//非法的變量名
		}
		getSym();
		while(m_sym==COMMA || m_sym==IDENT)
		{
			if(m_sym==COMMA)
				getSym();
			else
				error(19);
			if(m_sym==IDENT)
			{
				//在符號表中登記變量
				enter(aident,dx,level);
			}
			else
			{
				error(7);//非法的變量名
			}
			getSym();
		}
	}
	else if(m_sym==LOGISYM)
	{
		getSym();
		if(m_sym==IDENT)
		{
			//在符號表中登記變量
			enter(bident,dx,level);
		}
		else
		{
			error(7);//非法的變量名
		}
		getSym();
		while(m_sym==COMMA || m_sym==IDENT)
		{
			if(m_sym==COMMA)
				getSym();
			else
				error(19);
			if(m_sym==IDENT)
			{
				//在符號表中登記變量
				enter(bident,dx,level);
			}
			else
			{
				error(7);//非法的變量名
			}
			getSym();
		}
	}
	follow.insert(PROSYM);
	follow.insert(BEGINSYM);
	follow.insert(INTESYM);
	follow.insert(LOGISYM);
	follow.insert(SEMICOLON);
	test(follow,tmp,21);
}

//處理非終結(jié)符ss
void PLXCompiler::SentenceSque(int level,symset fsys)
{
	symset tmp;
	if(m_firsts.find(m_sym)!=m_firsts.end())
	{
		tmp.clear();
		set_union(fsys.begin(),fsys.end(),m_follows.begin(),m_follows.end(),insert_iterator<symset>(tmp,tmp.begin()));
		this->Sentence(level,tmp);
		while(m_sym==SEMICOLON ||m_firsts.find(m_sym)!=m_firsts.end())
		{
			if(m_sym==SEMICOLON)
					getSym();
			else
				error(16);//丟失';'
			if(m_sym==ENDSYM || m_sym==ELSESYM || m_sym==UNTILSYM)
			{
				error(36);
				break;
			}
			this->Sentence(level,tmp);
		}
	}
	tmp.clear();
	tmp.insert(ENDSYM);
	test(fsys,tmp,17);//跳到end出
}

//處理非終結(jié)符ds
void PLXCompiler::DefinitionSque(int level,int &dx,symset fsys)
{
	symset fd,tmp,stop;
	//tmp.insert(INTESYM);
	//tmp.insert(LOGISYM);
	//test(tmp,fsys,20);
	if(m_sym==INTESYM || m_sym==LOGISYM)
	{

		fd=fsys;
		fd.insert(SEMICOLON);
		fd.insert(BEGINSYM);
		fd.insert(PROSYM);
		this->Definition(level,dx,fd);
		while(m_sym==SEMICOLON ||m_sym==INTESYM || m_sym==LOGISYM)
		{
			if(m_sym==SEMICOLON)
				getSym();
			else
				error(16);
			//getSym();
			if(m_sym==PROSYM || m_sym==BEGINSYM /*||(m_firsts.find(m_sym)!=m_firsts.end())*/)
			{
				error(36); // 多余的';'
				break;
			}
			this->Definition(level,dx,fd);
		}
		tmp.clear();
		//tmp.insert(PROSYM);
		tmp.insert(BEGINSYM);
		test(fsys,tmp,18);
	}
	else
	{
		tmp.clear();
		//tmp.insert(PROSYM);
		tmp.insert(BEGINSYM);
		stop=this->m_firsts;
		stop.erase(IDENT);
		stop.insert(PROSYM);
		test(tmp,stop,18);
	}
}

//處理非終結(jié)符proc
void PLXCompiler::Program(symset fsys)
{
	int dx=3,tx;  //記錄變量的偏移量
	item _item;
	memset(&_item,'\0',sizeof(_item));
	_item.adr=m_cx;//記錄當(dāng)前層代碼的開始位置
	m_table.push_back(_item);
    vector<item>::iterator pt;
	tx=m_tx;//記錄該層符號在符號表中的開始位置
	m_tx++;

	gen(JMP,0,0);

	symset  fds,fPro,fss,tmp;
	if(m_sym==PROGSYM)
	{
		getSym();
	}
	else
	{
		//error(12);//開始符號不是program
		tmp.insert(INTESYM);
		tmp.insert(LOGISYM);
		tmp.insert(PROSYM);
		tmp.insert(BEGINSYM);
		test(tmp,fsys,12);
	}
	//添加begin即ds的跟隨符號到fds中
	fds=fsys;
	//fds.insert(BEGINSYM);
	this->DefinitionSque(0,dx,fds);
	if(m_sym!=BEGINSYM)
	{
		error(10);  //
	}
	else
		getSym();
	//添加proc的跟隨符號到fsys中 
	fPro=fsys;
	fPro.insert(ENDSYM);
	fPro.insert(IDENT);
	fPro.insert(IFSYM);
	fPro.insert(WHILESYM);
	fPro.insert(REPEATSYM);
	fPro.insert(WRITESYM);
	fPro.insert(READSYM);
	fPro.insert(FORSYM);
	fPro.insert(CALLSYM);
	
	//this->Procedure(fPro);
	this->ProcedureSque(0,fPro);
	fss=fsys;
	fss.insert(ENDSYM);
	pt=m_table.begin()+tx;
	if(pt!=NULL)
	{
		(*((m_code.begin()+pt->adr))).a=m_cx;
		pt->adr=m_cx;
		pt->size=dx;
	}

	gen(INT,0,dx);
	this->SentenceSque(0,fss);

	gen(OPR,0,0);//RETURN

	if(m_sym==ENDSYM)
	{
		getSym();
		if(m_sym!=PERIOD)
		{
			error(0);
		}
	}
	else
	{
		error(11);
	}
}

void PLXCompiler::gen(fct f,int l,int a)
{
	if(l<0)
	{
		error(42);
	}
	instruction ins;
	ins.f=f;
	ins.a=a;
	ins.l=l;
	m_code.push_back(ins);
	m_cx++;
}

void PLXCompiler::listCode()
{
	char op[4]={'\0'};
	int num=0;
	
	printf("PCODE:\n");
	vector<instruction>::iterator p=m_code.begin();
	for(;p!=m_code.end();p++,num++)
	{
		switch(p->f)
		{
		case LIT:
			strcpy(op,"LIT");
			break;
		case OPR:
			strcpy(op,"OPR");
			break;
		case LOD:
			strcpy(op,"LOD");
			break;
		case STO:
			strcpy(op,"STO");
			break;
		case CAL:
			strcpy(op,"CAL");
			break;
		case INT:
			strcpy(op,"INT");
			break;
		case JMP:
			strcpy(op,"JMP");
			break;
		case JPC:
			strcpy(op,"JPC");
			break;
		case ADP:
			strcpy(op,"ADP");
			break;
		}
		printf("%-3d:%s %d %-2d\n",num,op,p->l,p->a);
		
	}
}

//
int PLXCompiler::base(int l)
{
	int b1=m_b;
	while(l>0)
	{
		b1=m_s[b1];
		l--;
	}
	return b1;
}

//
void PLXCompiler::plxInterpret()
{
	instruction i;
	int tmp;
	int offset=0;
	int flag=0;
	vector<instruction>::iterator pcode=this->m_code.begin();
	if(this->m_err>0)
	{
		return;
	}
	printf("%s\n","----Start PLX----");
	m_t=0;
	m_b=1;
	m_p=0;
	m_s[1]=0;
	m_s[2]=0;
	m_s[3]=0;
	do
	{
		i=*(pcode+m_p);
		m_p++;

		switch(i.f)
		{
		case LIT:
			m_t++;
			m_s[m_t]=i.a;
			break;
		case OPR:
			switch(i.a)
			{
			case 0:       //返回
				m_t=m_b-1;
				m_p=m_s[m_t+3];
				m_b=m_s[m_t+2];
				break;
			case 1:      //取負(fù)
				m_s[m_t]=-m_s[m_t];
				break;
			case 2:      //相加
				m_t--;
				m_s[m_t]+=m_s[m_t+1];
				break;
			case 3:     //相減
				m_t--;
				m_s[m_t]-=m_s[m_t+1];
				break;
			case 4:     //相乘
				m_t--;
				m_s[m_t]*=m_s[m_t+1];
				break;
			case 5:     //相除
				m_t--;
				if(m_s[m_t+1]==0)
				{
					error(43);
					return;
				}
				m_s[m_t]/=m_s[m_t+1];
				break;
			case 6:    //or
				m_t--;
				m_s[m_t]=(m_s[m_t] || m_s[m_t+1])?1:0;

				break;
			case 7:    //and
				m_t--;
				m_s[m_t]=(m_s[m_t] && m_s[m_t+1])?1:0;
				break;
			case 8:   //not
				m_s[m_t]=(m_s[m_t])?0:1;
				break;
			case 9:   //=
				m_t--;
				m_s[m_t]=(m_s[m_t]==m_s[m_t+1])?1:0;
				break;
			case 10:  //  /=
				m_t--;
				m_s[m_t]=(m_s[m_t]!=m_s[m_t+1])?1:0;
				break;
			case 11:  // <
				m_t--;
				m_s[m_t]=(m_s[m_t]<m_s[m_t+1])?1:0;
				break;
			case 12:  // <=
				m_t--;
				m_s[m_t]=(m_s[m_t]<=m_s[m_t+1])?1:0;
				break;
			case 13:  // >
				m_t--;
				m_s[m_t]=(m_s[m_t]>m_s[m_t+1])?1:0;
				break;
			case 14:  // >=
				m_t--;
				m_s[m_t]=(m_s[m_t]>=m_s[m_t+1])?1:0;
				break;
			case 15:  // write
				m_t--;
				printf("%d\n",m_s[m_t+1]);
				break;
			case 16:  //read
				printf("Input numbers:\n");
				scanf("%d",&tmp);
				m_t++;
				m_s[m_t]=tmp;
				break;
			case 17:
				m_s[m_t]++;

				break;
			}
			break;
		case LOD:
			m_t++;
			m_s[m_t]=m_s[base(i.l)+i.a];
			break;
		case STO:
			m_s[base(i.l)+i.a]=m_s[m_t];
			m_t--;
			break;
		case CAL:
			offset=0;
			m_s[m_t+1]=base(i.l);
			m_s[m_t+2]=m_b;

			m_s[m_t+3]=i.a;
			m_b=m_t+1;

			m_t+=3;
			break;
		case INT:
			flag++;
			if(flag==1)//表示在主程序里
				m_t+=i.a;
			else
				m_t+=i.a-3;
			break;
		case JMP:
			m_p=i.a;
			break;
		case JPC:
			if(m_s[m_t]==0)
			{
				m_p=i.a;
			}
			m_t--;
			break;
		case ADP:
			m_s[m_t+3+offset]=m_s[m_t];
			//fprintf(pfResult,"%d\n",m_s[m_t]);
			//m_t--;
			offset++;
			break;

		}
	}
	while(m_p!=0);
	printf("%s\n","----End PLX----");
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品在线免费视频| 国产色婷婷亚洲99精品小说| 欧美高清hd18日本| 6080国产精品一区二区| 欧美午夜精品理论片a级按摩| 色综合天天性综合| 在线观看91视频| 91麻豆精品国产91久久久久久| 91福利社在线观看| 欧美一级黄色大片| 欧美精品一区视频| 国产精品麻豆久久久| 亚洲另类色综合网站| 日本不卡123| 国产精品资源网| 91传媒视频在线播放| 6080国产精品一区二区| 久久精品人人爽人人爽| 一区二区三区产品免费精品久久75 | 蜜臀久久久久久久| 成人精品视频一区二区三区尤物| jlzzjlzz亚洲女人18| 这里只有精品99re| 国产精品久久99| 日本一不卡视频| 99久久精品免费观看| 欧美不卡一区二区| 日韩伦理免费电影| 国产精品综合在线视频| 6080yy午夜一二三区久久| 亚洲国产高清aⅴ视频| 精油按摩中文字幕久久| 91色乱码一区二区三区| 国产欧美一区二区精品婷婷| 午夜精品福利一区二区三区av| 波多野结衣亚洲一区| 久久久久国产精品麻豆ai换脸 | 国产麻豆视频一区| 日韩一二三区视频| 视频精品一区二区| 在线成人午夜影院| 日本午夜精品视频在线观看| 欧美日本在线观看| 免费看日韩a级影片| 欧美一区二区三区在线电影| 午夜欧美一区二区三区在线播放| 欧美中文字幕亚洲一区二区va在线| 中文字幕一区二区三区在线不卡 | 在线观看精品一区| 亚洲电影欧美电影有声小说| 色av一区二区| 日本一区中文字幕| 日韩欧美国产电影| 丰满岳乱妇一区二区三区| 亚洲国产精品v| 在线免费观看日本一区| 五月天激情小说综合| 精品99一区二区三区| 91美女片黄在线观看| 亚洲电影一级片| 久久久久久**毛片大全| 9人人澡人人爽人人精品| 亚洲精品午夜久久久| 69p69国产精品| 成人av在线资源网| 日本欧美一区二区| 国产精品久久久久永久免费观看| 97精品国产露脸对白| 日韩 欧美一区二区三区| 国产三级欧美三级日产三级99 | 精品国产91洋老外米糕| 91丨porny丨国产入口| 国产自产高清不卡| 丝袜亚洲另类欧美综合| 亚洲视频小说图片| 欧美成人video| 日韩一二三区视频| 欧美日韩视频第一区| 成人a免费在线看| 国产精品一区不卡| 国内精品免费**视频| 日韩电影在线免费观看| 一区二区久久久久久| 亚洲视频一二区| 最近中文字幕一区二区三区| 国产日韩v精品一区二区| 日韩一区二区免费在线观看| 91社区在线播放| 91碰在线视频| 91免费视频网| 欧美日韩高清在线| 欧美精品九九99久久| 欧美mv和日韩mv的网站| 精品久久人人做人人爰| 久久伊人蜜桃av一区二区| 久久影视一区二区| 国产精品国产成人国产三级| 国产精品网站在线播放| 国产精品二区一区二区aⅴ污介绍| 久久久久久毛片| 国产精品私人自拍| 亚洲美女视频在线观看| 亚洲一区在线免费观看| 日韩成人精品视频| 国产一区二区日韩精品| 国产成人av影院| 日本乱码高清不卡字幕| 日韩一区二区三区在线| 国产欧美视频一区二区三区| 亚洲制服丝袜av| 久久99久久99| 欧美视频一区二区三区在线观看| 日韩欧美国产1| 亚洲国产日韩一级| 国产精品一区二区在线看| 欧美亚洲国产怡红院影院| 制服丝袜国产精品| 一区二区免费看| 白白色 亚洲乱淫| 久久影院电视剧免费观看| 亚洲午夜免费电影| www.爱久久.com| 国产日韩亚洲欧美综合| 国产专区欧美精品| 91精品国产色综合久久ai换脸| 一区二区在线免费| 成人av在线电影| 欧美国产日韩一二三区| 2021国产精品久久精品| 色先锋aa成人| 亚洲欧美在线高清| 亚洲欧美国产高清| 国产一区二区三区在线观看免费视频| 亚洲图片有声小说| 青青草国产精品亚洲专区无| 国产日韩精品一区二区浪潮av| 精品成a人在线观看| 色天使色偷偷av一区二区| 国产日韩三级在线| 99re亚洲国产精品| 亚洲伦理在线精品| 欧美日韩另类国产亚洲欧美一级| 亚洲福利一二三区| 日韩欧美国产三级电影视频| 九九精品视频在线看| 国产丝袜欧美中文另类| 成人黄色小视频| 亚洲国产综合91精品麻豆| 欧美老肥妇做.爰bbww| 韩国精品久久久| 亚洲桃色在线一区| 91精品国产综合久久精品app | 精品久久久久香蕉网| 国产黑丝在线一区二区三区| 亚洲精品视频一区| 精品国产乱码久久久久久牛牛| 成人一区在线看| 日本在线播放一区二区三区| 国产精品久久久久久户外露出 | 日韩av高清在线观看| 国产精品无码永久免费888| 日韩一区二区三区在线| 欧美伊人精品成人久久综合97| 国产一二三精品| 免费三级欧美电影| 日韩极品在线观看| 亚洲已满18点击进入久久| 国产精品无人区| 国产亚洲精品福利| 1024亚洲合集| 国产精品久99| 亚洲欧洲av色图| 亚洲欧洲成人自拍| 国产精品电影一区二区| 国产精品久久久久9999吃药| 欧美经典三级视频一区二区三区| 久久免费精品国产久精品久久久久| 欧美吻胸吃奶大尺度电影 | 国产日韩欧美精品一区| 久久色.com| 国产精品成人在线观看| 夜夜嗨av一区二区三区四季av| 亚洲图片欧美综合| 日本va欧美va精品| 国产大陆亚洲精品国产| 99久免费精品视频在线观看 | 久久久不卡影院| 最新久久zyz资源站| 五月综合激情婷婷六月色窝| 日本不卡一二三区黄网| 亚洲另类在线制服丝袜| 婷婷成人激情在线网| 日韩精品1区2区3区| 国产又黄又大久久| 99九九99九九九视频精品| 欧美日韩亚洲不卡| 中文字幕av不卡| 亚洲黄一区二区三区| 免费在线观看一区二区三区| 色综合一区二区三区|