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

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

?? cgen.cpp

?? 內含源代碼和編譯實驗報告
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
			if(p2)   generate_stmt(p2);
			strcpy(register1,"ax");
			if(p2)	strcpy(register2,"bx");
			if(strcmp(pa_exp->m_strIDname,"+")==0){
				READTWO									//宏,讀取兩個源操作數。
				AllGlobals.code.write("\nadd\t",5);
				AllGlobals.code.write(register1,2);
				AllGlobals.code.write(",",1);
				AllGlobals.code.write(register2,2);		//兩個源操作數相加,結果入棧。
				AllGlobals.code.write("\npush\t",6);
				AllGlobals.code.write(register1,2);
			}
			else if(strcmp(pa_exp->m_strIDname,"-")==0
						|| strcmp(pa_exp->m_strIDname,"!=")==0){
				READTWO
				AllGlobals.code.write("\nsub\t",5);
				AllGlobals.code.write(register1,2);
				AllGlobals.code.write(",",1);
				AllGlobals.code.write(register2,2);
				AllGlobals.code.write("\npush\t",6);
				AllGlobals.code.write(register1,2);
			}
			else if(strcmp(pa_exp->m_strIDname,"*")==0){
				READTWO
				AllGlobals.code.write("\nmul\t",5);
				AllGlobals.code.write(register2,2);
				AllGlobals.code.write("\npush\t",6);
				AllGlobals.code.write(register1,2);
			}
			else if(strcmp(pa_exp->m_strIDname,"/")==0){
				READTWO
				AllGlobals.code.write("\ndiv\tbx\n",8);
				AllGlobals.code.write("cbw\t",4);	//除法所得的商要進行位擴展。
				AllGlobals.code.write("\npush\t",6);
				AllGlobals.code.write(register1,2);
			}
			else if(strcmp(pa_exp->m_strIDname,"=")==0){
				READTWO
				AllGlobals.code.write("\nmov\t",5);
				AllGlobals.code.write(pa_exp->m_pchild[0]->m_strIDname,
							strlen(pa_exp->m_pchild[0]->m_strIDname));
				AllGlobals.code.write(",",1);
				AllGlobals.code.write(register2,2);
			}
			else if(strcmp(pa_exp->m_strIDname,"<")==0 ||
							strcmp(pa_exp->m_strIDname,"<=")==0
								|| strcmp(pa_exp->m_strIDname,"==")==0){
				READTWO
				AllGlobals.code.write("\nsub\t",5);
				AllGlobals.code.write(register1,2);
				AllGlobals.code.write(",",1);
				AllGlobals.code.write(register2,2);
				AllGlobals.code.write("\npush\t",6);
				AllGlobals.code.write(register1,2);
			}
			else if(strcmp(pa_exp->m_strIDname,">")==0 ||
							strcmp(pa_exp->m_strIDname,">=")==0){
				READTWO
				AllGlobals.code.write("\nsub\t",5);
				AllGlobals.code.write(register2,2);
				AllGlobals.code.write(",",1);
				AllGlobals.code.write(register1,2);
				AllGlobals.code.write("\npush\t",6);
				AllGlobals.code.write(register1,2);
			}
			else if(strcmp(pa_exp->m_strIDname,"!")==0){
				AllGlobals.code.write("\npop\t",5);
				AllGlobals.code.write(register1,2);
				AllGlobals.code.write("\nnot\t",5);
				AllGlobals.code.write(register1,2);
				AllGlobals.code.write("\npush\t",6);
				AllGlobals.code.write(register1,2);
			}
			else if(strcmp(pa_exp->m_strIDname,"&&")==0){
				READTWO
				AllGlobals.code.write("\nand\t",5);
				AllGlobals.code.write(register1,2);
				AllGlobals.code.write(",",1);
				AllGlobals.code.write(register2,2);
				AllGlobals.code.write("\npush\t",6);
				AllGlobals.code.write(register1,2);
			}
			else if(strcmp(pa_exp->m_strIDname,"||")==0){
				READTWO
				AllGlobals.code.write("\nor\t",4);
				AllGlobals.code.write(register1,2);
				AllGlobals.code.write(",",1);
				AllGlobals.code.write(register2,2);
				AllGlobals.code.write("\npush\t",6);
				AllGlobals.code.write(register1,2);
			}
			break;
	}
}

