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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? 編譯原理.c

?? 編譯原理中PL/0程序的編譯過(guò)程.用C寫(xiě)的
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*編譯和運(yùn)行環(huán)境
* 1 Visual C++ 6.0, Visual C++.NET和Visual C++.NET 2003
* WinNT,Win2000,WinXP and Win2003
* 2 gcc version 3.3.2 20031022(Red Hat Linux 3.3.2-1)
*    Redhat Fedora core 1
*    Intel 32 platform
* 使用方法:
* 運(yùn)行后輸入PL/0源程序文件名
* 回答是否輸出虛擬機(jī)代碼
* 回答是否輸出名字表
* fa.tmp輸出虛擬機(jī)代碼
* fa1.tmp輸出源文件及各自對(duì)應(yīng)的地址
* fa2.tmp輸出結(jié)果
* fas.tmp輸出名字表
*/
# include<stdio.h>
# include"pl0.h"
# include"string.h"
/*解釋執(zhí)行時(shí)使用的棧*/
# define stacksize 500
int main()
{
	bool nxtlev[symnum];
	printf("Input pl/0 file?");
	scanf("%s",fname);
	fin=fopen(fname,"r");
	if(fin)
	{
		printf("List object code? (Y/N)");
		scanf("%s",fname);
		listswitch=(fname[0]=='y'||fname[0]=='Y');
		printf("List symbol table? (Y/N)");
		scanf("%s",fname);
		tableswitch=(fname[0]=='y'||fname[0]=='Y');
		fa1=fopen("fal.fmp","w");
		fprintf(fa1,"Input pl/0 file?");
		fprintf(fa1,"%s\n",fname);
		init();
		err=0;
		cc=cx=ll=0;
		ch=' ';
		if(-1!=getsym())
		{
			fa=fopen("fa.tmp","w");
			fas=fopen("fas.tmp","w");
			addset(nxtlev,declbegsys,statbegsys,symnum);
			nxtlev[period]=true;
			if(-1==block(0,0,nxtlev))
			{
				fclose(fa);
				fclose(fa1);
				fclose(fas);
				fclose(fin);
				printf("\n");
				return 0;
			}
			fclose(fa);
			fclose(fa1);
			fclose(fas);
			if(sym!= period)
			{
				error(9);
			}
			if(err==0)
			{
				fa2=fopen("fa2.tmp","w");
				interpret();
				fclose(fa2);
			}
			else
			{
				printf("Errors in pl/0 program");
			}
		}
		fclose(fin);     
	}
	else
	{
		printf("Can't open file! \n");
	}
	printf("\n");
	return 0;
}
/*
 *初始化
 */
void init()
{
	int i;
	/*設(shè)置單字符符號(hào)*/
	for(i=0;i<=255;i++)
	{
		ssym[i]=nul;
	}
	ssym['+']=plus;
	ssym['-']=minus;
	ssym['*']=times;
	ssym['/']=slash;
	ssym['(']=lparen;
	ssym[')']=rparen;
	ssym['=']=eql;
	ssym[',']=comma;
	ssym['.']=period;
	ssym['#']=neq;
	ssym[';']=semicolon;
	/*設(shè)置保留字名字,按照字母順序,便于折半查找*/
	strcpy(&word[0][0],"begin");
    strcpy(&word[1][0],"call");
	strcpy(&word[2][0],"const");
	strcpy(&word[3][0],"do");
	strcpy(&word[4][0],"end");
	strcpy(&word[5][0],"if");
	strcpy(&word[6][0],"odd");
	strcpy(&word[7][0],"procedure");
	strcpy(&word[8][0],"read");
	strcpy(&word[9][0],"then");
	strcpy(&word[10][0],"var");
	strcpy(&word[11][0],"while");
	strcpy(&word[12][0],"write");
	/*設(shè)置保留字符號(hào)*/
	wsym[0]=beginsym;
	wsym[1]=callsym;
	wsym[2]=constsym;
	wsym[3]=dosym;
	wsym[4]=endsym;
	wsym[5]=ifsym;
	wsym[6]=oddsym;
	wsym[7]=procsym;
	wsym[8]=readsym;
	wsym[9]=thensym;
	wsym[10]=varsym;
 	wsym[11]=whilesym;
	wsym[12]=writesym;
	/*設(shè)置指令名稱(chēng)*/
	strcpy(&mnemonic[lit][0],"lit");
	strcpy(&mnemonic[opr][0],"opr");
	strcpy(&mnemonic[lod][0],"lod");
	strcpy(&mnemonic[sto][0],"sto");
	strcpy(&mnemonic[cal][0],"cal");
	strcpy(&mnemonic[inte][0],"inte");
	strcpy(&mnemonic[jmp][0],"jmp");
	strcpy(&mnemonic[jpc][0],"jpc");
	/*設(shè)置符號(hào)集*/
	for(i=0;i<symnum;i++)
	{
		declbegsys[i]=false;
		statbegsys[i]=false;
		facbegsys[i]=false;
	}
	/*設(shè)置聲明開(kāi)始符號(hào)集*/
	declbegsys[constsym]=true;
    declbegsys[varsym]=true;
	declbegsys[procsym]=true;
	/*設(shè)置語(yǔ)句開(kāi)始符號(hào)集*/
	statbegsys[beginsym]=true;
	statbegsys[callsym]=true;
	statbegsys[ifsym]=true;
	statbegsys[whilesym]=true;
	/*設(shè)置因子開(kāi)始符號(hào)集*/
	facbegsys[ident]=true;
	facbegsys[number]=true;
	facbegsys[lparen]=true;
}
/*
 *用數(shù)組實(shí)現(xiàn)集合的集合運(yùn)算
 */
