编译实验二 算术表达式解释器

编译实验二 算术表达式解释器

ID:39567141

大小:81.00 KB

页数:6页

时间:2019-07-06

编译实验二  算术表达式解释器_第1页
编译实验二  算术表达式解释器_第2页
编译实验二  算术表达式解释器_第3页
编译实验二  算术表达式解释器_第4页
编译实验二  算术表达式解释器_第5页
资源描述:

《编译实验二 算术表达式解释器》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验二算数表达式解释器的设计与实现一.实验目的1.了解并掌握自顶向下语法分析的思想,熟悉递归下降子程序分析法。2.了解并掌握语法制导翻译法,掌握采用递归子程序进行语义分析的方法。二.实验内容用适当的程序设计语言编制一个算术表达式的解释器,并完成相应的调试,要求该程序能够读入一个算术表达式,运行后给出计算的结果。1.算术表达式的解释过程(参考)第一步:首先进行词法分析(即使用实验一编制的词法分析器),提取最终得到的结果——单词符号序列,将其作为语法和语义分析的输入;第二步:调用算术表达式的语法及语义分析器。本次实验要求采用递归下降子程序法编写语法分

2、析器,其中要包含对语义的分析。分析结束后,显示表达式的计算结果。2.使用的文法E–>TE’E’–>+TE’

3、eT–>FT’T’–>*FT’

4、eF→i|(E)其中i为整数(最简单的情况),如果考虑周全的话,i可取实数类型(需要看一下自己编制的词法分析器是否对实数进行了识别)。该文法的递归下降子程序见书中74页。3.有能力的同学在完成加乘算术表达式的计算后,试扩充文法,增加识别减法和除法的规则,并修改对应的程序,使之能够识别并计算加减乘除四则运算式。三.实验要求1.程序完成后,由实验老师检查代码,验证程序的功能。如:输入(2+3)*10对文法进行扩充

5、的,输入(12-8)*20/5+4等等。2.实验二共4学时,实验完成后,提交一份实验报告,写清实验的类型、目的、内容、思路、设计及实现的过程(包括关键的代码,不宜多),以及实验的结果。实验类型为设计型实验。四.实验代码usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms

6、;namespaceWindowsFormsApplication5{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){stringstr=textBox1.Text;intsum=Calculate(str);textBox2.Text=Convert.ToString(sum);}publicintCalculate(stringExpression){List<

7、int>numList=newList();//数字列表ListOperatorList=newList();//运行符列表boolnumState=true;//true:刚遇到符号intnum=0;Expression=getExpressionNoBrackets(Expression);//读取括号情况char[]expression=Expression.ToCharArray();for(inti=0;i

8、sion[i])>58

9、

10、Convert.ToInt16(expression[i])<48){switch(expression[i]){case'+':numState=true;numList.Add(num);break;case'-':numState=true;numList.Add(num);break;case'*':numState=true;numList.Add(num);break;case'/':numState=true;numList.Add(num);break;default:thrownewException(

11、"运算符错误,无法识别");}OperatorList.Add(expression[i]);}elseif(numState){num=Convert.ToInt16(expression[i].ToString());if(i==expression.Length-1)numList.Add(num);numState=false;}else{num*=10;num+=Convert.ToInt16(expression[i].ToString());if(i==expression.Length-1)numList.Add(num);}}r

12、eturngetResults(numList,OperatorList);}publicintgetResults(List

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。