太原理工大学编译原理实验.docx
- 文档编号:30390329
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:18
- 大小:142.62KB
太原理工大学编译原理实验.docx
《太原理工大学编译原理实验.docx》由会员分享,可在线阅读,更多相关《太原理工大学编译原理实验.docx(18页珍藏版)》请在冰豆网上搜索。
太原理工大学编译原理实验
本科实验报告
课程名称:
编译原理
实验项目:
无符号数的词法分析程序(实验一)
基本程序设计(实验二)
实验地点:
致远楼303
专业班级:
软件14XX学号:
学生姓名:
指导教师:
冯秀芳
2017年6月27日
一、实验目的和要求
1.培养学生初步掌握编译原理实验的技能。
2.验证所学理论、巩固所学知识并加深理解。
3.对学生进行实验研究的基本训练。
二、实验内容和原理
实验一、无符号数的词法分析程序(4学时)
内容:
掌握词法分析的基本思想,并用高级语言编写无符号数的词法分析程序。
要求:
从键盘上输入一串字符(包括字母、数字等),最后以“;”结束,编写程序识别出其中的无符号数。
无符号数文法规则可定义如下:
<无符号数>→<无符号实数>│<无符号整数>
<无符号实数>→<无符号整数>.<数字串>[E<比例因子>]│
<无符号整数>E<比例因子>
<比例因子>→<有符号整数>
<有符号整数>→[+│-]<无符号整数>
<无符号整数>→<数字串>
<数字串>→<数字>{<数字>}
<数字>→0123......9
读无符号数的程序流程图见下图
三.主要仪器设备
PC机+Java语言编程环境
四、实验结果与分析
1.实验代码:
packagetext1;
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
publicclassText1{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args)throwsException{
//TODOAuto-generatedmethodstub
intp=0,w=0,w1=0,j=0,i=0,d=0,e=1;
doublew2=0;
Stringstr;
System.out.println("请输入一串字符以;结束:
");
BufferedReaderbuf=newBufferedReader(
newInputStreamReader(System.in));
str=buf.readLine();
charm[]=newchar[100];
for(i=0;i m[i]=str.charAt(i); } i=0; while(i if(m[i]<48||m[i]>57){ i++; }else{ do{ d=m[i]-48; w=w*10+d; j++; i++; }while(m[i]>=48&&m[i]<=57); //System.out.println("chesi"+m[i]); if(m[i]! ='.'){ if(m[i]! ='E'){ System.out.println("整型数为: "+w); j=0; w=0; }else{ i++; if(m[i]=='-'){ e=-1; i++; if(m[i]>=48&&m[i]<=57){ do{ d=m[i]-48; p=p*10+d; i++; }while(m[i]>=48&&m[i]<=57); 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; }else System.out.println("您输入有误! "); }elseif(m[i]=='+'){ i++; if(m[i]>=48&&m[i]<=57){ do{ d=m[i]-48; p=p*10+d; i++; }while(m[i]>=48&&m[i]<=57); 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; }else System.out.println("您输入有误! "); }else{ if(m[i]>=48&&m[i]<=57){ do{ d=m[i]-48; p=p*10+d; i++; }while(m[i]>=48&&m[i]<=57); 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; }else System.out.println("您输入有误! "); } } } else{ i++; if(m[i]>=48&&m[i]<=57){ do{ d=m[i]-48; w1=w1*10+d; //j=j+1; i++; }while(m[i]>=48&&m[i]<=57); }else System.out.println("您输入有误! "); if(m[i]! ='E'){ System.out.println("小数为: "+w+'.'+w1); w=0; w1=0; j=0; }elseif(m[i]=='E'){ i++; if(m[i]=='-'){ e=-1; i++; if(m[i]>=48&&m[i]<=57){ do{ d=m[i]-48; p=p*10+d; i++; }while(m[i]>=48&&m[i]<=57); if(j>1){ w2=w/(Math.pow(10.0,j-1)); System.out.println("实型数为: "+w2+w1 +"*10"+""+(e*(p-j+1))); w=0; w1=0; j=0; w2=0; p=0; }else{ System.out.println("实型数为: "+w+'.'+w1 +"*10"+""+(e*(p-j+1))); w=0; w1=0; j=0; w2=0; p=0; } }else System.out.println("您输入有误! "); }elseif(m[i]=='+'){ i++; if(m[i]>=48&&m[i]<=57){ do{ d=m[i]-48; p=p*10+d; i++; }while(m[i]>=48&&m[i]<=57); if(j>1){ w2=w/(Math.pow(10.0,j-1)); System.out.println("实型数为: "+w2+w1 +"*10"+""+(e*(p+j-1))); w=0; w1=0; j=0; w2=0; p=0; }else{ System.out.println("实型数为: "+w+'.'+w1 +"*10"+""+(e*(p+j-1))); w=0; w1=0; j=0; w2=0; p=0; } }else System.out.println("您输入有误! "); }else{ if(m[i]>=48&&m[i]<=57){ do{ d=m[i]-48; p=p*10+d; i++; }while(m[i]>=48&&m[i]<=57); if(j>1){ w2=w/(Math.pow(10.0,j-1)); System.out.println("实型数为: "+w2+w1 +"*10"+""+(e*(p+j-1))); w=0; w1=0; j=0; w2=0; p=0; }else{ System.out.println("实型数为: "+w+'.'+w1 +"*10"+""+(e*(p+j-1))); w=0; w1=0; j=0; w2=0; p=0; } }else System.out.println("您输入有误! "); } }else System.out.println("您输入有误! "); } } } } }2.实验结果: 一、实验目的和要求 1.培养学生初步掌握编译原理实验的技能。 2.验证所学理论、巩固所学知识并加深理解。 3.对学生进行实验研究的基本训练。 二、实验内容和原理 实验二、逆波兰式生成程序 内容: 掌握语法分析的基本思想,并用高级语言编写逆波兰式生成程序(4学时) 要求: 利用逆波兰式生成算法编写程序,将从键盘上输入的算术表达式(中缀表达式)转化成逆波兰式。 逆波兰表达式的生成过程涉及到运算符的优先级,下表中列出几个常用运算符的优先关系。 如表所示的优先关系矩阵表示了+,-,*,/,↑,(,)等七种运算符之间的相互优先关系。 “>、<、=”三种符号分别代表“大于”、“小于”、“相等”三种优先关系。 左边的“=”与右边的“(”之间没有优先关系存在,所以表中为空白。 逆波兰表达式生成算法的关键在于比较当前运算符与栈顶运算符的优先关系,若当前运算符的优先级高于栈顶运算符,则当前运算符入栈,若当前运算符的优先级低于栈顶运算符,则栈顶运算符退栈。 下面给出了逆波兰表达式生成算法的流程图。 (为了便于比较相邻运算符的优 先级,需要设立一个工作栈,用来存放暂时不能处理的运算符,所以又称运算符栈)。 常用运算符优先关系矩阵 + - * / ↑ ( ) + > > < < < < > - > > < < < < > * > > > > < < > / > > > > < < > ↑ > > > > > < > ( < < < < < < = ) > > > > > > 三、主要仪器设备 PC机+Java语言编程环境 四、实验结果与分析 1.实验内容: packagecom_text4; importjava.io.*; publicclassText4{ publicstaticvoidmain(String[]args)throwsIOException{ //TODOAuto-generatedmethodstub inti=0,j=0; Stringstr; System.out.println("请输入一串中序表达式: "); BufferedReaderbuf=newBufferedReader( newInputStreamReader(System.in)); str=buf.readLine(); charm[]=newchar[20]; for(into=0;o m[o]=str.charAt(o); } for(into=str.length();o<20;o++){ m[o]=''; } charn[]=newchar[m.length]; for(into=0;o n[o]=''; System.out.println("逆波兰式为: "); while(i<=str.length()){ if(m[i]==''){ if(n[j]==''){ System.out.println("\n"+"结束! "); System.exit(0); }else{ do{ if(n[j]! ='('&&n[j]! =')') System.out.print(n[j]); n[j]=''; if(j>=1) j--; }while(n[j]! =''); j=j+1; } }elseif(isOperator(m[i])){ while(isOperator(m[i])){ if(n[j]==''){ n[j]=m[i]; i++; }elseif(priority(n[j],m[i])=='<'){ j++; n[j]=m[i]; i++; }elseif(m[i]==')'){ while(j>0){ if(n[j]=='('){ n[j]=''; i++; }else{ if(n[0]==''){ System.out.println("Error"); }else{ if(n[j]! ='('&&n[j]! =')') System.out.print(n[j]); n[j]=''; if(j>=1) j--; i++; } } } }else{ if(n[j]! ='('&&n[j]! =')') System.out.print(n[j]); n[j]=''; if(j>=1) j--; } } }else{ System.out.print(m[i]); i++; } } } publicstaticcharpriority(charoperator1,charoperator2){ inta=0,b=0; charoperatorPriorMatrix[][]={{'>','>','<','<','<','>'}, {'>','>','<','<','<','>'}, {'>','>','>','>','<','>'}, {'>','>','>','>','<','>'}, {'<','<','<','<','<','='}, {'>','>','>','>','','>'}}; switch(operator1){ case'+': a=0; break; case'-': a=1; break; case'*': a=2; break; case'/': a=3; break; case'(': a=4; break; case')': a=5; break; } switch(operator2){ case'+': b=0; break; case'-': b=1; break; case'*': b=2; break; case'/': b=3; break; case'(': b=4; break; case')': b=5; break; } returnoperatorPriorMatrix[a][b]; } publicstaticbooleanisOperator(charoperator){ if(operator=='+'||operator=='-'||operator=='*' ||operator=='/'||operator=='('||operator==')') returntrue; else returnfalse; } } 2.实验结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 太原 理工大学 编译 原理 实验