# 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)