2014-04-23 110 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

回答

相關問題