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

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

?? pl0.c

?? pl0編譯器,包括詞法分析,語法語義分析,以及解釋執行
?? C
?? 第 1 頁 / 共 2 頁
字號:
			if(getsym()==-1)
				return -1;
		}
		memcpy(ts,s,sizeof(int)*SYMNUM);
		if(stat(ptx,ts,lev)==-1)
			return -1;
		code[cx1].a=cx;
	}
	else if(sym==whilesym)
	{
		int cx1,cx2;
		cx1=cx;
		if(getsym()==-1)
			return -1;
		memcpy(ts,s,sizeof(int)*SYMNUM);
		ts[dosym]=1;
		if(con(ptx,ts,lev)==-1)
			return -1;
		cx2=cx;
		if(gen(jpc,0,0)==-1)
			return -1;
		if(sym!=dosym)
			error(31);
		else
		{
			if(getsym()==-1)
				return -1;
		}
		if(stat(ptx,ts,lev)==-1)
			return -1;
		if(gen(jmp,0,cx1)==-1)
			return -1;
		code[cx2].a=cx;
	}
	else if(sym==readsym)
	{
		if(getsym()==-1)
			return -1;
		if(sym!=lparen)
			error(19);
		else
		{
			if(getsym()==-1)
				return -1;
			if(sym==ident)
			{
				p=extable(id,*ptx);
				if(p==0)
					error(20);
				else
				{
					if(tb[p].kind!=variable)
					{
						error(21);
						p=0;
					}
					else
					{
						if(getsym()==-1)
							return -1;
					}
				}
				if(p!=0)
				{
					if(gen(opr,0,16)==-1||gen(sto,lev-tb[p].lev,tb[p].adr)==-1)
						return -1;
				}
			}
			else
				error(21);
			while(sym==comma)
			{
				if(getsym()==-1)
					return -1;
				if(sym!=ident)
					error(21);
				else
				{
					p=extable(id,*ptx);
					if(p==0)
						error(20);
					else
					{
						if(tb[p].kind!=variable)
						{
							error(21);
							p=0;
						}
						else
						{
							if(getsym()==-1)
								return -1;
						}
					}
					if(p!=0)
					{
						if(gen(opr,0,16)==-1||gen(sto,lev-tb[p].lev,tb[p].adr)==-1)
							return -1;
					}
				}
			}
			if(sym!=rparen)
			{
				error(22);
				while(!inset(sym,s))
				{
					if(getsym()==-1)
						return -1;
				}
			}
			if(getsym()==-1)
				return -1;
		}
	}
	else if(sym==writesym)
	{
		if(getsym()==-1)
			return -1;
		if(sym==lparen)
		{
			if(getsym()==-1)
				return -1;
			memcpy(ts,s,sizeof(int)*SYMNUM);
			ts[rparen]=1;
			ts[comma]=1;
			if(exp(ptx,ts,lev)==-1)
				return -1;
			if(gen(opr,0,14)==-1)
				return -1;
			while(sym==comma)
			{
				if(exp(ptx,ts,lev)==-1)
					return -1;
				if(gen(opr,0,14)==-1)
				return -1;
			}
			if(sym!=rparen)
				error(23);
			else
			{
				if(getsym()==-1)
					return -1;
			}
		}
		else
			error(24);
		if(gen(opr,0,15)==-1)
			return -1;
	}
	else
	{
		memset(ts,0,sizeof(int)*SYMNUM);
		if(test(s,ts,32)==-1)
			return -1;
	}
	return 0;
}

int exp(int *ptx,int *s,int lev)
{
	enum sbl tmp;
	int f=0;
	int ts[SYMNUM];
	if(sym==plus||sym==minus)
	{
		
		if(getsym()==-1)
			return -1;
		if(sym==minus)
			f=1;
	}
	memcpy(ts,s,sizeof(int)*SYMNUM);
	ts[plus]=1;
	ts[minus]=1;
	if(term(ptx,ts,lev)==-1)
		return -1;
	if(f==1)
	{
	if(gen(opr,0,1)==-1)
			return -1;
	}
	while(sym==plus||sym==minus)
	{
		tmp=sym;
		if(getsym()==-1)
			return -1;
		memcpy(ts,s,sizeof(int)*SYMNUM);
		ts[plus]=1;
		ts[minus]=1;
		if(term(ptx,ts,lev)==-1)
			return -1;
		if(tmp==plus)
		{
			if(gen(opr,0,2)==-1)
				return -1;
		}
		else   //if(tmp==minus)
		{
			if(gen(opr,0,3)==-1)
				return -1;
		}
	}
	return 0;
}

