ludus/janet/ludus.janet

41 lines
1.2 KiB
Plaintext
Raw Normal View History

# an integrated Ludus interpreter
(try (os/cd "janet") ([_] nil)) # for REPL
(import ./scanner :as s)
(import ./parser :as p)
(import ./validate :as v)
(import ./interpreter :as i)
# (defn run []
# (def scanned (s/scan source))
# (when (has-errors? scanned) (break (scanned :errors)))
# (def parsed (p/parse scanned))
# (when (has-errors? parsed) (break (parsed :errors)))
# (def validated (v/valid parsed b/ctx))
# # (when (has-errors? validated) (break (validated :errors)))
# # (def cleaned (get-in parsed [:ast :data 1]))
# # # (pp cleaned)
# # (interpret (parsed :ast) @{:^parent b/ctx})
# (try (interpret (parsed :ast) @{:^parent b/ctx})
# ([e] (if (struct? e) (error (e :msg)) (error e)))))
(defn main [source]
(def scanned (s/scan source))
(when (any? (scanned :errors))
(break (scanned :errors)))
(def parsed (p/parse scanned))
(when (any? (parsed :errors))
(break (parsed :errors)))
(def validated (v/valid parsed))
(when (any? (validated :errors))
(break (validated :errors)))
(try
(i/interpret (parsed :ast) @{})
([e] (if (struct? e) (error (e :msg)) (error e)))))
(def source `
fn foo () -> :foo
fool ()
`)
(main source)