Compare commits

..

2 Commits

Author SHA1 Message Date
Scott Richmond
70b6a1dcd7 correctly parse pkg-name and pkg-kw 2024-05-20 18:11:49 -04:00
Scott Richmond
23128902bc add pkg-kw tokens 2024-05-20 18:04:24 -04:00
2 changed files with 27 additions and 7 deletions

View File

@ -163,6 +163,12 @@
(advance parser) (advance parser)
{:type :keyword :data (curr :literal) :token curr}) {:type :keyword :data (curr :literal) :token curr})
(defn- pkg-kw [parser]
(expect parser :pkg-kw)
(def curr (-> parser current))
(advance parser)
{:type :pkg-kw :data (curr :literal) :token curr})
(defn- nill [parser] (defn- nill [parser]
(expect parser :nil) (expect parser :nil)
(def curr (current parser)) (def curr (current parser))
@ -255,7 +261,7 @@
(panic parser (string "expected separator, got " (-> parser current type)))) (panic parser (string "expected separator, got " (-> parser current type))))
(while (separates? parser) (advance parser))) (while (separates? parser) (advance parser)))
(def sequels [:lparen :keyword]) (def sequels [:lparen :keyword :pkg-kw])
(defn- word-expr [parser] (defn- word-expr [parser]
(expect parser :word) (expect parser :word)
@ -321,6 +327,7 @@
(case (-> parser current type) (case (-> parser current type)
:lparen (args parser) :lparen (args parser)
:keyword (kw-only parser) :keyword (kw-only parser)
:pkg-kw (pkg-kw parser)
)) ))
(array/push terms term) (array/push terms term)
) )
@ -830,7 +837,9 @@
(defn- pkg-name [parser] (defn- pkg-name [parser]
(expect parser :pkg-name) (expect parser :pkg-name)
(def origin (current parser)) (def origin (current parser))
(if (= :keyword (-> parser peek type)) (break (synthetic parser))) (def next-type (-> parser peek type))
(when (or (= :keyword next-type) (= :pkg-kw next-type))
(break (synthetic parser)))
(advance parser) (advance parser)
{:type :pkg-name :data (origin :lexeme) :token origin}) {:type :pkg-name :data (origin :lexeme) :token origin})
@ -1106,7 +1115,8 @@
# (do # (do
(comment (comment
(def source `a :b :c (def source `
Foo :bar :Baz
`) `)
(def scanned (s/scan source)) (def scanned (s/scan source))
(print "\n***NEW PARSE***\n") (print "\n***NEW PARSE***\n")
@ -1115,9 +1125,9 @@
# (print (pp-ast parsed)) # (print (pp-ast parsed))
# (pp scanned) # (pp scanned)
# (pp parsed) (pp parsed)
(def cleaned (get-in parsed [:data 2])) # (def cleaned (get-in parsed [:data 2]))
(pp cleaned) # (pp cleaned)
) )

View File

@ -169,6 +169,15 @@
:else (add-error scanner (string "Unexpected " char "after keyword :" key))))) :else (add-error scanner (string "Unexpected " char "after keyword :" key)))))
(recur scanner "")) (recur scanner ""))
(defn- add-pkg-kw [scanner]
(defn recur [scanner key]
(let [char (current-char scanner)]
(cond
(terminates? char) (add-token scanner :pkg-kw (keyword key))
(word-char? char) (recur (advance scanner) (string key char))
:else (add-error scanner (string "Unexpected " char " after pkg keyword :" key)))))
(recur scanner ""))
(defn- read-literal [lit] (-> lit parse-all first)) (defn- read-literal [lit] (-> lit parse-all first))
### TODO: consider whether Janet's number rules are right for Ludus ### TODO: consider whether Janet's number rules are right for Ludus
@ -299,7 +308,8 @@
# XXX: make sure we want only lower-only keywords # XXX: make sure we want only lower-only keywords
":" (cond ":" (cond
(lower? next) (add-keyword scanner) (lower? next) (add-keyword scanner)
:else (add-error scanner (string "Expected keyword. Got " char next))) (upper? next) (add-pkg-kw scanner)
:else (add-error scanner (string "Expected keyword or pkg keyword. Got " char next)))
## splats ## splats
"." (let [after_next (current-char (advance scanner))] "." (let [after_next (current-char (advance scanner))]