2017-02-03 14:20:26 +00:00
|
|
|
package de.dhbwstuttgart.parser;
|
|
|
|
|
2017-03-15 15:17:07 +00:00
|
|
|
import de.dhbwstuttgart.parser.SyntaxTreeGenerator.SyntaxTreeGenerator;
|
2017-02-03 14:20:26 +00:00
|
|
|
import de.dhbwstuttgart.parser.antlr.Java8Lexer;
|
|
|
|
import de.dhbwstuttgart.parser.antlr.Java8Parser;
|
|
|
|
import de.dhbwstuttgart.syntaxtree.SourceFile;
|
2017-02-03 14:22:45 +00:00
|
|
|
import de.dhbwstuttgart.typecheck.JavaClassRegistry;
|
2017-02-03 14:20:26 +00:00
|
|
|
import org.antlr.v4.runtime.ANTLRInputStream;
|
|
|
|
import org.antlr.v4.runtime.CommonTokenStream;
|
|
|
|
|
|
|
|
import java.io.*;
|
2017-02-10 16:37:42 +00:00
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
2017-02-03 14:20:26 +00:00
|
|
|
|
|
|
|
public class JavaTXParser {
|
2017-07-05 15:50:38 +00:00
|
|
|
public SourceFile parse(InputStream source) throws IOException, ClassNotFoundException {
|
|
|
|
InputStream stream = source;//new FileInputStream(sourceFile);
|
2017-02-10 16:37:42 +00:00
|
|
|
ANTLRInputStream input = new ANTLRInputStream(stream);
|
|
|
|
Java8Lexer lexer = new Java8Lexer(input);
|
|
|
|
CommonTokenStream tokens = new CommonTokenStream(lexer);
|
|
|
|
Java8Parser parser = new Java8Parser(tokens);
|
|
|
|
Java8Parser.CompilationUnitContext tree = parser.compilationUnit();
|
|
|
|
|
|
|
|
SyntaxTreeGenerator generator = new SyntaxTreeGenerator(new JavaClassRegistry(generateJavaLangNames()));
|
2017-07-05 15:50:38 +00:00
|
|
|
return generator.convert(tree);
|
2017-02-10 16:37:42 +00:00
|
|
|
}
|
|
|
|
|
2017-02-15 15:29:11 +00:00
|
|
|
private List<String> generateJavaLangNames() throws IOException, ClassNotFoundException {
|
2017-02-10 16:37:42 +00:00
|
|
|
List<String> ret = new ArrayList<>();
|
|
|
|
|
2017-02-15 15:29:11 +00:00
|
|
|
for(Class cl : PackageCrawler.getClassesInPackage("java.lang")){
|
|
|
|
ret.add(cl.getName());
|
|
|
|
}
|
2017-03-17 14:48:06 +00:00
|
|
|
//TODO: Wieso muss man das händisch anhängen?
|
|
|
|
ret.add("java.lang.Object");
|
2017-05-05 14:20:12 +00:00
|
|
|
|
2017-02-10 16:37:42 +00:00
|
|
|
return ret;
|
2017-02-03 14:20:26 +00:00
|
|
|
}
|
2017-07-05 15:50:38 +00:00
|
|
|
|
|
|
|
public SourceFile parse(File file) throws IOException, ClassNotFoundException {
|
|
|
|
return this.parse(new FileInputStream(file));
|
|
|
|
}
|
2017-02-03 14:20:26 +00:00
|
|
|
}
|