首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >符合规格/AST的规格

符合规格/AST的规格
EN

Stack Overflow用户
提问于 2017-01-16 23:31:30
回答 1查看 122关注 0票数 6

我有一个DSL规范,这是一个像往常一样的序列(cat)。我想利用规范的解析(即conforming)来获得符合我的DSL的表达式的AST。例如。

代码语言:javascript
复制
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的文档说:“通过设计,不支持内联值规范。”/“规范的(强制)意见是,与命名空间关键字相关联的值的规范应该在该关键字本身下注册。”因此,复制(省略person-sym部分):

代码语言:javascript
复制
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

现在,它似乎是兼容的:

代码语言:javascript
复制
user> (s/conform ::person-ast (s/conform ::person '(person "Henry The Sloth" 55)))
=> {:person-sym person, :name "Henry The Sloth", :age 55}

在实践中,我当然有更复杂的数据,我想知道我应该做什么?AFAIK规范没有给我它创建的AST的规范(实际上,我个人认为这是它应该做的事情)。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2017-01-17 15:20:53

我想说,现在你有两个选择-一个是做你正在做的事情,并为前/后创建两组规范。

另一种选择是在数据中创建一个域模型,并生成这两种规范(我见过许多人正在做类似的事情)。

我没有听说过Rich关于生成一致结果的输出规范,所以我不认为这在当前的路线图中是可能的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41686718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档