资源简介
通过分析文件chanshengshi.txt中的文法,得到ll(1)预测分析表并在文件analysis_table.txt中输出显示。
代码片段和文件信息
/*
LL(1)预测分析表的构造,空字用符号~表示
This procedure is written by fanxiangchao.
*/
#include
#include
#include
#include
#include
#define FALSE 0
#define TRUE 1
#define MAX 100
#define NULL 0
#define ERROR -1
/***********************定义结构体*********************************/
//1.定义非终结符的结构体
struct no_terminal_sign
{
char no_ter; //非终结符
char first[MAX]; //非终结符的first集合
char follow[MAX]; //非终结符的follow集合
};
//2.定义候选式的结构体
struct candidate_formular
{
char candidate[MAX]; //产生式串
char first[MAX]; //产生式的first集合
};
//3.定义产生式的结构体
typedef struct produce
{
char left; //产生式左部
char right[MAX]; //产生式右部
}chanshengshi;
//4.定义终结符的结构体
struct terminal_sign
{
char ter; //终结符
char first[MAX]; //终结符的first集合
};
/******************************************************************/
//函数定义
int is_include(char * achar b)//一个终结符属于某个集合
{
int i;
for(i=0;a[i]!=‘\0‘;i++)
if(b==a[i])
return TRUE;
return FALSE;
}
void add_ter(char * achar sign)//向一个集合中添加一个终结符
{
int length;
if(!is_include(asign)){
length=strlen(a);
a[length]=sign;
a[length+1]=‘\0‘;
}
}
void add_ter_to_first(struct no_terminal_sign * achar sign)//向一个终结符的first集合中添加一个终结符
{
int length;
if(!is_include(a->firstsign)){
length=strlen(a->first);
a->first[length]=sign;
a->first[length+1]=‘\0‘;
}
}
void add_ter_to_candidate_first(struct candidate_formular * achar sign)//向一个候选式的first集合中添加一个终结符
{
int length;
if(!is_include(a->firstsign)){
length=strlen(a->first);
a->first[length]=sign;
a->first[length+1]=‘\0‘;
}
}
void add_ter_to_follow(struct no_terminal_sign * achar sign)//向一个终结符的follow集合中添加一个终结符
{
int length;
if(!is_include(a->followsign)){
length=strlen(a->follow);
a->follow[length]=sign;
a->follow[length+1]=‘\0‘;
}
}
int is_terminal(char signstruct terminal_sign *a)//判断一个符号是终结符还是非终结符
{
struct terminal_sign * p;
if(sign==‘~‘) return -1;
for(p=a;p->ter!=NULL;p++)
if(p->ter==sign)
return TRUE;
return FALSE;
}
int is_include_null(struct no_terminal_sign *a)//判断一个非终结符的first集合中包含空字
{
int i;
for(i=0;a->first[i]!=‘\0‘;i++)
if(a->first[i]==‘~‘)
return TRUE;
return FALSE;
}
void subtract_null(char *a)//将一个集合减去空字
{
int imark;
for(i=0;a[i]!=‘\0‘;i++)
if(a[i]==‘~‘)
break;
mark=i;
for(i=mark;i<(signed)strlen(a);i++)
a[i]=a[i+1];
}
void merge_to_first(struct no_terminal_sign * achar *b)//将集合b添加到非终结符的first集合a中
{
int in;
n=strlen(a->first);
for(i=0;b[i]!=‘\0‘;i++)
if(!is_include(a->firstb[i]))
a->first[n++]=b[i];
a->first[n]=‘\0‘;
}
void merge_to_candidate_first(struct candidate_formular * achar *b)//将集合b添加到候选式的first集合a中
{
int in;
n=strlen(a->first);
for(i=0;b[i]!=‘\0‘;i++)
if(!is_include(a->firstb[i]))
a->first[n++]=b[i];
a->
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 54 2008-06-21 14:42 编译原理\chanshengshi.txt
文件 828 2008-06-21 22:13 编译原理\analysis_table.txt
文件 16296 2008-06-21 22:13 编译原理\LL(1).cpp
文件 105984 2008-06-27 16:52 编译原理\LL(1)源码.doc
目录 0 2008-06-21 18:49 编译原理
----------- --------- ---------- ----- ----
123162 5
相关资源
- 王道程序员面试宝典
- C程序设计第五版课后答案-第五章
- C程序设计第五版课后答案-第八章
- C程序设计第五版谭浩强 课后答案习题
- 算法导论包括原版教材、上课笔记、
- linux C 编程实战PDF+源代码
- 数据结构套题(赵宏宇).rar
- 词法分析器语言源代码
- 基于51单片机电子密码锁的设计 C程序
- 单片机温度检测系统
- 校园一卡通
- 烟雾报警器源码
- 哈希表的设计与实现.zip
- 单项选择题标准化考试系统.doc
- 数据结构-排课系统
- 报警发生器
- Linux下聊天室实现基于C
- LinuxMP3播放器源码
-
fr
amebuffer显示图片 - 建立一个带头节点的双向链表
- 四路循迹小车代码
- Modbus_RTU.rar
- PID算法控制直流电机转速仿真与C程序
- pc串口控制流水灯的程序
- 《C程序设计》教案 谭浩强版
- 地铁自动售票机计算当前站和目的站
- 《C程序设计语言》第二版 中文高清
- 数据结构银行业务模拟
- msp430代码模拟spi
- 神经元 ML模型
评论
共有 条评论