zk.rkt 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #lang racket
  2. (provide zk_variable)
  3. (provide zk_constant)
  4. (provide zk_param)
  5. (provide zk_public)
  6. (provide zk_local)
  7. (provide zk_private)
  8. (provide zk_comment)
  9. (provide zk_set)
  10. (provide zk_add)
  11. (provide zk_sub)
  12. (provide zk_mul)
  13. (provide zk_divide)
  14. (provide zk_load)
  15. (provide zk_lc0_add)
  16. (provide zk_lc1_add)
  17. (provide zk_lc2_add)
  18. (provide zk_lc0_sub)
  19. (provide zk_lc1_sub)
  20. (provide zk_lc2_sub)
  21. (provide zk_lc0_add_coeff)
  22. (provide zk_lc1_add_coeff)
  23. (provide zk_lc2_add_coeff)
  24. (provide zk_lc0_add_one)
  25. (provide zk_lc1_add_one)
  26. (provide zk_lc2_add_one)
  27. (provide zk_enforce)
  28. (provide create_zk_output)
  29. (provide zk_contract_begin)
  30. (provide zk_contract_end)
  31. (define out '0)
  32. (define (create_zk_output filename)
  33. (set! out (open-output-file "jj.psm" #:exists 'truncate))
  34. )
  35. (struct zk_variable
  36. (name type)
  37. )
  38. (define (zk_constant name hex_value)
  39. (fprintf out "constant ~a ~a\n" name hex_value)
  40. name
  41. )
  42. (define (zk_contract_begin contract_name)
  43. (fprintf out "contract ~a\n" contract_name)
  44. )
  45. (define (zk_contract_end)
  46. (fprintf out "end\n")
  47. )
  48. (define (zk_param name)
  49. (fprintf out "param ~a\n" name)
  50. (zk_variable name 'param)
  51. )
  52. (define (zk_public name)
  53. (fprintf out "public ~a\n" name)
  54. (zk_variable name 'public)
  55. )
  56. (define (strings->string sts)
  57. (apply string-append sts))
  58. (define (apply_ns namespace name)
  59. (strings->string
  60. (append namespace
  61. (list "__" (symbol->string name))
  62. )))
  63. (define (zk_local namespace name)
  64. (let ([name (apply_ns namespace name)])
  65. (fprintf out "local ~a\n" name)
  66. (zk_variable name 'local)
  67. )
  68. )
  69. (define (zk_private namespace name)
  70. (let ([name (apply_ns namespace name)])
  71. (fprintf out "private ~a\n" name)
  72. (zk_variable name 'private)
  73. )
  74. )
  75. (define (zk_comment str)
  76. (fprintf out "# ~a\n" str)
  77. )
  78. (define (zk_set self other)
  79. (fprintf out "set ~a ~a\n" (zk_variable-name self) (zk_variable-name other))
  80. )
  81. (define (zk_add self other)
  82. (fprintf out "add ~a ~a\n" (zk_variable-name self) (zk_variable-name other))
  83. )
  84. (define (zk_sub self other)
  85. (fprintf out "sub ~a ~a\n" (zk_variable-name self) (zk_variable-name other))
  86. )
  87. (define (zk_mul self other)
  88. (fprintf out "mul ~a ~a\n" (zk_variable-name self) (zk_variable-name other))
  89. )
  90. (define (zk_divide self other)
  91. (fprintf out "divide ~a ~a\n"
  92. (zk_variable-name self) (zk_variable-name other))
  93. )
  94. (define (zk_load self constant)
  95. (fprintf out "load ~a ~a\n" (zk_variable-name self) constant)
  96. )
  97. (define (zk_lc0_add self)
  98. (fprintf out "lc0_add ~a\n" (zk_variable-name self)))
  99. (define (zk_lc1_add self)
  100. (fprintf out "lc1_add ~a\n" (zk_variable-name self)))
  101. (define (zk_lc2_add self)
  102. (fprintf out "lc2_add ~a\n" (zk_variable-name self)))
  103. (define (zk_lc0_sub self)
  104. (fprintf out "lc0_sub ~a\n" (zk_variable-name self)))
  105. (define (zk_lc1_sub self)
  106. (fprintf out "lc1_sub ~a\n" (zk_variable-name self)))
  107. (define (zk_lc2_sub self)
  108. (fprintf out "lc2_sub ~a\n" (zk_variable-name self)))
  109. (define (zk_lc0_add_coeff constant self)
  110. (fprintf out "lc0_add_coeff ~a ~a\n" constant (zk_variable-name self)))
  111. (define (zk_lc1_add_coeff constant self)
  112. (fprintf out "lc1_add_coeff ~a ~a\n" constant (zk_variable-name self)))
  113. (define (zk_lc2_add_coeff constant self)
  114. (fprintf out "lc2_add_coeff ~a ~a\n" constant (zk_variable-name self)))
  115. (define (zk_lc0_add_one)
  116. (fprintf out "lc0_add_one\n"))
  117. (define (zk_lc1_add_one)
  118. (fprintf out "lc1_add_one\n"))
  119. (define (zk_lc2_add_one)
  120. (fprintf out "lc2_add_one\n"))
  121. (define (zk_enforce)
  122. (fprintf out "enforce\n")
  123. )