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

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

?? pascalcompiler.cpp

?? 袖珍型的pascal編譯器
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
	RemoveRecord(targetValue);
	if (stepValue)
		RemoveRecord(stepValue);
	delete tmpCode;
}




///////////////////////////////////////////////////////////////
// Programmer		: Zoly Farkas
// Creation Date	: 8/3/99 4:37:30 PM
// Function name	: CPascalCompiler::InstrCase
// Description	    : 
// Return type		: void 
///////////////////////////////////////////////////////////////

void CPascalCompiler::InstrCase()
{
	if (NextToken() != TT_KW_CASE)
		throw error(SET_EXPECTED, CString("case"));
	ExprInfo type;
	Expr(type);

	// Now the case expression is on the Sack

	if (NextToken() != TT_KW_OF)
		throw error(SET_EXPECTED, CString("of"));
	ListaAltern(type);
	if (NextToken() != TT_KW_END)
		throw error(SET_EXPECTED, CString("end"));
}



///////////////////////////////////////////////////////////////
// Programmer		: Zoly Farkas
// Creation Date	: 8/3/99 4:37:38 PM
// Function name	: CPascalCompiler::ListaAltern
// Description	    : 
// Return type		: void 
// Argument         : ExprInfo& Info
///////////////////////////////////////////////////////////////

void CPascalCompiler::ListaAltern(ExprInfo& Info)
{
	StackEntry entry;
	CString label, endlabel;
	endlabel.Format("ET%d",m_nLabelCount);
	CList<int,int> endAddressList;
	while (1)
	{
		CList<int,int> addressList;
		m_nLabelCount ++;
		while (1)
		{
			GenerateCode(INSTR_COPY);
			int val = NextToken();
			switch (val)
			{
			case TT_INTEGER:
				if (Info.m_nAtribTip != ET_INTEGER)
					throw error(SET_EXPECTED, CString("integer"));
				
				entry.m_nType = SE_INTEGER;
				CV_INTEGER(entry.m_Info) = (INTEGER) GetNumValue();
				GenerateCode(INSTR_LODI,entry);
				break;
			case TT_REAL:
				if (Info.m_nAtribTip != ET_REAL)
					throw error(SET_EXPECTED, CString("real"));
				
				entry.m_nType = SE_REAL;
				CV_REAL(entry.m_Info) = (REAL) GetNumValue();
				GenerateCode(INSTR_LODI,entry);
				break;
			case TT_CHAR:
				if (Info.m_nAtribTip != ET_CHAR)
					throw error(SET_EXPECTED, CString("char"));
	
				entry.m_nType = SE_CHAR;
				CV_CHAR(entry.m_Info) = (CHAR) GetNumValue();
				GenerateCode(INSTR_LODI,entry);
				
				break;
			default :
				throw error(SET_EXPECTED, CString("Constant"));

			}
			GenerateCode(INSTR_EQU);
			addressList.AddHead(m_Code->GetCurCodePos() + VM_ICSIZE);
			label.Format("ET%d",m_nLabelCount);
			GenerateCode(INSTR_FJP,0,label);
			if (NextToken()!=',')
			{
				PushBack();
				break;
			}
		}


		if (NextToken()!=':')
			throw error(SET_EXPECTED, CString(":"));

		int where = m_Code->GetCurCodePos() + VM_ICSIZE;
		CString tmp = label + ":";
		label.Format("ET%d",++m_nLabelCount);
		GenerateCode(INSTR_UJP,0,label);
		
		InsertLabel(tmp);
		// now setting the jumping stuff addresses
		POSITION pos = addressList.GetHeadPosition();
		while (pos != NULL)
		{
			int place = addressList.GetNext(pos);
			m_Code->SetAddress(place,m_Code->GetCurCodePos());
		}
		addressList.RemoveAll();

		Instr();
		// jump to end
		endAddressList.AddHead(m_Code->GetCurCodePos() + VM_ICSIZE);
		GenerateCode(INSTR_UJP,0,endlabel);

		InsertLabel(label + ":");
		m_Code->SetAddress(where,m_Code->GetCurCodePos());
		if (NextToken()!=';')
			{
				PushBack();
				break;
			}
	}
	if (NextToken() == TT_KW_OTHERWISE)
	{
		Instr();
	}
	else
		PushBack();
		
	// set the jump to end addresses
	POSITION pos = endAddressList.GetHeadPosition();
	while (pos != NULL)
	{
		int place = endAddressList.GetNext(pos);
		m_Code->SetAddress(place,m_Code->GetCurCodePos());
	}	
	InsertLabel(endlabel + ":");

	GenerateCode(INSTR_RED,(OFFSET) 1);	// clear the value from stack
}




