Files
MY_COMPILER/Compiler.java
邓智航 a9b8e82fd5 some opt
2025-12-25 15:07:20 +08:00

52 lines
2.0 KiB
Java
Executable File

import java.nio.file.Files;
import java.nio.file.Paths;
import backend.BackEnd;
import frontend.lexer.Lexer;
import frontend.lexer.TokenStream;
import frontend.parser.Parser;
import midend.Midend;
import midend.errorhandle.ErrorHandler;
import midend.optimize.Optimize;
import error.Errors;
public class Compiler {
public static void main(String[] args) {
Errors errors = new Errors();
try {
String content = new String(Files.readAllBytes(Paths.get("testfile.txt")));
String llvmFile = "llvm_ir.txt";
String llvmOpFile = "llvm_op_ir.txt";
String mipsFile = "mips.txt";
String errorFile = "error.txt";
Lexer lexer = new Lexer(content);
lexer.lex(errors);
TokenStream ts = new TokenStream(lexer.getTokens());
Parser parser = new Parser(ts);
parser.parse(errors);
ErrorHandler errorHandler = new ErrorHandler(parser.getCompUnit());
errorHandler.visit(errors);
// for (int i : SymbolManager.getSequence()) {
// System.out.print(i + " ");
// }
// System.out.println(); // TODO:debug
if (errors.size() > 0) {
StringBuilder sb = errors.toStringBuilder();
Files.write(Paths.get(errorFile), sb.toString().getBytes());
} else {
Midend midend = new Midend(parser.getCompUnit());
midend.generateLLvmIr();
midend.writeToFile(llvmFile);
Optimize optimize = new Optimize(midend.getModule());
optimize.run();
midend.writeToFile(llvmOpFile);
// BackEnd backEnd = new BackEnd(midend.getModule());
// backEnd.toMips();
// backEnd.writeToFile(mipsFile);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}