phi-lang/compile.phi
2025-09-25 15:59:06 +02:00

42 lines
1.0 KiB
Plaintext

(import "./stdlib.phi" (slice contains indent))
(import "./compiler/parse.phi" (Parser tokenize))
(import "./compiler/emit_js.phi" (JsEmitter))
(fn print_expr (expr depth) (do
(let (ty line value) expr)
(if (== ty "list") (do
(println "%(% %" (indent depth) ty line)
(for e value (do
(print_expr e (+ depth 1))
))
(println "%)" (indent depth))
) (do
(println "%%" (indent depth) expr)
))
))
(let (input_filename_rel output_filename_rel) (get_args))
(let input_filename (fs_resolve (fs_cwd) input_filename_rel))
(let output_filename (fs_resolve (fs_cwd) output_filename_rel))
(println "compiling '%'..." input_filename)
(let text (read_text_file input_filename))
(let tokens (tokenize text))
(let parser (Parser tokens))
(let (parse) parser)
(let ast (parse))
(let emitter (JsEmitter ast input_filename))
(let (emit) emitter)
(let js_code (emit))
// (println "=== js ===")
// (println js_code)
(write_text_file output_filename js_code)
(println "writing '%'" output_filename)