ImageVerifierCode 换一换
格式:DOC , 页数:13 ,大小:332KB ,
资源ID:10801708      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-10801708.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理-太原理工大学.doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

编译原理-太原理工大学.doc

1、编译原理实验报告本科实验报告课程名称: 编译原理 D 实验地点: 实验室 专业班级: 学 号: _学生姓名: java 编译 指导教师: 成 绩: 2015 年 月 日实验一、 无符号数的词法分析程序(4 学时)内容:掌握词法分析的基本思想,并用高级语言编写无符号数的词法分析程序。要求:从键盘上输入一串字符(包括字母、数字等) ,最后以“;”结束,编写程序识别出其中的无符号数。无符号数文法规则可定义如下:.EE +-0 1 2 3 9 读无符号数的程序流程图见下图开 始0=w,pj1e数 字 否出 错 数 值 = dw*10+w取 下 一 字 符数 字 否是 .否是 E否退 一 字 符整 型

2、=CJ1取 下 一 字 符数 字 否 出 错数 值 = dw*10+wjj取 下 一 字 符数 字 否是 E否取 下 一 字 符是 -否是 +否数 字 否数 值 = dp*10+p取 下 一 字 符数 字 否退 一 字 符实 型 =CJ1W*10C*P-J=J2出 口-1=e取 下 一 字 符出 错YNNNN YNYYNNYYNNY NYY NYYY实验代码:package text_1;import java.util.*;public class Text1 public static void main(String args) int p = 0, w = 0, w1 = 0, j =

3、 0, i = 0, d = 0, e = 1;/定义初值double w2 = 0;String str;System.out.println(“请输入一串字符串( 以;结束):“ );Scanner m = new Scanner(System.in);str = m.nextLine();char ch1 = str.toCharArray(); /字符串转化为字符数组/* 检测字符数组 for(i=0;i 9 | ch1i = 0 System.out.println(“实型数为:“+w2+“*10“+“ “+(e*(p-j+1);/科学计数法输出实型j = 0;w2 = 0;w =

4、0;p = 0; elseSystem.out.println(“输入错误!“);if (ch1i = 0 System.out.println(“实型数为:“+w2+“*10“+“ “+(e*(p-j+1);j = 0;w2 = 0;w = 0;p = 0; elseSystem.out.println(“输入错误!“);else i+;if (ch1i = 0 System.out.println(“实型数为:“ + w2 + “*10“ + “ “+ (e * (p - j + 1);j = 0;w2 = 0;w = 0;p = 0; elseSystem.out.println(“输入

5、错误!“);if (ch1i = 0 System.out.println(“实型数为:“+w2+“*10“ +“ “+(e*(p-j+1);j = 0;w2 = 0;w = 0;p = 0; elseSystem.out.println(“输入错误!“);else if (ch1i != E) /输出小数System.out.println(“小数为: “ + w + . + w1);w = 0;w1 = 0;j = 0;运行结果:实验二、 逆波兰式生成程序内容:掌握语法分析的基本思想,并用高级语言编写逆波兰式生成程序(4 学时)要求:利用逆波兰式生成算法编写程序,将从键盘上输入的算术表达式

6、(中缀表达式)转化成逆波兰式。逆波兰表达式的生成过程涉及到运算符的优先级,下表中列出几个常用运算符的优先关系。常用运算符优先关系矩阵如上表所示的优先关系矩阵表示了+,-,*,/, (, )等七种运算符之间的相互优先关系。 “、”三种符号分别代表“大于” 、 “小于” 、 “相等”三种优先关系。左边的“”与右边的+ - * / ( )+ - * / ( ) 右关系左“(”之间没有优先关系存在,所以表中为空白。逆波兰表达式生成算法的关键在于比较当前运算符与栈顶运算符的优先关系,若当前运算符的优先级高于栈顶运算符,则当前运算符入栈,若当前运算符的优先级低于栈顶运算符,则栈顶运算符退栈。下面给出了逆波

7、兰表达式生成算法的流程图。 (为了便于比较相邻运算符的优先级,需要设立一个工作栈,用来存放暂时不能处理的运算符,所以又称运算符栈。开 始输 入 运 算 符 优先 关 系从 左 往 右 扫 描 中 缀表 达 式输 入 串 为 空运 算 符栈 是 否 为 空比 较 当 前 运 算 符 于 栈 顶运 算 符 的 优 先 级当 前 运 算 符 的 优 先 级高当 前 运 算 符 是) 退 栈 输 出栈 为 空 结 束退 栈 输 出输 出入 栈入 栈栈 顶 为 ( 栈 为 空退 栈 输 出 退 栈ERONYNNNY Y NNYYY NNYY实验代码:package text_2import java.u

8、til.*;public class Text2 private char Operator_Precedence_Relation_Matrix = , , , , , , , , , , , , , , , , , , , , , , , , , , , , ;private char Infix_Expression; / 字符串infix用于表示要处理的中缀表达式private String Reverse_Polish_Expression = new String();/ 字符串reversePlishExpression用于表示处理结果逆波兰式private String Ana

9、lysis_Stack = new String();/字符串analysisStack用于表示分析栈private int Length_Infix_Expression = 0;/ 中缀表达式的长度,初始值为0private int match_Parentheses = 1;/ 用来查看左右括号是否配对正确private int count = 0;private void init(String str) Infix_Expression = str.toCharArray();Length_Infix_Expression = Infix_Expression.length;priv

10、ate int Operator_Judgement(char currentOperator) int flag = -1;switch (currentOperator) case +:flag = 0;break;case -:flag = 1;break;case *:flag = 2;break;case /:flag = 3;case :flag = 4;break;case (:flag = 5;break;case ):flag = 6;break;return flag;void convert_Process(String str) init(str);while (tru

11、e) match_Parentheses = 0;if (count = Length_Infix_Expression) / 检测输入串为空while (Analysis_Stack.length() != 0) / 检测分析栈if (Analysis_Stack.charAt(Analysis_Stack.length() - 1) = () System.out.println(“n您输入的中缀表达式中有无法配对的(括号,请仔细核实!“);System.exit(0); else Reverse_Polish_Expression += Analysis_Stack.charAt(Ana

12、lysis_Stack.length() - 1);Analysis_Stack = Analysis_Stack.substring(0,Analysis_Stack.length() - 1);/ 退栈输出System.out.println(“逆波兰式为: “+ Reverse_Polish_Expression);System.exit(0); else if (Operator_Judgement(Infix_Expressioncount) = -1) Reverse_Polish_Expression += Infix_Expressioncount; else while (A

13、nalysis_Stack.length() != 0) / 检测分析栈if (Operator_Precedence_Relation_MatrixOperator_Judgement(Analysis_Stack.charAt(Analysis_Stack.length() - 1)Operator_Judgement(Infix_Expressioncount) = ) Analysis_Stack += Infix_Expressioncount;break; else if (Infix_Expressioncount != ) Reverse_Polish_Expression +

14、= Analysis_Stack.charAt(Analysis_Stack.length() - 1);Analysis_Stack = Analysis_Stack.substring(0,Analysis_Stack.length() - 1); else while (Analysis_Stack.length() = 0| Analysis_Stack.charAt(Analysis_Stack.length() - 1) != () if (Analysis_Stack.length() = 0) System.out.println(“n您输入的中缀表达式中有无法配对的)括号,请

15、仔细核实!“);System.exit(0); else Reverse_Polish_Expression += Analysis_Stack.charAt(Analysis_Stack.length() - 1);Analysis_Stack = Analysis_Stack.substring(0,Analysis_Stack.length() - 1);if (Analysis_Stack.charAt(Analysis_Stack.length() - 1) = () Analysis_Stack = Analysis_Stack.substring(0, Analysis_Stac

16、k.length() - 1);match_Parentheses = 1;break;if (Analysis_Stack.length() = 0)if (Infix_Expressioncount != )Analysis_Stack += Infix_Expressioncount;else if (match_Parentheses != 1) System.out.println(“n您输入的中缀表达式中有无法配对的)括号,请仔细核实!“);System.exit(0);count+;public static void main(String args) System.out.println(“请输入中缀表达式:“);Scanner Expression = new Scanner(System.in);String str1 = Expression.nextLine();new Text2().convert_Process(str1);实验结果:

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报