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

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

?? parsing.cpp

?? 詞法語法語義編譯器
?? CPP
字號:
// Parsing.cpp: implementation of the CParsing class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "scanner.h"
#include "Parsing.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

//初始化文法產生式
/************************************************************
 *	E -> E + T
 *	E -> E - T
 *	E -> T
 *	T -> T * F
 *	T -> T / F
 *	T -> F
 *	F -> i
 *	F -> ( E )
 ************************************************************/
const GProduction CParsing::m_production[PRODUCTIONSIZE][PRODUCTIONLEN+1]={
	{{Nonterminal,'E'},{Nonterminal,'E'},{Terminal,'+'},{Nonterminal,'T'},{Other,' '}},
	{{Nonterminal,'E'},{Nonterminal,'E'},{Terminal,'-'},{Nonterminal,'T'},{Other,' '}},
	{{Nonterminal,'E'},{Nonterminal,'T'},{Other,' '}},
	{{Nonterminal,'T'},{Nonterminal,'T'},{Terminal,'*'},{Nonterminal,'F'},{Other,' '}},
	{{Nonterminal,'T'},{Nonterminal,'T'},{Terminal,'/'},{Nonterminal,'F'},{Other,' '}},
	{{Nonterminal,'T'},{Nonterminal,'F'},{Other,' '}},
	{{Nonterminal,'F'},{Terminal,'i'},{Other,' '}},
	{{Nonterminal,'F'},{Terminal,'('},{Nonterminal,'E'},{Terminal,')'},{Other,' '}}
};

/**優先矩陣符號標示順序
 *************************************************************
 *	+	-	*	/	(	)	i	#
 ************************************************************/
const char CParsing::m_operTableIndex[OPERTABLESIZE]={
	'+','-','*','/','(',')','i','#'
};

/**優先矩陣
/*************************************************************
 *		+	-	*	/	(	)	i	#
 *
 *	+	>	>	<	<	<	>	<	>
 *	-	>	>	<	<	<	>	<	>
 *	*	>	>	>	>	<	>	<	>
 *	/	>	>	>	>	<	>	<	>
 *	(	<	<	<	<	<	=	<	>
 *	)	>	>	>	>		>		>
 *	i	>	>	>	>		>		>
 *	#	<	<	<	<	<	<	<	
 ************************************************************/
const OperCompare CParsing::m_operTable[OPERTABLESIZE][OPERTABLESIZE]={
	{More,	More,	Less,	Less,	Less,	More,	Less,	More},
	{More,	More,	Less,	Less,	Less,	More,	Less,	More},
	{More,	More,	More,	More,	Less,	More,	Less,	More},
	{More,	More,	More,	More,	Less,	More,	Less,	More},
	{Less,	Less,	Less,	Less,	Less,	Equal,	Less,	More},
	{More,	More,	More,	More,	Unknown,More,	Unknown,More},
	{More,	More,	More,	More,	Unknown,More,	Unknown,More},
	{Less,	Less,	Less,	Less,	Less,	Less,	Less,	Unknown}
};

/**
 * 語法分析構造函數
 *
 * @param  pWordCode			字符表數組
 * @param  pTokenFile			token串頭指針
 * @param  pSymbolTable			符號表頭指針
 * @param  pErrorCollection		錯誤信息頭指針
 *
 */
CParsing::CParsing(const char *pWordCode[],
				   PTokenNode pTokenFile,
				   PSTable pSymbolTable,
				   PErrorNode pErrorCollection)
{
	//初始化分析棧和當前識別的最左素短語
	this->m_stckTerTop.next=NULL;
	this->m_stckTop.next=NULL;

	InitStck();
	this->m_llp.next=NULL;

	this->m_pMorpheme=new CMorpheme(pWordCode,pTokenFile,pSymbolTable,pErrorCollection);
	this->m_pSymbolTable=pSymbolTable;
	for (int i=0;i<KEYWORDCOUNT+1;i++)
	{
		this->m_pWordCode[i]=pWordCode[i];
	}
}

/**
 * 語法分析構造函數
 *
 * @param  pWordCode			字符表數組
 * @param  pTokenFile			token串頭指針
 * @param  pSymbolTable			符號表頭指針
 * @param  pErrorCollection		錯誤信息頭指針
 * @param  strSourceFile		源文件路徑
 *
 */
CParsing::CParsing(const char *pWordCode[],
				   PTokenNode pTokenFile,
				   PSTable pSymbolTable,
				   PErrorNode pErrorCollection,
				   CString strSourceFile)
{
	//初始化分析棧和當前識別的最左素短語
	this->m_stckTerTop.next=NULL;
	this->m_stckTop.next=NULL;

	InitStck();
	this->m_llp.next=NULL;

	this->m_pMorpheme=new CMorpheme(pWordCode,pTokenFile,pSymbolTable,pErrorCollection,strSourceFile);
	this->m_pSymbolTable=pSymbolTable;
	for (int i=0;i<KEYWORDCOUNT+1;i++)
	{
		this->m_pWordCode[i]=pWordCode[i];
	}
}

CParsing::~CParsing()
{
	//釋放分析棧
	DisposeStck();

	//釋放最左素短語
	PGSymbol gs;
	while (this->m_llp.next!=NULL)
	{
		gs=this->m_llp.next;
		this->m_llp.next=gs->next;
		delete gs;
	}
}
//函數功能:進行語法分析  return CString 語法分析結果
CString CParsing::Parsing(CString strSourceFile/*=""*/)
{
	PTokenNode pToken=NULL;
	char word='0';
	bool morSucc=false;
	bool returnValue=true;
	//表達式結果為整型還是浮點型:false為整型
	bool resultType=false;
	//將#壓入分析棧
	this->GSPut('#',pToken);
	
	//分析源程序
	morSucc=this->m_pMorpheme->StepMorpheme(pToken,strSourceFile);
	while (morSucc)
	{
		word='0';

		if (this->m_pWordCode[pToken->keycode]=="constfloat" ||
			this->m_pWordCode[pToken->keycode]=="constint")
		{
			word='i';
			//表達式結果為整型還是浮點型:false為整型
			if (this->m_pWordCode[pToken->keycode]=="constfloat") resultType=true;
		}
		else if (this->m_pWordCode[pToken->keycode]=="+" ||
				 this->m_pWordCode[pToken->keycode]=="-" ||
				 this->m_pWordCode[pToken->keycode]=="*" ||
				 this->m_pWordCode[pToken->keycode]=="/" ||
				 this->m_pWordCode[pToken->keycode]=="(" ||
				 this->m_pWordCode[pToken->keycode]==")" )
		{
			word=this->m_pWordCode[pToken->keycode][0];
		}
		else
		{
			this->m_pMorpheme->AddError("表達式非法!",this->m_pMorpheme->GetCurRow(),this->m_pMorpheme->GetCurCol());

		}

		//識別并歸約
		if (this->CompOperator(this->GetNextTerSymbol()->word,word)==More)
		{
			returnValue=this->RecogLLP();
			if (returnValue)
			{
				returnValue=this->MatchProduction();				
			}
			if (!returnValue) 
			{
				this->m_pMorpheme->CloseSource();
				break;
			}
		}
		else
		{
			this->GSPut(word,pToken);
			morSucc=this->m_pMorpheme->StepMorpheme(pToken,strSourceFile);
		}
	}

	//源程序分析完畢,將分析棧剩余的句型規約
	CString str;
	if (returnValue)
	{
		while (this->GetGSTopSymbol()->next->word!='#' || this->GetGSTopSymbol()->sType!=Nonterminal)
		{
			returnValue=this->RecogLLP();
			if (returnValue)
			{
				returnValue=this->MatchProduction();
				if (!returnValue) break;
			}
			else break;	
		}
		//歸約完成
		if (this->GetGSTopSymbol()->next->word=='#')
		{
			//CString str;
			if (resultType) str.Format("歸約成功!\n表達式結果為:%f",this->GetGSTopSymbol()->value.dValue);
			else str.Format("歸約成功!\n表達式結果為:%d",(int)this->GetGSTopSymbol()->value.dValue);
			//::AfxMessageBox(str);
			//return str;
		}
		else
		{
			returnValue=false;
		}
	}
	
	if (!returnValue) //::AfxMessageBox("歸約失敗,請檢查表達式是否有錯誤!");
        str = "歸約失敗,請檢查表達式是否有錯誤!";
	 return str;
}

