From 776f975d54a146bbee715aacadba22dbf9ffc6ad Mon Sep 17 00:00:00 2001 From: Scott Richmond Date: Fri, 26 May 2023 15:21:55 -0400 Subject: [PATCH] Collate TODOs; comment repl cruft --- TODO.xit | 41 ++++++++++++++++++++++++------ src/ludus/grammar.clj | 52 ++++++++++++++++++++------------------- src/ludus/interpreter.clj | 8 ++---- 3 files changed, 62 insertions(+), 39 deletions(-) diff --git a/TODO.xit b/TODO.xit index 57decd2..99156d3 100644 --- a/TODO.xit +++ b/TODO.xit @@ -1,14 +1,39 @@ -[ ] Wire up interpreter for spawn and receive -[ ] Write send function + +[x] Fix recursive definition problems in grammar.clj + +TODOS from interpreter +[ ] implement tuple splat patterns +[ ] update match-list to use new AST representation +[ ] fix length comparison when pattern includes splats +[ ] update match-dict to use new AST representation +[ ] update match-struct to use new AST representation +[ ] update interpret-receive to use new AST representation +[ ] Check interpret-fn-inner ctx for cycles/bugs + +Re-add processes to the language +[ ] Write send as function +[ ] update interpret-spawn to use new AST representation [ ] ---- Investigate weird timing issue in current send implementation -[ ] Investigate with-bindings and virtual threads - -[ ] Fix recursive definition problems in grammar.clj +[ ] Investigate `with-bindings` and virtual threads +Finish interpreter [ ] Wire up new interpreter to repl, script situation - -[ ] Write compiler - [ ] Merge new interpreter +Write a compiler: desugaring +[ ] `...` to `..._` in tuple & list patterns +[ ] placeholder partial application to anonymous lambda +[ ] word -> :[word] word in pairs (patterns & expressions) + +Write a compiler: correctness +[ ] check for unbound names +[ ] check for re-binding names +[ ] check that recur is in tail position +[ ] check that recur is only called inside loop or fn forms +[ ] check ns accesses + +Write a compiler: optimization +[ ] devise tail call optimization + +Next steps [ ] Get drawing working? diff --git a/src/ludus/grammar.clj b/src/ludus/grammar.clj index 26575c4..13c55ee 100644 --- a/src/ludus/grammar.clj +++ b/src/ludus/grammar.clj @@ -273,37 +273,39 @@ ;;; REPL -(def source - "2" - ) +(comment -(def rule (literal)) + (def source + "if 1 then 2 else 3" + ) -(def tokens (-> source scan/scan :tokens)) + (def rule (literal)) -(def result (apply-parser literal tokens)) + (def tokens (-> source scan/scan :tokens)) + + (def result (apply-parser script tokens)) -(defn report [node] - (when (fail? node) (err-msg node)) - node) + (defn report [node] + (when (fail? node) (err-msg node)) + node) -(defn clean [node] - (if (map? node) - (-> node - (report) - (dissoc - ;:status - :remaining - :token) - (update :data #(into [] (map clean) %))) - node)) + (defn clean [node] + (if (map? node) + (-> node + (report) + (dissoc + ;:status + :remaining + :token) + (update :data #(into [] (map clean) %))) + node)) -(defn tap [x] (println "\n\n\n\n******NEW RUN\n\n:::=> " x "\n\n") x) + (defn tap [x] (println "\n\n\n\n******NEW RUN\n\n:::=> " x "\n\n") x) -(def my-data (-> result - clean - tap - )) + (def my-data (-> result + clean + tap + )) -(println my-data) \ No newline at end of file + (println my-data)) \ No newline at end of file diff --git a/src/ludus/interpreter.clj b/src/ludus/interpreter.clj index fe8f254..2e46db3 100644 --- a/src/ludus/interpreter.clj +++ b/src/ludus/interpreter.clj @@ -718,7 +718,7 @@ (defn- interpret-literal [ast] (-> ast :data first)) (defn interpret-ast [ast ctx] - (println "interpreting ast type" (:type ast)) + ;(println "interpreting ast type" (:type ast)) ;(println "AST: " ast) (case (:type ast) @@ -865,9 +865,8 @@ (do - (process/start-vm) (def source " - ref a = 1 + if 1 then 2 else 3 ") (println "") @@ -885,9 +884,6 @@ (println result) result)) - -(show/show false) - (comment " Left to do: