是否可以打印"类型"直接作为OCaml中的字符串?

时间:2014-04-23 16:15:36

标签: ocaml abstract-syntax-tree

所以基本上我写了一个很小的解析器,在解析器中,我定义了大量的类型如下

let stackop = PUSH | POP
and systemop = INT | IN | OUT
and arithmop = ADC | ADD | XADD | SUB
           | MUL | IMUL | DIV | IDIV
           | INC | DEC | NEG
and logicop = AND | OR | XOR
and rolop = ROL | SHL | SHR | SHLD |SHRD | SAL | SAR
.....

所以目前解析后,我想实现一个典型的“pretty_print”函数来打印出语法树

基本上,据我所知,我必须实现一个pp_print函数,它将所有这些类型转换为相应的字符串,如下所示:

let pp_print = function
  | PUSH -> "push" | POP -> "pop"
  ....

但我的问题是,要打印的类型太多,以上述方式手动编写它们似乎很乏味。

所以我想知道是否有更简单的方法,例如

let t_str = s.type in 
  print_string t_str       
(*I know it is not typical OCaml style, I just want to demonstrate*) 

有可能......?有人能给我一些帮助吗?

1 个答案:

答案 0 :(得分:3)

您可以使用deriving syntax extension

例如,您可以像这样注释您的类型:

 type stackop = PUSH | POP deriving (Show, Enum)

然后你可以使用:

Show.show<stackop> some_stackop 

漂亮地打印一个stackop类型的值。