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

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

?? sentence.cpp

?? 編譯原理中的語法分析和語義分析
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "sentence.h"
#include "fstream.h"
#include "iostream.h"
#include "stdlib.h"
#include "string.h"
#include "keyword.h"
#include "stdio.h"
#include "conio.h"
/*詞法分析結果文件中的非法信息在語法分析中,在給出錯誤信息后,自動跳過,繼續進行分析*/

sentence::sentence()//構造函數初始化各個變量
{
	ErrorFile.open("error.txt",ios::nocreate|ios::out);
	if(ErrorFile.fail())
	{
		cout<<"程序初始化失敗!程序將退出!"<<endl;
		exit(0);
	}
	ResultFile.open("result.txt",ios::nocreate|ios::in);
	if(ResultFile.fail())
	{
		cout<<"程序初始化失敗!程序將退出!"<<endl;
		ErrorFile.close();
		exit(0);
	}
	CodeFile.open("code.txt",ios::nocreate|ios::out);
	if(CodeFile.fail())
	{
		cout<<"程序初始化失敗,程序將退出!"<<endl;
		ErrorFile.close();
		ResultFile.close();
		exit(0);
	}
	line=1;
	errornum=0;
	depth=0;
	varnum=0;
	constnum=0;
	dspnum=1;
	varlength=constlength=100;
	dpstack[0].depth=0;
	dpstack[0].varstart=0;
	dpstack[0].varend=0;
	dpstack[0].conststart=0;
	dpstack[0].constend=0;
	codenum=0;
	ErrorFile<<"                        "<<endl;
	varptr=(varnode *)malloc(sizeof(varnode)*100);
	if(varptr==NULL)
	{
		cout<<"初始化失敗,程序將退出!"<<endl;
		exit(0);
	}
	constptr=(constnode *)malloc(sizeof(constnode)*100);
	if(constptr==NULL)
	{
		free(varptr);
		cout<<"初始化失敗,程序將退出!"<<endl;
		exit(0);
	}
	update_data.head=(back_info *)malloc(sizeof(back_info)*100);
	if(update_data.head==NULL)
	{
		free(varptr);
		free(constptr);
		cout<<"初始化失敗,程序將退出!"<<endl;
		exit(0);
	}
	update_data.sum=0;
	update_data.length=100;
}
sentence::~sentence()//析構函數釋放變量和常量占用的存儲空間
{
//	cout<<depth<<endl;getch();
	ErrorFile.seekp(0L,ios::beg);
	ErrorFile<<"程序有"<<errornum<<"個錯誤!";
	ErrorFile.close();
	ResultFile.close();
	CodeFile.close();
	free(varptr);    //釋放變量表存儲空間
	free(constptr);   //釋放常量表存儲空間
	if(errornum==0)
	{
		cout<<"\n您的程序沒有錯誤,語法分析通過!"<<endl;
		cout<<"\n下面將進行信息回填,請稍等............"<<endl;
		UpdateFile();
		cout<<"\n本程序虛擬機指令共有 "<<codenum<<" 條,詳細信息見 code.txt"<<endl;
	}
	else
	{
		cout<<"\n您輸入的程序有"<<errornum<<"個錯誤,詳細信息見 error.txt !"<<endl;
	}
	free(update_data.head); //釋放回填表占用的內存
}
int sentence::Insert(int index,int number,int endnum,char * data)//向回填表中插入一個回填信息
//index表示要插入的回填信息在回填表中的位置,number表示回填信息的代碼編號
//endnum表示回填信息要跳轉到的代碼的編號,data回填的其他信息
{
	if(update_data.sum>=update_data.length)
	{
		update_data.length=update_data.sum+50;
		update_data.head=(back_info *)realloc(update_data.head,sizeof(back_info)*update_data.length);
		if(update_data.head==NULL)
		{
			cout<<"內存不足,將退出程序!"<<endl;
			free(varptr);
			free(constptr);
		}
	}
	update_data.head[index].number=number;
	update_data.head[index].endnum=endnum;
	strcpy(update_data.head[index].data,data);
	return 1;
}
int NumberLen(int number)
//返回數字的長度
{
	int i=0;
	do
	{
		i++;
		number/=10;
	}while(number);
	return i;
}
void sentence::UpdateFile()
{
	char code[300];
	int  i,num,j;
	if(update_data.sum==0)
	{
		cout<<"\n代碼回填成功!"<<endl;
		return ;
	}
	CodeFile.open("code.txt",ios::in|ios::out|ios::nocreate);
	if(CodeFile.fail())
	{
		cout<<"代碼回填失敗,程序分析失敗!"<<endl;
		return;
	}
	for(i=0,j=0;i<update_data.head[update_data.sum-1].number;i++)
	{
		CodeFile.getline(code,299,'\n');
		if(i==update_data.head[j].number-1)
		{			
			CodeFile.seekp(-strlen(code)-1,ios::cur);
			CodeFile<<"code"<<update_data.head[j].number<<update_data.head[j].data<<update_data.head[j].endnum;
		   	CodeFile.seekp(strlen(code)-12-NumberLen(update_data.head[j].number)-NumberLen(update_data.head[j].endnum)+1,ios::cur);
			j++;
		}
	}
	CodeFile.close();
	cout<<"\n信息回填成功!"<<endl;
}
int sentence::GetWord()
//從文件中讀取一個單詞及其標號,單詞的組成保存在 name,單詞的編號保存number中
{
	if(!ResultFile.eof())
	{
		name[0]='\0';
		ResultFile.getline(name,10,' ');
		if(ResultFile.eof())
			return 0;
		ResultFile>>number;
		ResultFile.get();
		if(number==ENTER)
		{
			line++;
//			cout<<endl;//////////////
			return GetWord();
		}
		else if(number==ERROR)
		{
			errornum++;
			ErrorFile<<"行:"<<line<<"\t錯誤"<<errornum<<":標識符 "<<name<<" 定義非法!"<<endl;
			return GetWord();
		}
//		cout<<" "<<name;///////////
//		getch();
		return 1;
	}
	else
		return 0;
}
void sentence::BackWord()
//使讀指針回退一個單位
{
	int length=0,number=this->number;
	while(number)
	{
		number/=10;
		length++;
	}
	length+=strlen(name)+3;
	ResultFile.seekg(-length,ios::cur);
}
void sentence::Error()
//基礎錯誤處理, 向下讀單詞知道遇到關鍵字或者專用符號為止
{
	int type;
	errornum++;
	if(number>=PROGRAM&&number<=ODD)
	{
		BackWord();
		return;
	}
	while(1)
	{
    	type=GetWord();
		if(type==0||number==29||number==35)
			break;
		else if(number>=PROGRAM&&number<=ODD)
		{
		//	BackWord();
			break;
		}
	}
}
int sentence::Insert(char *name)
//插入一個變量結點
{
	int index,i;
	index=varnum;
	if(varnum==varlength)
	{
		varlength+=100;
		varptr=(varnode *)realloc(varptr,sizeof(varnode)*(varlength));
		if(varptr==0)
		{
			cout<<"內存不足,程序將退出!"<<endl;
			exit(1);
		}
	}
	varnum++;
    for(i=dpstack[dspnum-1].varstart;i<index;i++)
	{
		if(strcmp(name,varptr[i].name)==0)
		{
			errornum++;
			ErrorFile<<"行:"<<line<<"\t錯誤"<<errornum<<":標識符 "<<name<<" 在變量中重復定義!"<<endl;
			return 0;
		}
	}
	for(i=dpstack[dspnum-1].conststart;i<constnum;i++)
	{
		if(strcmp(name,constptr[i].name)==0)
		{
			errornum++;
			ErrorFile<<"行:"<<line<<"\t錯誤"<<errornum<<":標識符 "<<name<<" 已經在常量中定義!"<<endl;
			return 0;
		}
	}
	dpstack[dspnum-1].varend=varnum;
	strcpy(varptr[index].name,name);
	cout<<"Insert var   "<<name<<endl;/////////////////////////
	return 1;
}
int sentence::IsVar(char *name)
//判斷一個標識符是否為變量,若不是變量返回-1,否則返回單詞的層次,其他信息存儲在var_con_info中
{
	int i,j;
	for(i=varnum-1;i>-1;i--)
	{
		if(strcmp(name,varptr[i].name)==0)
			break;
	}
//	cout<<i<<' '<<name<<' '<<varnum<<endl;getch();
	if(i==-1)
		return -1;
	else
	{
		for(j=dspnum-1;j>-1;j--)
		{
			if(i>=dpstack[j].varstart)
				break;
		}
		var_con_info.level=j;
		var_con_info.address=i-dpstack[j].varstart;
		return j;
	}
}
int sentence::Insert(char *name,char *value)
//插入一個常量結點
{
	int index,i;
	index=constnum;
	if(constnum==constlength)
	{
		constlength+=100;
		constptr=(constnode *)realloc(constptr,sizeof(constnode)*constlength);
		if(constptr==NULL)
		{
			cout<<"內存不足,程序將退出!"<<endl;
			exit(0);
		}
	}
	constnum++;
	for(i=dpstack[dspnum-1].conststart;i<index;i++)
	{
		if(strcmp(name,constptr[i].name)==0)
		{
	    	errornum++;
			ErrorFile<<"行:"<<line<<"\t錯誤"<<errornum<<":標識符 "<<name<<" 在常量中重復定義!"<<endl;
			return 0;
		}
	}
	dpstack[dspnum-1].constend=constnum-1;
	strcpy(constptr[index].name,name);
	strcpy(constptr[index].value,value);
	cout<<"Insert const   "<<name<<"  value:"<<value<<endl;/////////////////////////*/
	return 1;
}
int sentence::IsConst(char *name)
//判斷一個標識符是否為常量,返回值同IsVar
{
	int i,j;
	for(i=constnum-1;i>-1;i--)
	{
		if(strcmp(name,constptr[i].name)==0)
			break;
	}
	if(i==-1)
		return -1;
	else
	{
		for(j=dspnum-1;j>-1;j--)
		{
			if(i>=dpstack[j].conststart)
				break;
		}
		var_con_info.level=j;
		var_con_info.address=i;
		return j;
	}
}
int sentence::constanalyse()//常量分析
{
	int type,tag=0;
	char constname[10];
	while(1)
	{
		type=GetWord();
		if(type==0)
		{
			ConstError(4);
			errornum++;
			break;
		}		
		switch(tag)
		{
		case 0:if(number==ID)
			   {
				   strcpy(constname,name);
				   tag=1;
			   }
			   else
			   {
				   ConstError(0);
				   Error();//error
				   cout<<"const finish error"<<endl;///////////////////
				   return 0;
			   }
			   break;
		case 1:if(number==16)
				   tag=2;
			   else
			   {
				   ConstError(1);
				   Error();//error
				   cout<<"const finish error"<<endl;////////////////////////
				//   cout<<name<<"  "<<number<<endl;
				   return 0;
			   }
			   break;
		case 2:if(number==NUMBER)
			   {
				   Insert(constname,name);
				   tag=3;
			   }
			   else
			   {
				   ConstError(3);
				   Error();//error
				   cout<<"const finish error"<<endl;//////////////////
				   return 0;
			   }
			   break;
		case 3:if(number==29)
			   {
				   cout<<"const finish"<<endl;/////////////
				   return 1;
			   }
			   else if(number==30)
				   tag=0;
			   else
			   {
				   ConstError(3);
				   Error();//error
				   cout<<"const finish error"<<endl;////////////////////////////
				   return 0;
			   }
		}
	}
	cout<<"const finish"<<endl;
	return 1;
}
void sentence::ConstError(int tag)
{
	switch(tag)
	{
	case 0:
	case 2:
	case 3:ErrorFile<<"行:"<<line<<"\t錯誤"<<errornum+1<<":標識符 "<<name<<" 在常量定義中非法!"<<endl;
		   break;
	case 4:ErrorFile<<"行:"<<line<<"\t錯誤"<<errornum+1<<":常量定義缺少符號 ; "<<endl;
		   break;
	case 1:ErrorFile<<"行:"<<line<<"\t錯誤"<<errornum+1<<":標識符 "<<name<<" 前缺少 = 在常量定義中!"<<endl;
		   break;
	
	}
}
int sentence::varanalyse()//變量分析
{
	int type,tag=0;
	while(1)
	{
    	type=GetWord();
		if(type==0)
			break;
		else
		{
			switch(tag)
			{
			case 0:if(number==ID)
				   {
					   Insert(name);
					   tag=1;
				   }
				   else
				   {
					   VarError(0);
					   Error();  
					   return 0;
				   }
				   break;
			case 1:if(number==29)
				   {
					   cout<<"var finish"<<endl;///////////////////////////
					   return 1;
				   }
				   else if(number==30)
					   tag=0;
				   else
				   {
					   VarError(1);
					   Error(); 
					   cout<<"var finish error"<<endl;///////////////////
					   return 0;
				   }
			}
		}
	}
	return 1;
}
void sentence::VarError(int tag)//變量定義錯誤處理
{
	if(tag==0)
	{
		ErrorFile<<"行:"<<line<<"\t錯誤"<<errornum+1<<":標識符 "<<name<<" 在變量定義中非法!"<<endl;
	}
	else
	{
		ErrorFile<<"行:"<<line<<"\t錯誤"<<errornum+1<<":變量定義結束符號';'未在正確位置!"<<endl;
	}
}
int sentence::Proganalyse()
{
	int tag=0,type;
	while(1)
	{
		type=GetWord();
		if(type==0)
		{
			if(tag!=4)
			{
				errornum++;
				ErrorFile<<"行:"<<line<<"\t錯誤"<<errornum<<":編輯的程序缺少文件尾!"<<endl;
			}
			return 0;
		}
		if(tag==4)
		{
			ProgError(0);
			GetWord();
			continue;
		}
		switch(number)
		{
		case PROGRAM:if(tag==0)
					 {
						 tag=1;
					 }
			         else
					 {
						 ProgError(0);//error
					 }
					 break;
		case ID:if(tag==0)
				{
					ProgError(PROGRAM);//error
					tag=2;
				}
			    else if(tag==1)
				{
					tag=2;
				}
				else
				{
					ProgError(0);//error
				}
				break;
		case 29:if(tag==0)
				{
					ProgError(PROGRAM);//error
					tag=3;
				}
			    else if(tag==1)
				{
					ProgError(ID);//error
					tag=3;
				}
				else if(tag==2)
				{
					tag=3;
					Blockanalyse();
					if(number==35)
					{
						tag=4;
						cout<<"prog finish"<<endl;
						return 1;
					}
				}
				else
				{
					ProgError(0);//error
				}
				break;
		case 35:tag=4;
			    break;
		default:ProgError(0);
		}
	}
	cout<<"prog finish"<<endl;
	return 1;
}
void sentence::ProgError(int tag)
{
	errornum++;
	switch(tag)
	{
	case PROGRAM:ErrorFile<<"行:"<<line<<"\t錯誤"<<errornum<<":程序缺少一個程序開始標識符 program!"<<endl;
		         break;
	case ID:ErrorFile<<"行:"<<line<<"\t錯誤"<<errornum<<":程序未進行命名!"<<endl;
		    break;
	case 29:ErrorFile<<"行:"<<line<<"\t錯誤"<<errornum<<":程序名后缺少符號 ; "<<endl;
		    break;
	default:ErrorFile<<"行:"<<line<<"\t錯誤"<<errornum<<":標識符 "<<name<<" 在該處使用非法!"<<endl;
	}
}
int sentence::Blockanalyse()//block部分分析
{
	int tag=0,type=0,success;
	type=GetWord();
	while(1)
	{
		if(type==0||number==35)
    		return 0;
    	switch(number)
		{
     	case CONST:if(tag==0)
				   {
		     		   tag=1;
			    	   success=constanalyse();
					   if(success==1)
					   {
						   type=GetWord();
					///	   cout<<number<<endl;
					   }
				   }
		          else
				  {
		    		   BlockError(CONST);//error
		    		   Error();
				  }
		    	   break;
    	case VAR:if(tag<2)
				 {
	     			 tag=2;
	    			 success=varanalyse();
					 if(success==1)
					 {
						 type=GetWord();
					 }
	    		//	 cout<<"var"<<endl;/////////////
				 }
	    	     else
				 {
		    		 BlockError(VAR);
		    		 Error();//error
				 }
	    		 break;
    	case PROCEDURE:if(tag<3)
					   {
	    				   tag=3;
						   success=procanalyse();
						   if(success==0)
						   {
							   type=GetWord();
						   }
		    			   ;//proanalyse
					   }
		               else
					   {
		    			   BlockError(PROCEDURE);//error
						   GetWord();
						   GetWord();
						  
					//	   Error();//error
					   }
		    		   break;
    	case BEGIN:return bodyanalyse();
    	default:GetWord();break;
		}
	}
	return 1;
}
void sentence::BlockError(int tag)//block分析出錯處理
{
	switch(tag)
	{
	case CONST:ErrorFile<<"行:"<<line<<"\t錯誤"<<errornum+1<<":進行常量定義的位置非法!"<<endl;
		   break;
	case VAR:ErrorFile<<"行:"<<line<<"\t錯誤"<<errornum+1<<":進行變量定義的位置非法!"<<endl;
		   break;
	case PROCEDURE:ErrorFile<<"行:"<<line<<"\t錯誤"<<++errornum<<":過程定義的位置非法!"<<endl;
		           break;
	}
}
int sentence::procanalyse()//新過程分析
{
	int value,type,tag=0;
	depth++;
	dpstack[dspnum].varstart=dpstack[dspnum-1].varend;
	dpstack[dspnum].conststart=dpstack[dspnum-1].constend;
	dspnum++;
	while(tag!=5)
	{
		type=GetWord();
		if(type==0)
			return 0;
		switch(tag)
		{
		case 0:if(number==ID)
			   {
				   tag=1;
			   }
			   else
			   {
				   ProcError(ID);//error
			   }
			   break;
		case 1:if(number==27)//符號 (
			   {
				   tag=2;
			   }
			   else
			   {
				   ProcError(27);//error
			   }
			   break;
		case 2:if(number==ID)
			   {
				   tag=3;
				   Insert(name);//插入形參變量
			   }
			   else
			   {
				   if(number==28)
					   tag=4;
				   else if(number==29)
					   tag=5;
				   ProcError(ID+1);//error
			   }
			   break;
		case 3:if(number==30)//符號 ,
			   {
				   tag=2;
			   }
			   else if(number==28)// 符號 )
			   {
				   tag=4;
			   }
			   else
			   {
				   if(number==29)
					   tag=5;
				   ProcError(29);//error
			   }
			   break;
		case 4:if(number==29)//符號 ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
视频一区二区不卡| 色哟哟精品一区| 不卡一区二区在线| 欧美人体做爰大胆视频| 国产亚洲欧洲997久久综合| 亚洲线精品一区二区三区八戒| 另类综合日韩欧美亚洲| 色婷婷国产精品久久包臀| 2021中文字幕一区亚洲| 亚洲一区视频在线| 成人深夜福利app| 欧美va日韩va| 午夜一区二区三区在线观看| 国产成人免费视频精品含羞草妖精| 2017欧美狠狠色| 亚洲国产日韩综合久久精品| 成人午夜激情片| 久久亚洲一区二区三区明星换脸| 三级久久三级久久| 色狠狠一区二区| 国产精品污www在线观看| 精品一区在线看| 欧美一区二区日韩| 亚洲国产精品影院| 在线区一区二视频| 综合电影一区二区三区| 丁香六月综合激情| 久久精子c满五个校花| 久久国产精品免费| 欧美一区二区三区精品| 婷婷一区二区三区| 欧美丝袜第三区| 亚洲综合在线观看视频| 99久久伊人久久99| 亚洲天堂成人网| www.亚洲免费av| 中文字幕一区二区三区色视频 | 91黄色小视频| 亚洲欧美韩国综合色| zzijzzij亚洲日本少妇熟睡| 国产欧美日韩久久| 成人久久久精品乱码一区二区三区| 国产婷婷精品av在线| 国产成人午夜电影网| 久久久电影一区二区三区| 国产老女人精品毛片久久| 久久久久97国产精华液好用吗| 久久99精品久久久久久| 精品国产百合女同互慰| 国产99久久久精品| 国产视频视频一区| 91免费国产在线观看| 亚洲一级片在线观看| 9191精品国产综合久久久久久 | 国产午夜亚洲精品午夜鲁丝片| 国产一区二区三区香蕉| 国产人久久人人人人爽| 北条麻妃一区二区三区| 亚洲欧美aⅴ...| 91麻豆精品国产无毒不卡在线观看 | 色综合久久六月婷婷中文字幕| 亚洲精品第1页| 欧美一区二区三级| 福利一区在线观看| 亚洲一二三四在线观看| 日韩女优制服丝袜电影| 高清成人免费视频| 午夜亚洲福利老司机| 精品免费视频.| 91一区二区在线观看| 日本不卡一区二区三区| 久久精品视频一区二区| 91极品视觉盛宴| 激情小说欧美图片| 亚洲精品亚洲人成人网| 欧美一区二区三区白人| 不卡一区中文字幕| 日本中文字幕不卡| 国产精品女主播在线观看| 欧美日韩在线综合| 成人在线视频首页| 日韩精品三区四区| 国产精品青草综合久久久久99| 欧美老年两性高潮| 99精品视频在线观看| 天天综合网天天综合色| 中文字幕不卡在线观看| 欧美一区二区在线不卡| 91在线免费视频观看| 久久99精品一区二区三区三区| 亚洲人成精品久久久久久| 久久综合丝袜日本网| 欧美日韩中字一区| 97久久精品人人爽人人爽蜜臀 | 欧美日韩视频一区二区| 成人av午夜电影| 激情综合亚洲精品| 天堂久久久久va久久久久| 中文字幕亚洲视频| 久久精品亚洲乱码伦伦中文 | 91麻豆成人久久精品二区三区| 久久99久久久欧美国产| 石原莉奈在线亚洲三区| 一区二区不卡在线播放| 国产精品嫩草久久久久| 国产丝袜欧美中文另类| 欧美成人三级在线| 日韩美女主播在线视频一区二区三区| 日本乱人伦一区| 91免费国产视频网站| 成人动漫一区二区| 东方欧美亚洲色图在线| 国产伦精品一区二区三区视频青涩 | 欧美日韩一级片网站| 色8久久人人97超碰香蕉987| 99re热视频这里只精品| 99久久婷婷国产精品综合| 成人黄色小视频在线观看| 国产精品中文欧美| 国产精品99久久久久久久vr| 国产一区二区在线看| 韩国欧美一区二区| 国产在线播放一区三区四| 精品一区免费av| 国产伦精品一区二区三区免费| 精品系列免费在线观看| 久久精品免费看| 狠狠色狠狠色综合日日91app| 久久av老司机精品网站导航| 国产一区二区女| 风间由美一区二区av101| 丁香婷婷综合激情五月色| 成人性生交大片免费看在线播放 | 久久久久久久一区| 国产日产精品一区| 国产日韩欧美高清| 亚洲天堂网中文字| 亚洲18色成人| 国产综合一区二区| 福利一区在线观看| 91福利在线观看| 91精品国产福利| 久久久久97国产精华液好用吗| 国产免费成人在线视频| 椎名由奈av一区二区三区| 午夜不卡av在线| 国产麻豆视频一区二区| 成人网在线播放| 欧美日韩日日摸| 国产日产欧美一区| 一区二区三区91| 久久激五月天综合精品| 成人免费看视频| 4438x亚洲最大成人网| 2021国产精品久久精品| 一区二区三区**美女毛片| 美女网站在线免费欧美精品| 成人午夜精品在线| 9191成人精品久久| 国产精品三级电影| 丝袜a∨在线一区二区三区不卡| 国产精品亚洲成人| 欧美日韩国产大片| 日本一区二区三区免费乱视频| 亚洲成av人片在www色猫咪| 国产大片一区二区| 欧美三级韩国三级日本一级| 国产午夜一区二区三区| 日韩精品乱码av一区二区| 成人午夜看片网址| 精品国精品国产尤物美女| 亚洲制服丝袜在线| 成人精品小蝌蚪| 久久综合九色综合久久久精品综合| 亚洲精品久久久蜜桃| 国产成人精品影院| 日韩一区二区免费在线电影| 亚洲男人电影天堂| 岛国一区二区三区| 精品国产91乱码一区二区三区| 亚洲成av人片在线观看无码| av资源网一区| 国产女人18水真多18精品一级做 | 一区二区三区欧美| 国产99久久精品| 日韩欧美在线网站| 亚洲高清免费视频| 色噜噜夜夜夜综合网| 国产精品国产三级国产aⅴ原创| 美女国产一区二区| 在线不卡中文字幕播放| 亚洲一区二三区| 色88888久久久久久影院野外 | 91精品在线免费| 亚洲国产精品精华液网站| 91污在线观看| 国产精品二三区| 粉嫩aⅴ一区二区三区四区| 久久九九国产精品| 国产成人免费在线|