Skip to content

Instantly share code, notes, and snippets.

@eraserhd
Created November 13, 2015 23:05
Show Gist options
  • Save eraserhd/bcdc5a04a54f96e95ab2 to your computer and use it in GitHub Desktop.
Save eraserhd/bcdc5a04a54f96e95ab2 to your computer and use it in GitHub Desktop.
Parse-tree generators
;; ...
(defn forms-node*
[child-generator]
(gen/fmap node/forms-node (gen/vector child-generator)))
(defn list-node*
[child-generator]
(gen/fmap node/list-node (gen/vector child-generator)))
;; TODO: Ensure an even number of non-whitespace nodes
(defn map-node*
[child-generator]
(gen/fmap node/map-node (gen/vector child-generator)))
(defn set-node*
[child-generator]
(gen/fmap node/set-node (gen/vector child-generator)))
(defn vector-node*
[child-generator]
(gen/fmap node/vector-node (gen/vector child-generator)))
(defn container-node
[inner-generator]
(gen/one-of [(forms-node* inner-generator)
(list-node* inner-generator)
(map-node* inner-generator)
(set-node* inner-generator)
(vector-node* inner-generator)]))
(def node
(gen/recursive-gen container-node leaf-node))
(def children
(gen/vector node))
(def forms-node (forms-node* node))
(def list-node (list-node* node))
(def map-node (map-node* node))
(def set-node (set-node* node))
(def vector-node (vector-node* node))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment