资源简介
大学课程编译原理的实验报告,c/c++编写,共三个实验阶段,以及三个合并成完成版。每一个都有实验报告文档以及代码,附带使用说明。
代码片段和文件信息
# include
# include
# include
# include
# define LB 0//(
# define RB 1//)
# define PL 2//+
# define MI 3//-
# define MU 4//*
# define DI 5// /
# define II 6
# define WE 7//#
# define e 8
# define t 9
# define f 10
# define BEGIN 11
# define END 12
# define IF 13
# define THEN 14
# define ELSE 15
# define WHILE 16
# define DO 17
# define ID 18
# define FCON 19
# define LT 20
# define LE 21
# define EQ 22
# define NE 23
# define GT 24
# define GE 25
# define PU 26
# define PLU 27
# define MIN 28
# define MUL 29
# define DIV 30
# define IS 31
#define idlen 20//此编译程序允许标识符的最大长度
#define MAX_KEY_NUMBER 20 //此编译程序允许的最大关键字数量
#define KEY_WORD_END “waiting for your expanding“
char *KeyWordTable[MAX_KEY_NUMBER]={“begin““end“ “if“ “then“ “else“ “while““do“KEY_WORD_END};//要添加关键字
void analyse();
void push(intstruct type);
void act(int);
int advance(struct type);//函数声明
char TOKEN[idlen];//存储从文档中读取的字符串
struct type
{
char prename[idlen];//规约前的name
char name;
float num;
}type1type2type11type12;//type1表示经过词法分析后读入的词的类型,若是浮点型,则name有值,type2表示规约出的表达式
struct type fenxi[100];//分析栈
int zhuangtai[100];//状态栈
int k = 0;//分析栈指针
int TopStat;//SLR1分析表的行
int InpSym;//SLR1分析表的列
int ifSpace = 0;//读入的是否是空格、制表等无意义字符
int isRight = 1;//文法正确标志位
int endtext = 0;//文档结束标志位
int signal = 0;//判断输入浮点型数字时是否重复输入小数点的标志位
int lookup (char *token)
{
int n=0;
while (strcmp(KeyWordTable[n] KEY_WORD_END)) //strcmp比较两串是否相同,若相同返回0
{
if (!strcmp(KeyWordTable[n] token)) //比较token所指向的关键字和保留字表中哪个关键字相符
{
return n+11; //根据单词分类码表I,设置正确的关键字类别码,并返回此类别码的值
break;
}
n++;
}
return 0; //单词不是关键字,而是标识符
}
void out(int identifychar *tokenFILE *f2)
{
switch(identify)
{
case BEGIN:
fprintf(f2“(begin%s)\n“token);
break;
case END:
fprintf(f2“(end%s)\n“token);
break;
case IF:
fprintf(f2“(if%s)\n“token);
break;
case THEN:
fprintf(f2“(then%s)\n“token);
break;
case ELSE:
fprintf(f2“(else%s)\n“token);
break;
case WHILE:
fprintf(f2“(while%s)\n“token);
break;
case DO:
fprintf(f2“(do%s)\n“token);
break;
case ID:
fprintf(f2“(ID%s)\n“token);
type1.name = ‘i‘;
strcpy(type1.prenametoken);
break;
case FCON:
fprintf(f2“(FCON%s)\n“token);
type1.name = ‘i‘;
type1.num = (float) atoi(token);
strcpy(type1.prenametoken);
break;
case LE:
fprintf(f2“(LE%s)\n“token);
break;
case NE:
fprintf(f2“(NE%s)\n“token);
break;
case LT:
fprintf(f2“(LT%s)\n“token);
break;
case EQ:
fprintf(f2“(EQ%s)\n“token);
break;
case GE:
fprintf(f2“(GE%s)\n“token);
break;
case GT:
fprintf(f2“(GT%s)\n“token);
break;
case PU:
fprintf(f2“(PU %s )\n“token);
break;
case PLU:
fprintf(f2“(PLU %s )\n“token);
type1.name = ‘+‘;
break;
case MIN:
fprintf(f2“(MIN %s )\n“token);
type
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-03-03 11:20 编译原理实验报告\
目录 0 2017-12-24 23:42 编译原理实验报告\1\
文件 4643 2017-12-24 21:29 编译原理实验报告\1\shiyan1.cpp
文件 28133 2017-12-23 22:29 编译原理实验报告\1\编译实验一.docx
目录 0 2017-12-24 23:42 编译原理实验报告\1+2\
文件 9923 2017-12-24 21:28 编译原理实验报告\1+2\1+2.cpp
文件 16424 2017-12-24 19:49 编译原理实验报告\1+2\编译1+2.docx
目录 0 2017-12-24 23:42 编译原理实验报告\1+2+3\
文件 12206 2017-12-24 23:15 编译原理实验报告\1+2+3\1+2+3.cpp
文件 54081 2017-12-24 23:20 编译原理实验报告\1+2+3\1+2+3.docx
文件 12206 2017-12-24 23:15 编译原理实验报告\1+2+3综合版.cpp
目录 0 2017-12-24 23:42 编译原理实验报告\2\
文件 4961 2017-12-24 21:29 编译原理实验报告\2\shiyan2.cpp
文件 52993 2017-12-23 22:22 编译原理实验报告\2\编译实验二.docx
文件 239 2017-12-24 23:22 编译原理实验报告\使用说明.txt
文件 319695 2017-12-24 23:41 编译原理实验报告\编译原理实验报告.docx
相关资源
- 编译原理课程设计-C语言子集编译器
- c++版学生成绩管理系统实验报告及源
- 赋值语句翻译c语言实现四元式
- 语法分析c语言实现程序代码+实验报告
- 编译原理用C++消除左递归
- 编译原理简易C编译器
- 实现语法分析器-编译原理
- plo编译器 c语言 含测试 以及实验报告
- 编译原理 LR分析器 c++代码
- 设计并实现TINYC语言的扫描程序TINYC
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 编译原理 LR0项目集规范族的构造 L
- 山东大学编译原理实验源代码c++版
- 中值滤波_均值滤波c语言实现_工程文
- 直方图均衡化_c语言实现_源代码+实验
- SVM分类算法实验报告+C语言程序 加强
- 计算机网络课程设计之Ping程序含C++原
- C++网络嗅探器源代码及实验报告
- 地图着色mfc
- 简单函数绘图语言的解释器
- 银行家算法c语言实现+实验报告
- 基于AT89C51的8*8点阵字符显示的实验报
- 基于winPcap开发嗅探器c++
- Lex和Yacc从入门到精通.pdf
- 简易词法分析器——基于C语言
- LL(1)文法的实现-mfc-编译原理学习
- C语言实现最低松弛度优先算法源代码
- 词法分析代码内有报告
- 北邮SQL实验四实验报告
- 编译原理LL1文法的mfc实现含消除左递
评论
共有 条评论