资源简介

一个小型的编译器设计,是哈工大计算机专业必修课《编译原理》的课程设计。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 

#define HANG_NUM 121
#define AC_LIE 38
#define GO_LIE 16
#define MAX_NUM 1000
#define KEY_NUM 11

using namespace std;

struct expression{  //表达式
    string left;
    int left_num;
    string right[15];
    int num;
    expression(){
        num = 0;
    }
};
struct Word_code {  //读入单词
    string value;
    int num;
    bool ts;
};
expression exp[100];
int exp_num = 0;  //表达式数目

struct Sym_tab{    //符号表
    string id;
    int type;       //0char 1int 2double
    int width;
    int offset;
    bool isarray;
    string inside;
    Sym_tab(){
        inside = ““;
    }
};
Sym_tab stable[100];
Sym_tab Typ;   //临时符表号
int off_num = 0;   //当前偏移量
int stnum = 0;   //符号表数量
string gra_word[30];   //临时单词

int temp_num = 0;    //临时变量数目
int str_num = 0;    //字符串常量数目
int fag_num = 0;    //跳转标号数目

struct Four_ex{   //四元式
    string op;
    string arg1;
    string arg2;
    string result;
    string fag;
    Four_ex(){
        fag = ““;
    }
};
Four_ex fex[500];
int fex_num = 0;    //四元式数目
struct NUM{
    string addr;
    int type;
    string off;
};
NUM tnumber;   //临时数字
NUM NA[50];
int na_num=0;
NUM cc;
NUM T[50];
int T_n = 0;
NUM F[50];
int F_n = 0;
NUM E[50];
int E_n = 0;
NUM AR;

string ROP = ““;
int Bfalse[50];
int Btrue[50];
int Bnum = -1;
int Slist[50];

struct Judge{  //布尔表达式
    string E1;
    string ROP;
    string E2;
};
Judge B;

int action[HANG_NUM][AC_LIE];
int go_to[HANG_NUM][GO_LIE];
stack state_stack;
stack word_stack;

string acode[500];
string adata[50];
int cnum = 0;
int dnum = 0;

string keyword[KEY_NUM] = {“main“ “char“ “int“ “double“ “if“ “else“ “while“ “read“ “write“ “func“ “endl“};

int keyjudge (string word);  //判断保留字
void exp_in ();  //表达式读入
void table_in ();  //分析表读入
void gra_analy ();  //语法分析+语义分析
void word_analy();  //词法分析
void sema_out ();  //语义分析结果输出
void asm_data();   //代码生成
void asm_code();  //代码生成
void merge();   //代码合并

int Code_pos = 0;  //代码读入位置

int main()
{
    word_analy();
    exp_in();
    table_in();
    gra_analy();
    sema_out();
    asm_data();
    asm_code();
    merge();
    return 0;
}
void exp_in (){
    ifstream input;
    input.open(“grammar/grammar.txt“);
    string str;
    int num;
    while (input >> num >> str){
        exp[exp_num].left_num = num;
        exp[exp_num].left = str;
        string left = str;
        while (input >> str){
            if (str == “->“) continue;
            if (str == “|“){
                exp_num++;
                exp[exp_num].left = left;
                exp[exp_num].left_num = num;
                continue;
            }
            if (str == “@“){
                exp_num++;
                break;
            }
            exp[exp_num].right[exp[exp_num].num++] = str;
        }
    

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-12-15 19:21  小型编译器的设计(C语言实现)\
     目录           0  2013-05-20 11:12  小型编译器的设计(C语言实现)\编译器\
     目录           0  2013-05-20 11:12  小型编译器的设计(C语言实现)\编译器\asm\
     文件        1782  2013-05-11 20:42  小型编译器的设计(C语言实现)\编译器\asm\asm_code.txt
     文件         166  2013-05-11 20:42  小型编译器的设计(C语言实现)\编译器\asm\asm_data.txt
     文件        1037  2013-05-04 17:27  小型编译器的设计(C语言实现)\编译器\asm\begin.txt
     文件        2637  2013-05-04 17:31  小型编译器的设计(C语言实现)\编译器\asm\final.txt
     文件         146  2013-05-04 00:01  小型编译器的设计(C语言实现)\编译器\asm\middle.txt
     文件        5778  2013-05-11 20:42  小型编译器的设计(C语言实现)\编译器\asm_result.asm
     目录           0  2013-05-20 11:12  小型编译器的设计(C语言实现)\编译器\bin\
     目录           0  2013-05-20 11:12  小型编译器的设计(C语言实现)\编译器\bin\Debug\
     文件     1147364  2013-05-04 18:06  小型编译器的设计(C语言实现)\编译器\bin\Debug\编译器.exe
     目录           0  2013-05-20 11:12  小型编译器的设计(C语言实现)\编译器\grammar\
     文件       22257  2013-04-07 00:02  小型编译器的设计(C语言实现)\编译器\grammar\action.txt
     文件        9549  2013-04-07 00:04  小型编译器的设计(C语言实现)\编译器\grammar\goto.txt
     文件         692  2013-04-07 00:35  小型编译器的设计(C语言实现)\编译器\grammar\grammar.txt
     文件         898  2013-05-02 20:24  小型编译器的设计(C语言实现)\编译器\grammar\gra_list.txt
     文件        2605  2013-05-11 20:42  小型编译器的设计(C语言实现)\编译器\grammar\gra_res.txt
     文件       51020  2013-05-04 18:06  小型编译器的设计(C语言实现)\编译器\main.cpp
     目录           0  2013-05-20 11:12  小型编译器的设计(C语言实现)\编译器\obj\
     目录           0  2013-05-20 11:12  小型编译器的设计(C语言实现)\编译器\obj\Debug\
     文件      350662  2013-05-04 18:06  小型编译器的设计(C语言实现)\编译器\obj\Debug\main.o
     目录           0  2013-05-20 11:12  小型编译器的设计(C语言实现)\编译器\sema\
     文件        1148  2013-05-11 20:42  小型编译器的设计(C语言实现)\编译器\sema\sema_res.txt
     文件          89  2013-05-11 20:42  小型编译器的设计(C语言实现)\编译器\sema\sybol_table.txt
     文件         450  2013-05-11 20:32  小型编译器的设计(C语言实现)\编译器\source_code.txt
     文件         450  2013-05-04 18:07  小型编译器的设计(C语言实现)\编译器\test1.txt
     文件         240  2013-05-04 17:52  小型编译器的设计(C语言实现)\编译器\test2.txt
     文件         260  2013-05-04 17:52  小型编译器的设计(C语言实现)\编译器\test3.txt
     目录           0  2013-05-20 11:12  小型编译器的设计(C语言实现)\编译器\word\
     文件        3837  2013-05-11 20:42  小型编译器的设计(C语言实现)\编译器\word\word_res.txt
............此处省略4个文件信息

评论

共有 条评论