实验三:算术表达式预测分析程序设计

上传人:hh****7 文档编号:204327307 上传时间:2023-04-26 格式:DOCX 页数:6 大小:41.10KB
收藏 版权申诉 举报 下载
实验三:算术表达式预测分析程序设计_第1页
第1页 / 共6页
实验三:算术表达式预测分析程序设计_第2页
第2页 / 共6页
实验三:算术表达式预测分析程序设计_第3页
第3页 / 共6页
资源描述:

《实验三:算术表达式预测分析程序设计》由会员分享,可在线阅读,更多相关《实验三:算术表达式预测分析程序设计(6页珍藏版)》请在装配图网上搜索。

1、试验三:算术表达式预料分析程序设计LD1、试验目的:(1)驾驭自上而下语法分析的要求与特点。 (2)驾驭LL(1)语法分析的基本原理和基本方法。 (3)驾驭相应数据结构的设计方法。2、试验内容:编程实现给定算术表达式的预料分析器。算术表达式文法如下:EE+T | TTT*F | FF(E) | i 3、设计说明:首先改写文法为LL(1)文法;构造LL(1)分析表,然后编写预料分析程序。4、设计分析与步骤(1)将原算术表达式方法改写为LL(1)文法为:E-TEE-+TE|T-FTT-*FT|F-(E)|i(2)计算文法中每一个非终结符的FIRST集和FOLLOW集FIRSTFOLLOWE (,i

2、 #,) E +, ),# T (,i ),+,# T *, ),+,# F (,i * (3)构造预料分析表 I()+*#EE-TEE-TEEE-E-+TEE-TT-FTT-FTTT-T-T-*FTT-FF-iF-(E)(4)程序设计用vector定义的A和B分别作为分析栈和输入栈,用string类型的INPUT获得用户输入的原始字符串。用string类型的二维数组存储预料分析表。1,#和E进分析栈A,#和倒序用户输入串压入用户栈B2,推断A和B栈顶不同时为#,假如是则下一步,假如不是则跳出推断3,依据A和B栈顶元素查分析表查找规则(1)假如查到一般规则,则进行相应的A的弹栈与压栈并比较两栈

3、顶元素,假如相等则都弹栈(2)假如查到含空串的规则,则A弹栈并比较两栈顶元素,假如相等则都弹栈(3)假如查表越界则显示错误4,重复3直到两栈顶都是#元素显示分析胜利5,提示用户输入0接着分析下一条,其它输入退出程序。(5)程序代码#include#include#includeusing namespace std;int main()string form56=TA,TA, /预料分析表,e,+TA,e, /列:E,A(代表 E),T,B(代表 T),FFB,FB, /行:i,(,),+,*,#,e,e,*FB,e, /e代表空串i,(E),;vector A;/分析栈vector B;/输

4、入栈vector EMT; /空栈用于制空string INPUT;/输入串char N;doA=EMT; /S代表分析栈,每次执行用空的EMT初始化A.push_back(#);A.push_back(E);INPUT=; /INPUT 每次执行,制空输入串coutINPUT;INPUT.resize(INPUT.size()+1);INPUTINPUT.size()-1=#;B=EMT; /INPUT是将INPUT+#倒序压入的用户输入栈for(int x=INPUT.size()-1;x=0;-x)B.push_back(INPUTx);string YY=EATBF;string XX

5、=i()+*#;while(!(AA.size()-1=#&BB.size()-1=#)int i=0,j=0;/查表,查找相应的规则for(i=0;i5;+i)if(YYi=AA.size()-1)break;for(j=0;j=5|j=6) /假如查找超出表couterror!endl;break;else if(formij=) /假如查到的为空规则couterror!=0;-k)A.push_back(formijk);if(AA.size()-1=BB.size()-1) /一般规则A.pop_back();B.pop_back();else if(AA.size()-1=e) /含

6、空串的规则A.pop_back();if(AA.size()-1!=#&BB.size()-1!=#&AA.size()-1=BB.size()-1)A.pop_back();B.pop_back();if(AA.size()-1=#&BB.size()-1=#)coutsuccess!endl;coutN&N=y);return 0;(6)测试用例1、输入i,预期显示success!2、输入iii,预期显示error!3、输入a,预期显示error!4、输入(i),预期显示success!5、输入(a),预期显示error!6、输入(i+i),预期显示success!7、输入(i+i,预期显

7、示error!8、输入(i*i)+i)*i,预期显示success!9、输入(i+i*i),预期显示success!10、输入(i+ia,预期显示error!11、输入i+i*i+i*a,预期显示error! 测试结果如下图:图1-1测试结果(7)试验总结通过本次试验,驾驭了自上而下语法分析的要求与特点。驾驭LL(1)语法分析的基本原理和基本方法。驾驭相应数据结构的设计方法。首先将试验题目的文法改为LL(1)文法,然后再构造LL(1)分析表,依据分析表构造文法分析的规则。在本次试验中,我将上课的理论学问用于实践操作中,提升了我对理论学问的理解,加强了我的动手编程实力,其中,此次试验用到的栈的相关学问,让我回顾了以前数据结构所学的学问,并用于试验中,发觉我对所学过的并不能娴熟的运用,在以后的编程我应当多运用所学过的学问,不断的巩固以前的学问。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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