int inset(int e,bool *s)
{
	return s[e];
}
int addset(bool *sr,bool *s1,bool *s2,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		sr[i]=s1[i]||s2[i];
	}
	return 0;
}
int subset(bool *sr,bool *s1,bool *s2,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		sr[i]=s1[i]&&(! s2[i]);
	}
	return 0;
}
int mulset(bool *sr,bool *s1,bool *s2,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		sr[i]=s1[i]&&s2[i];
	}
	return 0;
}
/*
 *出錯(cuò)處理,打印出錯(cuò)位置和錯(cuò)誤編碼
 */
void error(int n)
{
	char space[81];
	memset(space,32,81);
	space[cc-1]=0;//出錯(cuò)時(shí)當(dāng)前符號(hào)已經(jīng)讀完,所以cc-1
	printf("****%s!%d\n",space,n);
	fprintf(fa1,"****%s!%d\n",space,n);
	err++;
}
/*
 *漏掉空格,讀取一個(gè)字符。
 *
 *每次讀一行,存入line緩沖區(qū),line被getsym取空后再讀一行
 *
 *被函數(shù)getsym調(diào)用
 */
int gech()
{
	if(cc==ll)
	{
		if(feof(fin))
		{
			printf("program incomplete");
			return -1;
		}
		ll=0;
		cc=0;
		printf("%d",cx);
		fprintf(fa1,"%d",cx);
		ch=' ';
		while(ch!=10)
		{
			//fscan(fin,"%c",&ch);
			if(EOF==fscanf(fin,"%c",&ch))
			{
				line[ll]=0;
				break;
			}
			printf("%c",ch);
			fprintf(fa1,"%c",ch);
			line[ll]=ch;
			ll++;
		}
		printf("\n");
		fprintf(fa1,"\n");
	}
	ch=line[cc];
	cc++;
	return 0;
}
/*
 *詞法分析,獲取一個(gè)符號(hào)
 */
