所以基本上我写了一个微小的解析器,并在解析器,我定义的类型大量如下是否可以直接在OCaml中将字符串打印为字符串?
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*)
是否有可能..?任何人都可以给我一些帮助吗?后来
type stackop = PUSH | POP deriving (Show, Enum)
然后你可以使用:
如果你愿意使用CamlP4,那么教程文档在第7.5节中有一个确切的例子。 http://caml.inria.fr/pub/docs/tutorial-camlp4/tutorial007.html否则,我不确定是否可以从Ocaml内。也许只是从类型定义中生成代码? – stonemetal
http://stackoverflow.com/questions/1777720/hashtable-indexed-on-several-fields – ygrek