/****************************************************************
**處理除表達式外的其他語句體。
*****************************************************************/
void Cgenerator::generator_substmt(CTreeNode* pa_Stmt){
	//五個靜態變量用于保存產生的符號地址。
	static char temp1[41],temp2[41],temp3[41],temp4[41],temp5[41];
	CTreeNode *p;
	switch(pa_Stmt->kind.m_EnStmtKind){
		case IfK:
			generate_stmt(pa_Stmt->m_pchild[0]);
			JUDGE_CONDITION(->)					//判定條件表達式,
			generator_unique_addr(pa_Stmt);	
			strcpy(temp4,pa_Stmt->m_strIDname);
			AllGlobals.code.write(temp4,strlen(temp4));
			generator_unique_addr(pa_Stmt);
			strcpy(temp5,pa_Stmt->m_strIDname);
			AllGlobals.code.write("\njmp\t",5);
			AllGlobals.code.write(temp5,strlen(temp5));
			AllGlobals.code.write("\n",1);
			AllGlobals.code.write(temp4,strlen(temp4));
			AllGlobals.code.write(":\n",2);
			p=pa_Stmt->m_pchild[1];
			while(p){
				generate_stmt(p);
				p=p->m_pbrother;}
			if(pa_Stmt->m_pchild[2]!=NULL){ //如果有else語句。
				generator_unique_addr(pa_Stmt);	
				strcpy(temp4,pa_Stmt->m_strIDname);
				AllGlobals.code.write("\njmp\t",5);
				AllGlobals.code.write(temp4,strlen(temp4));
				AllGlobals.code.write("\n",1);
				AllGlobals.code.write(temp5,strlen(temp5));
				AllGlobals.code.write(":\n",2);
				p=pa_Stmt->m_pchild[2];
				while(p){
					generate_stmt(p);
					p=p->m_pbrother;}
				AllGlobals.code.write("\n",1);
				AllGlobals.code.write(temp4,strlen(temp4));
				AllGlobals.code.write(":\n",2);
			}
			else{
				AllGlobals.code.write("\n",1);
				AllGlobals.code.write(temp5,strlen(temp5));
				AllGlobals.code.write(":\n",2);
			}
			break;
		case WhileK:
			generator_unique_addr(pa_Stmt);	
			strcpy(temp1,pa_Stmt->m_strIDname);
			AllGlobals.code.write("\n",1);
			AllGlobals.code.write(temp1,strlen(temp1));
			AllGlobals.code.write(":\n",2);
			generator_unique_addr(pa_Stmt);	
			strcpy(temp2,pa_Stmt->m_strIDname);
			generate_stmt(pa_Stmt->m_pchild[0]);
			JUDGE_CONDITION(->)
			generator_unique_addr(pa_Stmt);	
			strcpy(temp3,pa_Stmt->m_strIDname);
			AllGlobals.code.write(temp3,strlen(temp3));
			AllGlobals.code.write("\njmp\t",5);
			AllGlobals.code.write(temp2,strlen(temp2));
			AllGlobals.code.write("\n",1);
			AllGlobals.code.write(temp3,strlen(temp3));
			AllGlobals.code.write(":\n",2);
			p=pa_Stmt->m_pchild[1];
			while(p){
				generate_stmt(p);
				p=p->m_pbrother;}
			AllGlobals.code.write("\njmp\t",5);
			AllGlobals.code.write(temp1,strlen(temp1));
			AllGlobals.code.write("\n",1);
			AllGlobals.code.write(temp2,strlen(temp2));
			AllGlobals.code.write(":\n",2);
			break;
		case ForK:
			generate_stmt(pa_Stmt->m_pchild[0]);//for語句的第一個表達式初始化循環計數。
			generator_unique_addr(pa_Stmt);	
			strcpy(temp1,pa_Stmt->m_strIDname);
			generator_unique_addr(pa_Stmt);	
			strcpy(temp2,pa_Stmt->m_strIDname);
			AllGlobals.code.write("\n",1);
			AllGlobals.code.write(temp1,strlen(temp1));
			AllGlobals.code.write(":\n",2);
			generate_stmt(pa_Stmt->m_pchild[0]->m_pbrother);//第二個為條件句。
			JUDGE_CONDITION(->m_pbrother->)
			generator_unique_addr(pa_Stmt);	
			strcpy(temp3,pa_Stmt->m_strIDname);
			AllGlobals.code.write(temp3,strlen(temp3));
			AllGlobals.code.write("\njmp\t",5);
			AllGlobals.code.write(temp2,strlen(temp2));
			AllGlobals.code.write("\n",1);
			AllGlobals.code.write(temp3,strlen(temp3));
			AllGlobals.code.write(":\n",2);
			generate_stmt(pa_Stmt->m_pchild[0]->m_pbrother->m_pbrother);
			p=pa_Stmt->m_pchild[1];
			while(p){
				generate_stmt(p);
				p=p->m_pbrother;}
			AllGlobals.code.write("\njmp\t",5);
			AllGlobals.code.write(temp1,strlen(temp1));
			AllGlobals.code.write("\n",1);
			AllGlobals.code.write(temp2,strlen(temp2));
			AllGlobals.code.write(":\n",2);
			break;
		case WritebK://writeb語句只寫一個字符,可直接調用中斷進行。
			if(pa_Stmt->m_pchild[0]->kind.m_EnExpKind==ConstK && 
										pa_Stmt->m_pchild[0]->m_EnTypevalue==CCHAR){
				AllGlobals.code.write("\nmov\tah,2h",10);//字符要加單引號,
				AllGlobals.code.write("\nmov\tdl,'",9);
				AllGlobals.code.write(pa_Stmt->m_pchild[0]->m_strIDname,1);
				AllGlobals.code.write("'",1);}
			else if(pa_Stmt->m_pchild[0]->kind.m_EnExpKind==ConstK){
				AllGlobals.code.write("\nmov\tah,2h",10);//數字將作為ascII碼值處理。
				AllGlobals.code.write("\nmov\tdl,",8);
				AllGlobals.code.write(pa_Stmt->m_pchild[0]->m_strIDname,
										strlen(pa_Stmt->m_pchild[0]->m_strIDname));}
			else{
				generate_stmt(pa_Stmt->m_pchild[0]);
				AllGlobals.code.write("\npop\tax",7);
				AllGlobals.code.write("\nmov\tah,2h",10);
				AllGlobals.code.write("\nmov\tdx,ax",10);}
				AllGlobals.code.write("\nint\t21h",8);
			break;
		case WritedK://writed只要對參數調用顯示例程即可。
			generate_stmt(pa_Stmt->m_pchild[0]);
			AllGlobals.code.write("\nCall\tShow@@Show",16);
			break;
		case GotoK:
			AllGlobals.code.write("\njmp\t",5);
			AllGlobals.code.write(pa_Stmt->m_pchild[0]->m_strIDname,
								strlen(pa_Stmt->m_pchild[0]->m_strIDname));
			break;
		case AddressK:
			AllGlobals.code.write("\n",1);
			AllGlobals.code.write(pa_Stmt->m_pchild[0]->m_strIDname,
										strlen(pa_Stmt->m_pchild[0]->m_strIDname));
			AllGlobals.code.write(":",1);
			break;
		case BreakK://break語句跳到循環控制語句的結尾處。
			AllGlobals.code.write("\njmp\t",5);
			AllGlobals.code.write(temp2,strlen(temp2));
			break;
		case ContinueK://continue語句跳到循環控制語句的起始處。
			AllGlobals.code.write("\njmp\t",5);
			AllGlobals.code.write(temp1,strlen(temp1));
			break;
		case ReturnK:
			if(strcmp(pa_Stmt->m_strScope,"main")!=0)
				AllGlobals.code.write("\npop\tbp",7);
			if(pa_Stmt->m_pchild[0] && strcmp(pa_Stmt->m_strScope,"main")!=0)	
					generate_stmt(pa_Stmt->m_pchild[0]);
			if(pa_Stmt->m_pbrother!=NULL ||//return后面還有語句,則必須寫上ret,否則函數結束時
						(pa_Stmt->m_pfather->m_Ennodekind!=FuncK //由函數自己負責。
								&& pa_Stmt->m_pfather->m_pbrother!=NULL)){
				if(strcmp(pa_Stmt->m_strScope,"main")!=0)
						AllGlobals.code.write("\npush\tbp",9);
				AllGlobals.code.write("\nret\n",5);}
			break;
		case CallK:
			p=pa_Stmt->m_pchild[1];
			while(p){
				generate_stmt(p);
				p=p->m_pbrother;}//依次處理函數調用里的所有實參。
			AllGlobals.code.write("\ncall\t",6);
			AllGlobals.code.write(pa_Stmt->m_pchild[0]->m_strIDname,strlen(pa_Stmt->m_pchild[0]->m_strIDname));
			break;
		}
}
				
