#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") )