网站大量收购独家精品文档,联系QQ:2885784924

编译原理实验报告1..doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档