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

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

?? simplecompiler.cpp

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

#include "stdafx.h"
#include "scanner.h"
#include "SimpleCompiler.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//單詞編碼定義
const char* CSimpleCompiler::m_pWordCode[]={				
/*0*/		"",
/*1*/		"'",
/*2*/		"(",
/*3*/		")",
/*4*/		"*",
/*5*/		"*/",
/*6*/		"+",
/*7*/		",",
/*8*/		"-",
/*9*/		".",
/*10*/		"..",
/*11*/		"/",
/*12*/		"/*",
/*13*/		":",
/*14*/		":=",
/*15*/		";",
/*16*/		"<",
/*17*/		"<=",
/*18*/		"<>",
/*19*/		"=",
/*20*/		">",
/*21*/		">=",
/*22*/		"[",
/*23*/		"]",
/*24*/		"and",
/*25*/		"array",
/*26*/		"begin",
/*27*/		"bool",
/*28*/		"call",
/*29*/		"case",
/*30*/		"char",
/*31*/		"constant",
/*32*/		"constchar",						//字符常數
/*33*/		"constfloat",						//實常數
/*34*/		"constint",							//整常數
/*35*/		"do",
/*36*/		"else",
/*37*/		"end",
/*38*/		"false",
/*39*/		"for",
/*40*/		"identifier",						//標識符
/*41*/		"if",
/*42*/		"input",
/*43*/		"integer",
/*44*/		"not",
/*45*/		"of",
/*46*/		"or",
/*47*/		"output",
/*48*/		"procedure",
/*49*/		"program",
/*50*/		"read",
/*51*/		"real",
/*52*/		"repeat",
/*53*/		"set",
/*54*/		"then",
/*55*/		"to",
/*56*/		"true",
/*57*/		"until",
/*58*/		"var",
/*59*/		"while",
/*60*/		"write"			
};
////////////////////////////////////////

/**
 * 構造函數
 *
 */
CSimpleCompiler::CSimpleCompiler()
{
/*	
	//初始化各分析器狀態

	m_readyMorpheme=true;
	m_readyParsing=false;
	m_readySemantic=false;
	
	m_alreadyMorpheme=false;
	m_alreadyParsing=false;
	m_alreadySemantic=false;
*/		

	//初始化各指針
	m_pTokenFile=new TokenNode;			//token頭結點	
	m_pTokenFile->next=NULL;
	m_pSymbolTable=new STable;			//符號表
	m_pSymbolTable->sSubTable=NULL;
	m_pSymbolTable->stringTable=NULL;
	m_pSymbolTable->intSubTableLen=0;	//符號子表長度=0
	m_pSymbolTable->intTableLen=0;		//符號串長度=0
	m_pErrorCollection=new ErrorNode;	//錯誤信息表
	m_pErrorCollection->next=NULL;
	m_pFSymbol=new FSymbol;
	m_pFSymbol->next=NULL;
	m_pFSymbol->ag1=NULL;
	m_pFSymbol->ag2=NULL;
	m_pFSymbol->result=NULL;

/*
	//詞法分析器實例
	m_pMorpheme=new CMorpheme(m_pWordCode,m_pTokenFile,m_pSymbolTable,m_pErrorCollection);
	//語法分析器實例
	m_pParsing=new CParsing();
	//語義分析器實例
	m_pSemantic=new CSemantic();
*/
}

/**
 * 構造函數
 *
 * @param  strSourceFile		源程序文件路徑
 *
 */
CSimpleCompiler::CSimpleCompiler(CString strSourceFile)
{
	//保留源程序文件地址
	SetSourceFile(strSourceFile);
	
	CSimpleCompiler();
}

/**
 * 設置源程序文件路徑
 *
 */
void CSimpleCompiler::SetSourceFile(CString strSourceFile)
{
	this->m_strSourceFile=strSourceFile;
}

/**
 * 保存符號表、token文件、錯誤信息表、四元式用于顯示
 *
 */
