1 | package uk.co.zonetora.fj; |
2 | |
3 | import java.io.IOException; |
4 | import java.io.StringReader; |
5 | import java.util.List; |
6 | |
7 | import uk.co.zonetora.InputParser; |
8 | import uk.co.zonetora.RunnableWithString; |
9 | import uk.co.zonetora.fj.ast.lexer.Lexer; |
10 | import uk.co.zonetora.fj.ast.node.Start; |
11 | import uk.co.zonetora.fj.ast.parser.Parser; |
12 | import uk.co.zonetora.fj.model.ClassDecl; |
13 | import uk.co.zonetora.fj.passes.BuildModel; |
14 | import uk.co.zonetora.fj.typecheck.ClassTable; |
15 | |
16 | public class Main { |
17 | |
18 | |
19 | public static void main(String[] args) throws IOException { |
20 | InputParser.parse(new RunnableWithString() { |
21 | public String run(String arg) { |
22 | return parseAndTypeCheck(arg); |
23 | } |
24 | }); |
25 | } |
26 | |
27 | |
28 | public static String parseAndTypeCheck(String contents) { |
29 | VariablePushbackReader vpr = new VariablePushbackReader(new StringReader(contents)); |
30 | Lexer lexer = new Lexer(vpr); |
31 | Parser p = new Parser(lexer); |
32 | try { |
33 | Start start = p.parse(); |
34 | |
35 | BuildModel bm = new BuildModel(); |
36 | start.apply(bm); |
37 | List<ClassDecl> classes = bm.getClasses(); |
38 | |
39 | ClassTable ct = new ClassTable(); |
40 | for(ClassDecl cd : classes) { |
41 | ct.addClassDefinition(cd); |
42 | } |
43 | ct.validateClassTable(); |
44 | |
45 | } catch(Throwable t) { |
46 | t.printStackTrace(); |
47 | return "Error:" + t.getMessage(); |
48 | } |
49 | return null; |
50 | |
51 | } |
52 | |
53 | } |