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