41 lines
1.2 KiB
Plaintext
41 lines
1.2 KiB
Plaintext
# 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)
|