资源描述:
《算术表达式的解释器复习过程.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、算术表达式的解释器精品文档编译原理课程实验报告实验项目:算数表达式解释器的设计与实现专业班级:***********学生姓名:微博账号:航帅ottp学号:************课程教师:******指导教师:******实验时间:2016年11月09日计算机科学系收集于网络,如有侵权请联系管理员删除精品文档实验目的:1.了解并掌握自顶向下语法分析的思想,熟悉递归下降子程序分析法。2.了解并掌握语法制导翻译法,掌握采用递归子程序进行语义分析的方法。实验要求:1.要求此算术表达式的解释器能够识别和计算加减乘除四则运算式。2.要求采用递归下降子程序法编写语
2、法分析器。实验内容:用适当的程序设计语言编制一个算术表达式的解释器,并完成相应的调试,要求该程序能够读入一个算术表达式,运行后给出计算的结果。实验思路:用所编的“词法分析器”将源程序扫描成一个个的单词符号,将单词符号序列号和相应的单词符号保存在结构体数组c[]中。调用采用递归下降子程序法编写的算术表达式的“语法分析器”,对语义分析得到的表达式进行计算。实验设计、过程及结果:(1)实验程序代码设计#include#include#include#include//********
3、****************词法分析器************************charch;//存放最新读进的源程序字符charstrToken[20];//存放字符串的字符数组structCiyu{intcode;chars[20];}c[100];//存放词法分析结果intm;//词法分析得到的单词符号数boolIsLetter(charletter)//判断ch是否为字母{if(isalpha(letter)!=0)return1;elsereturn0;}boolIsDigit(chardigit)//判断ch是否为数字{if(is
4、digit(digit)!=0)return1;elsereturn0;}voidEmpty(intxiabiao){for(intj=0;j<=xiabiao;j++)strToken[j]=' ';}voidReserve(char*strToken)//判断是关键字还是标识符并输出{if(strcmp(strToken,"void")==0){c[m].code=1;strcpy(c[m++].s,"void");}elseif(strcmp(strToken,"main")==0){c[m].code=2;strcpy(c[m++].s,"m
5、ain");}elseif(strcmp(strToken,"int")==0){c[m].code=3;strcpy(c[m++].s,"int");}elseif(strcmp(strToken,"char")==0){c[m].code=4;strcpy(c[m++].s,"char");}elseif(strcmp(strToken,"scanf")==0){c[m].code=5;strcpy(c[m++].s,"scanf");}elseif(strcmp(strToken,"printf")==0){c[m].code=6;strcpy(
6、c[m++].s,"printf");}elseif(strcmp(strToken,"if")==0){c[m].code=7;strcpy(c[m++].s,"if");}收集于网络,如有侵权请联系管理员删除精品文档elseif(strcmp(strToken,"else")==0){c[m].code=8;strcpy(c[m++].s,"else");}elseif(strcmp(strToken,"do")==0){c[m].code=9;strcpy(c[m++].s,"do");}elseif(strcmp(strToken,"while
7、")==0){c[m].code=10;strcpy(c[m++].s,"while");}elseif(strcmp(strToken,"for")==0){c[m].code=11;strcpy(c[m++].s,"for");}elseif(strcmp(strToken,"return")==0){c[m].code=12;strcpy(c[m++].s,"return");}else{c[m].code=39;strcpy(c[m++].s,strToken);}}voidLexicalAnalyzer(FILE*f)//词法分析主要函数{E
8、mpty(19);ch=fgetc(f);inti=0;if(IsLetter(ch)){wh