• 大小: 1.35MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-08
  • 语言: 其他
  • 标签: 编译器  

资源简介

学校大三课程的编译器设计实验作业,基于扩展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.embed.manifest

     文件        472  2018-01-14 09:10  源程序\compile\compile\Debug\compile.exe.embed.manifest.res

     文件        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\link-cvtres.read.1.tlog

     文件          2  2018-01-14 09:10  源程序\compile\compile\Debug\link-cvtres.write.1.tlog

     文件          2  2018-01-14 09:10  源程序\compile\compile\Debug\link.1056-cvtres.read.1.tlog

     文件          2  2018-01-14 09:10  源程序\compile\compile\Debug\link.1056-cvtres.write.1.tlog

     文件          2  2018-01-14 09:10  源程序\compile\compile\Debug\link.1056.read.1.tlog

     文件          2  2018-01-14 09:10  源程序\compile\compile\Debug\link.1056.write.1.tlog

     文件          2  2018-01-14 09:10  源程序\compile\compile\Debug\link.10832-cvtres.read.1.tlog

     文件          2  2018-01-14 09:10  源程序\compile\compile\Debug\link.10832-cvtres.write.1.tlog

     文件          2  2018-01-14 09:10  源程序\compile\compile\Debug\link.10832.read.1.tlog

     文件          2  2018-01-14 09:10  源程序\compile\compile\Debug\link.10832.write.1.tlog

     文件          2  2018-01-14 09:10  源程序\compile\compile\Debug\link.11312-cvtres.read.1.tlog

     文件          2  2018-01-14 09:10  源程序\compile\compile\Debug\link.11312-cvtres.write.1.tlog

     文件          2  2018-01-14 09:10  源程序\compile\compile\Debug\link.11312.read.1.tlog

............此处省略96个文件信息

评论

共有 条评论