太原理工大学编译原理实验.docx

上传人:b****4 文档编号:3208285 上传时间:2022-11-20 格式:DOCX 页数:16 大小:143.93KB
下载 相关 举报
太原理工大学编译原理实验.docx_第1页
第1页 / 共16页
太原理工大学编译原理实验.docx_第2页
第2页 / 共16页
太原理工大学编译原理实验.docx_第3页
第3页 / 共16页
太原理工大学编译原理实验.docx_第4页
第4页 / 共16页
太原理工大学编译原理实验.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

太原理工大学编译原理实验.docx

《太原理工大学编译原理实验.docx》由会员分享,可在线阅读,更多相关《太原理工大学编译原理实验.docx(16页珍藏版)》请在冰豆网上搜索。

太原理工大学编译原理实验.docx

太原理工大学编译原理实验

 

本科实验报告

 

课程名称:

 编译原理  

实验项目:

无符号数的词法分析程序(实验一)

基本程序设计(实验二)  

实验地点:

    致远楼303     

专业班级:

软件14XX  学号:

  

学生姓名:

       

指导教师:

    冯秀芳     

2017年6月27日

一、实验目的和要求

1.培养学生初步掌握编译原理实验的技能。

2.验证所学理论、巩固所学知识并加深理解。

3.对学生进行实验研究的基本训练。

二、实验内容和原理

实验一、无符号数的词法分析程序(4学时)

内容:

掌握词法分析的基本思想,并用高级语言编写无符号数的词法分析程序。

要求:

从键盘上输入一串字符(包括字母、数字等),最后以“;”结束,编写程序识别出其中的无符号数。

无符号数文法规则可定义如下:

   〈无符号数>→<无符号实数>│〈无符号整数〉

 〈无符号实数>→〈无符号整数>.〈数字串>[E〈比例因子>]│

<无符号整数>E<比例因子>

   <比例因子〉→<有符号整数>         

  〈有符号整数>→[+│—]<无符号整数〉

 <无符号整数>→<数字串>

   〈数字串>→<数字>{〈数字>}

 <数字〉→0123。

..。

.. 9

读无符号数的程序流程图见下图

三.主要仪器设备

PC机+Java语言编程环境

四、实验结果与分析

1.实验代码:

packagetext1;

importjava.io。

BufferedReader;

importjava.io。

InputStreamReader;

publicclass Text1 {

/**

 *@param args

*/

publicstaticvoid main(String[]args)throws Exception {

ﻩ//TODOAuto-generatedmethodstub

intp = 0,w =0,w1=0, j =0, i=0,d=0, e =1;

ﻩﻩdoublew2= 0;

Stringstr;

ﻩSystem。

out.println("请输入一串字符以;结束:

");

ﻩBufferedReaderbuf= new BufferedReader(

newInputStreamReader(System。

in));

ﻩﻩstr=buf.readLine();

ﻩchar m[]= newchar[100];

ﻩfor(i= 0;i〈str.length();i++) {

ﻩﻩm[i]=str。

charAt(i);

ﻩﻩi= 0;

ﻩwhile(i 〈 str。

length()){

ﻩ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(”您输入有误!

");

ﻩﻩ}else if(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("您输入有误!

");

ﻩﻩﻩ

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1