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

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

?? compiler.cpp

?? 編譯原理的作業(yè) 編譯器
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
				}
				break;
			case 'm':
				if (strcmp(_tok.text, "mult") == 0)
				{
					instr.opcode = MULT;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else
				{
					errorNo = ER_ELF0001;
				}
				break;
			case 'n':
				if (strcmp(_tok.text, "neg") == 0)
				{
					instr.opcode = NEG;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "nop") == 0)
				{
					instr.opcode = NOP;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "not") == 0)
				{
					instr.opcode = NOT;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else
				{
					errorNo = ER_ELF0001;
				}
				break;
			case 'o':
				if (strcmp(_tok.text, "or") == 0)
				{
					instr.opcode = OR;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else
				{
					errorNo = ER_ELF0001;
				}
				break;
			case 'p':
				if (strcmp(_tok.text, "pop") == 0)
				{
					instr.opcode = POP;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "prt") == 0)
				{
					instr.opcode = PRT;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "prts") == 0)
				{
					instr.opcode = PRTS;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else
				{
					errorNo = ER_ELF0001;
				}
				break;
			case 'r':
				if (strcmp(_tok.text, "rem") == 0)
				{
					instr.opcode = REM;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "ret") == 0)
				{
					eoi = true;
					instr.opcode = RET;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else
				{
					errorNo = ER_ELF0001;
				}
				break;
			case 's':
				if (strcmp(_tok.text, "shl") == 0)
				{
					instr.opcode = SHL;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "shr") == 0)
				{
					instr.opcode = SHR;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "st.0") == 0)
				{
					instr.opcode = ST0;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "st.1") == 0)
				{
					instr.opcode = ST1;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "st.2") == 0)
				{
					instr.opcode = ST2;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "st.3") == 0)
				{
					instr.opcode = ST3;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "st.4") == 0)
				{
					instr.opcode = ST4;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "st.5") == 0)
				{
					instr.opcode = ST5;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "st.6") == 0)
				{
					instr.opcode = ST6;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "st.7") == 0)
				{
					instr.opcode = ST7;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "st.8") == 0)
				{
					instr.opcode = ST8;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "st.9") == 0)
				{
					instr.opcode = ST9;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else if (strcmp(_tok.text, "sub") == 0)
				{
					instr.opcode = SUB;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else
				{
					errorNo = ER_ELF0001;
				}
				break;
			case 'x':
				if (strcmp(_tok.text, "xor") == 0)
				{
					instr.opcode = XOR;
					_instrs.PushBack(instr); 
					_curMethod._addr += 2;
				}
				else
				{
					errorNo = ER_ELF0001;
				}
				break;
			default:
				errorNo = ER_ELF0001;
			}
			instr.hasArg = false;
		}
		else if (Lexer::Match(_tok, TOK_RP_B))
		{
			errorNo = ER_ELF0020;
			eoi = true;
		}
		else
		{
			errorNo = ER_ELF0001;
		}
		
 
		if (errorNo != -1)
		{
			OutputError(_curLine, errorNo);
		}
	}
}

int Compiler::ILCallArgumentList()
{
	int errorNo = -1;

	_lexer->GetNextToken(_tok);
	if(!Lexer::Match(_tok, TOK_IDENTIFIER))
	{
		errorNo = ER_ELF0021;
	}
	else
	{
		//TODO: HashIndexer;
	}

	if (!Lexer::Match(_lexer ->GetNextToken(), TOK_LP_S))
	{
		OutputError(_curLine, ER_ELF0010);  
	}

	_lexer ->GetNextToken(_tok);
	if (Lexer::Match(_tok, TOK_RP_S))
	{
		return errorNo;
	}

	while (true)
	{
		ILCallArgument();
		_lexer ->GetNextToken(_tok);

		if (!Lexer::Match(_tok, TOK_COMMA))
		{
			break;
		}
		_lexer ->GetNextToken(_tok);

		if (Lexer::Match(_tok, TOK_RP_S))
		{
			OutputError(_curLine, ER_ELF0024);
			return errorNo;					//For continue compiling;
		}
	}

	if (Lexer::Match(_tok, TOK_RP_S))
	{
		//TODO: HashIndexer;
		//instr.arg = ;
		return errorNo;
	}
	else
	{
		OutputError(_curLine, ER_ELF0017);
	}
	return errorNo;
}


void Compiler::ILCallArgument()
{
	if (Lexer::Match(_tok, TOK_KEYWORD))
	{
		_curMethod._params.PushBack(_tok.arg);
	}
	else
	{
		OutputError(_curLine, ER_ELF0022);
	}
}

void Compiler::MetaDataGen()
{
	_metaData.Store(_outExe);
}

void Compiler::ILGen()
{
	List<Instr>::Iterator it(_instrs);
	for (it.First(); !it.IsDone(); it.Next())
	{
		Instr i = it.Current();
		fwrite(&(i.opcode), sizeof(U16), 1, _outExe);
		if (i.hasArg)
		{
			fwrite(&(i.arg), sizeof(S64), 1, _outExe);
		}
	}
}

