Ich habe eine DSL-Spezifikation, die wie üblich eine Sequenz ist (cat
). Ich möchte die Analyse der Spezifikation nutzen (d. H. conform
ing), um den AST eines Ausdrucks zu erhalten, der meinem DSL entspricht. Z.B.Spezifikationen für konforme Spezifikationen/ASTs
user> (s/def ::person (s/cat :person-sym '#{person} :name string? :age number?))
=> :user/person
user> (s/conform ::person '(person "Henry The Sloth" 55))
=> {:person-sym person, :name "Henry The Sloth", :age 55}
Jetzt, wo es analysiert hat und ich meine AST haben, würde ich mit ihm interessante Dinge tun wollen, so würde ich es und so weiter testen möchten. So, jetzt muss ich eine Spezifikation für diese AST schreiben, und das ist im Grunde alles duplizieren. Eigentlich ist es schlechter als als das, weil ich jetzt s/def
Spezifikationen für Prädikate, die ich vorher nicht haben musste, weil die Dokumentation für keys
sagt: "Es gibt keine Unterstützung für Inline-Wert-Spezifikation, von Design."/"Es ist die (erzwungene) Meinung von spec, dass die Spezifikation von Werten, die einem Namespace-Schlüsselwort zugeordnet sind, wie: my.ns/k, unter diesem Schlüsselwort selbst registriert werden soll." So duplizieren (mit Weglassen des person-sym
Teil):
user> (s/def ::name string?)
=> :user/name
user> (s/def ::age number?)
=> :user/age
user> (s/def ::person-ast (s/keys :req-un [::name ::age]))
:user/person-ast
Und jetzt scheint es zu sein, kompatibel:
user> (s/conform ::person-ast (s/conform ::person '(person "Henry The Sloth" 55)))
=> {:person-sym person, :name "Henry The Sloth", :age 55}
In der Praxis habe ich kompliziertere Daten natürlich, und ich frage mich, was soll ich tun ? AFAIK Spezifikation gibt mir nicht die Spezifikation für die AST, die es erstellt (eigentlich persönlich würde ich denken, dass dies etwas ist, was es tun soll). Irgendwelche Vorschläge?
Ja, ich dachte, danke. Du sprichst an, dass alles Richs Entscheidung ist, wenn ja, und wenn ich fragen darf, hat ihm das jemals jemand vorgebracht? Ich denke, es wäre es wert. – MasterMastic
Ich habe Rich nicht gehört, diese Idee zu diskutieren. –
Ich sehe, vielen Dank für Ihre Hilfe! – MasterMastic