• 大小: 23KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-08-24
  • 语言: 其他
  • 标签: 编译原理  编译器  

资源简介

这是一个基于某个自定义的文法(将在下面给出)所编写的部分功能的编译器。已经实现了词法分析(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


评论

共有 条评论