编译原理实验报告实验三最新版.docx

上传人:b****4 文档编号:24650662 上传时间:2023-05-29 格式:DOCX 页数:25 大小:137.86KB
下载 相关 举报
编译原理实验报告实验三最新版.docx_第1页
第1页 / 共25页
编译原理实验报告实验三最新版.docx_第2页
第2页 / 共25页
编译原理实验报告实验三最新版.docx_第3页
第3页 / 共25页
编译原理实验报告实验三最新版.docx_第4页
第4页 / 共25页
编译原理实验报告实验三最新版.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

编译原理实验报告实验三最新版.docx

《编译原理实验报告实验三最新版.docx》由会员分享,可在线阅读,更多相关《编译原理实验报告实验三最新版.docx(25页珍藏版)》请在冰豆网上搜索。

编译原理实验报告实验三最新版.docx

编译原理实验报告实验三最新版

中南大学

 

编译原理课程实验

实验报告

 

题目实验三

学生姓名陈亮名

学生学号

专业班级1005

完成日期2012/6/2

实验三算符优先分析法设计与实现

一、实验目的

加深对语法分析器工作过程的理解;加强对算符优先分析法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。

二、实验内容

在实验1的基础上,用算符优先分析法编制语法分析程序,语法分析程序的实现可以采用任何一种编程语言和工具。

三、实验要求:

1.对语法规则有明确的定义;

2.编写的分析程序能够对实验一的结果进行正确的语法分析;

3.对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程;

四、实验步骤

1.定义目标语言的语法规则;

A.关键字后不能跟字符串运算符

B.数字后不能跟关键字,数字,字符串,标示符

C.字符串后不能跟关键字,数字,字符串,标示符

D.标示符后不能跟数字,字符串

2.依次读入实验一的分析结果,根据预测分析的方法进行语法分析,直到源程序结束;

读入程序如下:

packagecom.demo;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileNotFoundException;

importjava.io.FileOutputStream;

importjava.io.IOException;

publicclasscopy{

publicbooleancop(Stringsrc,Stringdes){

FilesorFile,desFile;

sorFile=newFile(src);

desFile=newFile(des);

FileInputStreamfis=null;

FileOutputStreamfos=null;

intn=0;

byte[]b=newbyte[4*1024];

try{

fis=newFileInputStream(src);

fos=newFileOutputStream(des);

while((n=fis.read(b))!

=-1){

fos.write(b,0,n);

//tyfkfuuofiiu

/*

*fhshtjsjtrjrs

*/

}

fos.flush();

fis.close();

fos.close();

}catch(FileNotFoundExceptione){

e.printStackTrace();

}catch(IOExceptione){

e.printStackTrace();

}

returntrue;

}

publicstaticvoidmain(String[]args){

copycp=newcopy();

Stringsrc=args[0];

Stringdes=args[1];

if(cp.cop(src,des)){

public"文件复制成功"=Stringstring;//(这一句有错误)

System.out.println("文件复制成功");

}

else{

System.out.println

("shibai");

}

}

}

 

词法分析:

进行语法分析:

3.对遇到的语法错误做出错误处理。

注:

由于java整套语言出错的情况太多,以上只考虑了部分出错情况

分析器代码如下:

z

packagedemo;

importjava.awt.Dimension;

importjava.awt.Toolkit;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjava.awt.event.WindowListener;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileNotFoundException;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.io.UnsupportedEncodingException;

importjavax.swing.JButton;

importjavax.swing.JFileChooser;

importjavax.swing.JFrame;

importjavax.swing.JOptionPane;

importjavax.swing.JScrollPane;

importjavax.swing.JTextArea;

importjavax.swing.JTextField;

publicclassWordAnalysesextendsJFrame{

privateJButtonchoosefileButton;

privateJButtonanalyseButton;

privateJButtongrammarButton;

privateJButtonexportButton;

privateJTextFieldjtf;

privateJTextAreaoutpuTextArea;

JScrollPanejsp;//新建一个滚动条界面,将文本框传入

Strings="";

Strings2="";

Stringword[][]=newString[8*1024][3];

privateintindex=0;

Filefile;

intm=0;

intf=0;

FileInputStreamfileInputStream;

//关键字

privateString[]code1=newString[]{"if","int","for","while","do",

"return","break","continue","package","public","class",

"static","void","main","new","null","abstract","boolean",

"byte","case","catch","char","default","double","else",

"enum","extends","final","finally","float","implements",

"import","instanceof","interface","long","native","private",

"protected","strictfp","short","super","switch",

"synchronized","this","throw","throws","transient","try",

"volatile"};

//运算符

privateString[]code4=newString[]{"+","-","*","/","=","<",">",

"&&","&","||","or","and","xor","!

"};

//标点

privateString[]code5=newString[]{",",";","{","}","(",

")","[","]","."};

privateStringBuffersBuffer;

publicWordAnalyses(Stringtitle){

super(title);

Toolkittoolkit=Toolkit.getDefaultToolkit();

Dimensionscrnsize=toolkit.getScreenSize();

setSize(600,700);

setLocation((scrnsize.width-600)/2,(scrnsize.height-700)/2);

myframe();

add(choosefileButton).setBounds(25,10,100,25);

add(analyseButton).setBounds(175,10,100,25);

add(grammarButton).setBounds(325,10,100,25);

add(exportButton).setBounds(475,10,100,25);

add(jsp).setBounds(0,45,590,600);

add(jtf).setBounds(0,35,600,10);

//add(jsp).setBounds(0,45,600,665);

setVisible(true);

addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

System.exit(0);

}

});

}

