资源简介
本程序能实现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个文件信息
评论
共有 条评论