所以基本上我写了一个很小的解析器,在解析器中,我定义了大量的类型如下
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*)
有可能......?有人能给我一些帮助吗?
答案 0 :(得分:3)
您可以使用deriving syntax extension
例如,您可以像这样注释您的类型:
type stackop = PUSH | POP deriving (Show, Enum)
然后你可以使用:
Show.show<stackop> some_stackop
漂亮地打印一个stackop类型的值。