/**
 * 進行終結符優先級比較
 * @param	char chOper1			比較符一
 * @param	char chOper2			比較符二
 *
 * @return	OperCompare				比較結果
 *
 */
OperCompare CParsing::CompOperator(char chOper1,char chOper2)
{
	OperCompare returnValue=Unknown;
	//匹配符號編號
	int iOper1=-1,iOper2=-1;
	for (int i=0;i<OPERTABLESIZE;i++)
	{
		if (iOper1 == -1) iOper1=(chOper1==this->m_operTableIndex[i])? i:-1;
		if (iOper2 == -1) iOper2=(chOper2==this->m_operTableIndex[i])? i:-1;
	}

	if (iOper1 != -1 && iOper2 != -1)
	{
		returnValue=this->m_operTable[iOper1][iOper2];
	}

	return returnValue;
	
}

/**
 * 識別素短語,先清空素短語列表
 *
 * @return		bool			是否識別最左素短語
 *
 */
bool CParsing::RecogLLP()
{
	bool returnValue=false;

	//釋放當前素短語
	PGSymbol topGS;
	while (this->m_llp.next!=NULL)
	{
		topGS=this->m_llp.next;
		this->m_llp.next=topGS->next;
		delete topGS;
	}
	this->m_llp.next=NULL;
	
	//識別素短語,以Less為標志
	PGSymbol oper1,oper2;//分析棧中oper1在oper2下面
	oper2=this->GetNextTerSymbol();
	if (oper2!=NULL)
	{
		oper1=this->GetNextTerSymbol(oper2);
		while (oper1!=NULL)
		{
			if (Less==this->CompOperator(oper1->word,oper2->word))
			{
				//提取素短語
				PGSymbol pGS=this->GetGSTopSymbol();
				while (pGS!=oper1)
				{
					pGS=this->GSPop();
					pGS->next=this->m_llp.next;
					this->m_llp.next=pGS;					
					pGS=this->GetGSTopSymbol();
				}
				returnValue=true;
				break;
			}
			oper2=oper1;
			oper1=this->GetNextTerSymbol(oper2);
		}
	}

	return returnValue;
}

/**
 * 匹配當前識別的最左素短語,并進行歸約計算表達式的值
 *
 * @return		bool		是否存在相應的產生式匹配并歸約
 *
 */
bool CParsing::MatchProduction()
{
	bool returnValue=false;
	int iProIndex=-1;
	PGSymbol pGS=NULL;
	bool bMatch=false;

	//匹配產生式
	for (int i=0;i<PRODUCTIONSIZE;i++)
	{
		pGS=this->m_llp.next;
		if (pGS==NULL) break;
		bMatch=false;
		for (int j=1;j<PRODUCTIONLEN+1;j++)
		{
			if (this->m_production[i][j].sType==Other && pGS==NULL)
			{
				iProIndex=i;
				bMatch=true;
			}
			else
			{
				if (this->m_production[i][j].sType==Other) break;
				if (pGS==NULL) break;
					
				if (this->m_production[i][j].sType == pGS->sType)
				{
					if (pGS->sType==Terminal)
					{
						if (pGS->word != m_production[i][j].word) break;
					}
				}
				else break;
				pGS=pGS->next;
			}
		}
		if (bMatch) break;
	}

	//進行歸約
	if (bMatch)
	{
		returnValue=true;

		PGSymbol pOper1,pOper2,pOper3;
		pOper1=this->m_llp.next;
		if (iProIndex!=6)
		{
			pOper2=pOper1->next;
			pOper3=pOper2->next;
		}
		
		switch (iProIndex)
		{
		case 6:	//F->i
			this->GSPut('F',
				this->m_pSymbolTable->sSubTable[pOper1->value.pToken->strId-1].val);
			break;
		case 0:	//E->E+T			
			this->GSPut('E',pOper1->value.dValue + pOper3->value.dValue);
			break;
		case 1:	//E->E-T
			GSPut('E',pOper1->value.dValue - pOper3->value.dValue);
			break;
		case 3:	//T->T*F
			GSPut('T',pOper1->value.dValue * pOper3->value.dValue);
			break;
		case 4:	//T->T/F
			if (pOper3->value.dValue==0)
			{
				this->m_pMorpheme->AddError("除數為零!",m_pMorpheme->GetCurRow());
				returnValue=false;
			}
			else
				GSPut('T',pOper1->value.dValue / pOper3->value.dValue);
			break;		
		case 7:	//F->(E)
			GSPut('F',pOper2->value.dValue);
			break;
		default:
			//無法識別
			returnValue=false;
		}
	}

	return returnValue;
}

