资源简介
关于编译原理课设的要求,用C语言实现的词法分析、语法分析及语义分析。主要完成定义语句和算术表达式的分析。
代码片段和文件信息
#include
#include
#include
#include
#define LL 50 //定义栈的长度
#define WW 10 //定义语义栈的单位长度
//语义子程序的编号
#define DEF1 16
#define DEF2 17
#define DEF3 18
#define ARITH1 21
#define ARITH2 22
#define ARITH3 23
#define ARITH4 24
#define ARITH5 25
#define ARITH6 26
//词法分析中的常量
#define H 14
#define L 8
#define W 20
#define F 40
int Q=1;
char keyword[H][L];
char simple[W];
char dousim[W][4];
char buffer[10]; //用于存放读到的字符
char buffer1[10]; //用于存放字符的返回值
char buffer2[10]; //用于归约时存放读到的字符
char ch;
int error[L];
int M=0;
int LINE=0;
struct fina
{
char name[10];
};
struct labe
{
char name[10];
char att[10];
};
struct fina finals[F];
struct labe labels[F];
/******************************************************/
char syntax[LL][WW]; //定义语义栈
char labelss[LL][WW]; //定义符号栈
int state[LL]; //定义状态栈
int ptr=0; //指向栈顶
int p=0; //用于判断用什么表
int no1no2; //用于查找状态转换时其所处的状态
int lab; //用于存放查表后所得的下标
char def[7][6];//={“;““int““float““““id““#““D“};
char arith[11][5];//={“id““=““+““*““(““)““;““#““E““T““F“};
int def_tabel[9][7]={{0230001} //定义语句的SLR1表
{4005000}
{0000600}
{0000700}
{00000-10}
{0000800}
{160016000}
{170017000}
{180018000}};
int arith_tabel[15][11]={{10000000000} //定义算数表达式和赋值语句的SLR1表
{02000000000}
{70006000345}
{00900080000}
{002210022220000}
{002424024240000}
{700060001145}
{002626026260000}
{0000000-1000}
{700060000125}
{700060000013}
{009001400000}
{002110021210000}
{002323023230000}
{002525025250000}};
FILE *fin*out*out1;
void init(){
//初始化词法分析中的变量
int i;
strcpy(keyword[0]“int“);
strcpy(keyword[1]“char“);
strcpy(keyword[2]“float“);
strcpy(keyword[3]“void“);
strcpy(keyword[4]“const“);
strcpy(keyword[5]“for“);
strcpy(keyword[6]“if“);
strcpy(keyword[7]“else“);
strcpy(keyword[8]“then“);
strcpy(keyword[9]“while“);
strcpy(keyword[10]“switch“);
strcpy(keyword[11]“break“);
strcpy(keyword[12]“begin“);
strcpy(keyword[13]“end“);
strcpy(dousim[0]“/=“);
strcpy(dousim[1]“+=“);
strcpy(dousim[2]“-=“);
strcpy(dousim[3]“*=“);
strcpy(dousim[4]“%=“);
strcpy(dousim[5]“||“);
strcpy(dousim[6]“&&“);
strcpy(dousim[7]“<=“);
strcpy(dousim[8]“>=“);
strcpy(dousim[9]“<=“);
strcpy(dousim[10]“!=“);
strcpy(dousim[11]“//“);
strcpy(dousim[12]“/*“);
simple[0]=‘+‘;
simple[1]=‘-‘;
simple[2]=‘*‘;
simple[3]=‘/‘;
simple[4]=‘(‘;
simple[5]=‘)‘;
simple[6]=‘[‘;
simple[
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 26112 2009-06-23 18:47 桌面\编译原理课程设计要求.doc
文件 13093 2009-06-22 13:05 桌面\byyl.c
文件 58 2009-06-23 18:45 桌面\info.txt
目录 0 2009-06-23 18:48 桌面
----------- --------- ---------- ----- ----
39263 4
- 上一篇:回到原点的骑士游历问题代码
- 下一篇:sift-surf-orb通用程序
评论
共有 条评论