太原理工大学编译原理实验Word文档格式.docx

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

太原理工大学编译原理实验Word文档格式.docx

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

太原理工大学编译原理实验Word文档格式.docx

→<

无符号实数>

│<

无符号整数>

.<

数字串>

[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<

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]>

=57){

do{

d=m[i]-48;

p=p*10+d;

i++;

}while(m[i]>

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

您输入有误!

}elseif(m[i]=='

+'

+(e*(p+j-1)));

}else{

}

}

}

else{

if(m[i]>

do{

d=m[i]-48;

w1=w1*10+d;

//j=j+1;

}while(m[i]>

}else

小数为:

+w+'

+w1);

w1=0;

}elseif(m[i]=='

1){

System.out.println("

+w2+w1

+"

+(e*(p-j+1)));

w=0;

w1=0;

j=0;

w2=0;

p=0;

}else{

+w1

}

+(e*(p+j-1)));

}

}

}2.实验结果:

编译原理

基本程序设计(实验二)

计算机学院606实验室

计Z1101学号:

2011001491

李康达

段利国

2013年11月23日

实验二、逆波兰式生成程序

内容:

掌握语法分析的基本思想,并用高级语言编写逆波兰式生成程序(4学时)

要求:

利用逆波兰式生成算法编写程序,将从键盘上输入的算术表达式(中缀表达式)转化成逆波兰式。

逆波兰表达式的生成过程涉及到运算符的优先级,下表中列出几个常用运算符的优先关系。

常用运算符优先关系矩阵

+

-

*

/

如上表所示的优先关系矩阵表示了+,-,*,/,↑,(,)等七种运算符之间的相互优先关系。

“>、<、=”三种符号分别代表“大于”、“小于”、“相等”三种优先关系。

左边的“=”与右边的“(”之间没有优先关系存在,所以表中为空白。

逆波兰表达式生成算法的关键在于比较当前运算符与栈顶运算符的优先关系,若当前运算符的优先级高于栈顶运算符,则当前运算符入栈,若当前运算符的优先级低于栈顶运算符,则栈顶运算符退栈。

下面给出了逆波兰表达式生成算法的流程图。

(为了便于比较相邻运算符的优

先级,需要设立一个工作栈,用来存放暂时不能处理的运算符,所以又称运算符栈)。

1.实验内容:

packagecom_text4;

importjava.io.*;

publicclassText4{

publicstaticvoidmain(String[]args)throwsIOException{

inti=0,j=0;

请输入一串中序表达式:

charm[]=newchar[20];

for(into=0;

o<

o++){

m[o]=str.charAt(o);

for(into=str.length();

20;

m[o]='

'

;

charn[]=newchar[m.length];

n.length;

o++)

n[o]='

逆波兰式为:

=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];

}elseif(priority(n[j],m[i])=='

'

j++;

while(j>

0){

if(n[j]=='

n[j]='

i++;

}else{

if(n[0]=='

Error"

if(n[j]!

System.out.print(n[j]);

n[j]='

if(j>

j--;

}

System.out.print(m[i]);

publicstaticcharpriority(charoperator1,charoperator2){

inta=0,b=0;

charoperatorPriorMatrix[][]={{'

>

'

},

{'

='

}};

switch(operator1){

case'

:

a=0;

break;

a=1;

*'

a=2;

/'

a=3;

a=4;

a=5;

switch(operator2){

b=0;

b=1;

b=2;

b=3;

b=4;

b=5;

returnoperatorPriorMatrix[a][b];

publicstaticbooleanisOperator(charoperator){

if(operator=='

||operator=='

||operator=='

returntrue;

else

returnfalse;

2.实验结果:

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

当前位置:首页 > 幼儿教育 > 少儿英语

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

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