📄 calc.cpp
字号:
/*************************************************** file: calc.cpp* date: 2006-06-30* author: ideawu* describe: a really small and simple caculator.* with known bugs.**************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#include "Parser.h"float calc(SyntaxTree *tree);int main(int argc, char* argv[]){ char buf[1024] = "a="; SyntaxTree *tree = NULL; Lexer *lexer = new Lexer(); Parser *parser = new Parser(); lexer->setSrc(buf, 1024); parser->setLexer(lexer); printf(">>"); scanf("%s", &buf[2]); while(strcmp(buf, "a=quit") != 0){ tree = parser->parse(); if(tree!=NULL){ //tree->display(); printf("%g\n", calc(tree->getRight())); }else{ parser->printError(); } printf(">>"); scanf("%s", &buf[2]); parser->reset(); } printf("\n"); return 0;}float calc(SyntaxTree *tree){ float a=0, b=0, val=0; if(tree != NULL){ if(tree->getRootNode()->getType() == NUM){ return tree->getRootNode()->getValue(); } a = calc(tree->getLeft()); b = calc(tree->getRight()); switch(tree->getRootNode()->getType()){ case PLUS: val = a + b; break; case MINUS: val = a - b; break; case MUL: val = a * b; break; case DIV: if(b != 0){ val = a / b; } break; default: break; } } return val; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -