stringify.ml 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. open Types
  2. let utf8_omega = "\xcf\x89"
  3. let utf8_pound = "\xc2\xa3"
  4. let utf8_super = [|
  5. "\xe2\x81\xb0"; "\xc2\xb9"; "\xc2\xb2"; "\xc2\xb3"; "\xe2\x81\xb4";
  6. "\xe2\x81\xb5"; "\xe2\x81\xb6"; "\xe2\x81\xb7"; "\xe2\x81\xb8"; "\xe2\x81\xb9"
  7. |]
  8. let cat string_of_ins instrs =
  9. "(" ^ String.concat ";" (List.map string_of_ins instrs) ^ ")"
  10. let rec string_of_ins_ascii = function
  11. | Basic c -> Char.escaped c
  12. | Terminate -> "!"
  13. | Ptest c -> "+" ^ Char.escaped c
  14. | Ntest c -> "-" ^ Char.escaped c
  15. | Jump len -> "#" ^ string_of_int len
  16. | Concat l -> cat string_of_ins_ascii l
  17. | Repeat (i, n) -> string_of_ins_ascii i ^ string_of_int n
  18. | Loop i -> string_of_ins_ascii i ^ "*"
  19. | Program c -> Char.escaped c
  20. | Empty -> ""
  21. let rec string_of_ins_utf8 = function
  22. | Concat l -> cat string_of_ins_utf8 l
  23. | Repeat (i, n) when n <= 9 -> string_of_ins_utf8 i ^ utf8_super.(n)
  24. | Loop i -> string_of_ins_utf8 i ^ utf8_omega
  25. | i -> string_of_ins_ascii i
  26. let rec string_of_ins_latex = function
  27. | Concat l -> cat string_of_ins_latex l
  28. | Repeat (i, n) -> string_of_ins_latex i ^ "^{" ^ string_of_int n ^ "}"
  29. | Loop i -> string_of_ins_latex i ^ "^\\omega"
  30. | i -> string_of_ins_ascii i
  31. let string_of_program_ascii instrs =
  32. String.concat ";" (List.map string_of_ins_ascii instrs)
  33. let string_of_program_utf8 instrs =
  34. String.concat ";" (List.map string_of_ins_utf8 instrs)
  35. let string_of_program_latex instrs =
  36. "$" ^ String.concat ";" (List.map string_of_ins_latex instrs) ^ "$"