




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译原理实验报告本科实验报告课程名称: 编译原理D 实验地点: 实验室 专业班级: 学 号: _学生姓名: java编译 指导教师: 成 绩: 2015年 月 日实验一、 无符号数的词法分析程序(4学时)内容:掌握词法分析的基本思想,并用高级语言编写无符号数的词法分析程序。要求:从键盘上输入一串字符(包括字母、数字等),最后以“;”结束,编写程序识别出其中的无符号数。无符号数文法规则可定义如下: <无符号数><无符号实数><无符号整数> <无符号实数><无符号整数>.<数字串>E<比例因子<无符号整数>E
2、<比例因子> <比例因子><有符号整数> <有符号整数>+-<无符号整数> <无符号整数><数字串> <数字串><数字><数字> <数字>0 1 2 3. 9 读无符号数的程序流程图见下图实验代码:package text_1;import java.util.*;public class Text1 public static void main(String args) int p = 0, w = 0, w1 = 0, j = 0, i = 0, d = 0
3、, 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<ch1.length;i+) System.out.print(ch1i+" "); */while (i < ch1.length) if (ch1i >
4、 '9' | ch1i < '0') /查到第一个数字i+;else do d = ch1i - '0'w = w * 10 + d;j+;i+; while (ch1i >= '0' && ch1i <= '9');if (ch1i != '.') if (ch1i != 'E') System.out.println("整数为:" + w); /输出整数w = 0;j = 0; else i+;if (ch1i = '
5、-') e = -1;i+;if (ch1i >= '0' && ch1i <= '9') do d = ch1i - '0'p = p * 10 + d;i+; while (ch1i >= '0' && ch1i <= '9');if (j > 1) w2 = w / (Math.pow(10.0, j - 1);System.out.println("实型数为:"+w2+"*10"+" &q
6、uot;+(e*(p-j+1);/科学计数法输出实型j = 0;w2 = 0;w = 0;p = 0; elseSystem.out.println("输入错误!");if (ch1i >= '0' && ch1i <= '9') do d = ch1i - '0'p = p * 10 + d;i+; while (ch1i >= '0' && ch1i <= '9');if (j > 1) w2 = w / (Math.pow(10
7、.0, j - 1);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' && ch1i <= '9') do d = ch1i - '0'w1 = w1 * 10 + d;j+;i+; while (ch1i >=
8、9;0' && ch1i <= '9'); elseSystem.out.println("输入错误!");if (ch1i = 'E') i+;if (ch1i = '-') e = -1;i+;if (ch1i >= '0' && ch1i <= '9') do d = ch1i - '0'p = p * 10 + d;i+; while (ch1i >= '0' && ch1i
9、<= '9');if (j > 1) w2 = w / (Math.pow(10.0, j - 1);System.out.println("实型数为:" + w2 + "*10" + " "+ (e * (p - j + 1);j = 0;w2 = 0;w = 0;p = 0; elseSystem.out.println("输入错误!");if (ch1i >= '0' && ch1i <= '9') do d = ch1i
10、 - '0'p = p * 10 + d;i+; while (ch1i >= '0' && ch1i <= '9');if (j > 1) w2 = w / (Math.pow(10.0, j - 1);System.out.println("实型数为:"+w2+"*10" +" "+(e*(p-j+1);j = 0;w2 = 0;w = 0;p = 0; elseSystem.out.println("输入错误!");else i
11、f (ch1i != 'E') /输出小数System.out.println("小数为:" + w + '.' + w1);w = 0;w1 = 0;j = 0;运行结果:实验二、 逆波兰式生成程序内容:掌握语法分析的基本思想,并用高级语言编写逆波兰式生成程序(4学时)要求:利用逆波兰式生成算法编写程序,将从键盘上输入的算术表达式(中缀表达式)转化成逆波兰式。逆波兰表达式的生成过程涉及到运算符的优先级,下表中列出几个常用运算符的优先关系。右关系左常用运算符优先关系矩阵+-*/()+-*/()如上表所示的优先关系矩阵表示了+,-,*,/,(,
12、)等七种运算符之间的相互优先关系。“、”三种符号分别代表“大于”、“小于”、“相等”三种优先关系。左边的“”与右边的“(”之间没有优先关系存在,所以表中为空白。逆波兰表达式生成算法的关键在于比较当前运算符与栈顶运算符的优先关系,若当前运算符的优先级高于栈顶运算符,则当前运算符入栈,若当前运算符的优先级低于栈顶运算符,则栈顶运算符退栈。下面给出了逆波兰表达式生成算法的流程图。(为了便于比较相邻运算符的优先级,需要设立一个工作栈,用来存放暂时不能处理的运算符,所以又称运算符栈。实验代码:package text_2import java.util.*;public class Text2 priv
13、ate char Operator_Precedence_Relation_Matrix = '>', '>', '<', '<', '<', '<', '>' , '>', '>', '<', '<', '<', '<', '>' , '>', '>
14、39;, '>', '>', '<', '<', '>' , '>', '>', '>', '>', '<', '<', '>' , '>', '>', '>', '>', '>', '<', '
15、>' , '<', '<', '<', '<', '<', '<', '=' , '>', '>', '>', '>', '>', ' ', '>' ;private char Infix_Expression; / 字符串infix用于表示要处理的中缀表达式private String
16、Reverse_Polish_Expression = new String();/ 字符串reversePlishExpression用于表示处理结果逆波兰式private String Analysis_Stack = new String();/字符串analysisStack用于表示分析栈private int Length_Infix_Expression = 0;/ 中缀表达式的长度,初始值为0private int match_Parentheses = 1;/ 用来查看左右括号是否配对正确private int count = 0;private void init(Strin
17、g str) Infix_Expression = str.toCharArray();Length_Infix_Expression = Infix_Expression.length;private int Operator_Judgement(char currentOperator) int flag = -1;switch (currentOperator) case '+':flag = 0;break;case '-':flag = 1;break;case '*':flag = 2;break;case '/':f
18、lag = 3;case '':flag = 4;break;case '(':flag = 5;break;case ')':flag = 6;break;return flag;void convert_Process(String str) init(str);while (true) match_Parentheses = 0;if (count >= Length_Infix_Expression) / 检测输入串为空while (Analysis_Stack.length() != 0) / 检测分析栈if (Analysis_
19、Stack.charAt(Analysis_Stack.length() - 1) = '(') System.out.println("n您输入的中缀表达式中有无法配对的'('括号,请仔细核实!");System.exit(0); else Reverse_Polish_Expression += Analysis_Stack.charAt(Analysis_Stack.length() - 1);Analysis_Stack = Analysis_Stack.substring(0,Analysis_Stack.length() - 1)
20、;/ 退栈输出System.out.println("逆波兰式为:"+ Reverse_Polish_Expression);System.exit(0); else if (Operator_Judgement(Infix_Expressioncount) = -1) Reverse_Polish_Expression += Infix_Expressioncount; else while (Analysis_Stack.length() != 0) / 检测分析栈if (Operator_Precedence_Relation_MatrixOperator_Judge
21、ment(Analysis_Stack.charAt(Analysis_Stack.length() - 1)Operator_Judgement(Infix_Expressioncount) = '<') Analysis_Stack += Infix_Expressioncount;break; else if (Infix_Expressioncount != ')') Reverse_Polish_Expression += Analysis_Stack.charAt(Analysis_Stack.length() - 1);Analysis_St
22、ack = 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您输入的中缀表达式中有无法配对的')'括号,请仔细核实!");System.exit(0); else Reverse_Polish_Expression
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内蒙古丰州职业学院《化学学科教学设计》2023-2024学年第二学期期末试卷
- 辽宁农业职业技术学院《管理学B》2023-2024学年第二学期期末试卷
- 山东女子学院《地下水水力学》2023-2024学年第二学期期末试卷
- 山东医学高等专科学校《材料成型设备及其自动化》2023-2024学年第二学期期末试卷
- 山东科技大学《物流统计实务》2023-2024学年第二学期期末试卷
- 南京师范大学《建筑工程估价》2023-2024学年第二学期期末试卷
- 宁波工程学院《证券投资模拟实训》2023-2024学年第二学期期末试卷
- 钟山职业技术学院《软件工程综合项目设计》2023-2024学年第二学期期末试卷
- 惠州工程职业学院《化工实验综合实训》2023-2024学年第二学期期末试卷
- 2025年聚合物多元醇(POP)项目提案报告模板
- 社区儿童主任培训
- 《分子动力学模型》课件
- 八年级数学苏科版下册第十单元《单元复习》教学设计教案
- 第二单元+新音乐启蒙+课件【高效课堂精研】高中音乐粤教花城版必修音乐鉴赏
- 子宫肌瘤病人的护理查房
- 班级突发事件处理与预防
- 部编 2024版历史七年级下册第一单元第 5 课《隋唐时期的民族交往与交融》说课稿
- 口腔科各项规章制度
- 2025年江苏省招标中心有限公司招聘笔试参考题库含答案解析
- 安全生产治本攻坚三年行动任务清单
- 企业工会培训
评论
0/150
提交评论