• 大小: 172KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-29
  • 语言: 其他
  • 标签: C++  yacc  计算器  

资源简介

一个自己写的命令行下交互式计算器,支持四则混合运算,优先级,循环表达式,条件表达式,函数等,变量定义有作用域, 支持自定义函数, 支持矩阵运算和复数. 本程序使用yacc生成表达式分析器, *.l文件需要flex来编译,*.y文件使用bison编译. 此源代码仅供学习和参考

资源截图

代码片段和文件信息

#include “variary.h“
#include 
#include 
#include “interface.h“
#include 
#include 

char* trimleft(const char* str)
{
char*  p = (char*) str;
while(*p && isspace(*p))
{
p++;
}
return p;
}



class COutput : public IOutput
{
public:
virtual int OutputString(const char* str)
{
std::cout << str;
return 0;
}
virtual char*  GetLine(char* buf int len)
{
std::cin.getline(buf len);
return trimleft(buf);
}
};

BOOL WINAPI HandlerRoutine(
  DWORD dwCtrlType   //  control signal type
);

IMiniCalc* pCalc = NULL;

int main(int argc char** argv)
{
SetConsoleCtrlHandler(HandlerRoutine TRUE);
COutput    output;
pCalc = CreateMiniCalc(&output);

if(pCalc == NULL)
{
std::cout << “Can‘t create MiniCalc Instance!\n“;
return 1;
}

// CBigInt   bi(“0xffffbfbbcbbfffdeebbc“);
// CBigInt   ff(“0x87987932487324fedcdddcdaac“);


// std::cout << bi.ToStringHex() << “*“ << ff.ToStringHex() << “=“
// << (bi*ff).ToStringHex() << std::endl;

while(1)
{
std::cout << “MiniCalc>“;

char line[65536];
std::cin.getline(linesizeof(line));
char * cmd = trimleft(line);
if(!stricmp(cmd “quit“) || 
!stricmp(cmd “exit“))
{
break;
}
pCalc->Execute(line);
}

pCalc->Destroy();

return 0;
}

BOOL WINAPI HandlerRoutine(
  DWORD dwCtrlType   //  control signal type

{
switch(dwCtrlType)
{
case CTRL_C_EVENT:
case CTRL_BREAK_EVENT:
case CTRL_CLOSE_EVENT:
case CTRL_LOGOFF_EVENT:
case CTRL_SHUTDOWN_EVENT:
if(pCalc)
{
pCalc->Destroy();
ExitProcess(0);
}
break;
}
return TRUE;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1676  2006-09-03 16:57  MiniCalc\Calc.cpp

     文件       1130  2006-01-06 15:50  MiniCalc\debug.cpp

     文件        870  2006-01-06 15:50  MiniCalc\debug.h

     文件       2665  2007-06-22 21:03  MiniCalc\exception.cpp

     文件       1985  2007-06-22 21:03  MiniCalc\exception.h

     文件         85  2006-08-31 11:30  MiniCalc\expression.cpp

     文件      17508  2006-10-12 20:38  MiniCalc\expression.h

     文件        423  2006-08-31 09:34  MiniCalc\FunctionImp.cpp

     文件       1113  2006-08-31 11:09  MiniCalc\FunctionImp.h

     文件        596  2006-09-03 14:59  MiniCalc\FunctionInterface.h

     文件       1278  2006-09-03 16:12  MiniCalc\Global.cpp

     文件       3526  2007-06-22 21:07  MiniCalc\Global.h

     文件        350  2006-08-31 21:10  MiniCalc\interface.h

     文件      18088  2007-06-28 20:45  MiniCalc\MiniCalc.cpp

     文件       7788  2007-06-21 20:26  MiniCalc\MiniCalc.dsp

     文件        539  2006-01-06 10:28  MiniCalc\MiniCalc.dsw

     文件        559  2006-09-03 15:52  MiniCalc\MiniCalc.h

     文件     319488  2007-06-28 20:46  MiniCalc\Release\MiniCalc.exe

     文件      69587  2007-06-21 15:59  MiniCalc\Release\minicalc.exe.output

     文件       1514  2009-12-19 22:36  MiniCalc\Release\UserDefined.txt

     文件      42582  2007-06-21 20:25  MiniCalc\sentence.cpp

     文件       1291  2007-06-21 20:25  MiniCalc\sentence.h

     文件       9934  2007-06-21 16:40  MiniCalc\sentence.y

     文件         31  2006-08-31 11:33  MiniCalc\sentence_class.cpp

     文件       1930  2007-06-21 16:42  MiniCalc\sentence_class.h

     文件        723  2006-02-05 17:15  MiniCalc\Stack.cpp

     文件        917  2006-08-30 14:11  MiniCalc\Stack.h

     文件         30  2006-09-06 10:58  MiniCalc\statement.cpp

     文件        229  2006-09-06 10:59  MiniCalc\statement.h

     文件       1573  2006-10-11 11:50  MiniCalc\symbol.cpp

............此处省略14个文件信息

评论

共有 条评论