From d253dc3d3eaed7ac6fc05c77718c90f35e535ec2 Mon Sep 17 00:00:00 2001 From: Scott Richmond Date: Fri, 19 Jan 2024 16:50:01 -0500 Subject: [PATCH] stash work --- janet/parser.janet | 2 +- janet/scanner.janet | 20 ++++++++++---------- justfile | 11 ++++++++--- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/janet/parser.janet b/janet/parser.janet index 454ba79..4f35553 100644 --- a/janet/parser.janet +++ b/janet/parser.janet @@ -33,7 +33,7 @@ (array? seq) (array/slice 1 len)))) (defn some? [val] (not (nil? val))) - + (defn apply-kw-parser [kw tokens] (let [token (first tokens)] #(if (= kw (get token :type)) (println "Matched " kw)) diff --git a/janet/scanner.janet b/janet/scanner.janet index 5bb6e58..1a205c1 100644 --- a/janet/scanner.janet +++ b/janet/scanner.janet @@ -1,7 +1,7 @@ (def reserved-words "List of Ludus reserved words." ## see ludus-spec repo for more info - {"as" :as ## impl for `import`# not yet for patterns + {"as" :as ## impl "do" :do ## impl "else" :else ## impl "false" :false ## impl -> literal word @@ -111,7 +111,7 @@ (def terminators { ":" true -"#" true +";" true "\n" true "{" true "}" true @@ -141,7 +141,7 @@ :line (get scanner :line) :start (get scanner :start) :source (get scanner :source) - :start (get scanner :input)})) + :input (get scanner :input)})) ## TODO: errors should also be in the vector of tokens ## The goal is to be able to be able to hand this to an LSP? @@ -190,17 +190,15 @@ ## TODO: activate string interpolation (defn- add-string [scanner] + (print "Adding string") (defn recur [scanner buff interpolate?] + (print "\n printing a thing from add-stirng" buff) (let [char (current-char scanner)] (case char "{" (recur (advance scanner) (buffer/push buff char) true) # allow multiline strings "\n" (recur (update (advance scanner) :line inc) (buffer/push buff char) interpolate?) - "\"" (if interpolate? - #(add-token (advance scanner) :interpolated string) - #no interpolation yet - (add-token (advance scanner) :string (string buff)) - (add-token (advance scanner) :string (string buff))) + "\"" (add-token (advance scanner) :string (string buff)) "\\" (let [next (next-char scanner) scanner (if (= next "\n") (update scanner :line inc) @@ -255,7 +253,7 @@ "}" (add-token (add-token scanner :break) :rbrace) "[" (add-token scanner :lbracket) "]" (add-token (add-token scanner :break) :rbracket) - "#" (add-token scanner :semicolon) + ";" (add-token scanner :semicolon) "," (add-token scanner :comma) "\n" (add-token (update scanner :line inc) :newline) "\\" (add-token scanner :backslash) @@ -315,7 +313,8 @@ (defn- next-token [scanner] (put scanner :start (get scanner :current))) -(defn scan [source input] +(defn scan [source &opt input] + (default input "") (defn recur [scanner] (if (at-end? scanner) (let [scanner (add-token (add-token scanner :break) :eof)] @@ -323,3 +322,4 @@ :errors (get scanner :errors)}) (recur (-> scanner (scan-token) (next-token))))) (recur (new-scanner source input))) + diff --git a/justfile b/justfile index 363f2cd..e3059a0 100644 --- a/justfile +++ b/justfile @@ -4,14 +4,19 @@ build: # open a janet repl in a different os window repl: - kitten @ launch --type=os-window --allow-remote-control --cwd=current --title=hx_repl:ludus janet -s + kitten @ launch --type=os-window --allow-remote-control --cwd=current --title=hx_repl:ludus + kitten @ send-text -m "title:hx_repl:ludus" "janet -s\n" +restart: + kitten @ send-text -m "title:hx_repl:ludus" "\04" + kitten @ send-text -m "title:hx_repl:ludus" "janet -s\n" + # send what's selected to the repl and evaluate it eval: sd "$" "\n" | sd "\n\n" "\n" | kitten @ send-text -m "title:hx_repl:ludus" --stdin # send what's selected to a buffer, and then evaluate what's in the buffer buffer: - sd "$" "\n" | sd "\n\n" "\n" > .repl-buffer - kitten @ send-text -m "title:hx_repl:ludus" --from-file .repl-buffer + sd "$" "\n" | sd "\n\n" "\n" > .repl-buffer.janet + kitten @ send-text -m "title:hx_repl:ludus" "(import ./.repl-buffer :prefix \"\")"