资源简介
这是用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个文件信息
相关资源
- C语言的嵌入式汇编基本使用.docx(2页
- C语言嵌入式Modbus协议栈,支持主站和
- C语言封装的HttpClient接口
- C语言课设计算器
- C语言 学生兴趣管理系统
- c语言实现火车订票系统(控制台)源
- 模拟笔记本电脑(C语言实现)
- c语言实现竞技比赛打分系统
- KMP算法C语言程序
- Linux c语言 学生成绩管理系统
- 弹跳的小球(test.c)
- 林锐—高质量C编程
- 基于c语言的通讯录系统
- C语言全套课件与教学资料-哈工大
- 计算机二级C语言真题.docx
- C语言实现 设备信息管理系统
- GBT 28169-2011 嵌入式软件 C语言编码规范
- C语言标准库函数大全.chm
- C语言常用代码(分章节)
- c语言课程设计:客房登记系统源码
- C语言常用算法源代码
- 吕鑫:VS2015之博大精深的0基础C语言视
- c语言文都讲义2020
- c语言课件56883
- C语言推箱子win控制台
- C语言程序设计50例.docx
- 烟花优化算法(c语言版)
- C语言程序设计教材习题参考答案.do
- 数据结构(C语言版)ppt课件,清华,
- c语言编程经典例题100例 word版
评论
共有 条评论