資源簡介
對于C#、VB等高級語言而言,此時編譯器完成的功能是把源碼(SourceCode)編譯成通用中間語言(MSIL/CIL)的字節(jié)碼(ByteCode)。最后運行的時候通過通用語言運行庫的轉(zhuǎn)換,編程最終可以被CPU直接計算的機器碼(NativeCode)。

代碼片段和文件信息
import?java.io.File;
import?java.io.RandomAccessFile;
import?java.util.ArrayList;
import?java.util.HashMap;
public?class?AnalyseList{
//?成員變量產(chǎn)生式集,終結(jié)符集,非終結(jié)符集
ArrayList?productions;
ArrayList?terminals;
ArrayList?nonterminals;
HashMap>?firsts;
HashMap>?follows;
public?AnalyseList(){
productions?=?new?ArrayList();
terminals?=?new?ArrayList();
nonterminals?=?new?ArrayList();
firsts?=?new?HashMap>();
follows?=?new?HashMap>();
setProductions();
setNonTerminals();
setTerminals();
getFirst();
getFollow();
getSelect();
Predict();
}
//?從文件中讀取產(chǎn)生式
public?void?setProductions(){
try?{
File?file?=?new?File(“grammar.txt“);
RandomAccessFile?randomfile?=?new?RandomAccessFile(file?“r“);
String?line;
String?left;
String?right;
LProduction?production;
while?((line=randomfile.readLine())!=null)?{
left?=?line.split(“->“)[0].trim();
right?=?line.split(“->“)[1].trim();
production?=?new?LProduction(left?right.split(“?“));
productions.add(production);
}
randomfile.close();
}?catch?(Exception?e)?{
//?TODO:?handle?exception
e.printStackTrace();
}
}
//?獲得非終結(jié)符集
public?void?setNonTerminals(){
try?{
File?file?=?new?File(“grammar.txt“);
RandomAccessFile?randomfile?=?new?RandomAccessFile(file?“r“);
String?line;
String?left;
while?((line=randomfile.readLine())!=null)?{
left?=?line.split(“->“)[0].trim();
if(nonterminals.contains(left)){
continue;
}
else?{
nonterminals.add(left);
}
}
randomfile.close();
}?catch?(Exception?e)?{
//?TODO:?handle?exception
e.printStackTrace();
}
}
//?獲得終結(jié)符集依賴于獲得產(chǎn)生式函數(shù)
public?void?setTerminals(){
//?遍歷所有的產(chǎn)生式
String[]?rights;
for?(int?i?=?0;?i? rights?=?productions.get(i).returnRights();
//?從右側(cè)尋找終結(jié)符
for?(int?j?=?0;?j? if(nonterminals.contains(rights[j])||rights[j].equals(“$“)){
continue;
}
else?{
terminals.add(rights[j]);
}
}
}
}
//?獲取First集
public?void?getFirst(){
//?終結(jié)符全部求出first集
ArrayList?first;
for?(int?i?=?0;?i? first?=?new?ArrayList();
first.add(terminals.get(i));
firsts.put(terminals.get(i)?first);
}
//?給所有非終結(jié)符注冊一下
for?(int?i?=?0;?i? first?=?new?ArrayList();
firsts.put(nonterminals.get(i)?first);
}
boolean?flag;
while?(true)?{
flag?=?true;
String?left;
String?right;
String[]?rights;
for?(int?i?=?0;?i? left?=?productions.get(i).returnLeft();
rights?=?productions.get(i).returnRights();
for?(int?j?=?0;?j? right?=?rights[j];
//?right是否存在,遇到空怎么辦
if(!right.equals(“$“)){
for?(int?l?=?0;?l?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2015-06-24?23:28??semantic\
?????文件?????????295??2015-06-24?23:28??semantic\.classpath
?????文件?????????367??2015-06-24?23:28??semantic\.project
?????目錄???????????0??2015-06-24?23:28??semantic\.settings\
?????文件??????????55??2015-06-24?23:28??semantic\.settings\org.eclipse.core.resources.prefs
?????文件?????????587??2015-06-24?23:28??semantic\.settings\org.eclipse.jdt.core.prefs
?????目錄???????????0??2018-12-19?19:00??semantic\bin\
?????文件????????7078??2018-12-19?19:00??semantic\bin\AnalyseList.class
?????文件?????????635??2018-12-19?19:00??semantic\bin\ClientGui.class
?????文件?????????780??2018-12-19?19:00??semantic\bin\ConstantType.class
?????文件????????3553??2018-12-19?19:00??semantic\bin\ErrorProduction.class
?????文件?????????527??2018-12-19?19:00??semantic\bin\ErrorToken.class
?????文件???????30453??2018-12-19?19:00??semantic\bin\GrammarComplier.class
?????文件?????????955??2018-12-19?19:00??semantic\bin\Id.class
?????文件????????8093??2018-12-19?19:00??semantic\bin\Lexfr
?????文件????????3278??2018-12-19?19:00??semantic\bin\LineNumberHeaderView.class
?????文件?????????794??2018-12-19?19:00??semantic\bin\LProduction.class
?????文件???????12874??2018-12-19?19:00??semantic\bin\MyScanner.class
?????文件????????1067??2018-12-19?19:00??semantic\bin\Node.class
?????文件????????5028??2018-12-19?19:00??semantic\bin\Production.class
?????文件????????2563??2018-12-19?19:00??semantic\bin\SemanticAnalyse.class
?????文件????????1932??2018-12-19?19:00??semantic\bin\Symbol.class
?????文件????????2292??2018-12-19?19:00??semantic\bin\SymbolName.class
?????文件???????10827??2018-12-19?19:00??semantic\bin\TextLex.class
?????文件????????3479??2018-12-19?19:00??semantic\bin\TextParse.class
?????文件????????4899??2018-12-19?19:00??semantic\bin\Token.class
?????文件????????2210??2015-06-24?23:28??semantic\grammar.txt
?????文件???????10798??2018-12-19?19:41??semantic\predictldy.txt
?????文件??????????88??2015-06-24?23:28??semantic\sample.txt
?????目錄???????????0??2015-06-24?23:28??semantic\src\
?????文件????????8633??2015-06-24?23:28??semantic\src\AnalyseList.java
............此處省略16個文件信息
- 上一篇:Java計算器實現(xiàn)代碼
- 下一篇:簡易java聊天室ui界面
評論
共有 條評論