资源简介

用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.embed.manifest

     文件        468  2008-12-28 20:36  SemanticAnalyse\SemanticAnalyse\Debug\SemanticAnalyse.exe.embed.manifest.res

     文件        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个文件信息

评论

共有 条评论