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

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

?? testexfunction .cpp

?? 這是一個能夠自動生成文檔的程序
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// ExFunction.cpp: implementation of the CExFunction class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "ExFunction.h"
#include "IdenItem.h"
#include "Identifiers.h"
#include "CPGlobals.h"

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

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

BEGIN_TEST_DUMP(PARAMETER)
    TEST_DUMP(type)
    TEST_DUMP(name)
    TEST_DUMP(defVal)
    TEST_DUMP(array)
END_TEST_DUMP()


BEGIN_TEST_DUMP(CExFunction)
    TEST_DUMP_BASE(CIdentifier)
	TEST_DUMP(mReturnType)
END_TEST_DUMP()


CExFunction::CExFunction()
{
}

CExFunction::~CExFunction()
{
    POSITION pos = mParameterList.GetHeadPosition();
	while(pos != NULL)
		delete mParameterList.GetNext(pos);

    pos = mRewriteFuncList.GetHeadPosition();
	while(pos != NULL)
		delete mRewriteFuncList.GetNext(pos);
}

CExFunction* CExFunction::ParseFunction(CTokenList& iList, 
										UINT iAccessTrim/*=TRIM_PUBLIC*/,
										BOOL iDefinition/*=FALSE*/, 
										CTokenList* iopSrcList/*=NULL*/, 
										POSITION* iopPos/*=NULL*/,
										BOOL iIsInType/*=FALSE*/)

{
    CExFunction* pFunc = new CExFunction();

	CToken* pToken = iList.GetHead();
	if(gpCurrPage != NULL && pToken != NULL)
	{
		CString comment;
		gpCurrPage->GetComment(comment, pToken->GetLine());
		pFunc->SetComment(comment);
	}
	
	ParseDeclare(iList, iAccessTrim, *pFunc, iIsInType);
	pFunc->SetCurrScope(gScope.GetCurrScope());

	if(iDefinition)
	{
		pFunc->SetDefined(TRUE);
        UINT square = 1;
		ASSERT(iopSrcList != NULL);
		ASSERT(iopPos != NULL);
		while(*iopPos != NULL)
		{
            CToken* pToken = iopSrcList->GetNext(*iopPos);
			if(pToken->GetType() == TT_LSQUARE)
				square++;
			else if(pToken->GetType() == TT_RSQUARE)
				square--;
			if(square == 0)
				break;

			pFunc->AddImpToken(pToken);
        }
	}

	TEST_TRACE(pFunc);
	return pFunc;
}


void CExFunction::ParseDeclare(CTokenList& iList, 
							   UINT iAccessTrim, 
							   CExFunction& oFunc,
							   BOOL iIsInType/*=FALSE*/)
{
	//將函數聲明分解為:返回值、修飾符及域/參數表/尾部
    CTokenList list1, list2, list3;

	CToken* pToken = NULL;
	CToken* pPreToken = NULL;
	CToken* pPrePreToken = NULL;
	POSITION pos = iList.GetHeadPosition();

	//解析函數名
	while(pos != NULL)
    {
		pPrePreToken = pPreToken;
		pPreToken = pToken;
		pToken = iList.GetNext(pos);
		ASSERT(pToken != NULL);
		if(pToken->GetType() == TT_LPARAN) //出現(
		{
			CString funcName;
			if(pPreToken != NULL)
				funcName = pPreToken->GetContent();

			//注意操作符重載及析構函數
			if( pPrePreToken != NULL                                   &&
			  ( strcmp(pPrePreToken->GetContent(), "operator") == 0 || 
				strcmp(pPrePreToken->GetContent(), "~") == 0        )  )
			{
			    funcName.Insert(0, pPrePreToken->GetContent());
                list1.RemoveTail();
			}
				
			oFunc.SetName(funcName);
			break;
		}
		else
		{
			if(pPreToken != NULL)
				list1.AddTail(pPreToken);
		}
	}

	//返回類型
    //TEST_TRACE(list1);
	ParsePrecursor(list1, oFunc, iIsInType);

	//參數表
	BOOL paran = 1;
	while(pos != NULL)
	{
		pToken = iList.GetNext(pos);
		ASSERT(pToken != NULL);

		if(pToken->GetType() == TT_LPARAN) 
			paran++;
		else if(pToken->GetType() == TT_RPARAN)
			paran--;

		if(paran == 0)
			break;

		list2.AddTail(pToken);
	}

	//解析參數表
	//TEST_TRACE(list2);
	ParseParameter(list2, oFunc);

	//剩余部分
	while(pos != NULL)
	{
		pToken = iList.GetNext(pos);
		ASSERT(pToken != NULL);
		list3.AddTail(pToken);
	}

	//解析最后部分,包括是否const和純虛函數
    //TEST_TRACE(list3);
	ParseTail(list3, oFunc);
}