void Compiler::CodeGen()
{
	_fileHeader.Store(_outExe);
	MetaDataGen();
	ILGen();
	_strPool.Store(_outExe);
	ListGen();
}

void Compiler::ListGen()
{
	DumpFileHeader();
	DumpMethods();
	DumpFields();
	DumpStringPool();
	DumpILCode();
	fwrite(_listFile._buffer, _listFile._curPos, 1, _dumpFile);
}

void Compiler::DumpFileHeader()
{
	_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "=========================== File Header ===========================\n");
	_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "Num of Methods: \t\t%d\n", _fileHeader._nMethods);
	_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "Num of Fields: \t\t\t%d\n", _fileHeader._nFields);
	_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "Num of Instruction: \t\t%ld\n", _fileHeader._cbinstr);
	_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "Size of StringPool: \t\t%ld\n", _fileHeader._cbStrPool);
}

void Compiler::DumpFields()
{
	_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "\n=========================== Fields Meta ===========================\n");
	int i = 0;

	List<FieldDesc>::Iterator it(_metaData._fields);
	for (it.First(); !it.IsDone(); it.Next())
	{
		++i;
		_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "\nField \t\t(%d):\n", i);
		_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, 
			"Name: \t\t%d(str index in Pool) == %s\n", it.Current()._name, _strPool._pool+ it.Current()._name);
		_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "Type: %s\n", _listFile.ValueType[it.Current()._type]);
	}
}

void Compiler::DumpMethods()
{
	_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "\n=========================== Methods Meta ===========================\n");
	int i = 0;
	int p = 0;

	List<MethodDesc>::Iterator it(_metaData._methods);
	for (it.First(); !it.IsDone(); it.Next())
	{
		++i;
		_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "\nMethod \t\t(%d):\n", i);
		_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "Return Type: \t\t%s\n", _listFile.ValueType[it.Current()._retType]);
		if (it.Current()._isEntry)
		{
			_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "Special: This is the entry method of the Program\n");
		}

		_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, 
			"Name: \t\t%d(str index in Pool) == %s\n", it.Current()._name, _strPool._pool+ it.Current()._name);
		_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "Start Address = %d\n", it.Current()._addr);

		if (!it.Current()._params.IsEmpty())
		{
			List<int>::Iterator i(it.Current()._params);
			
			for (i.First(); !i.IsDone(); i.Next())
			{
				++p;
				_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "Parameter \t(%d):\n", p);
				_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "Index of Field: \t%d\n", i.Current());
			}
		}
	}
}


void Compiler::DumpILCode()
{
	_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "\n=======================   IL Code Dump   ========================\n\n");
	static int bil;
	List<Instr>::Iterator it(_instrs);

	for (it.First(); !it.IsDone(); it.Next())
	{
		
		_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "IL00%d\t", bil);
		_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "%s\t\t", opList[it.Current().opcode]);
		bil += 2;

		if (it.Current().hasArg)
		{
			bil += 8;
			_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "%ld", it.Current().arg);
		}
		_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "\n");
	}
}