int term(int *ptx,int *s,int lev)
{
	enum sbl tmp;
	int ts[SYMNUM];
	memcpy(ts,s,sizeof(int)*SYMNUM);
	ts[times]=1;
	ts[slash]=1;
	if(fac(ptx,ts,lev)==-1)
		return -1;
	while(sym==times||sym==slash)
	{
		tmp=sym;
		if(getsym()==-1)
			return -1;
		if(fac(ptx,ts,lev)==-1)
			return -1;
		if(tmp==times)
		{
			if(gen(opr,0,4)==-1)
				return -1;
		}
		else  //if(tmp==slash)
		{
			if(gen(opr,0,5)==-1)
				return -1;
		}
	}
	return 0;
}

int fac(int *ptx,int *s,int lev)
{
	int ts[SYMNUM];
	int p;
	if(test(fcbsys,s,33)==-1)
		return -1;
	while(inset(sym,fcbsys))
	{
		if(sym==ident)
		{
			p=extable(id,*ptx);
			if(p==0)
				error(34);
			else
			{
				if(tb[p].kind==constant)
				{
					if(gen(lit,0,tb[p].val)==-1)
						return -1;
				}
				else if(tb[p].kind==variable)
				{
					if(gen(lod,lev-tb[p].lev,tb[p].adr)==-1)
						return -1;
				}
				else    //類型為過程
					error(35);
			}
			if(getsym()==-1)
				return -1;
		}
		else if(sym==number)
		{
			if(num>AMAX)
			{
				error(7);
				num=0;
			}
			if(gen(lit,0,num)==-1)
				return -1;
			if(getsym()==-1)
				return -1;
		}
		else 
		{
			if(sym==lparen)
			{
				if(getsym()==-1)
					return -1;
				memcpy(ts,s,sizeof(int)*SYMNUM);
				ts[rparen]=1;
				if(exp(ptx,ts,lev)==-1)
					return -1;
				if(sym!=rparen)
					error(36);
				else
				{
					if(getsym()==-1)
						return -1;
				}
			}
			if(test(s,fcbsys,37)==-1)
				return -1;
		}
	}
	return 0;
}

int con(int *ptx,int *s,int lev)
{
	int ts[SYMNUM];
	if(sym==oddsym)
	{
		if(getsym()==-1)
			return -1;
		if(exp(ptx,s,lev)==-1)
			return -1;
		if(gen(opr,0,6)==-1)
			return -1;
	}
	else
	{
		enum sbl tmp;
		memcpy(ts,s,sizeof(int)*SYMNUM);
		ts[eql]=1;
		ts[neq]=1;
		ts[lss]=1;
		ts[leq]=1;
		ts[gtr]=1;
		ts[geq]=1;
		if(exp(ptx,ts,lev)==-1)
			return -1;
		tmp=sym;
		if(sym!=eql&&sym!=neq&&sym!=lss&&sym!=leq&&sym!=gtr&&sym!=geq)
			error(38);
		else
		{
			if(getsym()==-1)
				return -1;
			memcpy(ts,s,sizeof(int)*SYMNUM);
			if(exp(ptx,ts,lev)==-1)
				return -1;
			if(tmp==eql)
			{
				if(gen(opr,0,8)==-1)
					return -1;
			}
			else if(tmp==neq)
			{
				if(gen(opr,0,9)==-1)
					return -1;
			}
			else if(tmp==lss)
			{
				if(gen(opr,0,10)==-1)
					return -1;
			}
			else if(tmp==leq)
			{
				if(gen(opr,0,11)==-1)
					return -1;
			}
			else if(tmp==gtr)
			{
				if(gen(opr,0,12)==-1)
					return -1;
			}
			else    //if(tmp==geq)
			{
				if(gen(opr,0,13)==-1)
					return -1;
			}
		}
	}
	return 0;
}

