资源简介
对于C#、VB等高级语言而言,此时编译器完成的功能是把源码(SourceCode)编译成通用中间语言(MSIL/CIL)的字节码(ByteCode)。最后运行的时候通过通用语言运行库的转换,编程最终可以被CPU直接计算的机器码(NativeCode)。
代码片段和文件信息
import java.io.File;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.HashMap;
public class AnalyseList{
// 成员变量产生式集,终结符集,非终结符集
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();
}
// 从文件中读取产生式
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();
}
}
// 获得非终结符集
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();
}
}
// 获得终结符集依赖于获得产生式函数
public void setTerminals(){
// 遍历所有的产生式
String[] rights;
for (int i = 0; i < productions.size(); i++) {
rights = productions.get(i).returnRights();
// 从右侧寻找终结符
for (int j = 0; j < rights.length; j++) {
if(nonterminals.contains(rights[j])||rights[j].equals(“$“)){
continue;
}
else {
terminals.add(rights[j]);
}
}
}
}
// 获取First集
public void getFirst(){
// 终结符全部求出first集
ArrayList first;
for (int i = 0; i < terminals.size(); i++) {
first = new ArrayList();
first.add(terminals.get(i));
firsts.put(terminals.get(i) first);
}
// 给所有非终结符注册一下
for (int i = 0; i < nonterminals.size(); 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 < productions.size(); i++) {
left = productions.get(i).returnLeft();
rights = productions.get(i).returnRights();
for (int j = 0; j < rights.length; j++) {
right = rights[j];
// right是否存在,遇到空怎么办
if(!right.equals(“$“)){
for (int l = 0; l < firsts.ge
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 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计算器实现代码
- 下一篇:简易java聊天室ui界面
评论
共有 条评论