From cf1992f73caca32ce3b847b6a0d1db94a21a8f79 Mon Sep 17 00:00:00 2001 From: DualFroz Date: Wed, 26 Aug 2026 12:25:00 +0200 Subject: [PATCH] feat(core): add compile and run pipeline --- src/main/kotlin/lumen/Pipeline.kt | 43 +++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/main/kotlin/lumen/Pipeline.kt diff --git a/src/main/kotlin/lumen/Pipeline.kt b/src/main/kotlin/lumen/Pipeline.kt new file mode 100644 index 0000000..6a38440 --- /dev/null +++ b/src/main/kotlin/lumen/Pipeline.kt @@ -0,0 +1,43 @@ +package lumen + +import lumen.ast.Stmt +import lumen.compiler.Compiler +import lumen.lexer.Lexer +import lumen.lexer.Token +import lumen.module.ModuleLoader +import lumen.parser.Parser +import lumen.runtime.FunctionValue +import lumen.vm.Vm +import java.io.File + +object Lumen { + fun tokenize(source: String): List = Lexer(source).scan() + + fun parse(source: String): List = Parser(tokenize(source)).parseProgram() + + fun compile(source: String): FunctionValue = Compiler().compile(parse(source)) + + fun run(source: String, out: Appendable = System.out): Value { + val script = compile(source) + return Vm(out).interpret(script) + } + + fun runToString(source: String): String { + val buffer = StringBuilder() + run(source, buffer) + return buffer.toString() + } + + fun runFile(file: File, out: Appendable = System.out): Value { + val vm = Vm(out) + return ModuleLoader(vm).load(file) + } + + fun runFileToString(path: String): String { + val buffer = StringBuilder() + runFile(File(path), buffer) + return buffer.toString() + } +} + +typealias Value = lumen.runtime.Value