Files
darkfi/lisp/racket/zk.rkt
2020-10-28 01:26:55 +01:00

142 lines
3.5 KiB
Racket

#lang racket
(provide zk_variable)
(provide zk_constant)
(provide zk_param)
(provide zk_public)
(provide zk_local)
(provide zk_private)
(provide zk_comment)
(provide zk_set)
(provide zk_add)
(provide zk_sub)
(provide zk_mul)
(provide zk_divide)
(provide zk_load)
(provide zk_lc0_add)
(provide zk_lc1_add)
(provide zk_lc2_add)
(provide zk_lc0_sub)
(provide zk_lc1_sub)
(provide zk_lc2_sub)
(provide zk_lc0_add_coeff)
(provide zk_lc1_add_coeff)
(provide zk_lc2_add_coeff)
(provide zk_lc0_add_one)
(provide zk_lc1_add_one)
(provide zk_lc2_add_one)
(provide zk_enforce)
(provide create_zk_output)
(provide zk_contract_begin)
(provide zk_contract_end)
(define out '0)
(define (create_zk_output filename)
(set! out (open-output-file "jj.psm" #:exists 'truncate))
)
(struct zk_variable
(name type)
)
(define (zk_constant name hex_value)
(fprintf out "constant ~a ~a\n" name hex_value)
name
)
(define (zk_contract_begin contract_name)
(fprintf out "contract ~a\n" contract_name)
)
(define (zk_contract_end)
(fprintf out "end\n")
)
(define (zk_param name)
(fprintf out "param ~a\n" name)
(zk_variable name 'param)
)
(define (zk_public name)
(fprintf out "public ~a\n" name)
(zk_variable name 'public)
)
(define (strings->string sts)
(apply string-append sts))
(define (apply_ns namespace name)
(strings->string
(append namespace
(list "__" (symbol->string name))
)))
(define (zk_local namespace name)
(let ([name (apply_ns namespace name)])
(fprintf out "local ~a\n" name)
(zk_variable name 'local)
)
)
(define (zk_private namespace name)
(let ([name (apply_ns namespace name)])
(fprintf out "private ~a\n" name)
(zk_variable name 'private)
)
)
(define (zk_comment str)
(fprintf out "# ~a\n" str)
)
(define (zk_set self other)
(fprintf out "set ~a ~a\n" (zk_variable-name self) (zk_variable-name other))
)
(define (zk_add self other)
(fprintf out "add ~a ~a\n" (zk_variable-name self) (zk_variable-name other))
)
(define (zk_sub self other)
(fprintf out "sub ~a ~a\n" (zk_variable-name self) (zk_variable-name other))
)
(define (zk_mul self other)
(fprintf out "mul ~a ~a\n" (zk_variable-name self) (zk_variable-name other))
)
(define (zk_divide self other)
(fprintf out "divide ~a ~a\n"
(zk_variable-name self) (zk_variable-name other))
)
(define (zk_load self constant)
(fprintf out "load ~a ~a\n" (zk_variable-name self) constant)
)
(define (zk_lc0_add self)
(fprintf out "lc0_add ~a\n" (zk_variable-name self)))
(define (zk_lc1_add self)
(fprintf out "lc1_add ~a\n" (zk_variable-name self)))
(define (zk_lc2_add self)
(fprintf out "lc2_add ~a\n" (zk_variable-name self)))
(define (zk_lc0_sub self)
(fprintf out "lc0_sub ~a\n" (zk_variable-name self)))
(define (zk_lc1_sub self)
(fprintf out "lc1_sub ~a\n" (zk_variable-name self)))
(define (zk_lc2_sub self)
(fprintf out "lc2_sub ~a\n" (zk_variable-name self)))
(define (zk_lc0_add_coeff constant self)
(fprintf out "lc0_add_coeff ~a ~a\n" constant (zk_variable-name self)))
(define (zk_lc1_add_coeff constant self)
(fprintf out "lc1_add_coeff ~a ~a\n" constant (zk_variable-name self)))
(define (zk_lc2_add_coeff constant self)
(fprintf out "lc2_add_coeff ~a ~a\n" constant (zk_variable-name self)))
(define (zk_lc0_add_one)
(fprintf out "lc0_add_one\n"))
(define (zk_lc1_add_one)
(fprintf out "lc1_add_one\n"))
(define (zk_lc2_add_one)
(fprintf out "lc2_add_one\n"))
(define (zk_enforce)
(fprintf out "enforce\n")
)