2017-01-16 3 views
4

У меня есть спецификация DSL, которая представляет собой последовательность, как обычно (cat). Я хочу воспользоваться анализом spec (т. Е. conform ing), чтобы получить AST выражения, которое соответствует моему DSL. Например.Характеристики совместимых спецификаций/AST

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} 

Теперь, когда он разбирается и у меня есть AST, я хотел бы сделать интересные вещи с ним, поэтому я хотел бы, чтобы проверить его и этажерку. Так что теперь мне нужно написать спецификацию для этого AST, и это в основном дублирует все. На самом деле это хуже, чем потому, что теперь у меня есть s/def спецификации для предикатов, которые мне не приходилось раньше, потому что в документах для keys говорится: «нет поддержки встроенной спецификации значения по дизайну»./«Это (принудительное) мнение о том, что спецификация значений, связанных с ключевым словом namespaced, например: my.ns/k, должна быть зарегистрирована под этим ключевым словом.». Таким образом, дублируя (с опуская person-sym часть):

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 

И теперь, кажется, чтобы быть совместимым:

user> (s/conform ::person-ast (s/conform ::person '(person "Henry The Sloth" 55))) 
=> {:person-sym person, :name "Henry The Sloth", :age 55} 

На практике, у меня есть более сложные данные, конечно, и мне интересно, что я должен делать ? Спецификация AFAIK не дает мне спецификации для AST, которую она создает (фактически лично я бы понял, что это то, что она должна делать). Какие-либо предложения?

ответ

0

Я бы сказал, что сейчас у вас есть два варианта: каждый должен делать то, что вы делаете, и создавать два набора спецификаций для до/после.

Другой вариант - создать модель вашего домена в данных и сгенерировать как (я видел, что многие люди делают что-то подобное).

Я не слышал Богатые разговоры о создании спецификации вывода согласованных результатов, поэтому я не думаю, что это вероятно в текущей дорожной карте.

+0

Да, я так и думал, спасибо. Вы подразумеваете, что все решение Рича, если да, и если я могу спросить, кто-нибудь когда-нибудь приносил это ему? Думаю, это того стоило. – MasterMastic

+0

Я не слышал, чтобы Рич обсуждал эту идею. –

+0

Вижу, большое спасибо за вашу помощь! – MasterMastic

Смежные вопросы