资源简介
这是一个基于某个自定义的文法(将在下面给出)所编写的部分功能的编译器。已经实现了词法分析(Lexer.h/cpp),语法分析(Parser.h/cpp)并建立语法分析树,语法分析树数据结构(SyntaxTreeNode.h/cpp和SyntaxTree.h/cpp)。
代码片段和文件信息
/**************************************************
* file: calc.cpp
* date: 2006-06-30
* author: ideawu
* describe: a really small and simple caculator.
* with known bugs.
**************************************************/
#include
#include
#include
#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;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1368 2006-06-30 10:27 简易编译器 源代码\calc.cpp
文件 807 2006-04-15 19:34 简易编译器 源代码\common.h
文件 5186 2006-06-30 08:10 简易编译器 源代码\Lexer.cpp
文件 515 2006-06-30 07:56 简易编译器 源代码\Lexer.h
文件 716 2006-04-20 14:59 简易编译器 源代码\main.cpp
文件 668 2008-06-02 16:29 简易编译器 源代码\Makefile
文件 7728 2006-06-30 08:48 简易编译器 源代码\Parser.cpp
文件 810 2006-06-30 07:31 简易编译器 源代码\Parser.h
文件 3899 2006-06-30 08:28 简易编译器 源代码\SyntaxTree.cpp
文件 1201 2006-04-15 07:56 简易编译器 源代码\SyntaxTree.h
文件 1570 2006-06-30 08:28 简易编译器 源代码\SyntaxTreeNode.cpp
文件 1106 2006-04-15 07:50 简易编译器 源代码\SyntaxTreeNode.h
文件 65730 2006-06-26 09:31 简易编译器 源代码\temp.txt
文件 40 2006-06-26 09:21 简易编译器 源代码\test.txt
文件 769 2006-04-17 17:03 简易编译器 源代码\test_complex.txt
文件 113 2006-04-17 18:35 简易编译器 源代码\test_error.txt
目录 0 2011-06-16 22:11 简易编译器 源代码
----------- --------- ---------- ----- ----
92226 17
- 上一篇:1fporp.rar
- 下一篇:基于WEB的电影院订票系统
相关资源
- 编译原理 算符优先分析程序
- 编译原理-非递归预测实验-C代码实现
- 编译原理实验
- 编译原理自顶向下语法分析源代码+实
- 编译原理布尔表达式计算器
- LR语法分析器
- 编译原理语法制导翻译器 课程设计
- 编译原理——语法分析器
- 编译原理实验指导书
- 第四次上机—自下而上的语法分析
- 编译原理预测分析法语法分析程序
- 编译课程设计算数表达式转换成四元
- 广东工业大学编译原理试卷
- 编译原理词法分析器实验从文件读入
- 编译原理将简单程序翻译成四元式
- 《编译原理》实验 识别无符号数的词
- 编译原理语法分析器实验报告.doc版
- 在语法分析器的基础上构造的三地址
- 北方工业大学语法分析器 (1)完整实
- 编译原理实验词法,语法,语义
- 编译原理语法分析实验代码
- 编译原理三上机实验报告
- 预测分析表构造算法的程序实现
- 华中科技大学编译原理实验报告
- 编译原理课程设计词法分析程序
- 山东大学编译原理
- 基于预测分析表法的语法分析程序
- 编译原理中间代码生成
- windows下的bison.exe和flex.exe
- 编译原理lex和yacc
评论
共有 条评论