欢迎来到天天文库
浏览记录
ID:14817122
大小:491.50 KB
页数:9页
时间:2018-07-30
《递归下降语法分析器实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
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+
此文档下载收益归作者所有