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

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

?? yy.cpp

?? 簡單易用 易看的編譯器 帶詞法分析和語法分析 輸出是二元式和四元式 使用讀取文件的方式進行編譯 功能基本完整
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "cifa.h"
#include "iostream.h"
#include "stdlib.h"
# define FALSE false 
# define TRUE true 
//FILE *fp1;
//fp1=fopen("sour.txt","r");
cifa c1(fopen("sour.txt","r"));
int qiantao=0;//錢掏變量
struct errorType
{
	int ErrorNumber;//語法語義錯誤代碼
	int ErrorAddress;//語義錯誤對應二元式的地址
};

struct yujutype
{
	int Etyp;
	int Evalue;
	int TC;
	int FC;
	int Code;
};


struct idtype //標識符表
{
	char name[20];//名字
	int typ;//類型1:integer,2:real,3:program or procedure name
	int kind;//屬性1:簡單變量,2:臨時變量,3:值參變量,4:變參變量
	int addr;//地址
};


struct leveltype //層次表
{
	char name[20];//名字
	int outern;//外層
	int lnum;//層次號
	int parnum;//參數個數
	int varnum;//變量個數
	int pointer;//標識符表首址
	int recl;//活動記錄長度
	int temp;//臨時變量首址
	int lnp;//入口
};

struct temptype //
{
	bool used;//
	int typ;//
	int taddr;//
};

struct argtype //
{
	int fl;//類型1:常數2:指令入口3:臨時變量4:直接訪問變量5:間接訪問變量6+i:第i外層變量
	int flvalue;//值 常數值|指令地址|相對地址
};

struct quadtype //四元式表
{
	int op;//操作
	argtype arg1;//操作數
	argtype arg2;//操作數
	argtype result;//結果
};

struct quanjutype //變量
{
	int lasent;//標識符表長度指針
	int lastbl;//層次表長度指針
	int currbl;//當前層指針
	int tempp;//變量表藏度指針
	int nxq;//四元式表長度指針
};


    errorType errorvalue;
   yujutype yujuvalue;
    CifaResult  yy_tCifa[500];
   char yy_QuadOpCodeTable[30][10];
   char yy_tErrorMessage[100][30];
  int yy_pCurSym=0;
	void coutgen();
    void coutty();
  int merge(int,int,int);
	int newtemp(int);
	int lookupp(char *);
	int lookupv_onelevel(char *,int);
	void backpatch(int,int,int,int);
	void addid(char *,int,int,int);
	quanjutype quanjuvalue;
	void gen(char *,int,int,int,int,int,int);
	idtype idtab[10000];
	leveltype leveltab[100];
	temptype temptab[100];
	quadtype quad[10000];
	int yy_nErrorAddress;
	int yy_nErrorNum;
	CifaResult  GetNextSym();
	void NextSym();
	CifaResult  GetCurSym();
	void initial();
    int s_GuanXi();
	int s_GuanXiBiaoDaShi();
	int s_BuErBiaoDaShi();
	int s_YingZi();
	int s_Xiang();
	int s_BiaoDaShi();
	int s_XunHuanYuJu();
	int s_TiaoJianYuJu();
	int s_FuZhiYuJu();
	int s_FuHeYuJu();
	int s_YuJu();
	int s_YuJuChuan();
	int s_XingChan();
	int s_XingChanBuFeng();
	int s_JianBianShuoMing();
	int s_ShuoMing();
	int s_ShuoMingChuan();
	int s_ChengXuTi();
	int s_ChengXu();

