• 大小: 3.49MB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-02-02
  • 语言: C/C++
  • 标签:

资源简介

本程序能实现C语言子集的编译,能实现的主要功能包括: (1)、实现编译的词法分析 (2)、语法分析 (3)、语义分析功能 (4)、错误处理能力,并给出总的出错报告 (5)、编译最终形成四元式的中间代码形式

资源截图

代码片段和文件信息

#include 
#include 
#include 
#define E -1
#define  FLAG 100
#define ACC 1000

//文法规则结构
struct rule
{
char left[2];
char right[10];
};

//链表结点
struct word
{
char w[10];
struct word *next;
};

//状态栈结点结构
struct state
{
int s;
struct state *next;
};

struct word *tem_name_list;   //临时变量存放列表
struct formula *four_item;

int _i;  //四元式编号
int beg[100];   //存放要回填的四元式的编号
int beg_i;
int i_i;  //生成四元式的标号
//添加结点到链表,其实下面的链表就是一栈
void add_list(struct word **headchar *p);

//结点出n次栈
void pop(struct word **headint n);

//添加结点到状态到栈
void state_add(struct state **headint m);

//状态结点出n次栈
void state_pop(struct state **headint n);
//在链表中查找单词是否已经存在,存在返回0,不存在返回-1
int find_word(struct word *listchar *p);
//判断一个标识符是否合法合法返回0,不合法返回-1
int is_identifier(char *p);
//判断一个单词是否是一个整数,是返回0,不是返回-1
int is_int(char *p);
struct word *key_word;     //保留关键字链表
struct word *identifier;   //用户自定义标识符
struct word *operation;    //运算符
struct word *boundary;     //界符



//四元式链表结点结构
struct formula
{
int i;          //四元式编号
char op[10];   //操作符
char p1[10];    //
char p2[10];
char res[10];   
struct formula *next;
};
//文法规则矩阵
 struct rule rule_gather[27];
//规则矩阵初始化
 void init_rule();

 //SLR(1)分析表

//查找并返回单词对应SLR(1)分析表中的列号如果不存在,则返回-1
int find_num(const char *p);
//计算一个字符串有多少个字符
int word_num(const char *p);

//产生一个新的临时变量T1T2、、、、
char *create_tem(char *p);

//打印出一个四元式
void printf_four(char *operchar *p1char *p2char *res);

//对归约时会改变语义栈的规则编写语义子程序
void r_16(struct word **yuyi_stackchar *p1char *p2);
void r_18(struct word **yuyi_stackchar *p1char *p2char *tem);
void r_19(struct word **yuyi_stackchar *p1char *p2char *tem);
void r_21(struct word **yuyi_stackchar *p1char *p2char *tem);
void r_22(struct word **yuyi_stackchar *p1char *p2char *tem);
void r_26(struct word **yuyi_stackchar *p1);

//根据规则编号,调用相应的语义子程序
void call_r(struct word **yuyi_stackint mchar *input_word);

//语法分析,整个程序语法正确返回0,否则返回-1
int syntax_analyze(FILE *fp);


//添加结点到链表,其实下面的链表就是一栈
void add_list(struct word **headchar *p)
{

if(*head==NULL)
{
*head=(struct word*)malloc(sizeof(struct word));
strcpy((*head)->wp);
(*head)->next=NULL;
}
else
{
struct word *tem=(struct word*)malloc(sizeof(struct word));
strcpy(tem->wp);
tem->next=*head;
*head=tem;
}
}

//结点出n次栈
void pop(struct word **headint n)
{
struct word *tem;
if(n<1)
return;
while(n)
{
if(*head==NULL)
return;
tem=*head;
*head=(*head)->next;
free(tem);
n--;
}
}

//添加结点到状态到栈
void state_add(struct state **headint m)
{

if(*head==NULL)
{
*head=(struct state*)malloc(sizeof(struct state));
(*head)->s=m;
(*head)->next=NULL;
}
else
{
struct state *tem=(struct state*)malloc(sizeof(struct state));
tem->s=m;
tem->next=*head;
*head=tem;
}
}

//状态结点出n次栈
void state_pop(struct state **headint n)
{
struct state 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件         38  2009-12-30 23:42  C语言子集编译器\C语言子集编译器\1.txt

     文件         49  2011-01-07 02:53  C语言子集编译器\C语言子集编译器\123.txt

     文件         42  2011-01-07 18:13  C语言子集编译器\C语言子集编译器\2.txt

     文件         54  2011-01-07 18:19  C语言子集编译器\C语言子集编译器\3.txt

     文件         78  2011-01-07 13:27  C语言子集编译器\C语言子集编译器\566.txt

     文件         52  2011-01-07 02:52  C语言子集编译器\C语言子集编译器\77.txt

     文件         52  2009-12-28 00:26  C语言子集编译器\C语言子集编译器\88

     文件         52  2011-01-07 02:53  C语言子集编译器\C语言子集编译器\88.txt

     文件         59  2011-01-07 02:53  C语言子集编译器\C语言子集编译器\99.txt

     文件      28794  2009-12-28 09:38  C语言子集编译器\C语言子集编译器\analy.cpp

     文件          0  2009-12-25 01:42  C语言子集编译器\C语言子集编译器\analy.h

     文件        189  2011-01-07 18:19  C语言子集编译器\C语言子集编译器\analy_res.txt

     文件      22236  2011-01-07 12:43  C语言子集编译器\C语言子集编译器\C语言子集编译器.APS

     文件       1470  2010-01-07 10:07  C语言子集编译器\C语言子集编译器\C语言子集编译器.clw

     文件       2035  2009-12-15 21:20  C语言子集编译器\C语言子集编译器\C语言子集编译器.cpp

     文件       4542  2009-12-28 09:42  C语言子集编译器\C语言子集编译器\C语言子集编译器.dsp

     文件        555  2009-12-15 21:20  C语言子集编译器\C语言子集编译器\C语言子集编译器.dsw

     文件       1311  2009-12-15 21:20  C语言子集编译器\C语言子集编译器\C语言子集编译器.h

     文件       1479  2010-12-22 23:45  C语言子集编译器\C语言子集编译器\C语言子集编译器.idc

     文件   14027776  2011-01-07 18:42  C语言子集编译器\C语言子集编译器\C语言子集编译器.ncb

     文件          0  2009-12-25 13:11  C语言子集编译器\C语言子集编译器\C语言子集编译器.ncb (Can‘t open)

     文件      48640  2010-01-14 11:52  C语言子集编译器\C语言子集编译器\C语言子集编译器.opt

     文件        264  2010-01-13 23:02  C语言子集编译器\C语言子集编译器\C语言子集编译器.plg

     文件       5794  2009-12-28 10:23  C语言子集编译器\C语言子集编译器\C语言子集编译器.rc

     文件        908  2011-01-07 12:47  C语言子集编译器\C语言子集编译器\C语言子集编译器.sln

    ..A..H.     15360  2011-01-07 18:42  C语言子集编译器\C语言子集编译器\C语言子集编译器.suo

     文件       8228  2011-01-07 12:47  C语言子集编译器\C语言子集编译器\C语言子集编译器.vcproj

     文件       1427  2011-01-07 18:42  C语言子集编译器\C语言子集编译器\C语言子集编译器.vcproj.D38387E719004BD.Administrator.user

     文件       7185  2009-12-28 10:25  C语言子集编译器\C语言子集编译器\C语言子集编译器Dlg.cpp

     文件       1409  2009-12-28 10:19  C语言子集编译器\C语言子集编译器\C语言子集编译器Dlg.h

............此处省略26个文件信息

评论

共有 条评论