int getsym()
{
	int i,j,k;
	while(ch==' '||ch==10||ch==9) /*忽略空格,換行和TAB*/
	{
		getchdo;

	}
	if(ch>'a'&&ch<='z')    /*名字或保留字以a..z開(kāi)頭*/
	{
		k=0;
		do
		{
			if(k<al)
			{
				a[k]=ch;
				k++;
			}
			getchdo;
		}while(ch>'a'&&ch<='z'||ch>'0'&&ch<='9');
		a[k]=0;
		strcpy(id,a);
		i=0;
		j=norw-1;
		do                              /*搜索當(dāng)前符號(hào)是否為保留字*/
		{
			k=(i+j)/2;
			if(strcmp(id,word[k])<=0)
			{
				j=k-1;
			}
			if(strcmp(id,word[k])>=0)
			{
				i=k+1;
			}
		}while(i<=j);
		if(i-1>j)
		{
			sym=wsym[k];
		}
		else
		{
			sym=ident;           /*搜索失敗,則是名字或數(shù)字*/
		}
	}
	else
	{
		if(ch>='0'&&ch<='9')              /*檢測(cè)是否為數(shù)字:以0..9開(kāi)頭*/
		{
			k=0;                
			num=0;
			sym=number;
            do
			{
				num=10*num+ch-'0';
				k++;
				getchdo;
			}while(ch>='0'&&ch<='9');      /*獲取數(shù)字的值*/
			k--;
			if(k>nmax)
			{
				error(30);
			}
		}
		else
		{
			if(ch==':')          /*檢測(cè)賦值符號(hào)*/
			{
				getchdo;
			   if(ch=='=')
			   {
				sym=becomes;
				getchdo;
			   }
			   else
			   {
				   sym=nul;           /*不能識(shí)別的符號(hào)*/
			   }
			}
			else
			{
				if(ch=='<')            /*檢測(cè)大于或小于等于符號(hào)*/
				{
					getchdo;
				    if(ch=='=')
					{
						sym=leq;
					    getchdo;
					}
					else
					{
						sym=lss;
					}
				}
				else
				{
					if(ch=='>')      /*檢測(cè)大于或大于等于符號(hào)*/
					{
						getchdo;
					    if(ch=='=')
						{
							sym=geq;
						    getchdo;
						}
					    else
						{
						    sym=gtr;
						}
					}
				    else
					{
						sym=ssym[ch];    /*當(dāng)符號(hào)不滿足上述條件時(shí),全部按照單字符符號(hào)處理*/
					    //getchdo;
					   //richard
					   if(sym!=period)
					   {
						   getchdo;
					   }
					   //end richard
					}
				}
			}
		}
	}
	return 0;
}
/*
 *生成虛擬機(jī)代碼
 *
 *x:instruction.f;
 *y:instruction.l;
 *z:instruction.a;
 */
int gen(enum fct x,int y,int z)
{
	if(cx>=cxmax)
	{
		printf("Program too long");      /*程序過(guò)長(zhǎng)*/
		return -1;
	}
	code[cx].f=x;
	code[cx].l=y;
	code[cx].a=z;
	cx++;
	return 0;
}
/*
 *測(cè)試當(dāng)前符號(hào)是否合法
 *
 *在某一部分(如一條語(yǔ)句,一個(gè)表達(dá)式)將要結(jié)束時(shí)我們希望下一個(gè)符號(hào)屬于某個(gè)集合
 *(該部分的后跟符號(hào)),test負(fù)責(zé)這項(xiàng)檢測(cè),而且負(fù)責(zé)當(dāng)前需要的符號(hào)集合和補(bǔ)救用的集合(如之前未完成部分的后跟
 *符號(hào)),以及檢測(cè)不通過(guò)時(shí)的錯(cuò)誤號(hào)
 *
 *s1:我們需要的符號(hào)
 *s2:如果不是我們需要的,則需要一個(gè)補(bǔ)救用的集合
 *n:錯(cuò)誤號(hào)
 */
int test(bool* s1,bool *s2,int n)
{
	if(inset(sym,s1))
	{
		error(n);
	    /*當(dāng)檢測(cè)不通過(guò)時(shí),不停獲取符號(hào),直到它屬于需要的集合或補(bǔ)救的集合*/
	   while(!inset(sym,s1)&&(!inset(sym,s2)))
	   {
		   getsymdo;
	   }
	}
	return 0;
}
/*
 *編譯程序主體
 *
 *lev:當(dāng)前分程序所在層
 *tx:名字表當(dāng)前尾指針
 *fsys:當(dāng)前模塊后跟符號(hào)集合
 */
