평소대로 (cat
) 시퀀스 인 DSL 사양이 있습니다. 필자는 spec의 구문 분석 (예 : conform
ing)을 활용하여 내 DSL을 준수하는 표현식의 AST를 얻고 싶습니다. 예 :준수 사양/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에 대한 스펙을 작성해야합니다. 기본적으로 모든 것을 복제합니다. 실제로 이보다 나쁩니다. 왜냐하면 keys
에 대한 문서에서 "설계 상 인라인 값 사양에 대한 지원이 없습니다."라는 이유로 술어에 대한 설명이 없기 때문에 이제는 s/def
이라는 술어를 사용해야하기 때문입니다./"my.ns/k와 같은 네임 스페이스가 지정된 키워드와 관련된 값의 지정이 해당 키워드 자체에 등록되어야한다는 것은 사양의 (시행 된) 의견입니다."
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
을 그리고 지금은 호환 될 것으로 보인다 : 그래서합니다 (person-sym
부분을 생략하여) 복제
user> (s/conform ::person-ast (s/conform ::person '(person "Henry The Sloth" 55)))
=> {:person-sym person, :name "Henry The Sloth", :age 55}
, 나는 물론 더 복잡한 데이터를 가지고 있고, 나는 무엇을해야 궁금 ? AFAIK 사양은 내가 만든 AST에 대한 스펙을 제공하지 않습니다. (실제로 개인적으로 이것은해야 할 일이라고 생각합니다.) 어떤 제안?
네, 그렇게 생각했습니다. 감사합니다. 당신은 모든 것이 부자의 결정이라는 것을 암시하는 것입니다. 그렇다면 내가 물을 수 있다면, 누구도이 일을 그에게 가져다 주었습니까? 나는 그것이 그것의 가치가있을 것이라고 생각한다. – MasterMastic
나는이 아이디어에 대해 Rich가 들었습니다. –
도와 줘서 고마워. – MasterMastic