void Compiler::DumpStringPool()
{
	_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "\n======================= String Pool Dump =======================\n\n");
	int i = 0;

	while (i < _strPool.Size())
	{
		_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "%c", _strPool._pool[i]);
		++i;
	}	
	_listFile._curPos += sprintf(_listFile._buffer + _listFile._curPos, "\n");
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
555www色欧美视频| 亚洲无人区一区| 亚洲美女屁股眼交| 精品一区精品二区高清| 色中色一区二区| 337p粉嫩大胆噜噜噜噜噜91av| 最好看的中文字幕久久| 韩国成人精品a∨在线观看| 一本大道久久a久久综合| 久久九九久精品国产免费直播| 亚洲国产裸拍裸体视频在线观看乱了| 国产乱子伦一区二区三区国色天香| 欧美视频一区二区三区在线观看| 精品国精品自拍自在线| 亚洲午夜在线视频| 97久久人人超碰| 国产视频一区在线观看| 麻豆精品国产91久久久久久| 欧美性大战久久久| 亚洲精品免费在线观看| 97se亚洲国产综合自在线观| 国产欧美日韩一区二区三区在线观看| 首页综合国产亚洲丝袜| 欧美日韩一卡二卡三卡| 亚洲国产精品久久一线不卡| 91视频观看免费| 日韩理论片一区二区| 国产91精品入口| 国产日韩精品一区二区浪潮av| 韩国v欧美v日本v亚洲v| 日韩你懂的电影在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美日韩不卡一区| 日日欢夜夜爽一区| 91精品国产日韩91久久久久久| 亚洲成在线观看| 欧美日韩精品免费| 日韩制服丝袜av| 欧美一区二区三区免费| 日韩二区三区四区| 欧美成人三级在线| 国产精品一区二区久激情瑜伽| 久久久久99精品一区| 成人精品视频一区二区三区尤物| 亚洲国产精品精华液ab| 99久久精品国产麻豆演员表| 亚洲欧洲99久久| 欧美专区亚洲专区| 日本sm残虐另类| 国产亚洲成年网址在线观看| 成人丝袜18视频在线观看| 中文字幕一区二区三中文字幕| 91浏览器打开| 一区二区三区欧美激情| 欧美一区二区三区思思人| 激情偷乱视频一区二区三区| 国产精品区一区二区三区| 色欧美日韩亚洲| 性做久久久久久| 久久一日本道色综合| 波多野结衣亚洲一区| 亚洲午夜精品在线| 精品国产1区二区| 成人av午夜影院| 天堂va蜜桃一区二区三区漫画版| 欧美成人a在线| 91麻豆精品视频| 美国三级日本三级久久99| 日本一区二区免费在线| 欧美三级视频在线观看| 国产一区二区三区美女| 亚洲精品伦理在线| 精品欧美一区二区久久| 99国产一区二区三精品乱码| 日韩av电影免费观看高清完整版在线观看| 日韩一区二区影院| 97se亚洲国产综合自在线不卡 | 亚洲精品一区二区三区香蕉| 高清久久久久久| 亚洲成人一二三| 中文字幕精品—区二区四季| 欧美日韩在线三级| 成人h版在线观看| 蜜臂av日日欢夜夜爽一区| 成人免费一区二区三区视频 | gogogo免费视频观看亚洲一| 亚洲国产成人av| 国产精品福利一区二区| 欧美sm美女调教| 欧美日韩极品在线观看一区| aaa国产一区| 国产伦精品一区二区三区视频青涩| 一区二区三区国产精品| 中文一区二区完整视频在线观看| 欧美一区二区三区婷婷月色| 欧美在线观看禁18| 99国产精品久久久久久久久久久 | 亚洲人快播电影网| 国产精品色呦呦| 久久天天做天天爱综合色| 欧美日产国产精品| 欧洲一区二区三区在线| 91免费在线播放| 91网站在线观看视频| 国产成人午夜精品影院观看视频 | 久久久www成人免费毛片麻豆 | 国产日韩精品久久久| 欧美一区国产二区| 7777女厕盗摄久久久| 日本乱人伦一区| 91激情五月电影| 在线免费观看视频一区| 欧美影院一区二区三区| 欧美三级欧美一级| 欧美日韩中文字幕一区二区| 91蝌蚪porny九色| 91亚洲男人天堂| 日本高清不卡在线观看| 91女人视频在线观看| 91电影在线观看| 欧美日韩亚洲丝袜制服| 欧美日韩精品一区视频| 欧美日韩成人在线一区| 91精品国产综合久久精品性色| 这里只有精品99re| 欧美第一区第二区| 久久九九久精品国产免费直播| 欧美极品少妇xxxxⅹ高跟鞋 | 国产精品自拍三区| 国产激情视频一区二区三区欧美| 国产成人在线电影| 91免费看视频| 欧美麻豆精品久久久久久| 日韩免费视频一区二区| 久久久久久黄色| 日韩理论片一区二区| 亚洲高清免费一级二级三级| 青青草国产精品亚洲专区无| 国产一区二区毛片| 99久久精品99国产精品| 欧美三级电影网站| 2023国产精品自拍| 亚洲欧美日韩人成在线播放| 亚洲高清在线精品| 国产精品99久久久| 在线一区二区视频| 欧美成人一区二区三区在线观看 | 亚洲一区二区在线免费观看视频| 日韩精品国产欧美| 国产成人免费xxxxxxxx| 色哟哟一区二区| www激情久久| 亚洲午夜一二三区视频| 精品一区二区在线观看| 93久久精品日日躁夜夜躁欧美| 欧美日韩一区二区在线视频| 精品国产污网站| 亚洲国产欧美另类丝袜| 国产一区二区精品久久99| av在线播放不卡| 欧美一区二区三区爱爱| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 国产精品一二三四五| 欧美性猛片aaaaaaa做受| 久久综合成人精品亚洲另类欧美| 国产精品久线观看视频| 日韩不卡一区二区| 色妹子一区二区| 久久久综合精品| 婷婷综合另类小说色区| 成人妖精视频yjsp地址| 日韩一级大片在线| 亚洲国产中文字幕| 成人免费视频视频| 欧美成人午夜电影| 秋霞午夜av一区二区三区| av电影一区二区| 2020国产精品自拍| 青青草精品视频| 欧美日韩在线播放三区| 综合久久久久久久| 国产精品综合av一区二区国产馆| 欧美日韩精品一区二区三区蜜桃| 成人免费一区二区三区在线观看| 韩国成人福利片在线播放| 欧美精品久久久久久久久老牛影院| ...av二区三区久久精品| 国产精品99精品久久免费| 精品乱码亚洲一区二区不卡| 午夜精品久久久久久久| 欧美日韩一区二区三区四区| 亚洲男人天堂av网| av在线不卡电影| 国产精品日产欧美久久久久| 国产精品一区二区免费不卡| 精品国产乱码久久| 国产一区视频网站| 久久中文字幕电影| 国产精品一区久久久久| 久久综合九色综合欧美就去吻|