資源簡介
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 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? 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??編譯原理實驗\fr
?????文件????????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
- 上一篇:蟻群算法研究綜述 發展歷史和特點
- 下一篇:籃球30秒定時器課程設計
評論
共有 條評論