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

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

ID:14817122

大小:491.50 KB

页数:9页

时间:2018-07-30

递归下降语法分析器实验报告_第1页
递归下降语法分析器实验报告_第2页
递归下降语法分析器实验报告_第3页
递归下降语法分析器实验报告_第4页
递归下降语法分析器实验报告_第5页
资源描述:

《递归下降语法分析器实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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

2、E-E

3、E*E

4、E/E

5、(E)

6、i    根据递归下降分析法或预测分析法,对表达式进行语法分析,判断一个表达式是否正确。三、实验步骤(1)准备

7、:1.阅读课本有关章节,确定算术表达式的文法;(设计出预测分析表);2.考虑好设计方案;3.设计出模块结构、测试数据,初步编制好程序。(2)上机调试,发现错误,分析错误,再修改完善。教师根据学生的设计方案与学生进行探讨,以修改方案和代码。(3)改造后的文法:E→E+T

8、E-T

9、TT→T*F

10、T/F

11、FF→F^

12、PP→c

13、id

14、(E)四、实验环境 计算机VC++软件五、实验程序  #include#include#include#include#include

15、voiderror();voidterror();voidScanner();charsym='';inti=0;charstrToken[30]={""};FILE*in;voidE();voidE1();voidF();voidRetract(charstr[30]){for(intj=0;j<30;j++){str[j]=0;}}voidScanner(){sym=fgetc(in);if(isspace(sym)){while(1){if(isspace(sym)){sym=fgetc(in);}elseb

16、reak;}}if(isdigit(sym)){while(1){if(isdigit(sym)){strToken[i]=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("+");}elseif(sym=='-'){printf("-");}elseif(sym=='*'){printf("*");}elseif

17、(sym=='/'){printf("/");}elseif(sym=='^'){printf("^");}elseif(sym=='('){printf("(");}elseif(sym==')'){printf(")");}}}voidF(){if(isdigit(sym)){Scanner();}elseif(sym=='('){Scanner();E();if(sym==')'){Scanner();}elseerror();}elseterror();}voidT1(){if(sym=='*'

18、

19、sym=='/'

20、

21、sym

22、=='^'){Scanner();F();T1();}}voidT(){F();T1();}voidE1(){if(sym=='+'

23、

24、sym=='-'){Scanner();T();E1();}}voidE(){T();E1();}voiderror(){printf("Thisisawrongphrase!");exit(0);}voidterror(){printf("thisisawrongparase2!");exit(0);}intmain(){if((in=fopen("input.txt","r"))

25、==NULL){printf("Filecan'topen.");exit(0);}Scanner();E();if(sym!='#'){printf("Success.");}else{printf("Fail.");}fclose(in);return0;}六、实验结果及分析  程序输入/输出示例:如参考C语言的运算符。输入如下表达式(以分号为结束)和输出结果:(a)10;输出:正确此时程序运行结果如下图:(a)1+2;输出:正确此时程序运行结果如下图:(b)(1+2)/3+4-(5+6/7);输出:正确此时程序运行结果

26、如下图:(a)((1-2)/3+4;输出:错误此时程序运行结果如下图:(b)1+2-3+(*;输出:错误此时程序运行结果如下图:(a)(1+2)/3+4-(5+6/7)-2^3;输出:正确此时程序运行结果如下图:(g)(1+2)/3+

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

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

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