void gen(char * op,int a1,int a2,int a3,int a4,int a5,int a6)
{
	if (quanjuvalue.nxq>=1000-1) return;
	int r=29;
	for (int i=0;i<1000;i++)
	{
		if (!stricmp(yy_QuadOpCodeTable[i],op))
		{
			r=i;break;
		}
	}
	quad[quanjuvalue.nxq].op=r;
	quad[quanjuvalue.nxq].arg1.fl=a1;
	quad[quanjuvalue.nxq].arg1.flvalue=a2;
	quad[quanjuvalue.nxq].arg2.fl=a3;
	quad[quanjuvalue.nxq].arg2.flvalue=a4;
	quad[quanjuvalue.nxq].result.fl=a5;
	quad[quanjuvalue.nxq].result.flvalue=a6;
	quanjuvalue.nxq++;
}

void addid(char * name, int typ, int kind, int addr)
{
	if (quanjuvalue.lasent>=1000-1) return;
	::strcpy(idtab[quanjuvalue.lasent].name,name);
	idtab[quanjuvalue.lasent].typ=typ;
	idtab[quanjuvalue.lasent].kind=kind;
	idtab[quanjuvalue.lasent].addr=addr;
	quanjuvalue.lasent++;
}
void backpatch(int link, int point, int v1, int v2)
{
	if (link==0) return;
	switch (point)
	{
	case 2:
		backpatch(quad[link].arg1.fl,point,v1,v2);
		quad[link].arg1.fl=v1;
		quad[link].arg1.flvalue=v2;
		break;
	case 3:
		backpatch(quad[link].arg2.fl,point,v1,v2);
		quad[link].arg2.fl=v1;
		quad[link].arg2.flvalue=v2;
		break;
	case 4:
		backpatch(quad[link].result.fl,point,v1,v2);
		quad[link].result.fl=v1;
		quad[link].result.flvalue=v2;
		break;
	default:
		return;
	}
}
int lookupp(char * id)
{
	for (int i=0;i<quanjuvalue.lastbl;i++)
		if (!::stricmp(id,leveltab[i].name)) return i;
	return -1;
}
int lookupv_onelevel(char * idname, int idlevel)//
{
	if (!::stricmp(idname,leveltab[idlevel].name)) return -1;
	int n=leveltab[idlevel].varnum+leveltab[idlevel].parnum;
	int pointer=leveltab[idlevel].pointer;
	for (int i=pointer;i<(pointer+n);i++)
		if (!::stricmp(idname,idtab[i].name)) return i;
	return 0;
}

int lookupv_alllevel(char * name, int & level)
{
	int i=level;
	int r;
	while(1)
	{
		if (i<0) return 0;
		r=lookupv_onelevel(name,i);
		switch (r)
		{
		case -1:
			level=i;
			return -1;
		case 0:
			i--;
			break;
		default:
			level=i;
			return r;
		}
	}
}



CifaResult  GetCurSym()
{
	return yy_tCifa[yy_pCurSym];
}

void NextSym()
{
	yy_pCurSym++;
}


CifaResult  GetNextSym()
{
	return yy_tCifa[yy_pCurSym+1];
}


    
int YuYiFengXi()
{
	
	quanjuvalue.currbl=0;
	quanjuvalue.lasent=0;
	quanjuvalue.lastbl=0;
	quanjuvalue.nxq=0;
	quanjuvalue.tempp=0;
	gen("",0,0,0,0,0,0);//idtab start from 1
	addid("",0,0,0);//idtab start from 1
	yy_pCurSym=0;
	if(!s_ChengXu()) return FALSE;
	gen("_End_",0,0,0,0,0,0);//end note
     return 1;
}