///////////////////////////////////////////////////////////////
// Programmer		: Zoly Farkas
// Creation Date	: 8/3/99 4:37:49 PM
// Function name	: CPascalCompiler::ApelProcedura
// Description	    : 
// Return type		: void 
///////////////////////////////////////////////////////////////

void CPascalCompiler::ApelProcedura()
{
	ExprInfo type;
	if (NextToken()!= TT_WORD)
		throw error(SET_EXPECTED, CString("identifier"));
	Symbol *simb = NULL;
	CString procedure = GetStrValue();
	RetreaveSymbol(procedure,simb);
	
	AddComment("Calling: " + GetStrValue());
	
	POSITION pos = simb->m_ListaPar.GetHeadPosition ();
	if (NextToken()=='(')
	{
		while (1)
		{
			if (pos == NULL)
				throw error(SET_GENERAL, CString("Too many parameters"));
			Param par = simb->m_ListaPar .GetNext(pos);

			// This part put's the entire parameters on the stack
			if (par.m_nTransmisie == LV_ADDRESS)
				VariabilaAdr(type);
			else
				Expr(type);
			if (type.m_nAtribTip != par.m_nType )
				throw error(SET_GENERAL, CString("Invalid Parameter type"));
			if (par.m_nTransmisie == LV_ADDRESS && type.m_nAtribLValue== LV_VALUE )
				throw error(SET_GENERAL, CString("Invalid Parameter, must be a variable"));
			if (NextToken()!=',')
			{
				PushBack();
				if (pos != NULL)
					throw error(SET_GENERAL, CString("Too few parameters"));
				break;
			}
		}
		if (NextToken()!=')')
			throw error(SET_EXPECTED, CString(")"));
	}
	else
	{
		PushBack();
		if (simb->m_ListaPar.GetCount () != 0)
			throw error(SET_GENERAL, CString("Some parameters expected"));
	}
	// Generate code for the call
	if (simb->m_nAdrStart == -1)
	{
		AddressPlace place;
		place.m_nPosition = m_Code->GetCurCodePos() + VM_ICSIZE;
		place.m_sSimb = procedure;
		m_AdrList.AddHead(place);
	}
	GenerateCode(INSTR_CALL,(REGISTER)simb->m_nAdrStart, simb->m_sName);
	GenerateCode(INSTR_RED,(OFFSET)simb->m_ListaPar.GetCount());
}




///////////////////////////////////////////////////////////////
// Programmer		: Zoly Farkas
// Creation Date	: 8/3/99 4:37:58 PM
// Function name	: CPascalCompiler::InstrPrint
// Description	    : 
// Return type		: void 
///////////////////////////////////////////////////////////////

void CPascalCompiler::InstrPrint()
{
	if (NextToken()!=TT_KW_PRINT)
		throw error(SET_EXPECTED, CString("print"));
	if (NextToken()!='(')
		throw error(SET_EXPECTED, CString("("));
	while (1)
	{
		if (NextToken()!=TT_STRING)
		{
			PushBack();
			ExprInfo type;
			Expr(type);
			GenerateCode(INSTR_OUTP);
		}
		else
		{
			// If string
			// generate string printing code
			CString str = GetStrValue();
			for (int i =0 ; i<str.GetLength(); i++)
			{
				StackEntry entry;
				entry.m_nType = SE_CHAR;
				CV_CHAR(entry.m_Info) = str[i];
				GenerateCode(INSTR_LODI,entry);
				GenerateCode(INSTR_OUTP);
			}
		}
		if (NextToken()!=',')
		{
			PushBack();
			break;
		}
	}
	if (NextToken()!=')')
		throw error(SET_EXPECTED, CString(")"));
}




///////////////////////////////////////////////////////////////
// Programmer		: Zoly Farkas
// Creation Date	: 8/3/99 4:38:06 PM
// Function name	: CPascalCompiler::InstrRead
// Description	    : 
// Return type		: void 
///////////////////////////////////////////////////////////////

