資源簡(jiǎn)介
參考C語(yǔ)言版本,用Java寫的遞歸下降分析程序,能對(duì)詞法分析程序所提供的單詞序列進(jìn)行語(yǔ)法檢查和結(jié)構(gòu)分析。被分析的語(yǔ)言應(yīng)該是PL/0,語(yǔ)法表示如下:
(1)<程序>::=begin<語(yǔ)句串>end
(2)<語(yǔ)句串>::=<語(yǔ)句>{;<語(yǔ)句>}
(3)<語(yǔ)句>::=<賦值語(yǔ)句>
(4)<賦值語(yǔ)句>::=ID:=<表達(dá)式>
(5)<表達(dá)式>::=<項(xiàng)>{+<項(xiàng)> | —項(xiàng)>}
(6)<項(xiàng)>::=<因子>{*<因子> | /<因子>}
(7)<因子>::=ID | NUM | (<表達(dá)式>)
用Eclipse做的,有運(yùn)行結(jié)果截圖。
代碼片段和文件信息
package?org.test;
import?org.test.WordAnalyzer;
public?class?RecursiveDescentAnalyzer?{
WordAnalyzer?wa?=?new?WordAnalyzer();
boolean?isError?=?false;
public?void?lrparser()?{
if?(wa.syn?==?1)?{?//“begin”
wa.scaner();
yujuchuan();
if?(wa.syn?==?6)?{?//“end”
wa.scaner();
if?(wa.syn?==?0?&&?isError?==?false)?//“end”之后是“#”并且沒(méi)有出錯(cuò),則分析成功
System.out.println(“語(yǔ)法分析成功!“);
}?else?{
if?(isError?==?false)?//之前分析都成功,但沒(méi)有“end”
System.out.println(“語(yǔ)法分析出錯(cuò)!缺少“end”“);
isError?=?true;
}
}?else?{
System.out.println(“語(yǔ)法分析出錯(cuò)!缺少“begin”“);
isError?=?true;
}
}
/*
?*?分析語(yǔ)句串
?*/
public?void?yujuchuan()?{
statement();?//分析第一條語(yǔ)句
while?(wa.syn?==?26)?{//?為“;”時(shí),分析下一條語(yǔ)句
wa.scaner();
if?(wa.syn?==?6)?break;
statem
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件?????????232??2017-12-13?08:22??.classpath
?????文件?????????407??2017-12-13?08:22??.project
?????目錄???????????0??2017-12-13?08:22??src\
?????目錄???????????0??2017-12-13?08:22??src\org\
?????目錄???????????0??2017-12-23?14:22??src\org\test\
?????文件????????2908??2017-12-23?16:27??src\org\test\RecursiveDescentAnalyzer.java
?????文件????????2289??2017-12-25?21:14??src\org\test\WordAnalyzer.java
?????文件????????6542??2017-12-25?21:26??實(shí)驗(yàn)結(jié)果1.PNG
?????文件????????6542??2017-12-25?21:27??實(shí)驗(yàn)結(jié)果2.PNG
評(píng)論
共有 條評(píng)論