首页 编译原理 用递归下降法进行表达式分析实验报告.doc

编译原理 用递归下降法进行表达式分析实验报告.doc

举报
开通vip

编译原理 用递归下降法进行表达式分析实验报告.doc编译原理 用递归下降法进行表达式分析实验报告.doc 题目 用递归下降法进行表达式分析 专业 班级 学号 实验题目姓名 一. 用递归下降法进行语法分析的方法 二. 实验日期 三. 实验环境(操作系统,开发语言) 操作系统是Windows 开发语言是C语言 四. 实验内容(实验要求) 词法分析程序和语法分析程序已经提供。此语法分析程序能够实现:正确的输入可以给出结果。例:输入表达式串为:(13+4)*3则应给出结果为51。 要求: (1)读懂源代码,理解内容写入实验报告(语法分析及语法分析程...

编译原理 用递归下降法进行表达式分析实验报告.doc
编译原理 用递归下降法进行表达式 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 实验报告.doc 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 目 用递归下降法进行表达式分析 专业 班级 学号 实验题目姓名 一. 用递归下降法进行语法分析的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 二. 实验日期 三. 实验环境(操作系统,开发语言) 操作系统是Windows 开发语言是C语言 四. 实验内容(实验要求) 词法分析程序和语法分析程序已经提供。此语法分析程序能够实现:正确的输入可以给出结果。例:输入表达式串为:(13+4)*3则应给出结果为51。 要求: (1)读懂源代码,理解内容写入实验报告(语法分析及语法分析程序和词法分析程序的接口) (2)把语法分析中使用的yyval,用yytext实现。 (3)在语法分析程序用加入出错处理(尽量完整,包括出错的位置,出错的原 因,错误的重定位) 五. 实验步骤 1. 生成lex.yy.c文件: 将已给的mylexer.l文件打开,先理解,然后再在DOS环境下用flex运行此文件,这时会生成一个lex.yy.c文件。 2. 创建工程: 打开C-Free 5.0(注:用C-Free 4.0会出错),在菜单栏中的“工程(project)”菜单下选择“新建”;在新建工程中选择“控制台程序”,添加工程名字为“myleb”和保存位置后点“确定”;第1步选择“空的程序”点“下一步”;第2步再点“下一步”;最后点击“完成”。 3. 在创建的工程中添加文件: 在Source files文件夹中添加之前生成的lex.yy.c文件和syn.c文件,然后找到parser.h文件,将其添加到新建工程中的Header files文件夹中,这时就能将三个文件组成一个类似于.exe文件类型的文件,最后运行。如图: 4. 理解并修改syn.c文件: 首先,将num = yyval.intval修改成num = atoi(yytext);将num = yyval.fval修改成 num = atof(yytext)。可以这样修改的原因:在.l文件中所写的规则中,有{DIGIT}+ { yyval.intval = atoi(yytext);return INTEGER; } 和{DIGIT}+"."{DIGIT}* {yyval.fval = atof(yytext); return DOUBLE; } 这两句代码,其中yyval.intval = atoi(yytext)和yyval.fval = atof(yytext) 就说明两者可以相互替代。 然后,反复修改F()函数(可将printf()带入其中调试),修改“case LPAREN:”和“default:”中的部分,使这段代码即可检测出缺少‘(’又可检测出缺少‘)’ 以及“)(”(右括号在前)或是括号中没有数字的情况。 最后,综合理解double E();double F();void S();double T();四个函数以及运用“extern VAL yyval;”这样的语句使此代码可运用其他文件中的变量,如*yyin、*yytext。另外为了更好理解,我将个别函数中的switch函数修改成if的选择语句。 六. 实验体会(包括收获、 心得体会 决胜全面小康心得体会学党史心得下载党史学习心得下载军训心得免费下载党史学习心得下载 、存在的问题及解决问题的方法、建议等) 这是我们第一次接触语法分析,用递归下降法来进行表达式的分析。第一次接触的确很陌生。 在实验中,要想进行分析,需要在.l文件中写出规则,然后在.h文件中定义规则中的“+ - * / ( )”,将其定义为PLUS 3 、MINUS 4、TIMES 5、 SLASH 6 LPAREN 7 、RPAREN 8,这样一来,.l文件中的规则就可运用到syn.c文件中去,而在用户输入的“+-*/()”就可传到规则中去替换成对应的字母,进行运算。此时的‘+’就可用“PLUS”表示;‘-’就可用“MINUS”表示;‘*’就可用“TIMES”表示;‘/’就可用“SLASH”表示; ‘(’就可用“LPAREN”表示; ‘)’就可用“RPAREN”表示。另外double E();double F();void S();double T()四个函数中,以S()函数为起始函数依次向后调用函数,直到函数F(),并且完成了“先算括号内,再算*/,最后算+-”的运算顺序。 另外,实验调试中是可以让用户输入的,但代码中没有一句scanf()输入函数,而在main()函数里有“yyin=(char*)stdin;”这一句代码,这就是用来输入的,其含义就是将所输入的内容传到yyin中去。 这次实验让我初步了解了,自己编写的规则是可以运用在程序代码里并能运行的。其实如果不用这样的方法,我们也能编写出计算表达式的代码,但是这样的方法去编写感觉代码要容易读懂很多,代码也显得简便了。 七. 实验结果(关键源代码) #include #include "parser.h" extern VAL yyval; //运用其他文件中的变量 extern char *yyin; extern int yylex(); extern char *yytext; int tokentype; double E(); double F(); void S(); double T(); double F() // F -> (E) | int | double { double num; tokentype=yylex(); switch(tokentype) { case INTEGER: num = atoi(yytext); break; case DOUBLE: num = atof(yytext); break; case LPAREN: num = E(); if(tokentype!= RPAREN) { printf("表达式中缺少 ')' \n"); break; } if(tokentype!= LPAREN) { printf("表达式中缺少 '(' \n"); } else break; break; default: printf("您输入的表达式有误~\n"); break; } tokentype = yylex(); return num; } double T() // T-> F{*F | /F} { double t1,t2; t1 = F(); while(tokentype == TIMES || tokentype == SLASH) { switch(tokentype) { case TIMES: t2 = F(); t1 = t1 * t2; break; case SLASH: t2 = F(); t1 = t1 / t2; break; default: break; } } return t1; } double E() // E -> T{+T | -T} { double t1,t2; t1 = T(); while(tokentype == PLUS || tokentype == MINUS) { if (tokentype == PLUS) { t2 = T(); t1 = t1 + t2; break; } if (tokentype == MINUS) { t2 = T(); t1 = t1 - t2; break; } if(tokentype != PLUS && tokentype != MINUS) break; } return t1; } void S() { double result; result = E(); printf("%.2f\n",result); } int main() { yyin=(char*)stdin; //输入语句,将输入的语句都传给yyin printf("请输入算术表达式: \n"); S(); //调用开始符号 system("PAUSE"); return 0; }
本文档为【编译原理 用递归下降法进行表达式分析实验报告.doc】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_594886
暂无简介~
格式:doc
大小:26KB
软件:Word
页数:7
分类:
上传时间:2018-02-21
浏览量:184