資源簡(jiǎn)介
這是一個(gè)基于某個(gè)自定義的文法(將在下面給出)所編寫的部分功能的編譯器。已經(jīng)實(shí)現(xiàn)了詞法分析(Lexer.h/cpp),語法分析(Parser.h/cpp)并建立語法分析樹,語法分析樹數(shù)據(jù)結(jié)構(gòu)(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;
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????1368??2006-06-30?10:27??簡(jiǎn)易編譯器??源代碼\calc.cpp
?????文件????????807??2006-04-15?19:34??簡(jiǎn)易編譯器??源代碼\common.h
?????文件???????5186??2006-06-30?08:10??簡(jiǎn)易編譯器??源代碼\Lexer.cpp
?????文件????????515??2006-06-30?07:56??簡(jiǎn)易編譯器??源代碼\Lexer.h
?????文件????????716??2006-04-20?14:59??簡(jiǎn)易編譯器??源代碼\main.cpp
?????文件????????668??2008-06-02?16:29??簡(jiǎn)易編譯器??源代碼\Makefile
?????文件???????7728??2006-06-30?08:48??簡(jiǎn)易編譯器??源代碼\Parser.cpp
?????文件????????810??2006-06-30?07:31??簡(jiǎn)易編譯器??源代碼\Parser.h
?????文件???????3899??2006-06-30?08:28??簡(jiǎn)易編譯器??源代碼\SyntaxTree.cpp
?????文件???????1201??2006-04-15?07:56??簡(jiǎn)易編譯器??源代碼\SyntaxTree.h
?????文件???????1570??2006-06-30?08:28??簡(jiǎn)易編譯器??源代碼\SyntaxTreeNode.cpp
?????文件???????1106??2006-04-15?07:50??簡(jiǎn)易編譯器??源代碼\SyntaxTreeNode.h
?????文件??????65730??2006-06-26?09:31??簡(jiǎn)易編譯器??源代碼\temp.txt
?????文件?????????40??2006-06-26?09:21??簡(jiǎn)易編譯器??源代碼\test.txt
?????文件????????769??2006-04-17?17:03??簡(jiǎn)易編譯器??源代碼\test_complex.txt
?????文件????????113??2006-04-17?18:35??簡(jiǎn)易編譯器??源代碼\test_error.txt
?????目錄??????????0??2011-06-16?22:11??簡(jiǎn)易編譯器??源代碼
-----------?---------??----------?-----??----
????????????????92226????????????????????17
- 上一篇:1fporp.rar
- 下一篇:基于WEB的電影院訂票系統(tǒng)
評(píng)論
共有 條評(píng)論