void CPascalCompiler::InstrRead()
{
	if (NextToken()!=TT_KW_READ)
		throw error(SET_EXPECTED, CString("read"));
	if (NextToken()!='(')
		throw error(SET_EXPECTED, CString("("));
	while (1)
	{
		ExprInfo type;
		VariabilaAdr(type);
		GenerateCode(INSTR_INP,(BYTE) type.m_nAtribTip);
		GenerateCode(INSTR_STO);

		if (NextToken()!=',')
		{
			PushBack();
			break;
		}
	}
	if (NextToken()!=')')
		throw error(SET_EXPECTED, CString(")"));
}



///////////////////////////////////////////////////////////////
// Programmer		: Zoly Farkas
// Creation Date	: 8/3/99 4:38:14 PM
// Function name	: error::GetErrStr
// Description	    : 
// Return type		: CString 
///////////////////////////////////////////////////////////////

CString error::GetErrStr()
{
	CString estr;
	switch (m_nType)
	{
	case SET_GENERAL: estr.Format("Syntax ERROR, %s",m_sData);break;
	case SET_EXPECTED: estr.Format("%s expected",m_sData);break;
	case SET_INVALID_OP_TYPES: estr.Format("Invalid operation between different types, %s",m_sData);break;
	case SET_INVALID_OP: estr.Format("Invalid operation , %s",m_sData);break;
	default: estr = _T("Syntax ERROR");
	}
	return estr;
}




///////////////////////////////////////////////////////////////
// Programmer		: Zoly Farkas
// Creation Date	: 8/3/99 4:38:22 PM
// Function name	: CPascalCompiler::GetErrStr
// Description	    : 
// Return type		: CString 
// Argument         : error &e
///////////////////////////////////////////////////////////////

CString CPascalCompiler::GetErrStr(error &e)
{
	CString str;
	str.Format("%s  at : %d", e.GetErrStr(), LineNo ());	
	return str;
}






///////////////////////////////////////////////////////////////
// Programmer		: Zoly Farkas
// Creation Date	: 8/3/99 4:38:30 PM
// Function name	: SymbolTableCollection::SymbolTableCollection
// Description	    : 
// Return type		: 
///////////////////////////////////////////////////////////////

SymbolTableCollection::SymbolTableCollection()
{
}




///////////////////////////////////////////////////////////////
// Programmer		: Zoly Farkas
// Creation Date	: 8/3/99 4:38:37 PM
// Function name	: SymbolTableCollection::~SymbolTableCollection
// Description	    : 
// Return type		: 
///////////////////////////////////////////////////////////////

SymbolTableCollection::~SymbolTableCollection()
{
	POSITION pos = GetHeadPosition();
	while (pos!=NULL)
	{
		SymbolTable *table = GetNext(pos);
		delete table;
	}
}




///////////////////////////////////////////////////////////////
// Programmer		: Zoly Farkas
// Creation Date	: 8/3/99 4:38:44 PM
// Function name	: SymbolTableCollection::IncreaseLevel
// Description	    : 
// Return type		: void 
///////////////////////////////////////////////////////////////

void SymbolTableCollection::IncreaseLevel()
{
	SymbolTable *ntable = new SymbolTable();
	ntable->InitHashTable( MAX_SYMB );
	AddHead(ntable);
}




///////////////////////////////////////////////////////////////
// Programmer		: Zoly Farkas
// Creation Date	: 8/3/99 4:38:51 PM
// Function name	: SymbolTableCollection::DecreaseLevel
// Description	    : 
// Return type		: void 
///////////////////////////////////////////////////////////////

void SymbolTableCollection::DecreaseLevel()
{
	SymbolTable *ntable = GetHead();
	delete ntable;
	RemoveHead();
}



///////////////////////////////////////////////////////////////
// Programmer		: Zoly Farkas
// Creation Date	: 8/3/99 4:38:57 PM
// Function name	: SymbolTableCollection::InsertSymbol
// Description	    : 
// Return type		: void 
// Argument         : Symbol *s
///////////////////////////////////////////////////////////////

void SymbolTableCollection::InsertSymbol(Symbol *s)
{
	SymbolTable *ntable = GetHead();
	(*ntable)[s->m_sName] = s;
}




///////////////////////////////////////////////////////////////
// Programmer		: Zoly Farkas
// Creation Date	: 8/3/99 4:39:04 PM
// Function name	: SymbolTableCollection::RetreaveSymbolCL
// Description	    : 
// Return type		: BOOL 
// Argument         : CString& name
// Argument         : Symbol *&simb
///////////////////////////////////////////////////////////////