void CSimpleCompiler::SaveAll()
{
	char str[100];
	PTokenNode token=NULL;
	PSTable sTable=NULL;
	PErrorNode error=NULL;
	PFSymbol pFS=NULL;
	CString sfile;
	FILE* fpout;	

	sfile="token.dat";
	fpout=fopen(sfile.GetBuffer(0),"w");
	if (!fpout)
	{
		::AfxMessageBox("系統錯誤!");
		return;
	}
	else
	{
		fprintf(fpout,"(%s,%s)\t%s\n\n","CONTENT","KEYCODE","STRID");
		token=this->m_pTokenFile;
		sTable=m_pSymbolTable;
		int start,end;
		//寫token
		while (token->next!=NULL)
		{
			token=token->next;	
			if (token->strId!=0)
			{				
				end=start=sTable->sSubTable[token->strId-1].name.headp;
				end+=sTable->sSubTable[token->strId-1].name.length;
				if (end==start)
				{
					if (sTable->sSubTable[token->strId-1].type==Real)
					{
						fprintf(fpout,"( %ld\t, %ld\t)\t%f\n",token->keycode,token->strId,sTable->sSubTable[token->strId-1].val);
					}
					else
					{
						fprintf(fpout,"( %ld\t, %ld\t)\t%ld\n",token->keycode,token->strId,(long)sTable->sSubTable[token->strId-1].val);
					}
				}
				else
				{
					for (int i=start;i<end;i++)
					{
						str[i-start]=sTable->stringTable[i];
					}
					str[i-start]='\0';
					fprintf(fpout,"( %ld\t, %ld\t)\t%s\n",token->keycode,token->strId,str);
				}
			}
			else
			{
				fprintf(fpout,"( %ld\t, %c\t)\t%s\n",token->keycode,'_',m_pWordCode[token->keycode]);
			}
		}
		fclose(fpout);
	}
	//寫符號表
	sfile="symboltable.dat";
	fpout=fopen(sfile.GetBuffer(0),"w");
	if (!fpout)
	{
		::AfxMessageBox("系統錯誤!");
		return;
	}
	else
	{
		fprintf(fpout,"(%s,%s)\t\t%s\t\t%s\n\n","HEADP","LENGTH","TYPE","VAL");
		sTable=m_pSymbolTable;
		for (int i=0;i<sTable->intSubTableLen;i++)
		{
			if (sTable->sSubTable[i].type==Char || sTable->sSubTable[i].type==Identifier)
			{
				fprintf(fpout,"( %ld\t, %ld\t)\t%s\n",sTable->sSubTable[i].name.headp,
											    sTable->sSubTable[i].name.length,
											    this->TypeToString(sTable->sSubTable[i].type));
			}
			else if (sTable->sSubTable[i].type==Real)
			{
				fprintf(fpout,"( %ld\t, %ld\t)\t%s\t\t%f\n",sTable->sSubTable[i].name.headp,
											  sTable->sSubTable[i].name.length,
											  this->TypeToString(sTable->sSubTable[i].type),
											  sTable->sSubTable[i].val);
			}
			else if (sTable->sSubTable[i].type==Integer)
			{
				fprintf(fpout,"( %ld\t, %ld\t)\t%s\t\t%ld\n",sTable->sSubTable[i].name.headp,
											  sTable->sSubTable[i].name.length,
											  this->TypeToString(sTable->sSubTable[i].type),
											  (long)sTable->sSubTable[i].val);
			}
		}

		if (sTable->intTableLen!=0)
		{
			fprintf(fpout,"\n符號表:\n\n");
			fprintf(fpout,"%s\n",sTable->stringTable);
		}

		fclose(fpout);
	}

	//寫錯誤信息集合
	sfile="error.dat";
	fpout=fopen(sfile.GetBuffer(0),"w");
	if (!fpout)
	{
		::AfxMessageBox("系統錯誤!");
		return;
	}
	else
	{
		fprintf(fpout,"ROWS,COLS\t\tERROR TEXT\n\n");
		error=m_pErrorCollection;
		while (error->next!=NULL)
		{
			error=error->next;
			fprintf(fpout,"%ldrows,%ldcols\t\t%s\n",error->intRows,error->intCols,error->description);
		}

		fclose(fpout);
	}

	//寫四元式信息
	sfile="fsymbol.dat";
	fpout=fopen(sfile.GetBuffer(0),"w");
	int i=0;
	if (!fpout)
	{
		::AfxMessageBox("系統錯誤!");
		return;
	}
	else
	{
		fprintf(fpout,"No.\t(OP,AG1,AG2,RESULT)\n\n");
		pFS=this->m_pFSymbol->next;
		while (pFS!=NULL && pFS->next!=NULL)
		{
			fprintf(fpout,"%d\t(%s,%s,%s,%s)\n",++i,this->GetOPStr(pFS->op),
				pFS->ag1==NULL? "_":pFS->ag1->des,
				pFS->ag2==NULL? "_":pFS->ag2->des,
				pFS->result==NULL? "_":pFS->result->des);
			pFS=pFS->next;
		}
		fclose(fpout);
	}

}

