2014-04-23 73 views
3

所以基本上我写了一个微小的解析器,并在解析器,我定义的类型大量如下是否可以直接在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) 

然后你可以使用:

+0

如果你愿意使用CamlP4,那么教程文档在第7.5节中有一个确切的例子。 http://caml.inria.fr/pub/docs/tutorial-camlp4/tutorial007.html否则,我不确定是否可以从Ocaml内。也许只是从类型定义中生成代码? – stonemetal

+0

http://stackoverflow.com/questions/1777720/hashtable-indexed-on-several-fields – ygrek

回答

相关问题