资源简介
一个小型的编译器设计,是哈工大计算机专业必修课《编译原理》的课程设计。
代码片段和文件信息
#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个文件信息
- 上一篇:算符优先分析法 C++ 编译原理
- 下一篇:标准化数据代码
相关资源
- 北邮-编译原理-词法分析
- C语言全套课件与教学资料-哈工大
- C语言编译器的设计与实现.doc
- 现代编译原理-C语言描述
- tiny+编译器C++实现
- 编译原理实验报告+代码+使用说明
- 编译原理课程设计-C语言子集编译器
- 一个C语言编译器源码
- 可以将C语言转变为汇编的编译器
- 赋值语句翻译c语言实现四元式
- 编译原理用C++消除左递归
- LL1语义分析的C语言子集编译器
- 编译原理简易C编译器
- 实现语法分析器-编译原理
- plo编译器 c语言 含测试 以及实验报告
- 编译原理 LR分析器 c++代码
- 设计并实现TINYC语言的扫描程序TINYC
- 基于MFC的无线串口调试工具-哈工大威
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 编译原理 LR0项目集规范族的构造 L
- picc8.05编译器
- 计算机二级VC++2010学习版
- 山东大学编译原理实验源代码c++版
- SNL语言编译器GUI VC++ 2008版 MFC实现可
- winTC(windows下的c语言编译器
- SNL语言编译器C++实现
- MinGW Windows 下gnu C/C++编译器
- sdcc编译器v2.9.0
- C-语言编译器可运行生成汇编代码
- 简单函数绘图语言的解释器
评论
共有 条评论