int s_ChengXu()
{
switch (GetCurSym().type)
	{
	case 3://program
		break;
	default:
		yy_nErrorNum=3;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
		
	NextSym();
	switch (GetCurSym().type)
	{
	case 1://id
		break;
	default:
		yy_nErrorNum=4;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
//yy
	//對層次的副直
	leveltab[quanjuvalue.currbl].lnp=quanjuvalue.nxq+1;
	//cout<<"fasdfas亂七八糟 "<<leveltab[quanjuvalue.currbl].lnp<<endl;
	leveltab[quanjuvalue.currbl].lnum=0;
	strcpy(leveltab[quanjuvalue.currbl].name,GetCurSym().text);
	leveltab[quanjuvalue.currbl].outern=0;
	leveltab[quanjuvalue.currbl].parnum=0;
	leveltab[quanjuvalue.currbl].pointer=quanjuvalue.lasent;
	leveltab[quanjuvalue.currbl].recl=5;
	leveltab[quanjuvalue.currbl].varnum=0;
	leveltab[quanjuvalue.currbl].temp=quanjuvalue.tempp;
	quanjuvalue.lastbl++;
	gen("call",1,0,1,0,2,2);
	int link=quanjuvalue.nxq;
	gen("in",0,0,0,0,0,0);
//yy end
	NextSym();
	switch (GetCurSym().type)
	{
	case 30://;
		break;
	default:
		yy_nErrorNum=5;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
	NextSym();
	
	if (!s_ChengXuTi()) return FALSE;
//yy
//	printf("餓我我哦我外哦我哦我我忘我歐文\n");
	backpatch(link,2,2,leveltab[quanjuvalue.currbl].recl);
	gen("out",0,0,0,0,0,0);
	gen("ret",0,0,0,0,0,0);
	quanjuvalue.currbl=leveltab[quanjuvalue.currbl].outern;
	quanjuvalue.tempp=leveltab[quanjuvalue.currbl].temp;
//yy end
	switch (GetCurSym().type)
	{
	case 31://.
		break;
	default:
		yy_nErrorNum=6;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
		
	return TRUE;
}

int s_ChengXuTi()
{
	switch (GetCurSym().type)
	{
	case 14://integer
	case 15://real
//	case 5://procedure程序不要過程
		if (!s_ShuoMingChuan()) return FALSE;
		switch (GetCurSym().type)
		{
		case 30://;
			break;
		default:
			yy_nErrorNum=5;
			yy_nErrorAddress=yy_pCurSym;
			return FALSE;
		}
		NextSym();
		break;
	case 6://begin
		break;
	default:
		yy_nErrorNum=7;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
	switch (GetCurSym().type)
	{
	case 6://begin
		break;
	default:
		yy_nErrorNum=8;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
	NextSym();
	
	if (!s_YuJuChuan()) return FALSE;
	//cout<<"我愛我愛我愛我愛"<<endl;
	switch (GetCurSym().type)
	{
	case 7://end
		break;
	default:
		yy_nErrorNum=10;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
	NextSym();
	return TRUE;
}


int s_ShuoMingChuan()
{
	if (!s_ShuoMing()) return FALSE;
	while (GetCurSym().type==30 
		&& GetNextSym().type!=6)//; begin
	{
		NextSym();
		if (!s_ShuoMing()) return FALSE;
	}
	return TRUE;
}

int s_ShuoMing()
{
	switch (GetCurSym().type)
	{
	case 14://integer
	case 15://real
		if (!s_JianBianShuoMing()) return FALSE;
		break;
	//case 5://procedure
		//if (!s_GuoChengShuoMing()) return FALSE;
	//	break;
	default:
		yy_nErrorNum=11;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
	return TRUE;
}

int s_JianBianShuoMing()
{
	int typ;//yy
	switch (GetCurSym().type)
	{
	case 14://integer
		typ=1;//yy
		break;
	case 15://real
		typ=2;//yy
		break;
	default:
		yy_nErrorNum=12;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
	NextSym();
	switch (GetCurSym().type)
	{
	case 1://id
		break;
	default:
		yy_nErrorNum=14;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
//yy
	switch (lookupv_onelevel(GetCurSym().text,quanjuvalue.currbl))
	{
	case -1:
		yy_nErrorNum=31;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	case 0:
		addid(GetCurSym().text,typ,1,leveltab[quanjuvalue.currbl].recl);
		leveltab[quanjuvalue.currbl].varnum++;
		leveltab[quanjuvalue.currbl].recl+=typ;
		break;
	default:
		yy_nErrorNum=32;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
//yy end
	NextSym();
	while (GetCurSym().type==32) //,
	{
		NextSym();
		switch (GetCurSym().type)
		{
		case 1://id
			break;
		default:
			yy_nErrorNum=14;
			yy_nErrorAddress=yy_pCurSym;
			return FALSE;
		}
//yy
		switch (lookupv_onelevel(GetCurSym().text,quanjuvalue.currbl))
		{
		case -1:
			yy_nErrorNum=31;
			yy_nErrorAddress=yy_pCurSym;
			return FALSE;
		case 0:
			addid(GetCurSym().text,typ,1,leveltab[quanjuvalue.currbl].recl);
			leveltab[quanjuvalue.currbl].varnum++;
			leveltab[quanjuvalue.currbl].recl+=typ;
			break;
		default:
			yy_nErrorNum=32;
			yy_nErrorAddress=yy_pCurSym;
			return FALSE;
		}
//yy end
		NextSym();
	}
	return TRUE;
}



int  s_YuJuChuan()
{
	if (!s_YuJu()) return FALSE;

	while (GetCurSym().type==30)//;
	{
		NextSym();
		if (!s_YuJu()) return FALSE;
	}
	cout<<"語句串結束"<<endl;
	return TRUE;
}

int  s_YuJu()
{
	switch (GetCurSym().type)
	{
	case 6://begin
		if (!s_FuHeYuJu()) return FALSE;
		break;
	case 1://id
		if (!s_FuZhiYuJu()) return FALSE;
		break;
	case 8://if
		if (!s_TiaoJianYuJu()) return FALSE;
		break;
	case 11://while
		if (!s_XunHuanYuJu()) return FALSE;
		break;
//	case 13://call
	//	if (!s_GuoChengYuJu()) return FALSE;
	//	break;
	default:
		yy_nErrorNum=9;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
	return TRUE;
}

int  s_FuHeYuJu()
{
	switch (GetCurSym().type)
	{
	case 6://begin
		break;
	default:
		yy_nErrorNum=8;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
	NextSym();
	if (!s_YuJuChuan()) return FALSE;
	switch (GetCurSym().type)
	{
	case 7://end
		break;
	default:
		yy_nErrorNum=10;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
	NextSym();
	return TRUE;
}

int  s_FuZhiYuJu()
{
	switch (GetCurSym().type)
	{
	case 1://id
		break;
	default:
		yy_nErrorNum=20;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
//yy
	int idlevel=quanjuvalue.currbl;
	int idpoint=lookupv_alllevel(GetCurSym().text,idlevel);
	if (idpoint==0)
	{
		yy_nErrorNum=33;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
	if (idpoint==-1)
	{
		yy_nErrorNum=34;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
	int t1=idtab[idpoint].typ;
	int k1=idtab[idpoint].addr;
	int i1;
	if (idlevel==quanjuvalue.currbl)
	{
		if (idtab[idpoint].kind==4) i1=5;
		else i1=4;
	}
	else
	{
		i1=idlevel+6;
	}
//yy end
	NextSym();
	switch (GetCurSym().type)
	{
	case 29://:=
		break;
	default:
		yy_nErrorNum=21;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
	NextSym();
	if (!s_BiaoDaShi()) return FALSE;
//yy
	int t2;
	int k2;
	int i2=yujuvalue.Etyp;
	int j2=yujuvalue.Evalue;
	if (i2==1)
	{
		k2=j2;
		t2=1;
	}
	else if (i2==2)
	{
		k2=temptab[j2].taddr;
		t2=temptab[j2].typ;
		i2=3;
	}
	else
	{
		k2=idtab[j2].addr;
		t2=idtab[j2].typ;
		i2+=1;
	}
	if (t1<t2)
	{
		yy_nErrorNum=35;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
	if (t1==1) gen(":=I",i1,k1,i2,k2,0,0);
	else gen(":=R",i1,k1,i2,k2,0,0);
	if (i2==3) temptab[j2].used=FALSE;
//yy end
	return TRUE;
}

int  s_TiaoJianYuJu()
{
	switch (GetCurSym().type)
	{
	case 8://if
		break;
	default:
		yy_nErrorNum=22;
		yy_nErrorAddress=yy_pCurSym;
		return FALSE;
	}
	NextSym();
	if (!s_BuErBiaoDaShi()) return FALSE;
//yy
	int TCexit=yujuvalue.TC;
	int FCexit=yujuvalue.FC;
	backpatch(TCexit,4,2,quanjuvalue.nxq);
//	cout<<"if語句的真出口"<<quanjuvalue.nxq<<endl;
//yy end
	switch (GetCurSym().type)
	{
	case 9://then
		break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久激五月天综合精品| 一区二区三区四区国产精品| 亚洲国产精品ⅴa在线观看| 亚洲欧美偷拍另类a∨色屁股| 亚洲国产裸拍裸体视频在线观看乱了| 日韩高清不卡一区二区三区| 国产精品自在欧美一区| 97aⅴ精品视频一二三区| 678五月天丁香亚洲综合网| 久久亚洲一区二区三区明星换脸| 中文字幕一区二区三区四区不卡 | 国产福利91精品一区| 色综合久久综合网欧美综合网| 欧美日韩精品一区二区三区四区| 欧美成人国产一区二区| 亚洲天堂久久久久久久| 久久99久久精品欧美| 91看片淫黄大片一级| 欧美成人女星排名| 一区二区三区在线免费视频| 国模冰冰炮一区二区| 在线视频国内一区二区| 久久青草国产手机看片福利盒子 | 欧美年轻男男videosbes| 国产亚洲1区2区3区| 亚洲大片在线观看| 成人午夜视频在线| 精品国产乱码久久久久久影片| 亚洲日本电影在线| 国产乱人伦精品一区二区在线观看 | 欧美日韩国产首页| 国产精品视频免费| 精品一区二区三区av| 欧美日韩另类一区| 亚洲视频一区在线观看| 国产麻豆欧美日韩一区| 91麻豆精品国产91久久久久| 中文字幕视频一区| 国产精一区二区三区| 日韩午夜小视频| 亚洲图片欧美色图| 色综合久久九月婷婷色综合| 久久久不卡网国产精品二区| 免费黄网站欧美| 欧美日韩亚洲综合一区| 樱花草国产18久久久久| 成人午夜激情影院| 久久精品欧美一区二区三区不卡| 日韩电影在线看| 欧美日韩一区二区三区四区五区| 中文字幕永久在线不卡| 国产精品18久久久久久vr| 欧美第一区第二区| 免费xxxx性欧美18vr| 欧美日韩国产在线观看| 亚洲综合免费观看高清完整版在线| 成人一区在线看| 国产亚洲综合色| 国产不卡视频在线观看| 久久精品免视看| 国产精品白丝jk白祙喷水网站| 欧美mv和日韩mv国产网站| 男女男精品视频网| 91精品国产乱码| 日韩高清中文字幕一区| 欧美一区日本一区韩国一区| 婷婷亚洲久悠悠色悠在线播放 | 日韩专区在线视频| 91精品欧美综合在线观看最新| 成人高清视频免费观看| 91视频com| 在线观看视频一区| 亚洲欧美另类久久久精品| 99riav一区二区三区| 国产精品久久久久影院亚瑟 | 67194成人在线观看| 午夜精品视频一区| 91精品免费观看| 久久精品国产**网站演员| 日韩丝袜情趣美女图片| 久久99久久99小草精品免视看| 久久综合九色综合久久久精品综合 | 欧美影院午夜播放| 亚洲自拍偷拍av| 3d动漫精品啪啪一区二区竹菊| 男人的j进女人的j一区| 精品成人在线观看| 国产成人av电影在线观看| 国产精品日日摸夜夜摸av| 91丨porny丨首页| 亚洲va韩国va欧美va| 日韩欧美久久久| 国产精品99久久不卡二区| 亚洲三级在线看| 4438x亚洲最大成人网| 激情综合网最新| 日本一区二区三区高清不卡 | 亚洲风情在线资源站| 欧美一区二区三区四区在线观看| 美洲天堂一区二卡三卡四卡视频 | 国产一区二区不卡| 国产精品国产精品国产专区不蜜 | 一区二区三区中文字幕精品精品| 欧美日韩一区视频| 久久99久久99精品免视看婷婷| 国产女主播在线一区二区| 日本精品视频一区二区三区| 丝袜美腿亚洲综合| 国产三级欧美三级日产三级99| 91亚洲精品久久久蜜桃| 日韩激情视频网站| 亚洲国产精品v| 欧美视频你懂的| 国产在线不卡一区| 亚洲精品视频一区| 欧美成人激情免费网| 91亚洲资源网| 美女视频免费一区| 亚洲视频一区在线观看| 日韩欧美亚洲国产另类| 99久久国产综合色|国产精品| 天天综合天天综合色| 日本一区二区三区免费乱视频| 欧美性猛片aaaaaaa做受| 国产麻豆91精品| 天天综合色天天综合| 国产精品美女久久久久高潮| 91.麻豆视频| 99久久久无码国产精品| 蜜臀久久99精品久久久画质超高清| 中文字幕不卡在线观看| 日韩欧美一级片| 欧美在线不卡视频| 国产东北露脸精品视频| 日韩高清欧美激情| 一区二区三区av电影| 欧美极品美女视频| 欧美成人精品3d动漫h| 欧美丝袜丝交足nylons| 成人动漫一区二区在线| 九九精品视频在线看| 亚洲国产精品一区二区久久恐怖片| 日本一区二区成人在线| 日韩欧美一区二区三区在线| 色综合亚洲欧洲| 成人午夜视频福利| 激情小说欧美图片| 亚洲18色成人| 亚洲欧美色图小说| 中文字幕av一区 二区| 精品sm捆绑视频| 欧美日韩不卡一区二区| 在线看不卡av| bt7086福利一区国产| 国产精品亚洲午夜一区二区三区| 婷婷成人激情在线网| 亚洲精品视频一区| 亚洲日本在线观看| 国产精品污网站| 欧美激情一区在线观看| 久久久久久毛片| ww久久中文字幕| 日韩精品一区二| 欧美日韩成人在线| 欧美精品亚洲二区| 欧美日韩免费高清一区色橹橹| 99久久精品情趣| 成人av资源在线观看| 风流少妇一区二区| 国产精品一卡二| 国产成人啪午夜精品网站男同| 狠狠狠色丁香婷婷综合激情| 看片的网站亚洲| 蜜乳av一区二区三区| 狂野欧美性猛交blacked| 麻豆精品国产传媒mv男同 | 欧美哺乳videos| 在线播放中文一区| 91精品欧美一区二区三区综合在 | 视频在线在亚洲| 天天影视涩香欲综合网| 亚洲午夜久久久久久久久电影院 | 欧美日韩国产123区| 欧美日韩精品专区| 91精品国产一区二区三区蜜臀| 欧美色图在线观看| 制服丝袜日韩国产| 日韩欧美一级二级三级久久久| 日韩欧美国产一区二区三区 | 国产精品亚洲第一| 成人污污视频在线观看| 91香蕉视频mp4| 欧美中文字幕一区二区三区亚洲| 在线观看欧美精品| 欧美精品18+| 精品国精品自拍自在线| 国产欧美日韩精品一区| 亚洲视频中文字幕| 午夜久久久久久| 蜜桃久久av一区|