publicvoidmyframe(){

choosefileButton=newJButton("选择文件");

choosefileButton.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

f=1;

intn;

sBuffer=newStringBuffer(s2);

try{

JFileChooserjfc=newJFileChooser();

jfc.showOpenDialog(WordAnalyses.this);

file=jfc.getSelectedFile();

fileInputStream=newFileInputStream(file);

while((n=fileInputStream.read())!

=-1){

sBuffer.append(""+(char)n);

}

}catch(FileNotFoundExceptione1){

e1.printStackTrace();

}catch(IOExceptione1){

e1.printStackTrace();

}

try{

s2=newString(sBuffer.toString().getBytes("ISO8859-1"));

}catch(UnsupportedEncodingExceptione1){

//TODOAuto-generatedcatchblock

e1.printStackTrace();

}

sBuffer=newStringBuffer(s2);

}

});

analyseButton=newJButton("开始分析");

analyseButton.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

if(f==0){

JOptionPane.showMessageDialog(rootPane,"请先选择要分析的文件!

");

}else{System.out.println(sBuffer.length());

m=0;

for(inti=0;i

s=s+sBuffer.charAt(i);

if(s.equals("")||s.equals("")||s.equals("\r\n")

||s.equals("\n")||s.equals("\r")){

s="";

continue;

}

//注释

if(s.equals("/")

&&(""+sBuffer.charAt(i+1)).equals("/")){

i=i+2;

s="//";

while(!

(""+sBuffer.charAt(i)).equals("\r")){

s=s+sBuffer.charAt(i);

i++;

}

System.out.println("("+"2,"+s+")");

outpuTextArea.setText(outpuTextArea.getText()+"("

+"2,"+s+")"+"\r\n");

word[index][1]=s;

word[index][2]="2";

index++;

s="";

continue;

}

//段注释

if(s.equals("/")

&&(""+sBuffer.charAt(i+1)).equals("*")){

i=i+2;

s="/*";

while(!

((""+sBuffer.charAt(i)).equals("*")&&(""+sBuffer

.charAt(i+1)).equals("/"))){

s=s+sBuffer.charAt(i);

i++;

}

i=i+2;

s=s+"*/";

System.out.println("("+"3,"+s+")");

outpuTextArea.setText(outpuTextArea.getText()+"("

+"3,"+s+")"+"\r\n");

word[index][1]=s;

word[index][2]="3";

index++;

s="";

continue;

}

//关键字

if(!

s.equals("")){

for(intj=0;j

if(s.equals(code1[j])

&&((""+sBuffer.charAt(i+1)).equals("")

||(""+sBuffer.charAt(i+1))

.equals("\r")||(""+sBuffer

.charAt(i+1)).equals("\n"))){

System.out.println("("+"1,"+code1[j]+")");

outpuTextArea.setText(outpuTextArea.getText()+"("

+"1,"+code1[j]+")"+"\r\n");

word[index][1]=s;

word[index][2]="1";

index++;

s="";

break;

}

}}

//运算符

if(!

s.equals("")){

Stringsss="";

for(intj=0;j

if(s.equals(code4[j])){

if(s.equals("or")||s.equals("and")

||s.equals("xor")){

System.out.println("("+"4,"+s+")");

outpuTextArea.setText(outpuTextArea

.getText()

+"("

+"7,"

+s

+")"

+"\r\n");

word[index][1]=s;

word[index][2]="7";

index++;

s="";

break;

}

sss=sss+code4[j];

for(intk=0;k

if((""+sBuffer.charAt(i+1))

.equals(code4[k])){

i++;

sss=sss+code4[k];

break;

}

}

System.out.println("("+"4,"+sss+")");

outpuTextArea.setText(outpuTextArea.getText()

+"("+"7,"+sss+")"+"\r\n");

word[index][1]=s;

word[index][2]="7";

index++;

s="";

sss="";

}

}

}

//数字

if(!

s.equals("")){

if((""+sBuffer).charAt(i)>=48

&&(""+sBuffer).charAt(i)<57){

if((""+sBuffer).charAt(i+1)<48

||(""+sBuffer).charAt(i+1)>57){

System.out.println("("+"3"+","+s+")");

outpuTextArea.setText(outpuTextArea.getText()

+"("+"4"+","+s+")"+"\r\n");

word[index][1]=s;

word[index][2]="4";

index++;

s="";

}

continue;

}

}

//分隔符

if(!

s.equals("")){

for(intj=0;j

if(s.equals(code5[j])){

System.out.println("("+"5"+","+code5[j]

+")");

outpuTextArea.setText(outpuTextArea.getText()

+"("+"8"+","+code5[j]+")"

+"\r\n");

word[index][1]=s;

word[index][2]="8";

index++;

s="";

break;

}

}

}

//字符串

if(s.equals("\"")){

i++;

while(!

(""+sBuffer.charAt(i)).equals("\"")){

s=s+sBuffer.charAt(i);

i++;

}

s=s+sBuffer.charAt(i);

System.out.println("("+"字符串"+","+s+")");

outpuTextArea.setText(outpuTextArea.getText()

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

当前位置:首页 > 法律文书 > 调解书

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

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