• 大小: 558KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-08-11
  • 语言: C/C++
  • 标签: c++  编译器  

资源简介

基于c++编写的编译程序 有词法分析 语法分析 语义分析以及目标代码生成

资源截图

代码片段和文件信息


// C_Compiler1.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.h“
#include
#include
#include
#include


#define MYCOMPILER
#define MAXWORD 10 //token和keyword最大长度
#define MAXLENGTH 30
#define MAXC 50 //符号表的最大容量
#define MAXOP 500 //最大的操作指令条数
#define MAXLEV 10 //最大的层数
#define MAXF 10 //最多的实常量数
#define MAXCASE 50
#define MAXGO 100 //最大运行栈
#define MAXGOLEV 10 //运行栈最大的调用层
#define MAXS 5 //printf语句中最多的转换字符数
#define MAXERROR 50
#define kk 12 //关键词个数

char *Keyword[]={ //关键字
“const““int““char““void“
“main““if““else“ “do““while“
“scanf““printf“ “return“
};

char *oprate[]={ //操作码
“““““JME““JMC““JMP““CAS“
“RED““EXF““WRI““““:+““:-“““
“:*““:/““MUS“ “j>“ “j<“  “j==“
“j!=“  “j>=“ “j<=““““CAL““BEGIN“
“END““:=“
};

union Cha{
int num;
char cischar;
};

struct Character{ //符号表
char *name ;
int typelevadrkind;
Cha uchar;
};

struct opr{ //中间代码
int opop1op2result;
};

struct aopr{
int anumad1;

};

char* err_msg[] = //定义出错提示信息
{
/*0*/ ““
/*1*/ “标识符或数字过长“
/*2*/ “非法单词“
/*3*/ “缺少符号“
/*4*/ “缺少类型标识符“
/*5*/ “字符串过长或缺少符号“
/*6*/ “此处缺少运算的因子“
/*7*/ “符号表出界“
/*8*/ “标识符重复定义“
/*9*/ “此处应有‘=‘“
/*10*/ “变量使用出错“
/*11*/ “无返回值函数不能用在此处“
/*12*/ “缺少“}”“
/*13*/ “缺少‘‘“
/*14*/ “无返回值函数不能有return语句“
/*15*/ “无主函数“
/*16*/ “函数调用时参数个数不对“
/*17*/ “缺少‘(‘“
/*18*/ “缺少‘)‘“
/*19*/ “编译生成指令数过多“
/*20*/ “标识符未定义“
/*21*/ “转换符用法错误为非变量型数据赋值“
/*22*/ “缺少“;”“
/*23*/ “缺少“{”“
/*24*/ “运行栈泄漏“
/*25*/ “函数调用超过了最大的层次数“
/*26*/ “函数返回值与函数类型不匹配“
/*27*/ “此处应为标识符“
/*28*/ “变量的类型和值的类型不匹配“
};

FILE *FIN *FOUT;                  //输入输出文件指针
FILE *EquFout;                     //四元式文件
FILE *KeyWord;                     //关键字文件
FILE *Oprate;                      //操作符文件
FILE *Token;

char Word[MAXWORD]; //store token
int num; //store 整数
char sisstring[MAXLENGTH]; //store 字符串
int sym; //store 标号;
char cischar; //store 字符
char fp[20]; //输入文件名
int linenum=1; //源程序行号
char name[MAXC][MAXWORD]; //存标识符
int NumOfC=1; //符号表内元素的个数
Character Char[MAXC]; //符号表
int numoflev[MAXLEV]; //各层的表中变量数
opr  opra[MAXOP]; //存指令
aopr aop[MAXOP];
int oprnum; //指令数
int go[MAXGO]; //运行栈
int dl[MAXGOLEV]bl[MAXGOLEV]; //运行栈辅助指针
int errornum=0error[MAXERROR]errorline[MAXERROR];
int gonum=0dlnum=0blnum=0;
int type=0;
int snum=0;
int start;
int lev=1;
int breakoprIsbreak=0;
int typeofexp1=11 typeofexp2=12;
int oprnumcase=0;
int Isret=1;
int adr[MAXC];
int ad=0;
int ab=0;
int gsym[MAXC];
int sy=0;
int A=0;
int adr1[MAXC];

//子函数说明
int getsym(); //词法分析程序
int enter(int levint typeint kind); //把变量填入符号表
//int constdeclaration(); //分析常量说明部分
int program(); //分析程序
int charcheck(); //检查标识符是否重复定义
//int constdefine( int type ); //分析常量定义
int vardefine( int type);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      59392  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\2_实验项目指导书.doc

     文件      35328  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\5_实验任务下达书.doc

     文件      94208  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\5_实验设计方案.doc

     文件     155648  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\exe\C_compiler.exe

     文件     511036  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\exe\C_compiler.ilk

     文件     429056  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\exe\C_compiler.pdb

     文件          0  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\exe\equfout.txt

     文件        112  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\exe\keyword.txt

     文件        205  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\exe\oprate.txt

     文件         85  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\exe\readme.txt

     文件         88  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\exe\test.txt

     文件         78  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\exe\test1.txt

     文件         78  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\exe\test2.txt

     文件        120  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\exe\test3.txt

     文件      37198  2007-07-05 00:20  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\project\C_compiler.cpp

     文件       3449  2007-07-04 23:49  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\project\C_compiler.dsp

     文件        545  2007-07-05 00:41  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\project\C_compiler.dsw

     文件      41984  2007-07-05 00:41  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\project\C_compiler.ncb

     文件      48640  2007-07-05 00:41  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\project\C_compiler.opt

     文件        766  2007-07-05 00:21  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\project\C_compiler.plg

     文件       4496  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\project\C_compiler.vcproj

     文件       1427  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\project\C_compiler.vcproj.81263482F9D9484.Administrator.user

     文件       1427  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\project\C_compiler.vcproj.81263482F9D9484.aijun.user

     文件       1407  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\project\C_compiler.vcproj.AIJUN.aijun.user

     文件      19250  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\project\Debug\BuildLog.htm

     文件     200809  2007-07-05 00:21  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\project\Debug\C_compiler.exe

     文件        403  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\project\Debug\C_compiler.exe.embed.manifest

     文件        468  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\project\Debug\C_compiler.exe.embed.manifest.res

     文件        385  2007-02-11 01:01  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\project\Debug\C_compiler.exe.intermediate.manifest

     文件     215528  2007-07-05 00:21  灏忓瀷C璇█缂栬瘧鍣ㄨ璁1]\C_compiler\project\Debug\C_compiler.ilk

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

评论

共有 条评论