/**
 * 根據操作類型返回操作符
 *
 * @param	EOP op				操作符類型
 *
 */	
char *CSimpleCompiler::GetOPStr(EOP op)
{
	switch(op)
	{
	case OPJump://無條件跳轉
		return (new char[]="j");
	case OPJumpLarger://大于時跳轉
		return (new char[]="j>");
	case OPJumpLE://大于等于時跳轉
		return (new char[]="j>=");
	case OPJumpNZero://不等于零時跳轉
		return (new char[]="jnz");
	case OPJumpEqual://等于時跳轉
		return (new char[]="j=");
	case OPJumpUEqual://不等于時跳轉
		return (new char[]="j<>");
	case OPJumpSmaller://小于時跳轉
		return (new char[]="j<");
	case OPjumpSE://小于等于時跳轉
		return (new char[]="j<=");
	case OPLarger://大于
		return (new char[]=">");
	case OPSmaller://小于
		return (new char[]="<");
	case OPEqual://等于
		return (new char[]="=");
	case OPEvaluate://賦值
		return (new char[]=":=");
	case OPUnequal://不等于
		return (new char[]="<>");
	case OPPlus://加
		return (new char[]="+");
	case OPMinus://減
		return (new char[]="-");
	case OPMultiply://乘
		return (new char[]="*");
	case OPDivide://除
		return (new char[]="/");
	case OPProgram://程序開始標識
		return (new char[]="program");
	case OPSys://程序結束標識
		return (new char[]="sys");
	}
	return NULL;
}

/**
 * 將type轉換成字符串
 *
 */
char *CSimpleCompiler::TypeToString(SType type)
{
	switch(type)
	{
	case Identifier:
		return "Identifier";
		break;
	case Char:
		return "Char";
		break;
	case Real:
		return "Real";
		break;
	case Integer:
		return "Integer";
		break;
	case Bool:
		return "Bool";
		break;
	}
	return "";
}

/**
 * 運行詞法分析,返回成功信息
 *
 */
bool CSimpleCompiler::RunMorpheme()
{
	//進行詞法分析
	Dispose();
	CMorpheme morpheme(m_pWordCode,m_pTokenFile,m_pSymbolTable,m_pErrorCollection);	
	morpheme.Morpheme(m_strSourceFile);
	////
	return false;
}

/**
 * 運行語法分析,返回成功信息
 *
 */
bool CSimpleCompiler::RunParsing()
{
	//進行語法分析
	Dispose();
	CParsing parsing(m_pWordCode,m_pTokenFile,m_pSymbolTable,m_pErrorCollection,m_strSourceFile);
	parsing.Parsing();
	////
	return false;
}

/**
 * 運行語義分析,返回成功信息
 *
 */
bool CSimpleCompiler::RunSemantic()
{
	//進行語義分析
	Dispose();
	CSemantic semantic(m_pWordCode,m_pTokenFile,m_pSymbolTable,m_pFSymbol,m_pErrorCollection,m_strSourceFile);
	semantic.Semantic();
	////
	return false;
}

/**
 * 返回符號表
 *
 */
PSTable CSimpleCompiler::GetSTable()
{
	return m_pSymbolTable;
}

/**
 * 返回token文件
 *
 */
PTokenNode CSimpleCompiler::GetTokenFile()
{
	return m_pTokenFile;
}

/**
 * 返回四元式表
 *
 */
