资源简介
学校大三课程的编译器设计实验作业,基于扩展c0文法的编译器设计,编译最终结果为MIPS代码,优化未做。包括源程序,说明文档,测试程序三部分。
代码片段和文件信息
#ifndef GRAMMER
#define GRAMMER
#include
#include
#include
#include
#include
#include “getsym.h“
#include “midcode.h“
#define idLength 50
#define symtabLength 512
#define maxPre 512
typedef struct{
char id[idLength];
int type; //0--const1--var2--func3--para
int value; //常量的值,type为函数时,0表示void,1表示int,2表示char
int address; //标识符存储地址或地址偏移
int para; //函数的参数个数 或 数组的长度
char funcLabelGlo[256]; ////函数的地址(第一条语句)
}Symbol;
typedef struct{
Symbol symtab[symtabLength]; //符号表
int index; //符号表栈顶指针,即符号表中的符号总数量 /////最开始为0
int blocksnum; //当前符号表拥有的分程序总数 /////////////////最开始为0
int blocksindex[maxPre]; //分程序索引 ////symTab.blocksindex[0] = 1;
}SymbolTab;
//////////////////////全局变量声明
char id[idLength];
int type;
int value;
int address;
int para;
char labelAdd[256];
Symbol symtab[symtabLength];
int index;
int blocksnum;
int blocksindex;
SymbolTab symTab;///////符号表
/////////////预读取的标识符串和标识符的种类
char temp1[128]temp2[128];
//////////char *symid1*symid2;牢记少用指针,用指针要malloc,不然是野指针
char tempID[128];///////////用于因子中向外传递的指针
int isArr = 0;
int funcOrIden;
int subscript;
int searchValue;
int searchAdd;
char searchLabel[256];
int isFirstBlock;
int arrNum = 0;
int t;
char nowTerm[128];
int isConst;
char tempCon[128];
char tempFunc[128];
char funcLabelGlo[256] = {0};
int tempStep = 0;
char condition01[256];
char funcDefRet[256];
char funcCallTemp[256];
char senID[256];
char constantNum[256];
char switchExp[256];
char endLabel[256];
////////////函数的声明
void insertSymTab(char *idint typeint valueint addressint parachar *labelAdd);
void searchSymTab(char *idint funcOrIdenint isArrint subscript);
void initSymTab();
void Exp();
void Sentence();
void Factor();
void SentenceList();
void Term();
void ConDef();
void ConExplain();
void VarDefChar();
void VarDefInt();
void VarExplain();
void Cycle();
void Condition();
void Assign();
void FuncCall1();
void FuncCall0();
void Scanf();
void Printf();
void Return();
void Main();
void FuncDef1();
void FuncDef0();
void Default();
void Integer();
void Constant();
void Case();
void Switch();
void ComSen();
void Step();
void CondiSen();
///////////函数定义
void insertSymTab(char *idint typeint valueint addressint parachar *funcLabelGlo){
if(type == 2){////////////函数名,只需查找各个分程序的入口即函数入口的名称是否重复即可
for(i=1;i if(strcmp(idsymTab.symtab[symTab.blocksindex[i]].id) == 0){
//////error
return;
}
}
blocksnum++;
}else {////////////////变量名,需查找该层符号表中是否有重复
i = symTab.blocksindex[symTab.blocksnum];
for(;i if(strcmp(idsymTab.symtab[i].id) == 0){
////////error
return;
}
}
}
////////////若无符号表重名 则开始填符号表
strcpy(symTab.symtab[index-1].idid);
symTab.symtab[index-1].type = type;
symTab.symtab[inde
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 255173 2018-01-13 22:56 文档\15061050_余琦_设计文档.docx
文件 4717 2017-12-12 14:50 源程序\compile\compile\compile.vcxproj
文件 1692 2017-12-12 14:50 源程序\compile\compile\compile.vcxproj.filters
文件 143 2017-11-13 23:55 源程序\compile\compile\compile.vcxproj.user
文件 3342 2018-01-14 09:10 源程序\compile\compile\Debug\cl.command.1.tlog
文件 8654 2018-01-14 09:10 源程序\compile\compile\Debug\CL.read.1.tlog
文件 2508 2018-01-14 09:10 源程序\compile\compile\Debug\CL.write.1.tlog
文件 1786 2017-11-29 15:54 源程序\compile\compile\Debug\compile.Build.CppClean.log
文件 406 2017-11-29 15:54 源程序\compile\compile\Debug\compile.exe.em
文件 472 2018-01-14 09:10 源程序\compile\compile\Debug\compile.exe.em
文件 381 2018-01-14 09:10 源程序\compile\compile\Debug\compile.exe.intermediate.manifest
文件 88 2018-01-14 09:10 源程序\compile\compile\Debug\compile.lastbuildstate
文件 60154 2018-01-14 09:10 源程序\compile\compile\Debug\compile.log
文件 1449 2017-11-29 16:17 源程序\compile\compile\Debug\compile.vcxprojResolveAssemblyReference.cache
文件 76969 2018-01-14 09:10 源程序\compile\compile\Debug\compile.write.1.tlog
文件 204 2017-11-29 15:54 源程序\compile\compile\Debug\compile_manifest.rc
文件 108886 2017-12-12 09:23 源程序\compile\compile\Debug\grammer.obj
文件 2 2018-01-14 09:10 源程序\compile\compile\Debug\li
文件 2 2018-01-14 09:10 源程序\compile\compile\Debug\li
文件 2 2018-01-14 09:10 源程序\compile\compile\Debug\li
文件 2 2018-01-14 09:10 源程序\compile\compile\Debug\li
文件 2 2018-01-14 09:10 源程序\compile\compile\Debug\li
文件 2 2018-01-14 09:10 源程序\compile\compile\Debug\li
文件 2 2018-01-14 09:10 源程序\compile\compile\Debug\li
文件 2 2018-01-14 09:10 源程序\compile\compile\Debug\li
文件 2 2018-01-14 09:10 源程序\compile\compile\Debug\li
文件 2 2018-01-14 09:10 源程序\compile\compile\Debug\li
文件 2 2018-01-14 09:10 源程序\compile\compile\Debug\li
文件 2 2018-01-14 09:10 源程序\compile\compile\Debug\li
文件 2 2018-01-14 09:10 源程序\compile\compile\Debug\li
............此处省略96个文件信息
- 上一篇:stm32f103 uart
- 下一篇:Qt放大镜
相关资源
- GNU GCC编译器手册
- 编译原理实验TINY+编译器
- 未来汇编
- FANUC宏编译器3.0,支持0I30I0IF系列
- VF 9.0编译器破解版
- 简单的PL0编译器
- tiny+编译器关键代码说明
- Advanced Compiler Design and Implementation (高
- PIC XC8 编译器使用手册中文版
- PICC 9.60破解版,免费提供
- director11.5 反编译器
- PIC CCS C编译器使用手册
- Wava 6000 (内有comp86编译器,comp51编译
- 编译原理——简单计算器的编译器的
- 南开大学编译原理大作业 实现一个编
- COMP51编译器
- C 编译器剖析
- picc8.05编译器+注册机完全破解版)
- MsCode脚本编译器
- 小型编译器
- 单片机c51编译器COMP51
- Crafting a Compiler
- 编译原理课程设计
- Lua5.3.5解释器+编译器
- Programming Languages and Lambda Calculi
- 编译原理---简易C编译器 生成汇编语言
- 《现代体系结构的优化编译器》[PDF
- C编译器源代码187076
- 简单的文本编译器
- Writing An Interpreter In Go图书,代码(
评论
共有 条评论