编译原理课程设计(词法语法分析器,follow集)

编译原理课程设计(词法语法分析器,follow集)

ID:38636917

大小:451.00 KB

页数:24页

时间:2019-06-16

编译原理课程设计(词法语法分析器,follow集)_第1页
编译原理课程设计(词法语法分析器,follow集)_第2页
编译原理课程设计(词法语法分析器,follow集)_第3页
编译原理课程设计(词法语法分析器,follow集)_第4页
编译原理课程设计(词法语法分析器,follow集)_第5页
资源描述:

《编译原理课程设计(词法语法分析器,follow集)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译原理课程设计题目follow集分析课程编译原理姓名陈飞学号10821380144学院应用技术学院2010年7月9日目录目录I1系统分析11.1选题要求11.2预期目标12系统设计12.1基本设计12.2程序流程图33系统实现53.1上机编程53.2运行结果83.2.1读入文法93.2.2执行结果94总结与感想12参考文献13-22-1系统分析1.1选题要求求出输入文法的follow集1.2预期目标设计程序,使输入文法,能输出其follow集2系统设计2.1基本设计核心算法:对于文法中的符号XÎV

2、N,其FOLLOW(A)集合可反复应用下列规则计算,直到FOLLOW(A)集合不再增大为止。(1)对于文法开始符号S,因为SS,故#ÎFOLLOW(S);(2)若A→aBb,其中BÎVN,aÎ(VTUVN)*、bÎ(VTUVN)+,则FIRST(b)-{e}ÎFOLLOW(B);(3)若A→aB或A→aBb(be),则FOLLOW(A)ÎFOLLOW(B)。FOLLOW集的算法描述如下:voidFOLLOW(inti)X为待求的非终结符把当前字符放到一临时数组tempFOLLOW[]中,标识求已求

3、其FOLLOW集.避免循环递归ifX为开始符号then#∈FOLLOW(X)对全部的产生式找一个右部含有当前字符X的产生式注:比如求FOLLOW(B)则找A→αX或A→aXb(bε)的产生式ifX在产生式右部的最后(形如产生式A→aX)then查找非终结符A是否已经求过其FOLLOW集.避免循环递归-22-if非终结符A已求过其FOLLOW集thenFOLLOW(A)∈FOLLOW(X)继续查下一条产生式是否含有Xelse求A之FOLLOW集,并标识为A已求其FOLLOW集elseifX不在产生式右

4、部的最后(形如A→aBb)thenif右部X后面的符号串b能推出空字ethen查找b是否已经求过其FOLLOW集.避免循环递归if已求过b的FOLLOW集thenFOLLOW(A)∈FOLLOW(B)结束本次循环elseifb不能推出空字then求FIRST(b)把FIRST(b)中所有非空元素加入到FOLLOW(B)中标识当前要求的非终结符X的FOLLOW集已求过:2.2程序流程图(一)基本模块流程-22-(二)查找字符是否在指定字符串-22-图(二)图(三)(三)不含左地柜的产生式分解(上图右)

5、(四)判定终结符非终结符-22--22--22-3系统实现3.1源代码-22-#include#include#include#include#includeusingnamespacestd;FILE*inparse;//用于指向输入文件的指针charinparsefile[300];//接收存储输入文件名/***************定义产生式的语法集结构*************/typede

6、fstruct{charformula[200];//产生式}grammarElement;grammarElementgramOldSet[200];//原始文法的产生式集grammarElementgramNewSet[200];//消除左递归后文法的产生式集/*********************变量定义*********************/intgrammarNum=0;//原始的产生式数目intPcount=0;//分解的产生式的个数charstartSymbol;//开始符号c

7、harterSymbol[200];//终结符号charnon_ter[200];//非终结符号charallSymbol[400];//所有符号charleftStr[200];//产生式左部(不包括"->")charrightStr[200][200];//产生式右部(不包括"->")charfollowSET[100][100];//各产生式左部的FOLLOW集合-22-chartempFOLLOW[100];//求FOLLOW集合时使用charfollowed[100];//记录各符号的FO

8、LLOW是否已求过,0和1表示其状态charepsilon[100];//记录可直接推出@("ε")的符号chartempEpsilon[100];//求someDerivateEpsilon()时使用,标识此字符已查找其是否可推出空字intvalidity=1;//表示输入文法是否有效charchoice;//用户输入时使用/**************************************************查找字符是否在指定字符串中********

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。