2017-01-16 11 views
4

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?

Antwort

0

Ich würde sagen, Sie haben jetzt zwei Möglichkeiten - eine ist zu tun, was Sie tun und erstellen zwei Sätze von Spezifikationen für die Vorher/Nachher.

Die andere Option ist, ein Modell Ihrer Domäne in Daten zu erstellen und beide specs zu generieren (ich habe viele Leute gesehen, die so etwas tun).

Ich habe nicht gehört, dass Rich über das Generieren der Ausgabespezifikation der angepassten Ergebnisse spricht, also glaube ich nicht, dass das in der aktuellen Roadmap wahrscheinlich ist.

+0

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

+0

Ich habe Rich nicht gehört, diese Idee zu diskutieren. –

+0

Ich sehe, vielen Dank für Ihre Hilfe! – MasterMastic