📄 minushandle.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 + -