资源简介

这是用c语言实现的一个简易编译器,所编译的文法是类Pascal语言,也就是Pascal语言的扩充,资源里给出了文法和测试程序和源代码,测试程序有错误的和正确的,正确的是可以正确执行出结果的,错误的是会给出错误提示

资源截图

代码片段和文件信息

#include
#include
#include
#include

#define nkw 40//保留字数目
#define nummax 20//数字的最大长度
#define idmax 40//标识符的最大长度
#define strmax 200//字符串的最大长度
#define levmax 3//层的最大数
#define cmax 900//code数组的最大长度
#define emax 500//errs数组的最大长度
#define tmax 900//字符表的最大长度
#define amax 700//数组表的最大长度
#define pmax 100//过程表的最大长度
#define fmax 100//函数表的最大长度
#define comax 200//常量表的最大长度
#define smax 2048//数据栈的最大长度

FILE *in;
FILE *out;
//层数从0开始,单词表的前三个分别是int char real
int isskip=1;
int isend;
//char ems[20];
int isarray=0;//判断类型是不是数组
int isif=0;//判断前一个句子是不是if语句
int isend=0;//标志文件是否结束
int ismain=1;//如果是第一层函数isman=1否则isman=0;
char string[81];//保存最近依次读到的字符串
int strlen1;//字符串的长度
int stringx=0;//字符串数组的下标
char strings[50][100];//字符串数组
char ch=‘ ‘;
int inum;//保存最近一次读到的常量(整数 实数 字符)
double rnum;
int cnum;
int lc=0;//
int ll=0;//
char line[200];
int linenum=0;//当前行号
int cc=0;//单词数目
int  ex=0cx=0tx=0px=0ax=0cox=0;//表的索引
char ident[idmax]={0};//最近读入的标识符,用于登录符号表
char progname[10]={0};//过程名
//char cache[100000];//保存从源文件读入的所有字符
char temp[200];//词法分析当前正要分析的单词
char sy[10];//当前读到的单词的类别
char fsy[20]=“初始化“;//合法开始符号
char *constfsys[5]={“plus““minus““intcon““realcon““charcon“};
char *typefsys[3]={“ident““arraysy““recordsy“};
char *blockfsys[5]={“constsy““varsy““procsy““funcsy““beginsy“};
char *factorfsys[6]={“intcon““realcon““charcon““ident““lparent““notsy“};
char *statefsys[4]={“beginsy““ifsy““whilesy““forsy“};
char *stantfsys[5]={“notyp““ints““reals““bools““chars“};
int display[20];//display[level]指向level层在Procedure表中的位置其实值得是level层分程序名字在procedure中的位置
int level=0;
int pc;//指令寄存器
int t;//是数据栈的索引
int b;//base
int h1h2h3;//临时变量
int lncntocntblkcntchrcnt;//计数
char ps[10];
//: (runfincaschkdivchkinxchkstkchklinchklngchkredchk);
// fld: array[1..4] of integer;
//display: array[0..lmax] of integer;
int display0[100];
int fld[100];//域宽
struct stack{
int i;
char c;
double r;
int b;
}s[smax];
char *word[40]=//保留字表  
{“const““integer““real““char““var““array““of““procedure““function“
“if““then““else““while““do““for““to““by““begin““end““read““write“
“+““-““*““/““<““<=““>““>=““=““<>““.““;““:““““[““]““(““)““:=“};
//“integer““real““char““inttk““realtk““chartk“
char *key[21]=//关键字表
{“integer““real““char““const““var““array““of““procedure““function“
“if““then““else““while““do““for““to““by““begin““end““read““write“};

char *ksy[21]=//关键字类别码表
{“inttk““realtk““chartk““consttk““vartk““arraytk““oftk““proceduretk““functiontk“
“iftk““thentk““elsetk““whiletk““dotk““fortk““totk““bytk““begintk“
“endtk““readtk““writetk“};
char *typekey[45]=//类别码表
{“consttk““inttk““realtk““chartk““vartk““arraytk““oftk““proceduretk““functiontk“
“iftk““thentk““elsetk““whiletk““dotk““fortk““totk““bytk““begintk““endtk“
“readtk““writetk““plus““minu““mult““div““LSS“

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

     文件      17566  2013-11-06 20:37  自制编译器\文法.docx

     文件      69173  2014-01-05 09:19  自制编译器\源代码\compile.c

     文件       3411  2014-01-05 10:39  自制编译器\源代码\compile.dsp

     文件        539  2014-01-05 11:07  自制编译器\源代码\compile.dsw

     文件     107520  2014-01-05 11:07  自制编译器\源代码\compile.ncb

     文件      48640  2014-01-05 11:07  自制编译器\源代码\compile.opt

     文件        759  2014-01-05 10:39  自制编译器\源代码\compile.plg

     文件     266356  2014-01-05 10:39  自制编译器\源代码\Debug\compile.exe

     文件     259976  2014-01-05 10:39  自制编译器\源代码\Debug\compile.ilk

     文件     156441  2014-01-05 10:39  自制编译器\源代码\Debug\compile.obj

     文件     467968  2014-01-05 10:39  自制编译器\源代码\Debug\compile.pdb

     文件      41984  2014-01-05 10:39  自制编译器\源代码\Debug\vc60.idb

     文件      53248  2014-01-05 10:39  自制编译器\源代码\Debug\vc60.pdb

     文件       1207  2014-01-03 11:22  自制编译器\源代码\测试程序\err1.txt

     文件       1211  2014-01-03 11:45  自制编译器\源代码\测试程序\err11.txt

     文件       1077  2014-01-04 09:13  自制编译器\源代码\测试程序\err2.txt

     文件       1092  2014-01-04 09:12  自制编译器\源代码\测试程序\err22.txt

     文件       2376  2014-01-04 09:55  自制编译器\源代码\测试程序\err3.txt

     文件       2375  2014-01-04 10:10  自制编译器\源代码\测试程序\err33.txt

     文件       1036  2014-01-04 10:41  自制编译器\源代码\测试程序\err4.txt

     文件       1047  2014-01-04 11:07  自制编译器\源代码\测试程序\err44.txt

     文件        818  2014-01-04 12:02  自制编译器\源代码\测试程序\err5.txt

     文件        815  2014-01-04 12:55  自制编译器\源代码\测试程序\err55.txt

     文件       1207  2014-01-04 10:30  自制编译器\源代码\测试程序\test1.txt

     文件       1084  2014-01-03 14:52  自制编译器\源代码\测试程序\test2.txt

     文件       2382  2014-01-03 16:56  自制编译器\源代码\测试程序\test3.txt

     文件       1046  2014-01-03 21:06  自制编译器\源代码\测试程序\test4.txt

     文件        799  2014-01-04 11:49  自制编译器\源代码\测试程序\test5.txt

     目录          0  2014-07-18 23:16  自制编译器\源代码\Debug

     目录          0  2014-07-18 23:16  自制编译器\源代码\测试程序

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

评论

共有 条评论