/**
 * 歸約當前識別的素短語并將歸約結果入棧
 *
 * @param		int			規約產生式表達式編號
 *
 * @return		bool		歸約成功
 *
 *
bool CParsing::Reduce(int iProIndex)
{
	bool returnValue=true;
	PGSymbol pOper1,pOper2,pOper3;
	pOper1=this->m_llp.next;
	if (pOper1!=NULL)
	{
		//檢驗已經識別的素短語
		if (iProIndex!=6)
		{
			pOper2=pOper1->next;
			if (pOper2==NULL)
			{
				return false;
			}
			else
			{
				pOper3=pOper2->next;
				if (pOper3==NULL)
				{
					return false;
				}
			}
		}

		switch (iProIndex)
		{
		case 0:	//E->E+T
			
			break;
		case 1:	//E->E-T
			break;
		case 3:	//T->T*F
			break;
		case 4:	//T->T/F
			break;
		case 6:	//F->i
			break;
		case 7:	//F->(E)
			break;
		default:
			//無法識別
			returnValue=false;
		}
	}
	else
	{
		returnValue=false;
	}

	return returnValue;
}*/

/**
 * 初始化分析棧
 *
 */
void CParsing::InitStck()
{
	DisposeStck();
	this->m_stckTop.next=NULL;
	this->m_stckTerTop.next=NULL;
}

/**
 * 彈出所有分析棧元素
 *
 */
void CParsing::DisposeStck()
{
	PGSymbol gs;
	while (m_stckTop.next!=NULL)
	{
		gs=this->m_stckTop.next;		
		this->m_stckTop.next=gs->next;
		//釋放相應的token字
		if (gs->sType==Terminal)
			this->m_pMorpheme->DeleteToken(gs->value.pToken);

		delete gs;
	}
	this->m_stckTop.next=NULL;

	PTerNode tn;
	while (this->m_stckTerTop.next!=NULL)
	{
		tn=this->m_stckTerTop.next;
		this->m_stckTerTop.next=tn->next;
		delete tn;
	}
	this->m_stckTerTop.next=NULL;
}

/**
 * 彈出棧頂元素
 *
 * @return		PGSymbol		返回棧頂元素
 *
 */
PGSymbol CParsing::GSPop()
{
	PGSymbol returnValue=NULL;
	PTerNode pTerNode=NULL;

	if (this->m_stckTop.next!=NULL)
	{
		returnValue=this->m_stckTop.next;
		this->m_stckTop.next=returnValue->next;
		//清空相應的引用
		if (this->m_stckTerTop.next!=NULL && this->m_stckTerTop.next->pTerminal==returnValue)
		{
			pTerNode=this->m_stckTerTop.next;
			this->m_stckTerTop.next=pTerNode->next;
			delete pTerNode;
		}
	}

	return returnValue;
}

/**
 * 獲取棧頂元素
 *
 * @return		PGSymbol		返回棧頂元素
 *
 */
PGSymbol CParsing::GetGSTopSymbol()
{
	PGSymbol returnValue=NULL;

	if (this->m_stckTop.next!=NULL)
	{
		returnValue=this->m_stckTop.next;
	}

	return returnValue;
}

/**
 * 根據當前終結符獲取分析棧中下一個終結符元素
 *
 * @param		PGSymbol pGS			指定當前終結符元素
 *
 * @return		PGSymbol				返回下一個終結符元素
 *
 */
PGSymbol CParsing::GetNextTerSymbol(PGSymbol pGS/*=NULL*/)
{
	PGSymbol returnValue=NULL;
	PTerNode pTerNode=&this->m_stckTerTop;
	if (pGS==NULL)
	{
		if (pTerNode->next!=NULL)
		{
			returnValue=pTerNode->next->pTerminal;
		}
	}
	else
	{
		while (pTerNode->next!=NULL)
		{
			if (pTerNode->pTerminal == pGS)
			{
				if (pTerNode->next!=NULL)
				{
					returnValue=pTerNode->next->pTerminal;
				}
				break;
			}
			else
			{
				pTerNode=pTerNode->next;
			}
		}
	}
	return returnValue;
}

