当前位置:  开发笔记 > 编程语言 > 正文

符合规格/ AST的规格

如何解决《符合规格/AST的规格》经验,为你挑选了0个好方法。

我有一个DSL规范,这是一个像往常一样的序列(cat).我想利用spec的解析(即conforming)来获得符合我的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所说:"根据设计,不支持内联值规范." /"规范的(强制执行的)意见是,与命名空间关键字相关联的值的规范,例如: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的规范(实际上我个人认为这是它应该做的事情).有什么建议?

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有