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

📄 calc.cpp

📁 一个简单实用的CMM语言编译器,可以帮助了解如何构造一个简单的词法分析器
💻 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 + -