/**
 * 壓棧,終結符
 *
 * @param	PTokenNode pToken		非終結符對應的token
 * @param	char		word		終結符在產生式中的表示
 *
 * @return  bool					壓棧成功
 *
 */
bool CParsing::GSPut(char word,PTokenNode pToken)
{
	PGSymbol pGS=new GSymbol;
	if (pGS==NULL) return false;
	pGS->next=this->m_stckTop.next;
	this->m_stckTop.next=pGS;

	pGS->sType=Terminal;
	pGS->value.pToken=pToken;
	pGS->word=word;

	//對終結符進行引用
	PTerNode pTN=new TerNode;
	if (pTN==NULL) return false;
	pTN->next=this->m_stckTerTop.next;
	this->m_stckTerTop.next=pTN;

	pTN->pTerminal=pGS;

	return true;
}

/**
 * 壓棧,非終結符
 *
 * @param	double dValue			終結符對應的規約值
 * @param	char   word				終結符在產生式中的表示
 *
 * @return  bool					壓棧成功
 *
 */
bool CParsing::GSPut(char word,double dValue)
{
	PGSymbol pGS=new GSymbol;
	if (pGS==NULL) return false;
	pGS->next=this->m_stckTop.next;
	this->m_stckTop.next=pGS;

	pGS->sType=Nonterminal;
	pGS->value.dValue=dValue;
	pGS->word=word;

	return true;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本高清无吗v一区| 亚洲人成精品久久久久久| 欧美精品第一页| 欧美三级一区二区| 日本久久电影网| 欧美亚洲免费在线一区| 欧美性色综合网| 777a∨成人精品桃花网| 欧美电影一区二区三区| 91精品国产一区二区三区蜜臀 | 91精品婷婷国产综合久久竹菊| 欧美手机在线视频| 欧美日韩成人综合在线一区二区| 欧美精品高清视频| 日韩免费一区二区三区在线播放| 精品日韩在线一区| 日本一区二区三区在线不卡 | 日韩高清一级片| 麻豆91精品91久久久的内涵| 久久99热狠狠色一区二区| 国产一区二区三区观看| 粗大黑人巨茎大战欧美成人| 欧美色视频一区| 国产精品亚洲一区二区三区妖精| 懂色av噜噜一区二区三区av| 欧美视频在线播放| 久久er精品视频| 性感美女久久精品| 蜜臂av日日欢夜夜爽一区| 国产一区二区影院| 99久久免费视频.com| 在线精品视频免费播放| 884aa四虎影成人精品一区| 久久久久久一级片| 亚洲女性喷水在线观看一区| 七七婷婷婷婷精品国产| 国产成人精品影视| 欧美日韩日日摸| 久久精品一区二区三区不卡| 亚洲欧美另类在线| 免费观看成人鲁鲁鲁鲁鲁视频| 国产不卡在线播放| 欧美午夜精品理论片a级按摩| 26uuu另类欧美亚洲曰本| 中文字幕欧美一区| 男女性色大片免费观看一区二区| 成人丝袜高跟foot| 制服丝袜激情欧洲亚洲| 国产精品亲子伦对白| 婷婷开心久久网| 成人一区二区三区中文字幕| 欧美日韩精品久久久| 国产欧美一区二区精品性色 | 国产日韩欧美电影| 性久久久久久久久| 成人免费视频一区| 欧美一区二区视频在线观看2022 | 亚洲欧美日韩系列| 秋霞午夜av一区二区三区| 成人午夜精品在线| 欧美精品亚洲一区二区在线播放| 欧美国产激情二区三区| 奇米亚洲午夜久久精品| 色嗨嗨av一区二区三区| 国产欧美精品一区aⅴ影院| 亚洲成人中文在线| 99在线精品视频| 久久久高清一区二区三区| 丝袜亚洲精品中文字幕一区| 91在线国产观看| 国产日韩精品久久久| 日本网站在线观看一区二区三区| 91看片淫黄大片一级在线观看| 精品国产自在久精品国产| 亚洲夂夂婷婷色拍ww47| 成人精品高清在线| 久久夜色精品国产欧美乱极品| 日韩不卡一区二区| 一本大道久久a久久精品综合| 国产亚洲一区二区三区| 欧美aaa在线| 欧美日韩一级二级三级| 亚洲精品免费在线观看| 成人福利视频在线看| 精品国产乱码久久久久久久| 视频一区二区欧美| 欧美日韩精品系列| 一区二区久久久久| 91视频在线观看| 国产精品视频你懂的| 盗摄精品av一区二区三区| 久久奇米777| 久久精品国产亚洲高清剧情介绍| 欧美老女人在线| 五月婷婷久久丁香| 欧美三区在线视频| 亚洲一区二区三区四区在线观看 | 国产欧美一区二区精品性色| 精品一区二区三区免费观看| 欧美一区二区三区视频| 日韩激情视频网站| 欧美精品乱人伦久久久久久| 香蕉影视欧美成人| 91精品国产一区二区三区| 日韩精品一二区| 56国语精品自产拍在线观看| 热久久国产精品| 日韩视频一区在线观看| 精品一区二区久久| 精品国产乱码久久久久久免费| 九九视频精品免费| 久久午夜色播影院免费高清| 国产成a人亚洲精品| 国产农村妇女精品| 91丝袜高跟美女视频| 怡红院av一区二区三区| 欧美三日本三级三级在线播放| 丝瓜av网站精品一区二区| 日韩一区二区三区免费看 | 欧美一区二区福利在线| 麻豆一区二区三区| 久久婷婷久久一区二区三区| 国产ts人妖一区二区| 一区免费观看视频| 欧美色图在线观看| 男人的天堂亚洲一区| 久久久久久久久97黄色工厂| 成人免费高清视频| 亚洲精品大片www| 日韩一区二区免费视频| 国产精品一级片| 亚洲三级在线免费观看| 欧美吻胸吃奶大尺度电影| 欧美a一区二区| 国产精品视频一二三区| 欧美午夜一区二区三区 | 91精品国产综合久久精品| 久久成人羞羞网站| 国产精品污污网站在线观看| 欧洲精品中文字幕| 九九精品一区二区| 日韩美女视频一区| 3d动漫精品啪啪一区二区竹菊| 国产成人精品影视| 亚洲永久免费视频| 久久影音资源网| 欧美曰成人黄网| 国产一区高清在线| 亚洲国产中文字幕| 久久久激情视频| 欧美另类z0zxhd电影| 国产91清纯白嫩初高中在线观看 | 国产美女久久久久| 亚洲人成网站影音先锋播放| 日韩视频在线永久播放| 91蝌蚪porny九色| 国产一区二区三区在线观看精品| 亚洲婷婷在线视频| 日韩写真欧美这视频| 99精品国产91久久久久久| 蜜芽一区二区三区| 又紧又大又爽精品一区二区| 日韩精品一区在线| 在线一区二区三区做爰视频网站| 狠狠色综合播放一区二区| 亚洲成人资源在线| 国产精品国产三级国产| 精品1区2区在线观看| 欧美三级日韩在线| 波多野结衣在线一区| 麻豆成人在线观看| 午夜久久久久久电影| 亚洲欧美一区二区在线观看| 欧美tickle裸体挠脚心vk| 精品视频在线视频| 91视频精品在这里| 岛国精品在线播放| 久久精品99国产精品日本| 亚洲高清三级视频| 亚洲视频网在线直播| 欧美国产一区二区| 欧美xxxxxxxx| 日韩欧美在线1卡| 欧美喷潮久久久xxxxx| 在线观看日韩国产| 91蜜桃免费观看视频| 国产精品一区二区三区99| 久久精品国产精品亚洲红杏| 亚洲chinese男男1069| 成人欧美一区二区三区白人 | 国产成人在线视频网站| 免费的成人av| 日本特黄久久久高潮| 天堂va蜜桃一区二区三区漫画版| 亚洲图片自拍偷拍| 一区二区三区中文在线观看| 亚洲欧美日韩在线播放| 日韩码欧中文字| 亚洲视频 欧洲视频| 亚洲欧洲成人自拍|