2022年递归下降分析程序的实现合肥工业大学编译原理课程设计报告 .pdf
《2022年递归下降分析程序的实现合肥工业大学编译原理课程设计报告 .pdf》由会员分享,可在线阅读,更多相关《2022年递归下降分析程序的实现合肥工业大学编译原理课程设计报告 .pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课 程 设 计 报 告设计题目17. 递归下降分析程序的实现设计要求对文法 G: EE+T|T TT*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:F
2、IRST( T )=FIRST(*FT )FIRST(/FT ) = * , , 而且:FIRST( E ) = FIRST( T ) = FIRST( F )=FIRST(E) FIRST(i)= (,i 由此得出各非终结符的FOLLOW 集合如下:FOLLOW( E )= ) ,#名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - FOLLOW(E )= FOLLOW(E)= ) ,#FOLLOW( T )= FIRST(E )
3、FOLLOW(E )=+ ,- ,),#FOLLOW( T ) = FOLLOW( T ) =+ ,- ,),#FOLLOW( F )=FIRST(T ) FOLLOW(T )=* , ,+,- ,),#由以上 FOLLOW 集可以我们可以得出SELECT 集如下:对 E SELECT(ETE )=FIRST(TE)=FIRST(T)= ( ,i 对 ESELECT(E +TE )= + SELECT(E -TE )= - SELECT(E )= ,),#对 T SELECT(TFT )=( ,i对 TSELECT(T *FT )= * SELECT(T FT)= SELECT(T )= ,+
4、,- ,),#对 F SELECT(F(E) )= ( SELECT(Fi)= i SELECT(E +TE )SELECT (E -TE )SELECT (E )=SELECT(T *FT) SELECT(TFT)SELECT (T )=SELECT(F(E) )SELECT (Fi)= 由上可知,有相同左部产生式的SELECT 集合的交集为空,所以文法是LL(1)文法。因此,转化后的文法可以用递归下降分析法作语法分析。(2)设计这里采用递归下降分析法形象描述递归子程序。程序中将要用到的几个重要数据如下:一个全局变量 ch,存放由文件输入得到的字符。一个函数宏 READ(ch),实现读取文件
5、中的字符。五个子函数: P(E)、P(E)、P(T)、P(T)、P(F)。课程设计源程序/* 文件描述:递归下降语法分析器。分析如下方法:* E-E+T | E-T | T* T-T*F | T/F |F名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - * F-(E) | i * * 输入:每行含一个表达式的文本文件。* 输出:分析成功或不成功信息。* 创建人:赵有斌*/#include#include#define READ(c
6、h) ch=getc(fp) /*宏:READ(ch)*/charch; /*声明为全局变量 */int right=0; FILE *fp;structstruCHchar 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 (
7、); /* P(F) */interrnum=0,k=0,m=0,countchar=0,rownum;intcharerr=0;/*开关控制量 */名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - /*以只读方式打开文件 */if(fp=fopen(argv1,r)=NULL) printf(ntCan not open file %s,or not exist it!n,argv1);exit(0); /*文件不存在 or 打
8、不开时,正常退出程序*/else printf(ntSuccess open file: %sn,argv1); /*成功打开文件 */*遍历整个文件检测是否有非法字符*/*如果用 while(!feof(fp) 语言,将会多出一个字符*所以这里采用以下方法遍历整个文件检测其否有非法字符*/ /*1 计算文件中字符数量 */while(!feof(fp) READ(ch); /*这里读取字符只是让文件指针往前移*/countchar+; /*统计文件中的字符数 (包括换行符及文件结束符)*/rewind(fp); /*将 fp 文件指针重新指向文件头处,以备后面对文件的操作 */if(coun
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年递归下降分析程序的实现合肥工业大学编译原理课程设计报告 2022 递归 下降 分析 程序 实现 合肥 工业大学 编译 原理 课程设计 报告
限制150内