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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? commandline.cpp

?? 內(nèi)含源代碼和編譯實(shí)驗(yàn)報(bào)告
?? CPP
字號(hào):
/******************************************************************
** 文件名: CommandLine.cpp
** 描  述: 通過兩個(gè)類(類的聲明在Commcanline.h中)完成命令行參數(shù)的處理。包括:
**         v:    顯示版本信息。
**         ?:    使用幫助。
**         S:    進(jìn)行源程序掃描后就結(jié)束
**         p:    執(zhí)行語法分析后結(jié)束
**         A:    執(zhí)行語義分析后結(jié)束。
**         C:    產(chǎn)生實(shí)際的80X86匯編代碼。
**         命令行使用示例: hc/v   顯示版本信息。
**                           hc/c filein.c  fileout.asm   編譯生成匯編代碼文件。
******************************************************************/
#include	"globals.h"
#include	"CommandLine.h"

/****************************************************
**編譯過程中用到的所有簡(jiǎn)單全局變量,在main.c中被定義。
*****************************************************/
extern	CGlobals		AllGlobals;

/******************************************************
**用于控制編譯器各階是否輸出信息的標(biāo)志,在main.c中被定義
*******************************************************/
extern	CFlags			AllFlags;

/*************************CCommandClass 類*********************************/
CCommandClass::CCommandClass(char pa_chParameter, 
			void (*pa_fnpParameter)(CCompileOption& pa_ComOption), 
			                         CCommandClass *pa_pNextClass){
	m_chParameter=pa_chParameter;
	m_fnpParameter=pa_fnpParameter;
	m_pNextClass=pa_pNextClass;
}

/*********************CCommandOpt 類****************************************/
/********************************
**靜態(tài)數(shù)據(jù)成員的初始化
********************************/
int		CCommandOpt::m_argc=0;
char	**CCommandOpt::m_argv=NULL;

CCommandOpt::CCommandOpt(int argc,char *argv[],CCompileOption &pa_ComOption){
	m_argc=argc; m_argv=argv;						//這兩個(gè)是靜態(tài)數(shù)據(jù)成員,這兒只是重新賦值。
	OnParameter();
	try{
		if(argc==1)
			throw CbadCommand("Invalid Command.");
		else{
			m_strComline=argv[1];
			if(m_strComline[0]=='/') Lookup_Func(pa_ComOption,m_strComline[1]);
			else OnlyCode(pa_ComOption);}
	}
	catch(CbadCommand& pa_badCommand){
		pa_badCommand.m_fnImformation();}
}

/**************************************
**在類的析構(gòu)函數(shù)中銷毀鏈表
**************************************/
CCommandOpt::~CCommandOpt(){
	CCommandClass *pTempClass;
	while(m_pFirstClass!=NULL){
		pTempClass=m_pFirstClass->m_pNextClass;
		delete m_pFirstClass;
		m_pFirstClass=pTempClass;
	}
}

/**************************************
**建立參數(shù)與相應(yīng)處理函數(shù)的鏈表
**************************************/
void CCommandOpt::OnParameter() throw(bad_alloc){
	try{
		m_pFirstClass=NULL;
		ADD_PARAMETER('v', OnVersion);  
		ADD_PARAMETER('?', OnHelp);
		ADD_PARAMETER('s', OnlyScan);
		ADD_PARAMETER('p', OnlyParse);
		ADD_PARAMETER('a', OnlyAnalyze);
		ADD_PARAMETER('c', OnlyCode);
	}
	catch (bad_alloc){										//處理堆分配異常。
		cout<<"Can't be allocated in heap, the programme must be terminated."<<endl;
		exit(1);
	}
}

/*******************************************
**根據(jù)傳入的參數(shù)找到相應(yīng)的處理函數(shù)
*******************************************/
void CCommandOpt::Lookup_Func(CCompileOption& pa_ComOption,char pa_chParameter){
	CCommandClass *pTempClass=m_pFirstClass;		     //找到鏈表頭,并順著鏈表查找函數(shù)。
	if(pa_chParameter<97 && pa_chParameter!=63) 
		pa_chParameter+=32;								//參數(shù)全部轉(zhuǎn)化為小寫處理。問號(hào)無須轉(zhuǎn)化。
	while(pTempClass && pTempClass->m_chParameter!=pa_chParameter)
		pTempClass=pTempClass->m_pNextClass;
	if(pTempClass)
		pTempClass->m_fnpParameter(pa_ComOption);//調(diào)用函數(shù)前,應(yīng)先確保指針有效。
	else
		throw CbadCommand("Invalid Command.");
	return;
}

