• 大小: 339KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2023-02-08
  • 语言: 其他
  • 标签:

资源简介

PL/0编译程序采用一遍扫描的方法,所以语法分析和代码生成都有在BLOCK中完成。 包括语法分析器和词法分析器及实验报告。

资源截图

代码片段和文件信息

package analysis;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;



public class Analysis {

private frame lex;
private String filename;
private char ch;//每行读入的第一个字符 

private String strbuf;//存放字符

private final String []key = {“begin““end““if““then““else““for““do““while““and““or““not“};

int current = 0; 

public Analysis(frame lex) {
// TODO Auto-generated constructor stub
this.lex = lex;
}



public void openfile(){
JFileChooser choose = new JFileChooser(filename);
choose.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result = choose.showOpenDialog(lex);
if(result==JFileChooser.CANCEL_OPTION)
return;
File file=choose.getSelectedFile();
filename=file.getAbsolutePath();
try{
StringBuffer buffer=new StringBuffer(““);
FileInputStream fis=new FileInputStream(filename);
int c;
while((c=fis.read())!=-1){
buffer.append((char)c);
}
lex.input.setText(new StringBuffer(buffer).toString());
lex.output.setText(““);
lex.errorput.setText(““);
}catch(IOException e){
e.printStackTrace();
}
}






public void save() {
// TODO Auto-generated method stub
JFileChooser chooser = new JFileChooser(filename);
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result = chooser.showOpenDialog(lex);
if(result==JFileChooser.CANCEL_OPTION)
return;
File file=chooser.getSelectedFile();
filename=file.getAbsolutePath();

//存入窗口
if(filename == null || ““.equals(filename)){
JOptionPane.showMessageDialog(chooser “请填文件名““请填文件名“JOptionPane.INFORMATION_MESSAGE);
}else{
try {
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(filename+“.txt“));
//将token表中的数据取出来放到String中
ArrayList al = lex.Token;
String outputString=““;
for(int i = 0; i< al.size(); i++){
outputString += “【“+al.get(i).getKind()+“   “+al.get(i).getName()+
“   “+al.get(i).getCode()+“】\r\n“;
}
osw.write(“         Token字表\r\n“+outputString);
osw.flush();
osw.close();
} catch (Exception e) {
e.printStackTrace();
}

}

}


public boolean isNumber(char ch)
{
if(ch >= ‘0‘&& ch <=‘9‘)
return true;
else 
return false;
}

public boolean isAlph(char ch)
{

if(ch >= ‘a‘&& ch <= ‘z‘|| ch >= ‘A‘&& ch <= ‘Z‘)
{   //System.out.print(“ok“);

return true;}
else
return false;

}

private void isKey(String str){
int code = 0;//1表示是关键字,2表示是标示符
int i;
for(i = 0;i < key.length;i++){
if(str.equals(key[i])){
code = 1;   //如果在关键字表中有一个与str匹配,输出关键字
lex.printMessage(lex.output “保留字“ str i+1);
}
}
if(code != 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      13777  2010-06-07 08:27  编译原理实验\Analysis.java

     文件        238  2010-06-07 08:19  编译原理实验\code.txt

     文件       3726  2010-06-07 08:19  编译原理实验\frame.java

     文件        258  2010-06-01 09:25  编译原理实验\Result.java

     文件        419  2010-05-24 13:42  编译原理实验\TokenBean.java

     文件         13  2010-05-25 20:24  编译原理实验\编译例题.txt

     文件         11  2010-06-07 08:22  编译原理实验\编译例题1.txt

     文件         14  2010-05-26 10:32  编译原理实验\编译错误例题.txt

     文件     352713  2010-06-01 12:34  编译原理实验\语法分析词法分析实验报告.docx

     目录          0  2010-06-10 10:47  编译原理实验

----------- ---------  ---------- -----  ----

               371169                    10


评论

共有 条评论