Changes to allow multiple source files & library support
[IRC.git] / Robust / src / Main / Main.java
1 package Main;
2
3 import java.io.Reader;
4 import java.io.BufferedReader;
5 import java.io.FileReader;
6 import IR.Tree.ParseNode;
7 import IR.Tree.BuildIR;
8 import IR.Tree.SemanticCheck;
9 import IR.Flat.BuildFlat;
10 import IR.Flat.BuildCode;
11 import IR.State;
12 import IR.TypeUtil;
13
14 public class Main {
15   public static void main(String args[]) throws Exception {
16       String ClassLibraryPrefix="./ClassLibrary/";
17       if (args.length<1) {
18           System.out.println("Must input source file");
19           System.exit(-1);
20       }
21       State state=new State();
22       
23       for(int i=0;i<args.length;i++) {
24           String option=args[i];
25           if (option.equals("-precise"))
26               IR.Flat.BuildCode.GENERATEPRECISEGC=true;
27           else if (option.equals("-dir"))
28               IR.Flat.BuildCode.PREFIX=args[++i]+"/";
29           else if (option.equals("-classlibrary"))
30               ClassLibraryPrefix=args[++i]+"/";
31           else if (option.equals("-mainclass"))
32               state.main=args[++i];
33           else if (option.equals("-help")) {
34               System.out.println("-classlibrary classlibrarydirectory -- directory where classlibrary is located");
35               System.out.println("-dir outputdirectory -- output code in outputdirectory");
36               System.out.println("-mainclass -- main function to call");
37               System.out.println("-precise -- use precise garbage collection");
38
39               System.out.println("-help -- print out help");
40               System.exit(0);
41           } else {
42               readSourceFile(state, args[i]);
43           }
44       }
45       
46       readSourceFile(state, ClassLibraryPrefix+"Object.java");
47
48       BuildIR bir=new BuildIR(state);
49       bir.buildtree();
50       
51       TypeUtil tu=new TypeUtil(state);
52       
53       SemanticCheck sc=new SemanticCheck(state,tu);
54       sc.semanticCheck();
55       
56       BuildFlat bf=new BuildFlat(state);
57       bf.buildFlat();
58       
59       BuildCode bc=new BuildCode(state, bf.getMap(), tu);
60       bc.buildCode();
61       System.exit(0);
62   }
63     
64     private static void readSourceFile(State state, String sourcefile) throws Exception {
65         Reader fr = new BufferedReader(new FileReader(sourcefile));
66         Lex.Lexer l = new Lex.Lexer(fr);
67         java_cup.runtime.lr_parser g;
68         g = new Parse.Parser(l);
69         ParseNode p=(ParseNode) g./*debug_*/parse().value;
70         state.addParseNode(p);
71         if (l.numErrors()!=0) {
72             System.out.println("Error parsing Object.java");
73             System.exit(l.numErrors());
74         }
75     }
76 }