2022年编译原理实验——语法分析器报告 .pdf

上传人:Q****o 文档编号:30527947 上传时间:2022-08-06 格式:PDF 页数:12 大小:382.01KB
返回 下载 相关 举报
2022年编译原理实验——语法分析器报告 .pdf_第1页
第1页 / 共12页
2022年编译原理实验——语法分析器报告 .pdf_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《2022年编译原理实验——语法分析器报告 .pdf》由会员分享,可在线阅读,更多相关《2022年编译原理实验——语法分析器报告 .pdf(12页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、组员学号姓名实验名称对各算术表达式进行语法分析实验室实验目的或要求实验目的:1、掌握语法分析器生成工具的使用和了解编译器的设计;2、了解自上而下语法分析器的构造过程;3、能够构造 LR 分析表,编写由该分析表驱动的语法分析器程序;4、借助语法制导翻译,可在语法分析的同时,完成对语义的翻译;5、借助语法分析,设计一个表达式的判断分析器,即从键盘上输入算术表达式,分析器将显示该表达式的正确与否。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 12 页 - - - - - -

2、- - - 实验原理(算法流程)实验算法流程图如下所示:开始输入表达式表达式保存到数ch第一个元素为)+ -*/YChi= (i+YNChi=NULLNChi是 09i+YChi是 09Chi=+ -*/)N多了+ -*/)Y其他错误NYChi=* /Ni+YChi=+ -*/NY多了+ -*/Chi=+ -NNChi=)Y少了)N错误首部多了) + -*/结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 12 页 - - - - - - - - - 程序界面(效果图)

3、实验结果界面:只选择几个典型的例子进行分析,可进行任意表达式输入。1)未进行语法分析时的界面;2)输入正确的表达式 (1+2)*(6-3)+1 进行语法分析时的界面结果;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 12 页 - - - - - - - - - 程序界面(效果图)3)输入错误的表达式1*2+(2+3 并进行语法分析时的界面结果;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理

4、- - - - - - - 第 4 页,共 12 页 - - - - - - - - - 程序界面(效果图)4)输入错误的表达式1+(+5+6)并进行语法分析时的界面结果;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 12 页 - - - - - - - - - 程序代码 #include stdafx.h #include grammer.h #include mfc_ 语法分析器 .h #include mfc_ 语法分析器Dlg.h int flag; int i

5、,j; int length; CString string; int grammer(CString str) i=0; flag=0; char chMAX; length=str.GetLength(); strcpy(ch,str); if(length!=0) F(ch); if(flag=0) MessageBox(NULL, 输入表达式符合文法, 正确 ,MB_OK|MB_ICONINFORMATION); /str=ch; /return flag; else MessageBox(NULL, 表达式为空 ,提示 ,MB_OK|MB_ICONWARNING); /Message

6、Box(NULL, 表达式为空 ,提示 ,MB_OK|MB_ICONERROR); return -1; return flag; void F(char ch) if(ch0=+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 12 页 - - - - - - - - - 程序代码flag=0; MessageBox(NULL, 输入表达式不符合文法0,错误 ,MB_OK|MB_ICONERROR); MessageBox(NULL, 开始处多了 +, 提示 ,MB_

7、OK|MB_ICONINFORMATION); flag=1; else if(ch0=-) flag=0; MessageBox(NULL, 输入表达式不符合文法0, 错误 ,MB_OK|MB_ICONERROR); MessageBox(NULL, 开始处多了 -, 提示 ,MB_OK|MB_ICONINFORMATION); flag=1; else if(ch0=*) flag=0; MessageBox(NULL, 输入表达式不符合文法0, 错误 ,MB_OK|MB_ICONERROR); MessageBox(NULL, 开始处多了 *, 提示,MB_OK|MB_ICONINFOR

8、MATION); flag=1; else if(ch0=/) flag=0; MessageBox(NULL, 输入表达式不符合文法0, 错误 ,MB_OK|MB_ICONERROR); MessageBox(NULL, 开始处多了 /, 提示 ,MB_OK|MB_ICONINFORMATION); flag=1; else if(ch0=) flag=0; MessageBox(NULL, 输入表达式不符合文法0, 错误 ,MB_OK|MB_ICONERROR); MessageBox(NULL, 开始处多了 ), 提示 ,MB_OK|MB_ICONINFORMATION); flag=1