BOOL SymbolTableCollection::RetreaveSymbolCL(CString& name, Symbol *&simb)
{
	SymbolTable *ntable = GetHead();
	return ntable->Lookup(name,simb);
}




///////////////////////////////////////////////////////////////
// Programmer		: Zoly Farkas
// Creation Date	: 8/3/99 4:39:12 PM
// Function name	: CPascalCompiler::RetreaveSymbol
// Description	    : 
// Return type		: BOOL 
// Argument         : CString &name
// Argument         : Symbol *&simb
///////////////////////////////////////////////////////////////

BOOL CPascalCompiler::RetreaveSymbol(CString &name, Symbol *&simb)
{
	return m_SymbTableCollection.RetreaveSymbolAL (name,simb);
}



///////////////////////////////////////////////////////////////
// Programmer		: Zoly Farkas
// Creation Date	: 8/3/99 4:39:18 PM
// Function name	: CPascalCompiler::IncreaseLevel
// Description	    : 
// Return type		: void 
///////////////////////////////////////////////////////////////

void CPascalCompiler::IncreaseLevel()
{
	m_SymbTableCollection.IncreaseLevel ();	
	m_nVNivel++;
}



///////////////////////////////////////////////////////////////
// Programmer		: Zoly Farkas
// Creation Date	: 8/3/99 4:39:24 PM
// Function name	: CPascalCompiler::DecreaseLevel
// Description	    : 
// Return type		: void 
///////////////////////////////////////////////////////////////

void CPascalCompiler::DecreaseLevel()
{
	m_SymbTableCollection.DecreaseLevel ();	
	m_nVNivel--;
}