void itp()
{
	int sk[STACKSIZE];             //棧
	int t=0,b=0,p=0;               //t棧頂指針,b當前過程基指針,p當前指令指針    
	struct ins op;                 //當前指令
	sk[0]=sk[1]=sk[2]=0;
	printf("\nStart running\n");
	do{
		op=code[p];
		p++;
		if(op.f==lit)              //取常數到棧頂
		{
			sk[t]=op.a;
			t++;
		}
		else if(op.f==lod)         //取變量
		{
			sk[t]=sk[base(op.l,sk,b)+op.a];  //取相對當前過程數據基地址為a的內存的值到棧頂
			t++;
		}
		else if(op.f==sto)         //棧頂值存到相對當前過程數據基地址為a的內存
		{
			t--;
			sk[base(op.l,sk,b)+op.a]=sk[t];
		}
		else if(op.f==cal)        //子程序調用
		{
			sk[t]=base(op.l,sk,b);//父過程基地址入棧
			sk[t+1]=b;            //本過程基地址入棧
			sk[t+2]=p;            //當前指令入棧
			b=t;                  //基地址改為新過程基地址
			p=op.a;               //跳轉
		}
		else if(op.f==inte)       //分配三個聯系單元及變量內存
		{
			t+=op.a;
		}
		else if(op.f==jmp)        //跳轉
		{
			p=op.a;
		}
		else if(op.f==jpc)        //條件跳轉
		{
			t--;
			if(sk[t]==0)
				p=op.a;
		}
		else if(op.f==opr)
		{
			if(op.a==0)
			{
				t=b;
				b=sk[t+1];
				p=sk[t+2];
			}
			else if(op.a==1)
			{
				sk[t-1]=-sk[t-1];
			}
			else if(op.a==2)
			{
				t--;
				sk[t-1]=sk[t-1]+sk[t];
			}
			else if(op.a==3)
			{
				t--;
				sk[t-1]=sk[t-1]-sk[t];
			}
			else if(op.a==4)
			{
				t--;
				sk[t-1]=sk[t-1]*sk[t];
			}
			else if(op.a==5)
			{
				t--;
				sk[t-1]=sk[t-1]/sk[t];
			}
			else if(op.a==6)
			{
				sk[t-1]=sk[t-1]%2;
			}
			else if(op.a==8)
			{
				t--;
				sk[t-1]=(sk[t-1]==sk[t]);
			}
			else if(op.a==9)
			{
				t--;
				sk[t-1]=(sk[t-1]!=sk[t]);
			}
			else if(op.a==10)
			{
				t--;
				sk[t-1]=(sk[t-1]<sk[t]);
			}
			else if(op.a==11)
			{
				t--;
				sk[t-1]=(sk[t-1]<=sk[t]);
			}
			else if(op.a==12)
			{
				t--;
				sk[t-1]=(sk[t-1]>sk[t]);
			}
			else if(op.a==13)
			{
				t--;
				sk[t-1]=(sk[t-1]>=sk[t]);
			}
			else if(op.a==14)
			{
				t--;
				printf("%d",sk[t]);
				fprintf(fa2,"%d",sk[t]);
			}
			else if(op.a==15)
			{
				printf("\n");
				fprintf(fa2,"\n");
			}
			else if(op.a==16)
			{
				printf("?");
				fprintf(fa2,"?");
				scanf("%d",&sk[t]);
				fprintf(fa2,"%d\n",sk[t]);
				t++;
			}
		}
	}while(p!=0);
}

int base(int l,int *x,int b)   //通過當前過程基址求上l層的基址
{
	int btmp=b;
	while(l>0)
	{
		btmp=x[btmp];
		l--;
	}
	return btmp;
}

