from lexer import Lexer from plasma_parser import Parser from compiler import Compiler from AST import Program import json from llvmlite import ir from llvmlite.binding import targets from ctypes import CFUNCTYPE, c_int, c_float LEXER_DEBUG: bool = False PARSER_DEBUG: bool = True COMPILER_DEBUG: bool = False if __name__ == "__main__": with open("tests/test.pla") as f: code: str = f.read() if LEXER_DEBUG: debug_lex: Lexer = Lexer(source=code) while debug_lex.current_char is not None: print(debug_lex.next_token()) l: Lexer = Lexer(source=code) p: Parser = Parser(lexer=l) program: Program = p.parse_program() if len(p.errors) > 0: for err in p.errors: print(err) exit(1) if PARSER_DEBUG: print("===== PARSER DEBUG =====") #program: Program = p.parse_program() with open("debug/ast.json", "w") as f: json.dump(program.json(), f, indent=4) print("Wrote AST to debug/ast.json successfully.") c: Compiler = Compiler() c.compile(program) module: ir.Module = c.module module.triple = targets.get_default_triple() if COMPILER_DEBUG: with open("debug/ir.ll", "w") as f: f.write(str(module))