是否可以打印出;“类型”;直接作为OCaml中的字符串?
基本上我编写了一个小型解析器,在解析器中,我定义了大量类型,如下所示是否可以打印出;“类型”;直接作为OCaml中的字符串?,ocaml,abstract-syntax-tree,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
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"
....
type stackop = PUSH | POP deriving (Show, Enum)
但我的问题是,要打印的类型太多了,用上面的方式手动编写它们似乎很乏味
所以我想知道是否有更简单的方法,例如
let t_str = s.type in
print_string t_str
(*I know it is not typical OCaml style, I just want to demonstrate*)
有可能吗。。?谁能给我一些帮助吗?你可以使用
例如,您可以这样注释您的类型:
let pp_print = function
| PUSH -> "push" | POP -> "pop"
....
type stackop = PUSH | POP deriving (Show, Enum)
之后,您可以使用:
Show.show<stackop> some_stackop
Show.Show一些
要漂亮地打印stackop类型的值。如果您愿意使用CamlP4,那么教程文档在第7.5节中有一个具体的例子。否则,我不确定是否可以从Ocaml内部实现。也许只是从类型定义生成代码?谢谢您的回答:)