int block(int lev,int tx,bool *fsys)
{
	int i;
	int dx;                           /*名字分配到的相對(duì)地址*/
	int tx0;                          /*保留初始地址 tx*/
    int cx0;                         /*保留初始 cx*/
	bool nxtlev[symnum];             /*在下級(jí)函數(shù)的參數(shù)中,符號(hào)集合均為值參,但由于使用數(shù)組
	                                    實(shí)現(xiàn),傳遞進(jìn)來(lái)的是指針,為防止下級(jí)函數(shù)改變上級(jí)函數(shù)的
	                                    集合,開(kāi)辟新的空間傳遞給下級(jí)函數(shù)*/
	dx=3;
	tx0=tx;
	table[tx].adr=cx;
	gendo(jmp,0,0);
	if(lev>levmax)
	{
		error(32);
	}
    do
	{
		if(sym==constsym)               /*受到常量聲明符號(hào),開(kāi)始處理常量聲明*/
		{
			getsymdo;
		
		do
		{
			constdeclarationdo(&tx,lev,&dx);     /*dx的值被constdeclaration改變,使用指針*/
			while(sym==comma)
			{
				getsymdo;
				constdeclarationdo(&tx,lev,&dx);
			}
			if(sym==semicolon)
			{
				getsymdo;
			}
			else
			{
				error(5);      /*漏掉了逗號(hào)或者分號(hào)*/
			}
		}while(sym==ident);
	}
	if(sym==varsym)        /*收到變量聲明符號(hào),開(kāi)始處理變量聲明*/
    {
		getsymdo;
		do
		{
			vardeclarationdo(&tx,lev,&dx);
			while(sym==comma)
			{
				getsymdo;
				vardeclarationdo(&tx,lev,&dx);
			}
			if(sym==semicolon)
			{
				getsymdo;
			}
			else
			{
				error(5);
			}
		}while(sym==ident);
	}
	while(sym==procsym)           /*收到過(guò)程聲明符號(hào),開(kāi)始處理聲明過(guò)程*/
	{
		getsymdo;
		if(sym==ident)
		{
			enter(procedur,&tx,lev,&dx);    /*記錄過(guò)程名字*/
 			getsymdo;
		}
		else
		{
			error(4);                     /*prcedure后應(yīng)為標(biāo)識(shí)符*/
		}
		if(sym==semicolon)
		{
			getsymdo;
		}
		else
		{
			error(5);                  /*漏掉了分量*/
		}
		memcpy(nxtlev,fsys,sizeof(bool)*symnum);
		nxtlev[semicolon]=true;
		if(-1==block(lev+1,tx,nxtlev))
		{
			return -1;               /*遞歸調(diào)用*/
		}
		if(sym==semicolon)
		{
			getsymdo;
            memcpy(nxtlev,statbegsys,sizeof(bool)*symnum);
			nxtlev[ident]=true;
			nxtlev[procsym]=true;
			testdo(nxtlev,fsys,6);
		}
		else
		{
			error(5);            /*漏掉了分號(hào)*/
		}
	}
	memcpy(nxtlev,statbegsys,sizeof(bool)*symnum);
    nxtlev[ident]=true;
    nxtlev[period]=true;
	testdo(nxtlev,declbegsys,7);
	}while(inset(sym,declbegsys));                       /*直到?jīng)]有聲明*/
    code[table[tx0].adr].a=cx;                          /*開(kāi)始生成當(dāng)前過(guò)程代碼*/
	table[tx0].adr=cx;                                  /*當(dāng)前過(guò)程代碼地址*/
	table[tx0].size=dx;                                 /*聲明部分中每增加一條聲明都會(huì)給dx增加1,聲明
	                                                      部分已經(jīng)結(jié)束,dx就是當(dāng)前過(guò)程數(shù)據(jù)的size*/
	cx0=cx;                                            
	gendo(inte,0,dx);                                    /*生成分配內(nèi)存代碼*/
	if(tableswitch)                                      /*輸出名字表*/
	{
		printf("TABLE:\n");
		if(tx0+1 > tx)
		{
			printf("NULL\n");
		}
		for(i=tx0+1;i<tx;i++)
		{
			switch(table[i].kind)
			{
			   case constant:
				   printf("%d const %s",i,table[i].name);
				   printf("val=%d\n",table[i].val);
				   fprintf(fas,"%d const %s",i,table[i].name);
                   fprintf(fas,"val=%d\n",table[i].val);
				   break;
			   case variable:
				   printf("%d var%s",i,table[i].name);
				   printf("lev=%d addr=%d\n",table[i].level,table[i].adr);
				   fprintf(fas,"%d var%s",i,table[i].name);
				   fprintf(fas,"lev=%d addr=%d\n",table[i].level,table[i].adr);
				   break;
			   case procedur:
				   printf("%d proc%s",i,table[i].name);
				   printf("lev=%d addr=%d size=%d\n",table[i].level,table[i].adr,table[i].size);
                   fprintf(fas,"%d proc%s",i,table[i].name);
				   fprintf(fas,"lev=%d addr=%d size=%d\n",table[i].level,table[i].adr,table[i].size);
				   break;
			}
		}
		printf("\n");
	}
	/*語(yǔ)句后跟符號(hào)為分號(hào)或end*/
	memcpy(nxtlev,fsys,sizeof(bool)*symnum);          /*每個(gè)后跟符號(hào)集和都包含上層后跟符號(hào)
	                                                    集合,以便補(bǔ)救*/
	nxtlev[semicolon]=true;
	nxtlev[endsym]=true;
	statementdo(nxtlev,&tx,lev);
	gendo(opr,0,0);                                   /*每個(gè)過(guò)程出口都要使用的釋放數(shù)據(jù)段指令*/
	memset(nxtlev,0,sizeof(bool) *symnum);            /*分程序沒(méi)有補(bǔ)救集合*/
	testdo(fsys,nxtlev,8);                            /*檢測(cè)后跟符號(hào)正確性*/
	listcode(cx0);                                    /*輸出代碼*/
	return 0;
}
/*
 *在名字表中加入一項(xiàng)
 *
 *k:名字種類(lèi)const ,var or procedure
 *ptx:名字表尾指針的指針,為了可以改變名字表尾指針的值
 *lev:名字所在的層次,以后所有的 lev 都是這樣
 *pdx:dx 為當(dāng)前應(yīng)分配的變量的相對(duì)地址,分配后要增加1
 */
 void enter(enum object k,int *ptx,int lev,int *pdx)
 {
	 (*ptx)++;
	 strcpy(table[(*ptx)].name,id);                  /*全局變量id中已存有當(dāng)前名字的名字*/
	 table[(*ptx)].kind=k;
	 switch(k)   
	 {
	       case constant:                              /*常量名字*/
			 if(num>amax)
			 {
				 error(31);                          /*數(shù)越界*/
				 num=0;
			 }
			  table[(*ptx)].val=num;
			  break;
	     case variable:                                  /*變量名字*/
			 table[(*ptx)].level=lev;
			 table[(*ptx)].adr=(*pdx);
			 (*pdx)++;
			 break;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕在线播放不卡一区| 91精品国产色综合久久不卡电影| 91精品国产综合久久久久久久久久| 久久精品日韩一区二区三区| 亚洲一区二区欧美激情| 国产大陆a不卡| 91精品国产aⅴ一区二区| 亚洲欧美国产高清| 国产黑丝在线一区二区三区| 在线电影国产精品| 一区二区三区不卡在线观看 | 亚洲欧美成人一区二区三区| 精品一区二区国语对白| 欧美三级欧美一级| 国产精品久久久久久久浪潮网站| 久久不见久久见中文字幕免费| 欧美色综合网站| 亚洲欧美精品午睡沙发| 国产**成人网毛片九色| 久久五月婷婷丁香社区| 美腿丝袜亚洲三区| 欧美女孩性生活视频| 亚洲美女免费视频| aaa欧美日韩| 中文一区一区三区高中清不卡| 捆绑紧缚一区二区三区视频| 777色狠狠一区二区三区| 一区二区激情视频| 一本色道久久综合狠狠躁的推荐| 国产欧美日韩亚州综合 | 日本午夜一本久久久综合| 在线观看视频一区二区| 亚洲免费av在线| 91在线视频播放| 亚洲视频每日更新| 91香蕉视频在线| 亚洲人成在线观看一区二区| 成人一道本在线| 中文成人综合网| 成人国产电影网| 亚洲私人影院在线观看| 色综合天天综合在线视频| 日韩伦理av电影| 色老综合老女人久久久| 亚洲免费资源在线播放| 在线视频你懂得一区| 亚洲黄色免费网站| 欧美亚洲国产一区二区三区va| 亚洲精品国产一区二区三区四区在线| 91香蕉视频mp4| 亚洲欧美aⅴ...| 欧美自拍偷拍午夜视频| 性欧美大战久久久久久久久| 国产剧情一区二区| 亚洲国产精品尤物yw在线观看| 欧洲人成人精品| 在线播放日韩导航| 奇米888四色在线精品| 日韩欧美aaaaaa| 精品一区二区三区不卡| 久久夜色精品国产噜噜av| 国产一区视频网站| 中文字幕亚洲精品在线观看| 色综合久久综合网97色综合| 亚洲成人激情综合网| 日韩欧美在线观看一区二区三区| 久久99久久99精品免视看婷婷| 久久久青草青青国产亚洲免观| 成人黄色在线看| 亚洲一区二区三区中文字幕| 91精品国产一区二区三区| 国产在线观看一区二区| 国产精品久久久久久久久免费丝袜| 欧美国产精品一区| 色狠狠综合天天综合综合| 日韩二区三区四区| 国产亚洲福利社区一区| 99久久国产免费看| 日韩电影免费在线| 久久久久久99精品| 色狠狠一区二区| 精品一区二区久久| 亚洲欧美日韩国产中文在线| 91精品国产一区二区人妖| 成人性视频免费网站| 亚洲成人免费影院| 国产午夜精品一区二区| 欧美中文字幕亚洲一区二区va在线 | 久久99蜜桃精品| 国产精品国产自产拍高清av | 在线一区二区观看| 久久精品国产精品亚洲精品| 国产精品三级在线观看| 欧美日韩一级视频| 成人夜色视频网站在线观看| 婷婷综合五月天| 国产精品卡一卡二| 日韩欧美成人一区二区| 99久久精品国产精品久久 | 国产精品久久久久久久久免费相片| 欧美色偷偷大香| 国产精品1区2区3区| 亚洲国产精品天堂| 国产精品美女久久久久久久久久久| 在线免费精品视频| 国产成a人亚洲精| 丝袜诱惑制服诱惑色一区在线观看| 久久久久久久久免费| 欧美三级欧美一级| 99麻豆久久久国产精品免费优播| 青青草视频一区| 亚洲女厕所小便bbb| 精品1区2区在线观看| 欧美最新大片在线看| 国产成a人亚洲精品| 美女精品一区二区| 亚洲中国最大av网站| 日本一区二区久久| 精品少妇一区二区三区| 欧美性生交片4| gogo大胆日本视频一区| 国产乱对白刺激视频不卡| 日本aⅴ精品一区二区三区 | 国产精品国模大尺度视频| 精品精品国产高清a毛片牛牛| 91极品美女在线| 成人爱爱电影网址| 国产一区二区视频在线| 日本在线不卡一区| 亚洲精品视频在线| 亚洲欧美综合色| 日本一区二区三级电影在线观看| 日韩精品资源二区在线| 在线成人免费观看| 欧美亚洲国产bt| 91精品1区2区| 在线观看亚洲精品| 91影院在线观看| 91女厕偷拍女厕偷拍高清| 丁香六月综合激情| 国产成人自拍网| 国产高清视频一区| 国产一区二区三区免费| 国产一区二区三区精品欧美日韩一区二区三区| 日韩精品亚洲一区二区三区免费| 亚洲综合一区二区精品导航| 亚洲精品乱码久久久久久久久| 亚洲视频资源在线| 亚洲色图都市小说| 亚洲免费高清视频在线| 亚洲天堂精品在线观看| 亚洲精品福利视频网站| 亚洲免费在线观看视频| 亚洲欧美日韩一区二区| 亚洲精品水蜜桃| 亚洲精品福利视频网站| 亚洲一区二区三区国产| 午夜伦欧美伦电影理论片| 亚洲成人午夜电影| 天堂一区二区在线免费观看| 亚洲大片在线观看| 午夜精品成人在线| 麻豆成人在线观看| 韩国欧美国产1区| 国产河南妇女毛片精品久久久 | 美女精品自拍一二三四| 精品一区二区在线视频| 国产一区二区三区| 粉嫩13p一区二区三区| 99久久久久久| 欧洲视频一区二区| 这里是久久伊人| 精品国产第一区二区三区观看体验| 日韩欧美国产午夜精品| 久久综合网色—综合色88| 国产精品私房写真福利视频| 亚洲天天做日日做天天谢日日欢 | 久久久久国产精品麻豆ai换脸| 国产色婷婷亚洲99精品小说| 国产精品久久久久久久久动漫 | 久久久一区二区三区捆绑**| 国产目拍亚洲精品99久久精品| 日韩毛片视频在线看| 五月婷婷欧美视频| 久久99国产精品久久99 | 韩国毛片一区二区三区| 国产成人免费9x9x人网站视频| 一本色道综合亚洲| 制服丝袜一区二区三区| 久久久99久久| 亚洲欧美日韩中文播放| 日本视频在线一区| 岛国av在线一区| 欧美三片在线视频观看| 欧美xxxxxxxx| 最新欧美精品一区二区三区| 午夜av一区二区三区| 国产精品一区二区你懂的| 在线观看日韩高清av| 亚洲精品一区二区三区在线观看|