From e27e5a4c1a9c17bda55c5643c85237db681225b0 Mon Sep 17 00:00:00 2001 From: Scott Richmond Date: Wed, 31 May 2023 11:37:39 -0400 Subject: [PATCH] Add typed shorthand to dicts --- src/ludus/grammar.clj | 6 +++--- src/ludus/interpreter.clj | 5 ++++- src/ludus/interpreter_new.clj | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) 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)