9、; /* 上述为对第一个字符的特殊处理*/ else if(chi!=NULL) if(chi=() i+; F(ch); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 12 页 - - - - - - - - - 程序代码if(chi!=) if(flag=0) MessageBox(NULL,输入表达式不符合文法1,错误,MB_OK|MB_ICONERROR); MessageBox(NULL, 少了 ), 提示 ,MB_OK|MB_ICONINFORMATION)

10、; flag=1; else i+; if(chi!=NULL) T(ch); else if(chi=0) while(chi=0) i+; if(chi!=NULL) T(ch); else if(flag=0) if(chi!=NULL&chi!=) MessageBox(NULL, 输入表达式不符合文法2.1, 错误 ,MB_OK|MB_ICONERROR); if(chi= ) MessageBox(NULL,含有空格,提示,MB_OK|MB_ICONINFORMATION); else if(chi=+) MessageBox(NULL,多了+号,提示,MB_OK|MB_ICONI

11、NFORMATION); else if(chi=-) MessageBox(NULL,多了-号,提示,MB_OK|MB_ICONINFORMATION); else if(chi=*) MessageBox(NULL,多了*号,提示,MB_OK|MB_ICONINFORMATION); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 12 页 - - - - - - - - - 程序代码else if(chi=/) MessageBox(NULL,多了/号,提示,MB_

12、OK|MB_ICONINFORMATION); else if(chi=NULL) MessageBox(NULL, 输入表达式不符合文法2.2, 错误 ,MB_OK|MB_ICONERROR); if(chi-1= ) MessageBox(NULL,含有空格,提示,MB_OK|MB_ICONINFORMATION); else if(chi-1=+) MessageBox(NULL,多 了 最 后 的+ 号 ,提 示,MB_OK|MB_ICONINFORMATION); else if(chi-1=-) MessageBox(NULL,多 了 最 后 的- 号 ,提示,MB_OK|MB_I

13、CONINFORMATION); else if(chi-1=*) MessageBox(NULL,多 了 最 后 的* 号 ,提 示,MB_OK|MB_ICONINFORMATION); else if(chi-1=/) MessageBox(NULL,多了 最 后的/ 号 ,提示,MB_OK|MB_ICONINFORMATION); else if(chi!=NULL&chi=) MessageBox(NULL, 输入表达式不符合文法2.3, 错误 ,MB_OK|MB_ICONERROR); if(chi-1= ) MessageBox(NULL,含有空格,提示,MB_OK|MB_ICON

14、INFORMATION); else if(chi-1=() MessageBox(NULL,含有一对空 括号,提示,MB_OK|MB_ICONINFORMATION); else if(chi-1=+) MessageBox(NULL,多 了 最 后 的+ 号 ,提 示,MB_OK|MB_ICONINFORMATION); else if(chi-1=-) MessageBox(NULL,多 了 最 后 的- 号 ,提示,MB_OK|MB_ICONINFORMATION); else if(chi-1=*) MessageBox(NULL,多 了 最 后 的* 号 ,提 示,MB_OK|MB

15、_ICONINFORMATION); else if(chi-1=/) MessageBox(NULL,多了 最 后的/ 号 ,提示,MB_OK|MB_ICONINFORMATION); flag=1; void T(char ch) if(chi=*|chi=/) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 12 页 - - - - - - - - - 程序代码 i+; if(chi!=NULL&chi!=+&chi!=-&chi!=*&chi!=/) F(ch);

16、 else if(flag=0) MessageBox(NULL, 输入表达式不符合文法3,错误 ,MB_OK|MB_ICONERROR); if(chi= ) MessageBox(NULL, 含有空格 , 提示,MB_OK|MB_ICONINFORMATION); else if(chi=+) MessageBox(NULL,多了+号,提示,MB_OK|MB_ICONINFORMATION); else if(chi=-) MessageBox(NULL,多了-号,提示,MB_OK|MB_ICONINFORMATION); else if(chi=*) MessageBox(NULL,多了

17、*号,提示,MB_OK|MB_ICONINFORMATION); else if(chi=/) MessageBox(NULL,多了/号,提示,MB_OK|MB_ICONINFORMATION); flag=1; else E(ch); void E(char ch) if(chi=+|chi=-) i+; if(chi!=NULL&chi!=+&chi!=-&chi!=*&chi!=/) F(ch); else if(flag=0) if(chi!=NULL) MessageBox(NULL, 输入表达式不符合文法4.1, 错误 ,MB_OK|MB_ICONERROR); if(chi= )

18、 MessageBox(NULL,含有空格,提示,MB_OK|MB_ICONINFORMATION); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 12 页 - - - - - - - - - 程序代码else if(chi=+) MessageBox(NULL,多了+号,提示,MB_OK|MB_ICONINFORMATION); else if(chi=-) MessageBox(NULL,多了-号,提示,MB_OK|MB_ICONINFORMATION); el

19、se if(chi=*) MessageBox(NULL,多了*号,提示,MB_OK|MB_ICONINFORMATION); else if(chi=/) MessageBox(NULL,多了/号,提示,MB_OK|MB_ICONINFORMATION); else if(chi=NULL) MessageBox(NULL, 输入表达式不符合文法4.2, 错误 ,MB_OK|MB_ICONERROR); if(chi-1= ) MessageBox(NULL,含有空格,提示,MB_OK|MB_ICONINFORMATION); else if(chi-1=+) MessageBox(NULL

20、,多 了 最 后 的+ 号 ,提 示,MB_OK|MB_ICONINFORMATION); else if(chi-1=-) MessageBox(NULL,多 了 最 后 的- 号 ,提示,MB_OK|MB_ICONINFORMATION); else if(chi-1=*) MessageBox(NULL,多 了 最 后 的* 号 ,提 示,MB_OK|MB_ICONINFORMATION); else if(chi-1=/) MessageBox(NULL,多了 最 后的/ 号 ,提示,MB_OK|MB_ICONINFORMATION); flag=1; else if(chi!=) i

21、f(flag=0) MessageBox(NULL, 输入表达式不符合文法5, 错误 ,MB_OK|MB_ICONERROR); if(chi=(&chi+2=) MessageBox(NULL,含 有 一 对 多 余 的 括 号 , 提 示,MB_OK|MB_ICONINFORMATION); else MessageBox(NULL, 其他类型的错误, 提示 ,MB_OK|MB_ICONINFORMATION); flag=1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1

22、1 页,共 12 页 - - - - - - - - - 实验结果分析及心得体会实验结果分析:本次实验借助语法分析,设计一个表达式的判断分析器,从键盘上输入算术表达式,分析器对该表达式的正确与否进行分析。若是正确的算术表达式,则符合文法,输出正确;若是错误的算术表达式,则表达式不符合文法,输出其错误之处并显示异常。该程序执行过程无误,输出结果正常。但由于我们的疏忽,该程序未能完全满足实验要求,并不能够构造其LR 分析表,并不是由该分析表驱动的语法分析器程序,这是本次实验的一个缺陷。心得体会:通过本次实验让我们了解到了如何进行设计,编制并调试语法分析程序,掌握语法分析器生成工具的使用和了解编译器的设计。也加深对语法分析原理的理解,熟悉了构造语法分析程序的相关原理和使用高级语言直接编写此次语法分析程序的方法。在此次实验中,我们也了解到了进行实验必须具备的严谨性和准确性,也懂得了团结合作的重要,这为我们将来的编写程序提供了宝贵经验。成绩评定教师签名:年月日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 12 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com