• 大小: 1.94MB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-01-24
  • 语言: C/C++
  • 标签: 编译器  

资源简介

C语言子集编译器,采用的LL1语义分析法 通过TXT文档源代码可得到最终的4元式中间代码。

资源截图

代码片段和文件信息

#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;  //生成四元式的标号(每产生一个中间变量就进行加1操作)

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

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

//添加结点到状态栈(状态m进栈)
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(s

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

     文件         40  2010-01-13 17:04  C语言子集编译器\error.txt

     文件         49  2010-01-13 17:01  C语言子集编译器\zm5.txt

     文件         42  2010-01-12 18:30  C语言子集编译器\zm1.txt

     文件         52  2010-01-13 17:04  C语言子集编译器\zm2.txt

     文件         52  2010-01-13 10:46  C语言子集编译器\zm3.txt

     文件         59  2010-01-13 17:03  C语言子集编译器\zm4.txt

     文件      30486  2010-01-12 18:31  C语言子集编译器\analy.cpp

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

     文件        214  2010-01-13 17:18  C语言子集编译器\analy_res.txt

     文件      21320  2010-01-12 20:48  C语言子集编译器\C语言子集编译器.APS

     文件       1621  2010-01-12 20:48  C语言子集编译器\C语言子集编译器.clw

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

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

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

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

     文件     148480  2010-01-13 17:22  C语言子集编译器\C语言子集编译器.ncb

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

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

     文件       6061  2010-01-12 15:53  C语言子集编译器\C语言子集编译器.rc

     文件       7185  2010-01-12 15:50  C语言子集编译器\C语言子集编译器Dlg.cpp

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

     文件        115  2010-01-13 17:18  C语言子集编译器\four.txt

     文件       3699  2009-12-15 21:20  C语言子集编译器\ReadMe.txt

     文件       1107  2010-01-12 15:46  C语言子集编译器\resource.h

     文件       1159  2009-12-24 10:58  C语言子集编译器\show_result.cpp

     文件       1189  2009-12-28 09:16  C语言子集编译器\show_result.h

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

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

     文件         66  2010-01-13 17:18  C语言子集编译器\zm0.txt

     文件      49664  2010-01-13 17:22  C语言子集编译器\C语言子集编译器.opt

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

评论

共有 条评论