资源简介
通过分析文件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
相关资源
- MP3文件ID3v2ID3v2APEv2标签读取
- 课程作业:模拟仓库管理系统
- 一个简单实用个人日记管理系统
- 带时间温度显示的室内灯光控制系统
- 成绩管理系统(数据结构)
- FIR低通滤波器 ccs运行环境
- C malloc函数用法
- 嵌入式局域网聊天系统客户端
- 算法竞赛入门经典 第2版刘汝佳+高清
- 基于单片机的GPS定位及显示系统设计
- 链表实现通讯录管理系统
- PowerShell-6.2.1-win-x86.zip
- pl/0编译器 语法分析
- 源程序阅读与调试课程设计报告--学生
- 谁说程序员不浪漫?!基于easyX图形库
- 编译原理课设c编译器
- MCP3421 STM32 Driver
- ADS1100 STM32 Driver
- 单片机89c52与MLX90614红外的测温程序
- stm32f103AES加密 cbc模式
- 单片机 点阵 字模提取软件
- C高级编程讲义-传智播客
- NOIP必学内容之前缀和与差分颜鸿宇
- Skyline高效检索算法实现.zip
- STM8S103系列IO模拟串口通信实现真正串
- stm32f103c8t6移植uC/OS-III基于HAL库的工程
- 温度、一氧化碳、二氧化碳、PM2.5以及
- 王道论坛计算机考研机试指南
- 有限元中网格剖分算法
- PLC开源资料
评论
共有 条评论