- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《编译原理》实验报告书
姓 名
班 级
计102
学 号
109074
指导教师
王森玉
安徽工业大学计算机学院
2013年5月
编译原理实验报告
PAGE \* MERGEFORMAT15
实验内容
求解一个文法的first、follow、select集合并判断是不是LL(1)文法。
实验目的
通过实验熟练掌握first、follow、select集合的求解算法,加深对理论知识的理解。
实验环境
VC++6.0、C语言。
实验原理
1.first集的求解:(1)若X∈Vt,则FIRST(X)={X};
(2)若X∈Vn,且有产生式X-a……,a∈Vt,则a∈FIRST(X);
(3)若X∈Vn,X-ε,则ε∈FIRST(X)
(4)若X,Y1,Y2,Y3,Y4…………Yn都∈Vn,而产生式X-Y1,Y2……Yn.当Y1,Y2,Y3,Y4…………Yn都能=ε那么FIRST(X)=并集的FIRST(Yi)-{ ε}(0=i=n)
(5)若Yi=ε(i=1,2,3……),则FIRST(X)=并集的FIRST(Yi)-{ ε}并上{ε}
2.follow集的求解:(1)若为文法开始符号S,则FOLLOW(S)={#}
(2)若为文法A-aBb是一个产生式,则把FIRST(b)的非空元素加入FOLLOW(B)中。如果b-ε则把FOLLOW(A)也加入FOLLOW(B)中。
3.select=(A-a)=(first(a)-{ ε})并上follow(A)。
设计实现
数据结构定义:
typedef struct Node
{
char nonTerminal;
char str[10]; //用来存放各个产生式右边的字符串
int tag; //用来标记是否能推出空
char first[10]; //用来存放非终结符的first集合
char firsts[10]; //用来存放字符串的first集合
char follow[10]; //用来存放各个非终结符的follow集
char formFollow[10];//用来存放各个非终结符的follow集合的组成部分
int fol; //用来标记非终结符是否已经计算过follow集
char sellect[10];//用来存放sellect集合
int fir; //用来标志非终结符的first集合是否计算过,0表示没有,1表示计算过
}nonTer,*nonTerminal;
typedef struct
{
char Ldata;
// int tag1; //用来标记是否能推出空
int tag2;//用来标记该产生式是否被删除
}LeftData;
typedef struct node
{
LeftData lData;
char mData[2];
char rData[10];//产生式右边字符串最大值为10
}Pro;
typedef struct
{
Pro proNum[50]; //输入产生式的最大数量
}Production;
static int num=0; //统计实际输入产生式的数量
int sum=1; //统计非终结符的数量
函数功能说明:
Production init() //初始化产生式
Production input() //输入产生式
Production copyProduction(Production p) //
int isJudLegal(Production p) //判断产生式是否合法
int leftRecursive(Production p,nonTer nT[20]) //判断是否有左递归,有则返回1,否则返回0
Production delProduction1(Production p) //删除右部含有小写字母所有产生式
Production delProduction(Production p,char ch)//删除以ch开头所有产生式
Production delProduction2(Production p,char ch)//删除以ch开头一条产生式
Production delNonTer(Production p,int position,int n) //删除非终结符
int isExist(nonTer nT[20])//判断是否有未处理的产生式有则返回1否则返回0
void isInfer
您可能关注的文档
- 边坡支护方案1212(2)..doc
- 编辑距离算法的优化与实现..doc
- 编码器工作原理种类APC SPC..docx
- 编写并运行C语言程序..doc
- 编写计算机程序,实现点分十进制的IP..doc
- 编写适用于STM32的ISP下载器程序..doc
- 编写一个计算器程序课程设计报告-范例..doc
- 编译练习题答案..doc
- 编译器的程序设计..doc
- 编译器的代码生成..doc
- 2025年安徽工商职业学院单招职业技能测试题库带答案(典型题).docx
- 2025年洛阳科技职业学院单招职业技能测试题库带答案(新).docx
- 2025年荆门职业学院单招职业技能测试题库及答案(易错题).docx
- 2025年宣化科技职业学院单招职业技能测试题库(精练).docx
- 2025年包头职业技术学院单招职业技能测试题库带答案(新).docx
- 2025年江西工商职业技术学院单招职业技能测试题库带答案(精练).docx
- 2025年黑龙江农业经济职业学院单招职业技能测试题库精编.docx
- 2025年山东艺术设计职业学院单招职业技能测试题库带答案(基础题).docx
- 2025年陕西工商职业学院单招职业技能测试题库带答案(突破训练).docx
- 2025年承德护理职业学院单招职业技能测试题库【word】.docx
文档评论(0)