- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
递归下降分析程序的实现合肥工业大学编译原理课程设计报告
课程设计报告
设计题目
17.递归下降分析程序的实现
设计要求
对文法 G:
E→E+T|T
T→T*F|F
F→(E)|i
构造出G的递归下降分析程序。程序显示输出匹配过程(即自上而下生成语法分析树的步骤,输出各匹配产生式序号即可)。
设计思路
(1)分析
a) ∵E=E+T=E+T*F=E+T*(E)即有E=E+T*(E)存在左递归。用直接改写法消除左递归,得到如下:
E à TE’
E’ à +TE’ | ?TE’|ε
T à FT’
T’ à *FT’ | /FT’|ε
F à (E) | i
b) 对于以上改进的方法。可得:
对于E’:? FIRST( E’ )=FIRST(+TE’)∪FIRST(-TE’)∪{ε}={+,?,ε}
对于T’: FIRST( T’ )=FIRST(*FT’)∪FIRST(/FT’)∪{ε}={*,∕,ε}
而且: FIRST( E ) = FIRST( T ) = FIRST( F )=FIRST((E))∪FIRST(i)={(,i }
由此得出各非终结符的FOLLOW集合如下:
FOLLOW( E )= { ),#}
FOLLOW(E’)= FOLLOW(E)={ ),#}
FOLLOW( T )= FIRST(E’)\ε∪FOLLOW(E’)={+,?,),#}
FOLLOW( T’ ) = FOLLOW( T ) ={+,?,),#}
FOLLOW( F )=FIRST(T’)\ε∪FOLLOW(T’)={*,∕,+,?,),#}
由以上FOLLOW集可以我们可以得出SELECT集如下:
对E
SELECT(EàTE’)=FIRST(TE’)=FIRST(T)={ (,i }
对E’
SELECT(E’à+TE’)={ + }
SELECT(E’à ?TE’)={ ? }
SELECT(E’àε)={ε,),#}
对T
SELECT(TàFT’)={(,i}
对T’
SELECT(T’à*FT’)={ * }
SELECT(T’à ∕FT’)={ ∕ }
SELECT(T’àε)={ε,+,?,),#}
对F
SELECT(Fà(E) )={ ( }
SELECT(Fài)={ i }
∴SELECT(E’à+TE’)∩SELECT(E’à ?TE’)∩SELECT(E’àε)=F
SELECT(T’à*FT’)∩SELECT(T’à ∕FT’)∩SELECT(T’àε)=F
SELECT(Fà(E) )∩SELECT(Fài)= F
由上可知,有相同左部产生式的SELECT集合的交集为空,所以文法是LL(1)文法。因此,转化后的文法可以用递归下降分析法作语法分析。
(2)设计
这里采用递归下降分析法形象描述递归子程序。程序中将要用到的几个重要数据如下:
一个全局变量ch,存放由文件输入得到的字符。
一个函数宏READ(ch),实现读取文件中的字符。
五个子函数:P(E)、P(E’)、P(T)、P(T’)、P(F)。
课程设计源程序
/************************************************************************
* 文件描述:递归下降语法分析器。分析如下方法:
* E-E+T | E-T | T
* T-T*F | T/F |F
* F-(E) | i
*
* 输入:每行含一个表达式的文本文件。
* 输出:分析成功或不成功信息。
* 创建人:赵有斌
***********************************************************************/
?
#includestdio.h
#includemalloc.h
#define READ(ch) ch=getc(fp) /*宏:READ(ch)*/
char ch; /*声明为全局变量*/
int right=0;
FILE *fp;
structstruCH{
char ch;
struct struCH *next;
}struCH,*temp,*head,*shift;
/*head指向字符线性链表的头结点*/
/*shift指向动态建成的结点(游标)*/
void main(intargc,char *argv[]){
void E (); /* P(E) */
void E1(); /* P(E)*/
void T (); /* P(T) */
void T1(); /* P(T)*/
void F (); /* P(F) */
i
您可能关注的文档
最近下载
- 2014-2015中国黄金集团公司宣传册.PDF VIP
- 中小学(三阶魔方的复原)校本教材.docx
- 五年(21-25)高考真题分类汇编专题13空间向量与立体几何(选填题)8种常见考法归类(全国通用)(含解析).docx VIP
- 广东省紧密型县域医共体(已挂牌)名单明细表1126.doc VIP
- 2.8_非自然人分布式光伏发电项目购售电合同(2022版).docx VIP
- 煤矿行业智慧矿山信息化解决方案(26页 PPT).pptx VIP
- 工程竣工统一验收方案(3篇).docx VIP
- 不合格品管理及返工的.ppt VIP
- 汇报发言:聚焦学查改,提升学习教育质效.docx VIP
- DB32T-预制混凝土劲性体复合地基技术规范(报批稿)及编制说明.pdf VIP
文档评论(0)