/*******************************************
**顯示版本信息的命令行處理函數(shù)
*******************************************/	
void CCommandOpt::OnVersion(CCompileOption& pa_ComOption){
	cout<<"C- compiler V1.0"<<endl;
	cout<<"copyright @2002"<<endl;
	cout<<"Author: Helinqiang Nancaihong"<<endl;
}

/******************************************
**顯示使用幫助信息
******************************************/
void CCommandOpt::OnHelp(CCompileOption& pa_ComOption){
	cout<<endl;
	cout<<"usage:   "<<"hc [/v] [/?] [/s filename.c] [/p filename.c] [/a filename.c]"<<endl;
	cout<<'\t'<<"    [/c filname.c [filename.asm]]"<<endl<<endl;
	cout<<"options:"<<endl;
	cout<<'\t'<<"/v"<<"\t\t"<<"Show the version of the compiler."<<endl;
	cout<<'\t'<<"/?"<<"\t\t"<<"Help information about the compiler."<<endl;
	cout<<'\t'<<"/s filename.c"<<'\t'<<"Only scan the C source file."<<endl;
	cout<<'\t'<<"/p filename.c"<<'\t'<<"Only prase the C source file."<<endl;
	cout<<'\t'<<"/a filename.c"<<'\t'<<"Only analyze the C source file."<<endl;
	cout<<'\t'<<"/c filename.c [filename.asm]]"<<endl;
	cout<<"\t\t\t"<<"Generate the real asm file"<<endl;
	return;
}

/******************************************
**以下四個(gè)函數(shù)處理相應(yīng)的編譯開關(guān)參數(shù)。
******************************************/
void CCommandOpt::OnlyScan(CCompileOption& pa_ComOption){
	if(m_argc!=3)
		throw CbadCommand("usage:  hc/s filename.c\ntype hc/? for more information.");
	char *pchargv=m_argv[2];
	ABOUTFILENAME(".c", 2)		//宏,用于辯識(shí)源文件的擴(kuò)展名,不為.c則錯(cuò)誤,沒有擴(kuò)展名,則自動(dòng)加上。
	OpenSourceFile(m_argv[2]);
	AllFlags.m_iTraceScan=1;
	AllFlags.m_iTraceParse=0;
	AllFlags.m_iTraceAnalyze=0;
	AllFlags.m_TraceCode=0;
	pa_ComOption.m_fNoparse=TRUE;
	pa_ComOption.m_fNoanalyze=TRUE;
	pa_ComOption.m_fNocode=TRUE;
}
	
void CCommandOpt::OnlyParse(CCompileOption& pa_ComOption){
	if(m_argc!=3)
		throw CbadCommand("usage:  hc/p filename.c\ntype hc/? for more information.");
	char *pchargv=m_argv[2];
	ABOUTFILENAME(".c", 2)
	OpenSourceFile(m_argv[2]);
	AllFlags.m_iTraceScan=0;
	AllFlags.m_iTraceParse=1;
	AllFlags.m_iTraceAnalyze=0;
	AllFlags.m_TraceCode=0;
	pa_ComOption.m_fNoparse=FALSE;
	pa_ComOption.m_fNoanalyze=TRUE;
	pa_ComOption.m_fNocode=TRUE;
}
	
void CCommandOpt::OnlyAnalyze(CCompileOption& pa_ComOption){
	if(m_argc!=3)
		throw CbadCommand("usage:  hc/a filename.c\ntype hc/? for more information.");
	char *pchargv=m_argv[2];
	ABOUTFILENAME(".c", 2)
	OpenSourceFile(m_argv[2]);
	AllFlags.m_iTraceScan=0;
	AllFlags.m_iTraceParse=0;
	AllFlags.m_iTraceAnalyze=1;
	AllFlags.m_TraceCode=0;
	pa_ComOption.m_fNoparse=FALSE;
	pa_ComOption.m_fNoanalyze=FALSE;
	pa_ComOption.m_fNocode=TRUE;
}
	