main()
{
	int nlev[SYMNUM];
	int k;
	printf("\n     * * * * * * * * * * *     PL0 Compiler v1.0     * * * * * * * * * * *      \n");
	printf("Input pl0 file name:");
	scanf("%s",fname);
	fin=fopen(fname,"r");
	if(fin==NULL)
		printf("Can't open %s!\n",fname);
	else
	{
		printf("List object code:\n");     /*輸出虛擬機代碼*/
		fa1=fopen("fa1.txt","w");
		fprintf(fa1,"Input pl0 file name:");
    	fprintf(fa1,"%s\n",fname);
		init();
		err=cx=cc=ll=0;
		ch=' ';
		if(getsym()!=-1)
		{
			fa=fopen("fa.txt","w");
			addset(nlev,dcbsys,stbsys,SYMNUM);
			nlev[period]=1;
			if(mb(0,0,nlev)==-1)
			{
				fclose(fa);
				fclose(fa1);
				fclose(fin);
				printf("\n");
				return 0;
			}
			fclose(fa1);
			if(sym!=period)
				error(39);
			printf("\n\n");
			fprintf(fa,"\n\n");
			for(k=0;k<cx;k++)
			{
				printf("%d\t%s\t%d\t%d\n",k,mc[code[k].f],code[k].l,code[k].a);
				fprintf(fa,"%d\t%s\t%d\t%d\n",k,mc[code[k].f],code[k].l,code[k].a);
			}
			if(err==0)
			{
				fa2=fopen("fa2.txt","w");
				itp();
				fclose(fa2);
			}
			else
			{
				printf("\n%d errors!\n",err);
				fprintf(fa,"\n%d errors!\n",err);
			}
		}
		fclose(fa);
		fclose(fin);
	}
	printf("\n");
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久97三级| 日韩视频永久免费| 91精品国产综合久久久久久久久久| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲精品日产精品乱码不卡| 免播放器亚洲一区| 在线观看视频一区二区欧美日韩| 久久精品夜夜夜夜久久| 日韩电影在线免费| 日本久久电影网| 国产精品久久久久久久久果冻传媒| 免费高清成人在线| 欧美日韩国产在线观看| 综合色中文字幕| 丁香网亚洲国际| 国产欧美一区二区精品性| 六月丁香综合在线视频| 91精品欧美一区二区三区综合在| 亚洲女人小视频在线观看| 成人激情视频网站| 国产精品传媒入口麻豆| 丰满岳乱妇一区二区三区| 精品成人在线观看| 紧缚捆绑精品一区二区| 久久久欧美精品sm网站| 热久久一区二区| 欧美成人高清电影在线| 久久99国产精品麻豆| 欧美精品123区| 日日摸夜夜添夜夜添国产精品| 欧美视频一区二区三区| 五月婷婷另类国产| 91精品国产综合久久精品app| 亚洲自拍偷拍欧美| 欧美日韩国产成人在线91| 午夜精品久久久久久久久久久| 欧美午夜精品一区二区三区| 亚洲一二三四在线观看| 欧美日韩国产免费| 麻豆免费精品视频| 国产午夜精品一区二区三区四区| 国产在线精品一区二区不卡了| 久久精品在这里| 99视频在线精品| 亚洲成人一区二区在线观看| 日韩一区二区三区免费看 | 97久久精品人人做人人爽| 成人欧美一区二区三区在线播放| 91视视频在线观看入口直接观看www| 成人欧美一区二区三区小说| 欧美日韩一区不卡| 久久精品国产在热久久| 国产精品激情偷乱一区二区∴| 成人污污视频在线观看| 亚洲一区二区三区自拍| 日韩精品一区二| 91小视频在线免费看| 免费视频最近日韩| 国产人成一区二区三区影院| 日本高清成人免费播放| 麻豆国产欧美日韩综合精品二区| 国产视频一区不卡| 欧美中文字幕一区二区三区| 捆绑调教美女网站视频一区| 亚洲日本va在线观看| 91精品国产综合久久久蜜臀图片| 国产精品一线二线三线精华| 亚洲精品日韩一| 久久久久久久国产精品影院| 91欧美一区二区| 久久国产综合精品| 亚洲综合精品自拍| 国产亚洲综合色| 欧美日韩一级大片网址| 国产大陆亚洲精品国产| 日韩精品欧美成人高清一区二区| 国产欧美一区二区精品性色| 69堂精品视频| 色播五月激情综合网| 精品一二三四在线| 亚洲国产精品久久艾草纯爱| 国产精品―色哟哟| 日韩美女在线视频| 欧美军同video69gay| 色综合久久综合| 成人午夜激情视频| 韩国精品主播一区二区在线观看| 一区二区高清视频在线观看| 欧美激情综合网| 精品国产成人系列| 这里只有精品99re| 欧美日韩国产经典色站一区二区三区 | 99re这里只有精品6| 免费国产亚洲视频| 日日噜噜夜夜狠狠视频欧美人| 亚洲手机成人高清视频| 国产三级一区二区三区| 欧美v日韩v国产v| 欧美一区二区二区| 7777精品伊人久久久大香线蕉的| 色域天天综合网| 91麻豆视频网站| 91在线一区二区| 99精品视频免费在线观看| 国产精品综合久久| 国产精选一区二区三区| 国产精品主播直播| 国产成人av一区二区三区在线 | 免费在线看成人av| 亚洲国产精品久久久男人的天堂| 亚洲自拍与偷拍| 一区二区不卡在线视频 午夜欧美不卡在| 欧美激情综合网| 17c精品麻豆一区二区免费| 中文字幕一区二区日韩精品绯色| 欧美激情综合网| 成人免费在线观看入口| 亚洲狼人国产精品| 五月婷婷激情综合| 美女视频免费一区| 国产呦精品一区二区三区网站| 久久精品久久综合| 国产成人精品一区二区三区网站观看| 成人在线一区二区三区| 91香蕉国产在线观看软件| 在线亚洲欧美专区二区| 3d成人动漫网站| 亚洲精品一区二区三区在线观看| 欧美精品一区二区精品网| 日本一区二区三区国色天香| 中文字幕一区二区三区在线观看| 自拍偷拍欧美激情| 亚洲成人av一区二区三区| 九九九久久久精品| 成人av电影在线| 欧洲av一区二区嗯嗯嗯啊| 久久精品一区二区三区不卡| 国产欧美一区二区精品忘忧草| 日本一区二区动态图| 亚洲免费av观看| 麻豆久久久久久久| 成人app软件下载大全免费| 欧美性大战久久久久久久| 欧美videos中文字幕| 国产精品电影院| 午夜av一区二区| 国产成人在线视频网址| 色婷婷综合久久久中文字幕| 91精品婷婷国产综合久久性色 | 精品久久国产字幕高潮| 中文字幕一区二区三区不卡| 日本成人中文字幕在线视频| 国产成人av电影在线观看| 欧美丝袜第三区| 国产亚洲综合性久久久影院| 亚洲成人动漫av| 国产成人高清视频| 91精品国产一区二区三区| 欧美韩国日本不卡| 日产欧产美韩系列久久99| 99v久久综合狠狠综合久久| 日韩午夜激情视频| 亚洲精品免费在线| 国产精品一区二区视频| 91精品在线麻豆| 亚洲精品菠萝久久久久久久| 国产一区二区精品在线观看| 欧美性大战久久| 亚洲欧洲精品一区二区三区不卡| 日韩电影一区二区三区| 色婷婷综合久久久久中文| 国产午夜三级一区二区三| 久久精品国产99| 欧美日韩国产一二三| 亚洲日本一区二区| 粉嫩高潮美女一区二区三区| 日韩女同互慰一区二区| 午夜精品久久久久久久久| 在线亚洲免费视频| 亚洲欧美在线高清| 99综合影院在线| 欧美激情一区二区三区| 国产成人综合自拍| 久久新电视剧免费观看| 久久精品国内一区二区三区| 日韩一区和二区| 日韩和欧美一区二区三区| 在线一区二区视频| 亚洲在线观看免费视频| 色婷婷av久久久久久久| 亚洲美女屁股眼交3| 91麻豆国产精品久久| 亚洲视频一区在线| 97精品电影院| 夜夜操天天操亚洲| 欧美日韩国产三级| 香蕉av福利精品导航| 91精品久久久久久久91蜜桃| 日韩精品亚洲专区| 精品剧情在线观看|