bmx 0.0.2

Binary modeling expressions
Documentation
;; -*- scheme -*-

(enum Expr
  (discriminants (op u8))
  (variants
   (Const 0 (fields (value u32)))
   (Sum 1 (fields (n-args u8 hidden)
                  (args (array n-args Expr))))
   (Product 2 (fields (n-args u8 hidden)
                      (args (array n-args Expr))))))

(enum Command
  (discriminants (tag u8))
  (variants
   (PencilDown (= tag 0))
   (PencilUp (= tag 1))
   (Turn (= tag 2)
         (fields (angle u32)))
   (Move (= tag 3)
         (fields (distance u32)))
   (Loop (= tag 4)
         (fields (n-iterations u32)
                 (body-len u32 hidden)
                 (body (array body-len Command))))
   (Eval (= tag 5)
         (fields (expr Expr)))))

;; Local Variables:
;; eval: (put 'branch 'scheme-indent-function 1)
;; eval: (put 'enum 'scheme-indent-function 1)
;; End: