资源简介

大学课程编译原理的实验报告,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

评论

共有 条评论