void CCommandOpt::OnlyCode(CCompileOption& pa_ComOption){
	if(m_argc!=3 && m_argc!=4)
		throw CbadCommand("usage:  hc/c filename.c [filename.asm]\ntype hc/? for more information.");
	char *pchargv=m_argv[2];
	ABOUTFILENAME(".c", 2)
	OpenSourceFile(m_argv[2]);
	if(m_argc==3){	//生成代碼時(shí),沒有指定目標(biāo)代碼文件,則自動(dòng)生成與源文件同名的文件。
		pchargv=m_argv[2]+strlen(m_argv[2])-2;
		*pchargv='\0';
		strcat(m_argv[2],".asm");
		OpenCodeFile(m_argv[2]);}
	else{
		pchargv=m_argv[3];
		ABOUTFILENAME(".asm", 3)
		OpenCodeFile(m_argv[3]);}
	AllFlags.m_iTraceScan=0;
	AllFlags.m_iTraceParse=0;
	AllFlags.m_iTraceAnalyze=0;
	AllFlags.m_TraceCode=1;
	pa_ComOption.m_fNoparse=FALSE;
	pa_ComOption.m_fNoanalyze=FALSE;
	pa_ComOption.m_fNocode=FALSE;
}

/*****************************************
**  找開源程序文件
*****************************************/
void CCommandOpt::OpenSourceFile(string filename){
	AllGlobals.source.open(filename.c_str(),ios_base::in);
	if(!AllGlobals.source)
		throw CbadCommand("Can't find the source file.");
	return;
}

