gpt4 book ai didi

clojure - 符合规范/AST 的规范

转载 作者:行者123 更新时间:2023-12-03 14:59:13 24 4
gpt4 key购买 nike

我有一个 DSL 规范,它是一个像往常一样的序列( cat )。我想利用规范的解析(即 conform ing)来获取符合我的 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 的规范(实际上我个人认为这是它应该做的事情)。有什么建议?

最佳答案

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

另一种选择是在数据中创建域的模型并生成两个规范(我已经看到很多人正在做这样的事情)。

我还没有听到 Rich 谈到生成符合结果的输出规范,所以我认为在当前的路线图中不太可能。

关于clojure - 符合规范/AST 的规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41686718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com