資源簡介
用c++實現的一個簡單的編譯器,可以由一段程序經過詞法語法語義分析產生類似于匯編的中間代碼。

代碼片段和文件信息
//?SemanticAnalyse.cpp?:?定義控制臺應用程序的入口點。
//
#include?“stdafx.h“
using?namespace?std;
//**************************************語法分析***********************************************
//定義樹節點
typedef?struct?node
{
????string?name;
????int?type;
????int?subid;
????struct?node?*?child;
????struct?node?*?next;
}?NODE;
NODE?*?root;
stack?NodeStack;
stack?StringStack;??????//字符串棧記錄符號
stack?TempStack;
map?FinishSymbol;????????????????//終結符
map?nonfinishSymbol;???????????????//非終結符
vector?AnalysisTable[18][18];???????//存儲預測分析表
vector?>?Token;???//存儲Token序列
vector?grammar[24];??//文法字符串
void?Initialize();????????????//初始化預測分析表
string?GetWord(FILE*?fpint*?flag);???//從回車和空格之間讀出一個單詞
string?FindWord(string?strint*?id);
void?SaveTokenTo(FILE*?fp);????//讀取文件中的token到內存中
void?CreateTree();
//初始化預測分析表
void?Initialize()
{
????//初始化root
????root?=?new?NODE();
????root->name?=?“P“;
????root->subid?=?nonfinishSymbol[“P“];
????root->type?=?0;
root->next?=?NULL;
????//初始化終結符
????FinishSymbol.insert(pair(“id“0));
????FinishSymbol.insert(pair(“num“1));
????FinishSymbol.insert(pair(“(“2));
????FinishSymbol.insert(pair(“)“3));
????FinishSymbol.insert(pair(“{“4));
????FinishSymbol.insert(pair(“}“5));
????FinishSymbol.insert(pair(“;“6));
????FinishSymbol.insert(pair(“if“7));
????FinishSymbol.insert(pair(“else“8));
????FinishSymbol.insert(pair(“while“9));
????FinishSymbol.insert(pair(“!“10));
????FinishSymbol.insert(pair(“=“11));
????FinishSymbol.insert(pair(“int“12));
????FinishSymbol.insert(pair(“relop“13));
????FinishSymbol.insert(pair(“addop“14));
????FinishSymbol.insert(pair(“mulop“15));
????FinishSymbol.insert(pair(“#“16));
????//初始化非終結符
????nonfinishSymbol.insert(pair(“Program“0));
????nonfinishSymbol.insert(pair(“Slist“1));
????nonfinishSymbol.insert(pair(“Dlist“2));
????nonfinishSymbol.insert(pair(“Dtemp“3));
????nonfinishSymbol.insert(pair(“D“4));
????nonfinishSymbol.insert(pair(“type“5));
????nonfinishSymbol.insert(pair(“Olist“6));
????nonfinishSymbol.insert(pair(“Otemp“7));
????nonfinishSymbol.insert(pair(“O“8));
????nonfinishSymbol.insert(pair(“iftemp“9));
????nonfinishSymbol.insert(pair(“ex“10));
????nonfinishSymbol.insert(pair(“ex_temp“11));
????nonfinishSymbol.insert(pair(“sim_ex“12));
????nonfinishSymbol.insert(pair(“sim_ex_temp“13));
????nonfinishSymbol.insert(pair(“term“14));
????nonfinishSymbol.insert(pair(“termtemp“15));
????nonfinishSymbol.insert(pair(“factor“16))
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????225280??2008-12-31?19:58??SemanticAnalyse\debug\SemanticAnalyse.exe
?????文件?????767944??2008-12-31?19:58??SemanticAnalyse\debug\SemanticAnalyse.ilk
?????文件????2214912??2008-12-31?19:58??SemanticAnalyse\debug\SemanticAnalyse.pdb
?????文件????????364??2008-12-31?19:56??SemanticAnalyse\SemanticAnalyse\aaa.txt
?????文件????????215??2008-11-30?21:57??SemanticAnalyse\SemanticAnalyse\aaa.txt.bak
?????文件???????8044??2008-12-31?19:58??SemanticAnalyse\SemanticAnalyse\Debug\BuildLog.htm
?????文件?????????67??2008-12-31?19:58??SemanticAnalyse\SemanticAnalyse\Debug\mt.dep
?????文件????????403??2008-12-28?20:36??SemanticAnalyse\SemanticAnalyse\Debug\SemanticAnalyse.exe.em
?????文件????????468??2008-12-28?20:36??SemanticAnalyse\SemanticAnalyse\Debug\SemanticAnalyse.exe.em
?????文件????????385??2008-12-31?19:58??SemanticAnalyse\SemanticAnalyse\Debug\SemanticAnalyse.exe.intermediate.manifest
?????文件????1045235??2008-12-31?19:58??SemanticAnalyse\SemanticAnalyse\Debug\SemanticAnalyse.obj
?????文件????8388608??2008-12-29?12:16??SemanticAnalyse\SemanticAnalyse\Debug\SemanticAnalyse.pch
?????文件??????35030??2008-12-29?12:16??SemanticAnalyse\SemanticAnalyse\Debug\stdafx.obj
?????文件?????281600??2008-12-31?19:58??SemanticAnalyse\SemanticAnalyse\Debug\vc80.idb
?????文件?????372736??2008-12-31?19:58??SemanticAnalyse\SemanticAnalyse\Debug\vc80.pdb
?????文件????????332??2009-04-06?21:02??SemanticAnalyse\SemanticAnalyse\output.txt
?????文件????????998??2008-12-28?20:36??SemanticAnalyse\SemanticAnalyse\ReadMe.txt
?????文件??????24369??2008-12-31?19:58??SemanticAnalyse\SemanticAnalyse\SemanticAnalyse.cpp
?????文件???????4511??2008-12-28?20:36??SemanticAnalyse\SemanticAnalyse\SemanticAnalyse.vcproj
?????文件???????1427??2009-04-06?21:02??SemanticAnalyse\SemanticAnalyse\SemanticAnalyse.vcproj.PC-200810202201.Administrator.user
?????文件???????1411??2008-12-29?17:10??SemanticAnalyse\SemanticAnalyse\SemanticAnalyse.vcproj.soft093.soft.user
?????文件????????358??2008-12-21?20:27??SemanticAnalyse\SemanticAnalyse\source.txt
?????文件????????220??2008-12-28?20:36??SemanticAnalyse\SemanticAnalyse\stdafx.cpp
?????文件????????488??2008-12-29?12:16??SemanticAnalyse\SemanticAnalyse\stdafx.h
?????文件????1805312??2009-04-06?21:02??SemanticAnalyse\SemanticAnalyse.ncb
?????文件????????910??2008-12-28?20:36??SemanticAnalyse\SemanticAnalyse.sln
????..A..H.?????18432??2009-04-06?21:02??SemanticAnalyse\SemanticAnalyse.suo
?????目錄??????????0??2008-12-31?19:58??SemanticAnalyse\SemanticAnalyse\Debug
?????目錄??????????0??2008-12-31?19:58??SemanticAnalyse\debug
?????目錄??????????0??2008-12-31?19:58??SemanticAnalyse\SemanticAnalyse
............此處省略4個文件信息
評論
共有 條評論