91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

山東大學計算機學院的編譯原理實驗,用java寫的,是對PL/0語言的編譯程序

資源截圖

代碼片段和文件信息

package?BianYiYuanLi;

import?java.io.*;
import?java.util.Vector;
public?class?Block
{
public?GetSym?CiFa;
public?Word?word;
public?String?id?=?null;?//?用于登錄名字表時的word名字
public?int?lineNum;?//?用于錯誤處理時的行數記錄
public?int?errorNumber?=?0;?//?用于保存語法分析中的錯誤數目
public?Error?error;
int?cx;
int?cx0;
int?dx;
int?lev?=?-1;
int?errorNum?=?0;

Vector?CODE?=?new?Vector();;?//?生成一個vector矢量!?//?此矢量用作存放CodeElement的數組
Vector?TABLE?=?new?Vector();//?生成一個存放矢量?作為名字表;

public?Block(GetSym?CF)//?語法分析構造函數
{
CiFa?=?CF;//?從主程序傳入一個詞法分析對象,將其賦給CiFa
word?=?CiFa.GetWord();?//?獲得一個word
analyse();?//?然后調用分析程序
}

public?int?getErroNumber()
{
return?errorNumber;
}
public?void?printTable()?//?用來查看符號表內容的
{
for?(int?t?=?1;?t? {
TableElement?name?=?(TableElement)?TABLE.get(t);
if(name.kind.equals(“constant“))
name.showConst();
else?if(name.kind.equals(“variable“))
name.show();
else?if(name.kind.equals(“procedure“))
{
t++;
TableElement?tempname=(TableElement)?TABLE.get(t);
name.adr=tempname.adr;
name.show();?
}

}
}

public?void?printCode()//?CodeElement的顯示方法,如果沒有錯誤,則打印CodeElement代碼
{
for?(int?n?=?2;?n? {
CodeElement?code?=?(CodeElement)?CODE.get(n);
System.out.println(n?+?“\t“?+?code.getF()?+?“\t“?+?code.getL()
+?“\t“?+?code.getA());
}
}

public?void?analyse()
{
int?tx0;
lev++;
dx?=?3;
tx0?=?TABLE.size();?//?用tx0保存當前層的符號在符號表中的起始位置
TABLE.addElement(new?TableElement(“?“?“?“?0?0?0));//?在這里給符號表填加一個元素,否則下一條代碼會運行出界
((TableElement)?TABLE.get(tx0)).setAdr(CODE.size());//?在上面加的那個元素里的私有字段adr里保存當前層代碼的開始位置
CODE.addElement(new?CodeElement(“jmp“?0?0));?//?生成跳轉指令  由于跳轉位置未知 暫時添0
while?(word.getSym().equals(“constsym“)
||?word.getSym().equals(“varsym“)
||?word.getSym().equals(“procsym“))
{
if?(word.getSym().equals(“constsym“))//?常量處理
{
word?=?CiFa.GetWord();
constDefine();?//?調用常量聲明,注意常量聲明完畢時還要再次讀取一個word
while?(word.getSym().equals(“sym“))//?若在常量聲明后讀取的word為逗號,則要繼續進行常量聲明這里采用while循環,直到word不是逗號
{
word?=?CiFa.GetWord();
constDefine();?//?調用常量聲明注意常量聲明完畢時還要再次讀取一個word
}
if?(word.getSym().equals(“;sym“))//?若word不是逗號,則應該是分號了,標志常量聲明結束
{
word?=?CiFa.GetWord();
}?else
{
errorNumber++;
error.error(word.getLineNum()?5);//?如果常量聲明完畢后沒有遇到分號;則拋出15號錯誤
}
}
//?變量處理
else?if?(word.getSym().equals(“varsym“))
{
word?=?CiFa.GetWord();//?讀取一個word,應該是一個ident標識符
varDefine();?//?調用變量聲明注意常量聲明完畢時還要再次讀取一個word
while?(word.getSym().equals(“sym“))
{
word?=?CiFa.GetWord();
varDefine();?//?調用變量聲明注意常量聲明完畢時還要再次讀取一個word
}
if?(word.getSym().equals(“;sym“))
{
word?=?CiFa.GetWord();
}?else
{
errorNumber++;
error.error(word.getLineNum()?5);//?如果變量聲明完畢后沒有遇到分號;則調用錯誤處理程序拋出5號錯誤
}
}
//?循環聲明各個子過程
while?(word.ge

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件??????20457??2010-11-15?22:05??山東大學計算機學院編譯原理實驗—PL0語言的設計\Block.java

?????文件????????447??2010-11-07?15:55??山東大學計算機學院編譯原理實驗—PL0語言的設計\CodeElement.java

?????文件???????1318??2010-11-09?09:40??山東大學計算機學院編譯原理實驗—PL0語言的設計\Error.java

?????文件???????5576??2010-11-15?19:59??山東大學計算機學院編譯原理實驗—PL0語言的設計\GetSym.java

?????文件???????1080??2010-11-15?19:31??山東大學計算機學院編譯原理實驗—PL0語言的設計\TableElement.java

?????文件????????689??2010-11-15?16:03??山東大學計算機學院編譯原理實驗—PL0語言的設計\Word.java

?????目錄??????????0??2011-11-24?00:12??山東大學計算機學院編譯原理實驗—PL0語言的設計

-----------?---------??----------?-----??----

????????????????29567????????????????????7


評論

共有 條評論