递归下降语法分析器实验报告

上传人:ji****72 文档编号:39549583 上传时间:2018-05-17 格式:DOC 页数:9 大小:506KB
返回 下载 相关 举报
递归下降语法分析器实验报告_第1页
第1页 / 共9页
递归下降语法分析器实验报告_第2页
第2页 / 共9页
递归下降语法分析器实验报告_第3页
第3页 / 共9页
递归下降语法分析器实验报告_第4页
第4页 / 共9页
递归下降语法分析器实验报告_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《递归下降语法分析器实验报告》由会员分享,可在线阅读,更多相关《递归下降语法分析器实验报告(9页珍藏版)》请在金锄头文库上搜索。

1、 编译原理实验报告题目: 递归下降语法分析器 学 院 计算机科学与技术 专 业 xxxxxxxxxxxxxxxx 学 号 xxxxxxxxxxxx 姓 名 宁剑 指导教师 xx 20xx 年 xx 月 xx 日递归下降语法分析器递归下降语法分析器装订线一、实验目的一、实验目的 了解语法分析器的内部工作原理,通过在本次实验中运用一定的编程技巧,掌握对表达 式进行处理的一种方法。 二、实验原理二、实验原理 算术表达式的文法可以是(可以根据需要适当改变):EE E+ +E E| |E E- -E E| |E E* *E E| |E E/ /E E| |( (E E) )| |i i根据递归下降分析法

2、或预测分析法 ,对表达式进行语法分析 ,判断一个表达式是否 正确 。 三、实验步骤三、实验步骤 (1) 准备:1. 阅读课本有关章节,确定算术表达式的文法;(设计出预测分析表) ;2. 考 虑好设计方案;3. 设计出模块结构 、测试数据,初步编制好程序。 (2) 上机调试,发现错误,分析错误,再修改完善。教师根据学生的设计方案与学生进行 探讨,以修改方案和代码 。 (3)改造后的文法:EE+T|E-T|T TT*F|T/F|F FF|P Pc |id| (E) 四、实验环境四、实验环境 计算机 VC+软件 五、实验程序五、实验程序 #include #include #include #inc

3、lude #include void error(); void terror(); void Scanner(); char sym= ; int i=0; char strToken30=“; FILE *in; void E(); void E1(); void F(); void Retract(char str30) for(int j=0;j30;j+) strj=0; void Scanner() sym=fgetc(in); if (isspace(sym) while(1)if(isspace(sym) sym=fgetc(in); else break; if(isdigi

4、t(sym) while(1) if (isdigit(sym) strTokeni=sym; i+; sym=fgetc(in); else printf(“%s“,strToken); i=0; Retract(strToken); fseek(in,-2,1); sym=fgetc(in); break; else if(sym=+) printf(“+“); else if(sym=-) printf(“-“); else if(sym=*) printf(“*“); else if(sym=/) printf(“/“); else if(sym=) printf(“); else i

5、f(sym=() printf(“(“); else if(sym=) printf(“)“); void F() if(isdigit(sym) Scanner(); else if (sym=() Scanner(); E(); if(sym=) Scanner(); else error(); else terror(); void T1() if(sym=*|sym=/|sym=) Scanner(); F(); T1(); void T() F(); T1(); void E1() if (sym=+|sym=-) Scanner(); T(); E1(); void E() T()

6、; E1(); void error() printf(“nThis is a wrong phrase!n“); exit(0); void terror()printf(“nthis is a wrong parase2!n“); exit(0); int main() if(in=fopen(“input.txt“,“r“)=NULL) printf(“File cant open.“); exit(0); Scanner(); E(); if (sym!=#) printf(“nSuccess.“); else printf(“nFail.“); fclose(in); return

7、0; 六、实验结果及分析六、实验结果及分析 程序输入/输出示例 : 如参考 C 语言的运算符。 输入如下表达式 (以分号为结束)和输出结果 :(a)10;输出:正确正确 此时程序运行结果如下图:(b)1+2;输出:正确正确 此时程序运行结果如下图:(c)(1+2) / 3+4- (5+6/7);输出:正确正确 此时程序运行结果如下图:(d)( (1-2) /3+4;输出:错误错误 此时程序运行结果如下图:(e)1+2-3+(*;输出:错误错误 此时程序运行结果如下图:(f)(1+2) / 3+4- (5+6/7) -23;输出:正确正确 此时程序运行结果如下图:(g) (1+2) / 3+4- (5+6/7) -;输出:错误错误 此时程序运行结果如下图:总结:总结:通过该实验的操作 ,我了解了语法分析器的内部工作原理,通过在本次实验中运用一 定的编程技巧,掌握对表达式进行处理的一种方法;了解了也理解了递归下降分析法的基 本原理,在课堂上认真听了老师的讲解,同时在课下也认真做了准备工作,不懂的地方也 向同学询问,总之在大家的帮助和自己的努力下完成了本次试验。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号