///////////////////////////////////////////////////////////////
// Programm

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜电影网| 国产欧美日韩综合精品一区二区| 亚洲欧洲成人自拍| 99热国产精品| 亚洲午夜久久久久久久久电影院| 色999日韩国产欧美一区二区| 一区二区在线观看不卡| 欧美性生活一区| 天天色图综合网| 久久女同精品一区二区| 成人午夜视频免费看| 亚洲日本青草视频在线怡红院| 91久久精品一区二区三区| 一区二区久久久| 日韩女优av电影| 国产高清精品在线| 亚洲精品久久久久久国产精华液 | 国产成人亚洲综合a∨婷婷| 日本一区二区三区四区| 日本电影欧美片| 美国毛片一区二区| 国产精品另类一区| 色哟哟在线观看一区二区三区| 亚洲一区二区在线观看视频| 91精品国产综合久久婷婷香蕉 | 91在线免费视频观看| 综合久久给合久久狠狠狠97色| 欧美日韩精品欧美日韩精品一综合| 美女视频一区在线观看| 国产精品国产三级国产aⅴ入口| 欧美性猛交一区二区三区精品| 久久 天天综合| 亚洲欧美日韩中文播放| 日韩欧美第一区| 日本精品裸体写真集在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产欧美日韩精品一区| 欧美另类videos死尸| 成人av在线播放网站| 男女性色大片免费观看一区二区 | 56国语精品自产拍在线观看| 国产精品夜夜嗨| 午夜久久久久久| 中文久久乱码一区二区| 欧美电影免费观看高清完整版| 91视频在线观看免费| 国产一区二区三区免费看| 亚洲已满18点击进入久久| 久久精品一区八戒影视| 日韩一区二区中文字幕| 99re热视频这里只精品| 国产成人综合网站| 欧美aⅴ一区二区三区视频| 亚洲欧美在线视频观看| 国产喂奶挤奶一区二区三区| 制服丝袜亚洲精品中文字幕| 91同城在线观看| 国产精品一区二区在线播放 | 欧美tk—视频vk| 欧美日韩一区二区在线观看视频 | 国产精品毛片久久久久久| 日韩精品一区二区三区视频在线观看| 欧美在线高清视频| 91老师国产黑色丝袜在线| 国产福利91精品一区| 韩国av一区二区三区四区| 日韩电影在线一区二区三区| 亚洲无线码一区二区三区| 亚洲日本在线天堂| 亚洲精品乱码久久久久久久久| 中文字幕一区二区三区乱码在线 | 午夜一区二区三区视频| 亚洲最大成人网4388xx| 亚洲精品菠萝久久久久久久| 国产精品白丝在线| 国产精品二区一区二区aⅴ污介绍| 久久久久久久综合色一本| 久久亚洲精品国产精品紫薇| 欧美mv和日韩mv国产网站| 日韩三级中文字幕| 亚洲精品一区在线观看| 2021国产精品久久精品| 久久精品人人做人人爽人人| 久久午夜免费电影| 国产偷国产偷精品高清尤物 | 亚洲欧洲三级电影| 国产精品久久夜| 中文字幕制服丝袜成人av| 亚洲色图欧美偷拍| 一区二区久久久久久| 亚洲.国产.中文慕字在线| 日韩国产高清在线| 国内久久精品视频| 国产大陆精品国产| 色综合中文字幕国产 | 精品国产亚洲在线| 久久精品视频一区| 亚洲视频免费在线| 亚洲bt欧美bt精品| 久久精品国产精品亚洲精品| 国产乱人伦偷精品视频不卡 | 亚洲欧美色一区| 日韩高清不卡一区二区| 国产精品原创巨作av| 99视频国产精品| 欧美男女性生活在线直播观看| 欧美一区二区视频网站| 国产亚洲一区二区三区在线观看| 国产精品网友自拍| 亚洲国产精品一区二区久久恐怖片| 亚洲va韩国va欧美va精品| 国内精品伊人久久久久av一坑| 成人精品国产一区二区4080| 欧美视频一区二区三区在线观看| 日韩一区二区三区电影在线观看| 久久久精品tv| 亚洲一卡二卡三卡四卡五卡| 极品美女销魂一区二区三区免费| aaa亚洲精品| 日韩丝袜美女视频| 亚洲卡通动漫在线| 久久99在线观看| 91久久奴性调教| 久久欧美一区二区| 午夜精品成人在线| 成人av资源站| 日韩精品一区二区三区中文不卡| 国产精品九色蝌蚪自拍| 看电影不卡的网站| 91黄色激情网站| 中文字幕第一区综合| 爽好多水快深点欧美视频| caoporn国产一区二区| 欧美一区二区免费| 亚洲精品久久久蜜桃| 国产高清亚洲一区| 日韩欧美一区在线| 亚洲在线视频免费观看| 丁香六月久久综合狠狠色| 欧美一区二区黄色| 亚洲韩国精品一区| 一本一道久久a久久精品综合蜜臀| 精品国产a毛片| 日本一道高清亚洲日美韩| 色综合一个色综合亚洲| 亚洲国产激情av| 黑人精品欧美一区二区蜜桃| 欧美日韩国产综合视频在线观看 | 亚洲国产cao| 色综合一个色综合亚洲| 日本一区二区不卡视频| 国模套图日韩精品一区二区| 69精品人人人人| 亚洲高清一区二区三区| 色诱亚洲精品久久久久久| 中文一区一区三区高中清不卡| 国产在线视频一区二区三区| 在线不卡一区二区| 婷婷六月综合网| 欧美日韩成人一区二区| 亚洲午夜精品久久久久久久久| 99久久er热在这里只有精品15| 久久久久久99精品| 国产精品一二三区| 国产女同性恋一区二区| 粉嫩av一区二区三区| 亚洲精品一区二区三区精华液 | 亚洲欧美国产三级| 一本大道久久精品懂色aⅴ | 中文一区二区在线观看| 国产成人亚洲综合a∨婷婷| 久久久久88色偷偷免费| 国模套图日韩精品一区二区| 久久美女艺术照精彩视频福利播放| 美腿丝袜亚洲综合| 久久久亚洲精品一区二区三区 | 国产成人超碰人人澡人人澡| 久久综合九色综合97婷婷女人| 色哟哟日韩精品| 一区二区三区不卡视频| 欧洲一区在线电影| 肉肉av福利一精品导航| 欧美一卡二卡三卡| 国产一二三精品| 1000精品久久久久久久久| 欧美亚洲自拍偷拍| 日韩激情在线观看| 久久综合中文字幕| 成人一区二区三区在线观看| 亚洲天堂免费看| 欧美视频一区在线观看| 老司机精品视频线观看86| 久久久.com| 91黄色激情网站| 蜜桃av一区二区在线观看| 国产欧美日韩精品在线| 欧美在线三级电影| 激情综合网最新| 亚洲九九爱视频| 日韩欧美国产wwwww|