diff --git a/src/ludus/grammar.clj b/src/ludus/grammar.clj index 095aae0..97634e8 100644 --- a/src/ludus/grammar.clj +++ b/src/ludus/grammar.clj @@ -47,7 +47,9 @@ (defp pair-pattern group weak-order [:keyword pattern]) -(defp dict-pattern-term flat choice [pair-pattern :word splattern]) +(defp typed group weak-order [:word (quiet :as) :keyword]) + +(defp dict-pattern-term flat choice [pair-pattern :word typed splattern]) (defp dict-pattern-entry weak-order [dict-pattern-term separators]) @@ -65,8 +67,6 @@ (defp guard order-0 [(quiet :when) expression]) -(defp typed group weak-order [:word (quiet :as) :keyword]) - (defp pattern flat choice [literal :ignored :placeholder diff --git a/src/ludus/interpreter.clj b/src/ludus/interpreter.clj index d0f03ba..d09ac97 100644 --- a/src/ludus/interpreter.clj +++ b/src/ludus/interpreter.clj @@ -139,6 +139,9 @@ :pair-pattern (assoc map (-> data first :data first) (second data)) + :typed + (assoc map (-> data first :data first keyword) member) + map ;;ignore splats ))) @@ -933,7 +936,7 @@ (do (def source " - let #{:a a as :number} = #{:a 1} + let #{a as :number} = #{:a 1} a ") diff --git a/src/ludus/interpreter_new.clj b/src/ludus/interpreter_new.clj index d22c685..3c7c268 100644 --- a/src/ludus/interpreter_new.clj +++ b/src/ludus/interpreter_new.clj @@ -5,13 +5,13 @@ [ludus.scanner :as s])) (def source - "spawn foo + "#{a as :number} " ) (def tokens (-> source s/scan :tokens)) -(def result (p/apply-parser g/spawn tokens)) +(def result (p/apply-parser g/dict-pattern tokens)) (-> result :data)