/****************************************************************
**用于為代碼產生唯一的符號地址,符號地址的格式為:
**"作用域@@序號"
****************************************************************/
void Cgenerator::generator_unique_addr(CTreeNode *pa_name){
	char temp[5];
	strcpy(pa_name->m_strIDname,pa_name->m_strScope);
	strcat(pa_name->m_strIDname,"@@");
	itoa(m_iunique,temp,5);
	m_iunique++;
	strcat(pa_name->m_strIDname, temp);
}




?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品看片你懂得| 日韩中文欧美在线| 亚洲一区二区三区四区五区黄| 一区二区三区中文在线| 免费人成精品欧美精品| 国产成人精品亚洲午夜麻豆| 色综合久久88色综合天天6| 日韩欧美www| 精品国产露脸精彩对白| 国产精品的网站| 日韩国产欧美视频| 成人免费视频网站在线观看| 日本久久一区二区| 欧美一区二区三区在线看| 欧美韩国日本不卡| 亚洲高清三级视频| 成人的网站免费观看| 欧美日韩激情一区二区| 国产精品丝袜一区| 久久成人羞羞网站| 国产69精品一区二区亚洲孕妇| 在线观看欧美日本| 精品久久久久久无| 午夜日韩在线电影| 99精品热视频| 欧美韩国一区二区| 另类成人小视频在线| 欧美午夜精品一区二区三区| 国产日韩三级在线| 久久精品国产亚洲aⅴ | 欧美日韩中文字幕一区二区| 日韩欧美一区在线观看| 91在线porny国产在线看| 欧美一区二区三区小说| 欧美精三区欧美精三区| 亚洲美女偷拍久久| 丁香一区二区三区| 欧美不卡视频一区| 日韩国产在线观看一区| 日韩电影在线一区| 欧美精品 日韩| 亚洲色图欧美在线| 久久se精品一区二区| 国产一区二区免费看| 欧美疯狂做受xxxx富婆| 亚洲一区二区三区四区在线| 91天堂素人约啪| 亚洲欧洲一区二区三区| 91亚洲男人天堂| 精品国产欧美一区二区| 日韩三级在线观看| 一区二区三区日韩在线观看| 北岛玲一区二区三区四区| 久久新电视剧免费观看| 国产在线不卡一区| 精品国内片67194| 久久99精品国产麻豆婷婷洗澡| 欧美一卡二卡三卡四卡| 爽好久久久欧美精品| 欧美伦理视频网站| 日韩精品亚洲一区二区三区免费| 正在播放一区二区| 麻豆91在线看| 久久亚洲精品小早川怜子| 国产伦精品一区二区三区在线观看| ww亚洲ww在线观看国产| 国产成人免费视频网站 | 99久久精品情趣| 精品日韩一区二区| 国产suv一区二区三区88区| 国产日韩欧美电影| 色综合色综合色综合色综合色综合 | 国产欧美一区二区在线观看| 成人一级片在线观看| 国产精品拍天天在线| 色综合视频一区二区三区高清| 午夜精品成人在线| 精品国产一区二区三区不卡 | 国产欧美一区二区三区网站| 国产美女在线观看一区| 国产欧美日本一区视频| 欧美亚洲自拍偷拍| 久久99久久久欧美国产| 国产精品免费久久久久| 欧美调教femdomvk| 精品一区二区三区久久久| 欧美成人三级电影在线| 狠狠狠色丁香婷婷综合久久五月| 久久久91精品国产一区二区三区| 成人手机在线视频| 亚洲综合一区二区三区| 欧美一区二区女人| 韩国精品免费视频| 国产精品视频在线看| 国产91精品免费| 国产农村妇女毛片精品久久麻豆| 成人18精品视频| 亚洲成在人线在线播放| 1024国产精品| www国产精品av| 欧美性猛交一区二区三区精品| 国精产品一区一区三区mba桃花| 1区2区3区国产精品| 久久色在线观看| 欧美三级午夜理伦三级中视频| 国产激情一区二区三区| 日本三级亚洲精品| 亚洲素人一区二区| 2021国产精品久久精品 | 国内不卡的二区三区中文字幕 | 亚洲一区二区三区四区五区黄| 日韩视频一区二区在线观看| 91美女片黄在线| 国产成人综合网| 蜜桃精品视频在线观看| 亚洲成人你懂的| 一区二区三区欧美视频| 1024成人网色www| 日韩久久久精品| 91免费国产在线| 国产精品99久| 国内精品在线播放| 日本不卡一区二区三区高清视频| 一区二区欧美在线观看| 亚洲欧洲日产国码二区| 国产精品久久久久久久久快鸭 | 免费观看一级特黄欧美大片| 亚洲精品成a人| 337p日本欧洲亚洲大胆精品| 日韩久久精品一区| 日韩精品在线一区| 日韩欧美国产系列| 欧美成人精品1314www| 日韩三级视频中文字幕| 欧美一区二区三区在线电影| 91精品国产品国语在线不卡| 欧美欧美欧美欧美| 6080亚洲精品一区二区| 色综合一区二区| 99国产精品一区| 色噜噜狠狠一区二区三区果冻| 97久久精品人人做人人爽 | 国产欧美视频一区二区三区| 国产喂奶挤奶一区二区三区| 中文字幕av一区二区三区| 国产精品精品国产色婷婷| 亚洲欧美偷拍三级| 亚洲已满18点击进入久久| 亚洲午夜精品17c| 蜜桃精品视频在线观看| 国产一区二区三区日韩| 高清不卡一区二区| 91搞黄在线观看| 91精品午夜视频| 国产精品美女一区二区三区| 中文字幕一区二区三区色视频| 怡红院av一区二区三区| 婷婷综合另类小说色区| 国产真实乱子伦精品视频| 国产a精品视频| 在线这里只有精品| 精品理论电影在线| 最好看的中文字幕久久| 亚洲成av人片www| 国产一区二区三区免费在线观看| 91一区二区三区在线观看| 91麻豆精品国产91久久久久久| 欧美mv日韩mv| 亚洲欧洲在线观看av| 日韩av中文在线观看| 成人综合日日夜夜| 不卡欧美aaaaa| 欧美日韩亚洲综合一区| 欧美肥大bbwbbw高潮| 亚洲欧洲精品一区二区三区| 一区二区三区欧美激情| 精品一区二区在线播放| 色婷婷综合激情| 久久免费偷拍视频| 午夜免费久久看| 波多野结衣亚洲| 精品处破学生在线二十三| 亚洲色大成网站www久久九九| 亚洲高清免费观看高清完整版在线观看 | 99国产精品久久久久久久久久久| 欧美欧美午夜aⅴ在线观看| 久久久久久久性| 亚洲一区二区三区影院| 精品亚洲欧美一区| 欧美在线观看视频一区二区| 国产亚洲成年网址在线观看| 日韩国产欧美在线观看| 91久久精品网| 日韩理论电影院| 国产乱色国产精品免费视频| 91麻豆精品国产91久久久更新时间 | 欧美在线一二三| ㊣最新国产の精品bt伙计久久| 精品一区免费av| 日韩一区二区三区三四区视频在线观看|