void CExFunction::ParsePrecursor(CTokenList& iList, 
								 CExFunction& oFunc,
								 BOOL iIsInType/*=FALSE*/)
{
	UINT trim = 0;
	CString returnType;
	POSITION pos = iList.GetTailPosition();
	while(pos != NULL)
	{
		CToken* pToken = iList.GetPrev(pos);
		//域指令
		if(pToken->GetType() == TT_SCOPE) //::
		{
			if(!iIsInType)
			    oFunc.SetScopeReverse(pToken->GetContent());
			iList.RemoveTail();
			if(pos == NULL)
			{
                ASSERT(FALSE);
				break;
			}

			pToken = iList.GetPrev(pos);
			if(pToken != NULL && pToken->IsType(TT_GT)) //模板類 >
			{
				//oFunc.SetScopeReverse(pToken->GetContent());
				while(pos != NULL)
				{
					pToken = iList.GetPrev(pos);
					ASSERT(pToken != NULL);
                    //oFunc.SetScopeReverse(pToken->GetContent());
					iList.RemoveTail();
                    if(pToken->IsType(TT_LT)) // <
					{
						ASSERT(pos != NULL);
						pToken = iList.GetPrev(pos);
						break;
					}
				}
			}

			if(pToken != NULL && !iIsInType)
			{
			    oFunc.SetScopeReverse(pToken->GetContent());
			    iList.RemoveTail();
			}
		}
		else
		{
            break;
		}
    }


	pos = iList.GetHeadPosition();
	while(pos != NULL)
	{
		CToken* pToken = iList.GetNext(pos);
		TEST_TRACE(pToken);
		if(pToken->GetType() == TT_WORD)
		{
			POSITION tempPos = pos;
			CIdenItem* pIdenItem = gIdens.Search(pToken->GetContent());
			if(pIdenItem != NULL)
			{
                KEYWORD key = pIdenItem->keyIndex;
				//模板參數,忽略
				if(key == KEY_TEMPLATE)
				{
					while(pos != NULL)
					{
						tempPos = pos;
						pToken = iList.GetNext(pos);
						if(pToken->GetType() == TT_GT) break;
					}
				}
				else if(key == KEY_INLINE)
				{
					trim |= TRIM_INLINE;
				}
				else if(key == KEY_VIRTUAL)
				{
					trim |= TRIM_VIRTUAL;
				}
				else if(key == KEY_STATIC)
				{
					trim |= TRIM_STATIC;
				}
				else if(key==KEY_CONST || key==KEY_SIGNED || key==KEY_UNSIGNED //類型修飾
					|| pIdenItem->IsDataType() //數據類型
			        || key == KEY_NOT) //其他非關鍵字
				{
					CIdentifier::CatDataType(returnType, *pToken);
				}
				//忽略其他關鍵字
			}
			else
			{
				CIdentifier::CatDataType(returnType, *pToken);
			}
		}
		else
		{
			CIdentifier::CatDataType(returnType, *pToken);
		}
	}

	oFunc.SetTrim(trim);
	oFunc.SetReturnType(returnType);

	TEST_TRACE(returnType);
}

