calc.cpp

来自「全面的c语言编译器,包括词法分析语法分析有报错」· C++ 代码 · 共 82 行

CPP
82
字号
/*************************************************** 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 + =
减小字号Ctrl + -
显示快捷键?