资源简介
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个文件信息
相关资源
- 编译原理简易C编译器
- plo编译器 c语言 含测试 以及实验报告
- picc8.05编译器
- 计算机二级VC++2010学习版
- SNL语言编译器GUI VC++ 2008版 MFC实现可
- winTC(windows下的c语言编译器
- SNL语言编译器C++实现
- MinGW Windows 下gnu C/C++编译器
- sdcc编译器v2.9.0
- C-语言编译器可运行生成汇编代码
- C-Minus编译器
- VC++2010 Express计算机二级考试所用编译
- Borland C++ 5.5 编译器
- Wava 6000 (内有comp86汇编编译器,com
- 经典的编译器gcc2.95.3安装文件已编译
- pl/0语言的编译器
- lex yacc 文献 资料
- dev C++编译器
- 编译原理简单的编译器源码
- C语言实现一个编译器-编译原理南开大
- PL0编译器词法检查与语法分析器
- C语言简化编译器前端 编译原理 LR1
- C-Minus编译器 编译原理实验
- MSVC编译器
- PIC_MCC18_FULL_3.30编译器.rar
- C/C++编译仿真器
- g++ for win
- Matlab安装MinGW-w64 C/C++ 编译器
- mplabc18编译器(c编译器工具)v3.0免费
- PL/0语言编译器源代码及测试代码
评论
共有 条评论