PFSymbol CSimpleCompiler::GetFSymbol()
{
	return this->m_pFSymbol;
}

/**
 * 返回錯誤信息
 *
 */
PErrorNode CSimpleCompiler::GetErrorCollection()
{
	return this->m_pErrorCollection;
}

/**
 * 釋放空間
 *
 */
CSimpleCompiler::~CSimpleCompiler()
{
	Dispose();

	delete this->m_pErrorCollection;
	delete this->m_pSymbolTable;
	delete this->m_pTokenFile;
}

void CSimpleCompiler::Dispose()
{
	//釋放字符表中各項的入口地址
	for (int i=0;i<m_pSymbolTable->intSubTableLen;i++)
	{
		delete m_pSymbolTable->sSubTable[i].addr;
	}

	if (m_pSymbolTable->sSubTable) delete m_pSymbolTable->sSubTable;
	if (m_pSymbolTable->stringTable) delete m_pSymbolTable->stringTable;
	m_pSymbolTable->intTableSize=0;
	m_pSymbolTable->intSubTableSize=0;

	::PTokenNode pTokenNode=m_pTokenFile->next;
	::PTokenNode pNextTokenNode;
	while (pTokenNode!=NULL)
	{
		pNextTokenNode=pTokenNode->next;
		delete pTokenNode;
		pTokenNode=pNextTokenNode;
	}

	::PErrorNode pError=m_pErrorCollection->next;
	::PErrorNode pErrorNext;
	while (pError!=NULL)
	{
		pErrorNext=pError->next;
		delete pError;
		pError=pErrorNext;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产一区二区三区青草影视 | 国产一区二区久久| 久久综合色8888| jlzzjlzz欧美大全| 亚洲福利国产精品| 久久免费国产精品| 色狠狠色噜噜噜综合网| 免费日韩伦理电影| 国产欧美综合在线| 91免费国产在线观看| 奇米一区二区三区| 亚洲天堂av一区| 91精品国产色综合久久ai换脸| 韩国精品久久久| 樱桃视频在线观看一区| 日韩一区二区电影| 91在线观看污| 免费在线观看不卡| 国产香蕉久久精品综合网| 91蜜桃免费观看视频| 蜜桃av一区二区在线观看| 欧美经典一区二区| 日韩美女一区二区三区| www..com久久爱| 久久精品国产精品亚洲精品 | 欧美日韩高清一区| 国产91丝袜在线播放九色| 亚洲一区二区三区视频在线 | a级精品国产片在线观看| 欧美在线看片a免费观看| 久久精品免费看| 亚洲免费毛片网站| 国产日产欧美一区| 6080午夜不卡| 日本韩国视频一区二区| 国产精品小仙女| 久久精品久久99精品久久| 亚洲天堂精品在线观看| 日韩欧美国产精品一区| 成人av在线资源网站| 久久99国产精品免费| 天天综合色天天| 亚洲在线观看免费| 国产精品国产馆在线真实露脸| 欧美一级理论性理论a| 日本大香伊一区二区三区| 懂色av中文一区二区三区| 久久精品久久99精品久久| 午夜精品成人在线| 亚洲精品高清在线| 亚洲精选视频在线| 中文字幕一区二区三区在线不卡 | 91小视频在线免费看| 国产成人免费xxxxxxxx| 国产一级精品在线| 日本不卡视频在线| 欧美国产一区视频在线观看| 久久蜜桃av一区精品变态类天堂| 欧美一区二区三区在线观看| 欧美日韩免费电影| 欧美精品一卡两卡| 7777精品伊人久久久大香线蕉 | 免费观看日韩电影| 日韩国产精品久久| 日本中文字幕不卡| 奇米777欧美一区二区| 首页国产丝袜综合| 日韩国产在线一| 日韩av电影免费观看高清完整版在线观看| 午夜精品久久久久久久| 最新不卡av在线| 亚洲精品日日夜夜| 午夜精品久久久久久| 日日摸夜夜添夜夜添精品视频| 午夜久久电影网| 日本不卡高清视频| 国产在线播放一区三区四| 国产美女久久久久| 国产精品99久久不卡二区| 丁香婷婷综合激情五月色| 成人h动漫精品| 在线观看不卡视频| 91精品国产综合久久精品麻豆| 欧美成人精精品一区二区频| 欧美成人vps| 欧美一级二级三级蜜桃| 日韩欧美一二三| 国产欧美日韩综合| 亚洲精品国产一区二区精华液| 亚洲一区二区三区国产| 蜜臀av在线播放一区二区三区| 国产美女在线观看一区| 波多野结衣中文字幕一区二区三区 | 欧美精品vⅰdeose4hd| 欧美军同video69gay| 日韩欧美中文字幕公布| 久久在线免费观看| 伊人婷婷欧美激情| 欧美96一区二区免费视频| 国产精品1区2区3区| 国产精品99久久久久久久vr| 91日韩精品一区| 日韩一区二区三区免费看| 国产日韩视频一区二区三区| 亚洲欧美日本韩国| 久久精品国产亚洲高清剧情介绍 | 91网站最新地址| 欧美一区二区视频在线观看 | 精品视频一区三区九区| 欧美成人精品福利| 中文字幕一区二区三区av| 亚洲国产成人av| 国产成人av一区| 色88888久久久久久影院野外| 欧美精品一区在线观看| 1区2区3区国产精品| 蜜臀av性久久久久蜜臀av麻豆| 亚洲一区二区三区视频在线| 国产在线一区观看| 欧美体内she精高潮| 国产清纯白嫩初高生在线观看91 | 欧美午夜精品理论片a级按摩| 久久久精品一品道一区| 亚洲国产精品久久久久婷婷884 | 国内精品伊人久久久久av影院| 97精品久久久久中文字幕| 在线播放中文字幕一区| 国产精品久久久久一区二区三区| 日本欧美一区二区在线观看| 久久av中文字幕片| 欧美日韩免费不卡视频一区二区三区| 中文字幕精品综合| 秋霞电影网一区二区| 色噜噜狠狠色综合欧洲selulu| 国产人伦精品一区二区| 久久爱www久久做| 91精品国产日韩91久久久久久| 依依成人综合视频| 91婷婷韩国欧美一区二区| 久久久不卡影院| 麻豆精品国产91久久久久久| 日韩一区二区免费在线电影| 爽好多水快深点欧美视频| 欧美美女直播网站| 天堂av在线一区| 欧美精品日韩精品| 日韩精品五月天| 欧美一二三区精品| 免费欧美日韩国产三级电影| 日韩三级在线免费观看| 另类小说一区二区三区| 精品美女在线播放| 国产99久久久国产精品免费看 | 国产精品色一区二区三区| 国产精品18久久久久久久网站| 亚洲国产精品成人综合色在线婷婷| 国产不卡在线播放| 自拍偷自拍亚洲精品播放| 色综合久久久久久久久| 亚洲激情图片小说视频| 欧美日韩一区二区电影| 日本视频在线一区| 国产三级精品在线| hitomi一区二区三区精品| 亚洲黄色在线视频| 91精品国产麻豆| 国产福利精品一区| 亚洲天堂a在线| 欧美卡1卡2卡| 国产精品自拍av| 亚洲欧美日韩精品久久久久| 欧美色区777第一页| 久久精品国产久精国产| 国产精品久久久久影院色老大| 欧美在线free| 毛片不卡一区二区| 国产精品视频你懂的| 欧美在线综合视频| 黄色成人免费在线| 亚洲精品乱码久久久久| 欧美一区二区视频观看视频| 风间由美一区二区三区在线观看 | 亚洲日本va午夜在线电影| 欧美日韩一二区| 国产一区不卡在线| 一区二区三区不卡在线观看 | 中文字幕精品一区二区精品绿巨人 | 中文字幕乱码一区二区免费| 日本精品免费观看高清观看| 久久精品国产免费| 亚洲自拍与偷拍| 久久精品亚洲国产奇米99| 欧洲精品在线观看| 亚洲国产成人av| 中文字幕一区二区视频| 日韩免费观看高清完整版| 91日韩精品一区| 国产精品1区二区.| 青青草一区二区三区| 亚洲女同ⅹxx女同tv|