太原理工大学编译原理实验.docx
- 文档编号:3208285
- 上传时间:2022-11-20
- 格式:DOCX
- 页数:16
- 大小:143.93KB
太原理工大学编译原理实验.docx
《太原理工大学编译原理实验.docx》由会员分享,可在线阅读,更多相关《太原理工大学编译原理实验.docx(16页珍藏版)》请在冰豆网上搜索。
太原理工大学编译原理实验
本科实验报告
课程名称:
编译原理
实验项目:
无符号数的词法分析程序(实验一)
基本程序设计(实验二)
实验地点:
致远楼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("您输入有误!
");
ﻩﻩﻩ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 太原 理工大学 编译 原理 实验