• 大小: 8KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-07-04
  • 语言: C/C++
  • 标签:

资源简介

关于编译原理课设的要求,用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


评论

共有 条评论