⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 minushandle.cpp

📁 C-MINUS编译器
💻 CPP
字号:
#include "minusHandle.h"

//-----------------------------------------------------------------------------
minusHandle::~minusHandle()
{
    // .. 原来在 Scanner::~Scanner() 中, 后来发现错误数不合理
	outputMsg(-10, "------------------------------------ Done -------------------------------------");
    sprintf(msg_temp, "There has %5d error(s) and %5d warning(s)",
		err(), warn());
	outputMsg(-1,msg_temp);
	
	
	if (scan) {
    	delete scan;
        scan = NULL;
    }

	if (parse) {
    	delete parse;
        parse = NULL;
    }

	if (analyze) {
    	delete analyze;
        analyze = NULL;
    }
    
    if (gen) {
        delete gen;
        gen = NULL;
    }
}

//-----------------------------------------------------------------------------
void minusHandle::scanOnly(const string& filename)
{
	scan = new Scanner(filename);
}

void minusHandle::parseOnly (const string &filename)
{
	parse = new Parser(filename);
}

void minusHandle::analyzeOnly(const string &filename)
{
	analyze = new Analyzer(filename);
}

void minusHandle::asmOnly(const string &filename)
{
    gen  = new asmGen(filename);
}

//-----------------------------------------------------------------------------
bool minusHandle::is_good()
{
	if (scan)
	{
		return scan->is_good ();
	}
	else if (parse)
	{
		return parse->is_good();
	}
	else if (analyze)
	{
		return analyze->is_good();
	}
	else if (gen)
	{
        return gen->is_good();
    }
    else
    {   //bug
        return false;
    }
}

//-----------------------------------------------------------------------------
void minusHandle::noTraceScan()
{
	traceScan = false;
	if (scan)	scan->noListFile();
	else if (parse)	parse->noListFile();
	else if (analyze) analyze->noListFile();
	else if (gen)  gen->noListFile();
}

void minusHandle::noTraceParse()
{
	traceParse = false;
	if (parse)   parse->noTreeFile();
	if (analyze) analyze->noTreeFile();
	if (gen)   gen->noTreeFile();
}

void minusHandle::noTraceAnalyze()
{
	traceAnalyze = false;
    if (analyze) analyze->noSymbolFile();
    if (gen)    gen->noSymbolFile();
}

void minusHandle::noTraceCode()
{
    traceCode  = false;
    if (gen)    gen->noCodeFile();
}

//-----------------------------------------------------------------------------
void minusHandle::getFiles()
{
	if (scan)
	{
		if (traceScan)	scan->getListFile();
	}
	else if (parse)
	{
		if (traceScan)	parse->getListFile();
		if (traceParse)	parse->getTreeFile();
	}
	else if (analyze)
	{
	//	if (traceScan) analyze->getListFile();
	//	if (traceParse)analyze->getTreeFile();
	}
	else if (gen)
	{
        //...
    }
    else
    {
        //...
    }
}

//-----------------------------------------------------------------------------
// drive function
void minusHandle::doit()
{
	if (scan)
	{
		while (scan->nextToken().type != k_EOF);
	}
	else if (parse)
	{
		parse->BuildSyntaxTree();
	}
	else if (analyze)
	{
		analyze->getSymbolFile();
	}
	else if (gen)
	{ 
        gen->codeGen();
	}
}

//-----------------------------------------------------------------------------
int minusHandle::err()
{
    if (scan)
    {
    	return scan->errCount() ;
    }
    else if (parse)
    {
    	return parse->errCount();
    }
    else if (analyze)
    {
    	return analyze->errCount();
    }
    else if (gen)
    {
		return gen->errCount();
    }
    else
    {
     return -1;
     }
}

int minusHandle::warn()
{
    if (scan)
    {
    	return scan->warnCount();
    }
    
    if (parse)
    {
    	return parse->warnCount();
    }
    
    if (analyze)
    {
    	return analyze->warnCount();
    }
    
    if (gen)
    {
        return gen->warnCount();
    }

    return -1;
}
//-----------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -