-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMain.java
More file actions
104 lines (97 loc) · 3.94 KB
/
Copy pathMain.java
File metadata and controls
104 lines (97 loc) · 3.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package main;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
import java.util.concurrent.ConcurrentHashMap;
import kanga.KangaParser;
import kanga.visitor.Kanga2Mips;
import minijava.MiniJavaParser;
import piglet.ParseException;
import piglet.PigletParser;
import piglet.TokenMgrError;
import piglet.visitor.CountTmp;
import piglet.visitor.Piglet2Spiglet;
import spiglet.*;
import spiglet.visitor.*;
import minijava.symboltable.MiniApp;
import minijava.visitor.BuildSymbolTableVistor;
import minijava.visitor.Minijava2piglet;
import minijava.visitor.TypeCheckVisitor;
public class Main {
public static void main(String[] args) throws IOException, FileNotFoundException{
try{
System.out.println("Please input the path of java file:");
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
String filePath = scanner.nextLine();
File javaFile = new File(filePath);
FileInputStream javaFileStream = new FileInputStream(javaFile);
MiniJavaParser jParser = new MiniJavaParser(javaFileStream);
@SuppressWarnings("static-access")
minijava.syntaxtree.Node jgoal = jParser.Goal();
MiniApp app = new MiniApp();
MiniApp typeApp = new MiniApp();
app.setFilename(filePath);
typeApp.setFilename(filePath);
BuildSymbolTableVistor buildSymbolTableVistor = new BuildSymbolTableVistor();
jgoal.accept(buildSymbolTableVistor, app);
jgoal.accept(buildSymbolTableVistor, typeApp);
typeApp.handle_inheritance();
TypeCheckVisitor typeCheckVisitor = new TypeCheckVisitor();
jgoal.accept(typeCheckVisitor, typeApp);
if(!typeApp.existErr){
System.out.println("No type error.");
app.buildGlobalMap();
jgoal.accept(new Minijava2piglet(), app);
System.out.println("Piglet file at \"" + app.filename + ".pg\"");
CountTmp countTmp = new CountTmp();
countTmp.setFilename(filePath);
Piglet2Spiglet pg2spg = new Piglet2Spiglet();
pg2spg.setFilename(filePath);
File pigletFile = new File(pg2spg.filename + ".pg");
FileInputStream pigletFileStream = new FileInputStream(pigletFile);
PigletParser parser = new PigletParser(pigletFileStream);
@SuppressWarnings("static-access")
piglet.syntaxtree.Node goal = parser.Goal();
goal.accept(countTmp, null);
pg2spg.currTemp = countTmp.currTemp;
goal.accept(pg2spg, null);
System.out.println("Spiglet file at \"" + pg2spg.filename + ".spg\"");
Spiglet2Kanga spg2kg = new Spiglet2Kanga();
spg2kg.setFilename(filePath);
spiglet.main.PrintKanga.setFilename(filePath);
File spigletfile = new File(spg2kg.filename + ".spg");
FileInputStream spigletFileStream = new FileInputStream(spigletfile);
SpigletParser sparser = new SpigletParser(spigletFileStream);
@SuppressWarnings("static-access")
spiglet.syntaxtree.Node sgoal = sparser.Goal();
sgoal.accept(new BasicBlock(), null);
sgoal.accept(new DataFlow(), null);
spiglet.main.AllProc.assignReg();
sgoal.accept(new Spiglet2Kanga(), null);
System.out.println("Kanga file at \"" + spg2kg.filename + ".kg\"");
Kanga2Mips kg2mips = new Kanga2Mips();
kg2mips.setFilename(filePath);
File kangafile = new File(kg2mips.filename + ".kg");
FileInputStream kangaFileStream = new FileInputStream(kangafile);
KangaParser kparser = new KangaParser(kangaFileStream);
@SuppressWarnings("static-access")
kanga.syntaxtree.Node kgoal = kparser.Goal();
kgoal.accept(kg2mips, null);
System.out.println("Mips file at \"" + kg2mips.filename + ".s\"");
}
}catch (TokenMgrError e) {
e.printStackTrace();
}catch (ParseException e) {
e.printStackTrace();
} catch (minijava.ParseException e) {
e.printStackTrace();
} catch (spiglet.ParseException e) {
e.printStackTrace();
} catch (kanga.ParseException e) {
e.printStackTrace();
}
}
}