/***************************************
**  打開目標(biāo)代碼文件
***************************************/
void CCommandOpt::OpenCodeFile(string filename){
	AllGlobals.code.open(filename.c_str(),ios_base::out);
	if(!AllGlobals.code)
		throw CbadCommand("Can't find the code file.");
	return;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费在线欧美视频| 天天亚洲美女在线视频| 国产精品亚洲专一区二区三区| www一区二区| 国产精品中文字幕欧美| 2023国产精品自拍| 国产乱码精品一区二区三区忘忧草 | 狠狠色丁香久久婷婷综合丁香| 日韩欧美不卡在线观看视频| 狠狠色狠狠色综合| 国产精品麻豆一区二区| 在线日韩av片| 天天色综合成人网| 精品久久国产字幕高潮| 国产精品亚洲一区二区三区妖精 | 蜜桃视频一区二区三区| 国产亚洲一区二区三区| 91女神在线视频| 日韩电影在线免费看| 国产亚洲精品超碰| 91久久线看在观草草青青| 午夜精品久久久久久久蜜桃app| 欧美v日韩v国产v| 99精品国产91久久久久久| 天天综合网 天天综合色| 久久伊人蜜桃av一区二区| 91看片淫黄大片一级| 免费观看91视频大全| 国产精品伦理一区二区| 欧美日韩的一区二区| 国产精品亚洲一区二区三区妖精 | 中文av一区特黄| 在线中文字幕一区| 国产一区视频网站| 亚洲精品中文在线观看| 精品国产91亚洲一区二区三区婷婷| 成人激情黄色小说| 男人操女人的视频在线观看欧美| 中文字幕免费不卡在线| 91精品国产欧美日韩| 91免费国产视频网站| 韩国av一区二区三区在线观看| 亚洲精品日韩专区silk| 2欧美一区二区三区在线观看视频| 色婷婷激情一区二区三区| 国内不卡的二区三区中文字幕| 亚洲免费观看高清完整版在线观看熊| 亚洲精品在线网站| 欧美精三区欧美精三区| 色哟哟精品一区| 丁香婷婷综合色啪| 精品一区二区三区日韩| 首页欧美精品中文字幕| 一区二区日韩av| 欧美激情在线观看视频免费| 欧美成人猛片aaaaaaa| 欧美色大人视频| 色素色在线综合| 高清shemale亚洲人妖| 精品一二三四区| 青青青伊人色综合久久| 日本美女视频一区二区| 亚洲成国产人片在线观看| 亚洲精品国产成人久久av盗摄 | 国产精品综合视频| 麻豆免费精品视频| 日韩制服丝袜av| 日日摸夜夜添夜夜添亚洲女人| 亚洲自拍都市欧美小说| 日韩美女精品在线| 亚洲人精品午夜| 夜夜嗨av一区二区三区网页 | 国产精品久久久久久久午夜片| 久久亚洲免费视频| 久久一区二区三区国产精品| 久久久精品国产免大香伊| 久久麻豆一区二区| 久久久精品日韩欧美| 国产亚洲视频系列| 久久久久国产精品人| 精品国产乱码久久久久久图片| 欧美电视剧在线看免费| 日韩精品中文字幕在线不卡尤物| 91麻豆精品国产91久久久| 欧美日韩一区三区| 欧美电影一区二区| 日韩欧美一卡二卡| 国产调教视频一区| 国产精品超碰97尤物18| 亚洲六月丁香色婷婷综合久久| 亚洲美女精品一区| 亚洲成av人综合在线观看| 日韩在线一二三区| 国产精品羞羞答答xxdd| 95精品视频在线| 精品1区2区3区| 日韩欧美二区三区| 国产精品人成在线观看免费| 一区二区三区中文在线观看| 偷拍自拍另类欧美| 国产精品自拍一区| 色综合久久久久综合体| 在线播放91灌醉迷j高跟美女 | 99国产精品国产精品久久| 欧美无砖砖区免费| 亚洲精品一区二区三区四区高清| 国产精品午夜在线| 午夜精品福利一区二区三区av| 久久精品久久综合| 91在线播放网址| 欧美精品久久99| 国产精品区一区二区三区| 亚洲va在线va天堂| 国产精品1区2区3区| 欧洲一区二区av| 26uuu欧美| 奇米影视7777精品一区二区| 国产风韵犹存在线视精品| 欧美在线色视频| 国产午夜精品美女毛片视频| 亚洲精品国产品国语在线app| 狠狠色丁香九九婷婷综合五月| 色综合久久久久久久久| 精品国产网站在线观看| 亚洲最新视频在线观看| 国产精品99久久久久久宅男| 欧美色综合影院| 国产精品久久久久一区二区三区| 日韩精品成人一区二区在线| 99久久精品免费看| 2023国产精品| 奇米在线7777在线精品| 91黄视频在线观看| 国产欧美一区二区精品忘忧草 | 国产精品久久久久久一区二区三区 | 一区二区三区四区中文字幕| 国产在线精品视频| 欧美三级电影在线看| 一色屋精品亚洲香蕉网站| 国模大尺度一区二区三区| 精品视频在线视频| 亚洲欧美日韩在线| 成人av一区二区三区| 日韩欧美中文一区二区| 亚洲成人中文在线| 91久久香蕉国产日韩欧美9色| 亚洲欧洲精品一区二区三区不卡| 国产精品一区二区无线| 日韩午夜精品电影| 日本网站在线观看一区二区三区| 在线观看国产日韩| 一区二区三区中文字幕精品精品| 97se狠狠狠综合亚洲狠狠| 中文字幕欧美国产| 国产成人免费高清| 国产午夜亚洲精品羞羞网站| 精品一区二区三区免费播放 | 国v精品久久久网| 久久久99精品久久| 久久精品国产**网站演员| 欧美一区二区三区在| 青青草97国产精品免费观看无弹窗版 | 亚洲欧美国产三级| 91小视频免费观看| 中文字幕一区二区在线观看| 成人性生交大片免费看中文| 26uuu精品一区二区三区四区在线| 蜜臀av一区二区在线免费观看| 欧美一区二区不卡视频| 美国十次了思思久久精品导航| 日韩一级大片在线| 蜜臀av性久久久久av蜜臀妖精| 欧美成人高清电影在线| 麻豆精品新av中文字幕| 久久蜜臀中文字幕| 丁香网亚洲国际| 亚洲日本乱码在线观看| 色哦色哦哦色天天综合| 亚洲五月六月丁香激情| 7777精品伊人久久久大香线蕉经典版下载 | 在线视频亚洲一区| 丝袜a∨在线一区二区三区不卡| 久久久久久久综合| 国产麻豆日韩欧美久久| 国产精品私人自拍| 在线一区二区三区| 视频一区国产视频| 欧美本精品男人aⅴ天堂| 国产成人aaa| 伊人开心综合网| 欧美一卡2卡三卡4卡5免费| 激情综合色综合久久综合| 欧美激情一区二区| 欧美三级视频在线播放| 激情综合色综合久久综合| 亚洲色图欧美在线| 日韩欧美卡一卡二| 不卡在线观看av| 亚洲成av人片| 中文字幕不卡在线播放|