void CExFunction::ParseTail(CTokenList& iList, CExFunction& oFunc)
{
	UINT trim = 0;
	POSITION pos = iList.GetHeadPosition();
	while(pos != NULL)
	{
		CToken* pToken = iList.GetNext(pos);
		ASSERT(pToken != NULL);
		if(pToken->IsType(TT_WORD))
		{
			KEYWORD key = gIdens.QueryKeyword(pToken->GetContent());
			if(key == KEY_CONST)
				trim |= TRIM_CONST;
		}
		else if(pToken->IsType(TT_ASSIGN)) // =
		{
			if(pos != NULL)
			{
				pToken = iList.GetNext(pos);
				if(strcmp(pToken->GetContent(), "0") == 0)
					trim |= TRIM_PUREVIRTUAL;
			}
		}
	}

	oFunc.SetTrim(trim);
}

void CExFunction::ParseParameter(CTokenList& iList, CExFunction& oFunc)
{
    POSITION pos = iList.GetHeadPosition();
	UINT paran = 0;
	CTokenList list; //臨時保存一個參數的token
	while(pos != NULL)
	{
		CToken* pToken = iList.GetNext(pos);
		ASSERT(pToken != NULL);
		UINT tt = pToken->GetType();
		if(tt == TT_LPARAN || tt == TT_LBRACE || tt == TT_LT) // < [ (
		{
			paran++;
		}
		else if(tt == TT_RPARAN || tt == TT_RBRACE || tt == TT_GT) // > ] )
		{
			paran--;
		}
		//讀完一個參數的token
		else if(paran == 0 && tt == TT_COMMA) //,
		{
			PARAMETER* pParam =  ParseOneParameter(list);
			if(pParam != NULL)
				oFunc.AddParameter(pParam);
			list.RemoveAll();
			continue;
		}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲裸体xxx| 成人国产精品免费网站| 色婷婷av久久久久久久| 久久久久久久久久看片| 另类小说综合欧美亚洲| 91精品国产麻豆国产自产在线 | 日韩一区二区三区视频| 亚洲国产另类av| 欧美视频三区在线播放| 亚洲猫色日本管| 欧美熟乱第一页| 亚洲国产精品久久人人爱蜜臀| 成人禁用看黄a在线| 欧美国产综合一区二区| 国产一区二区在线观看视频| 国产精品乱码人人做人人爱 | 91浏览器在线视频| 国产精品一区二区在线观看网站| 日本一区二区电影| 日韩欧美一区二区久久婷婷| 欧洲色大大久久| 91麻豆视频网站| 99视频超级精品| av不卡免费在线观看| 国产福利一区在线观看| 黄一区二区三区| 韩国av一区二区三区| 国产在线不卡视频| 国产精品一区二区在线看| 国产剧情在线观看一区二区| 欧美激情一区三区| 国产一区二区三区精品视频| 久久婷婷色综合| 宅男在线国产精品| 91丝袜高跟美女视频| 另类专区欧美蜜桃臀第一页| 亚洲国产日韩a在线播放| 中文字幕欧美一| 日韩免费看的电影| 色丁香久综合在线久综合在线观看| 裸体歌舞表演一区二区| 亚洲国产成人精品视频| 日韩一区二区三免费高清| 91老师片黄在线观看| youjizz久久| 成人免费精品视频| 不卡一区二区中文字幕| 国产乱淫av一区二区三区| 国产一区二区三区免费播放| 久久国产福利国产秒拍| 日本伊人精品一区二区三区观看方式| 国产精品高潮呻吟久久| 国产精品久久久久四虎| 国产精品色在线观看| 国产精品国产三级国产aⅴ入口 | 91精品婷婷国产综合久久性色| 91农村精品一区二区在线| 国产欧美一区二区精品久导航| 日韩不卡一区二区三区| 国产精品嫩草影院av蜜臀| 欧美三级电影在线观看| 日本不卡1234视频| 伊人一区二区三区| 亚洲成人动漫一区| 亚洲人成网站精品片在线观看| 91在线观看地址| 轻轻草成人在线| 亚洲国产综合视频在线观看| 亚洲精品网站在线观看| 欧美精品一区二区不卡| hitomi一区二区三区精品| 国产高清不卡一区二区| 色综合一个色综合亚洲| 欧美视频日韩视频在线观看| 日韩一区二区三| 欧美国产亚洲另类动漫| 一区二区三区蜜桃| 国内精品在线播放| 欧美午夜一区二区三区免费大片| 欧美一区二区免费观在线| 久久久久久久久97黄色工厂| 日韩理论片中文av| 精品一区二区在线视频| 一本在线高清不卡dvd| 精品国精品自拍自在线| 一区二区三区四区中文字幕| 麻豆成人在线观看| 欧美夫妻性生活| 亚洲码国产岛国毛片在线| 国产成人免费在线视频| 欧美r级电影在线观看| 亚洲综合在线五月| 99re在线视频这里只有精品| 精品日韩成人av| 麻豆一区二区三| 欧美一级高清片| 日韩国产高清在线| 欧美日本韩国一区二区三区视频| 一区二区视频在线看| av电影在线不卡| 亚洲素人一区二区| 91蜜桃网址入口| 一卡二卡欧美日韩| 欧美日韩情趣电影| 水野朝阳av一区二区三区| 欧美日韩国产高清一区二区| 亚洲电影在线免费观看| 色婷婷精品大在线视频| 亚洲成人av一区| 欧美成人一区二区| 激情伊人五月天久久综合| 久久精品视频免费| 成人综合婷婷国产精品久久 | 激情综合色综合久久| 久久综合九色综合久久久精品综合| 麻豆高清免费国产一区| 国产精品色在线观看| 色综合久久久久| 蜜桃一区二区三区四区| 欧美精品一区二区在线播放 | 大白屁股一区二区视频| 亚洲欧美日韩国产手机在线| 欧美人牲a欧美精品| 国产精品综合网| 午夜在线成人av| 亚洲国产岛国毛片在线| 色婷婷综合在线| 久久精品国产第一区二区三区| 欧美韩日一区二区三区四区| 欧美日韩精品免费观看视频| 国产精品一区三区| 日本中文字幕一区二区视频| 国产精品久久久久久久久免费桃花 | 日韩欧美国产综合| 欧美三级日韩三级| 成人免费观看视频| 国产综合一区二区| 日本强好片久久久久久aaa| 日韩和欧美一区二区三区| 91精品国产综合久久久久久| 风间由美一区二区三区在线观看 | 激情偷乱视频一区二区三区| 亚洲色图色小说| 中文字幕va一区二区三区| 精品少妇一区二区三区免费观看 | 亚洲一区二区精品3399| 中文成人av在线| 国产日韩三级在线| 久久麻豆一区二区| 欧美大度的电影原声| 日韩欧美一区在线观看| 日韩欧美一区中文| 欧美精品一区二| 精品久久久久av影院| 日韩一区二区电影网| 欧美本精品男人aⅴ天堂| 精品国产乱码久久久久久1区2区| 日韩视频免费直播| 久久精品人人爽人人爽| 欧美国产精品v| 一区二区三区中文字幕| 婷婷成人激情在线网| 狠狠色丁香久久婷婷综合丁香| 国产又黄又大久久| www.色综合.com| 欧美人牲a欧美精品| 久久美女高清视频 | 欧美va亚洲va| 亚洲图片你懂的| 日韩精品电影一区亚洲| 国产一区二区三区国产| 91久久免费观看| 日韩美女天天操| 亚洲色图欧美偷拍| 美女视频黄免费的久久| 91蜜桃在线观看| 久久精品一区二区三区不卡牛牛 | 日本vs亚洲vs韩国一区三区二区| 精品一区二区三区蜜桃| 欧洲一区二区av| 国产精品久久久久婷婷二区次| 亚洲第一激情av| 成人v精品蜜桃久久一区| 欧美精品v国产精品v日韩精品| 久久久久久久久久久久电影| 亚洲国产色一区| 欧洲激情一区二区| 国产精品嫩草影院av蜜臀| 六月丁香婷婷久久| 3d成人h动漫网站入口| 一个色综合av| 欧美在线一区二区| 日韩理论电影院| 成人av在线播放网址| 久久精品免视看| 国产成人8x视频一区二区| 久久久久九九视频| 丁香激情综合国产| 国产精品久久久久久福利一牛影视| 国产福利一区二区三区|