所以基本上我寫了一個微小的解析器,並在解析器,我定義的類型大量如下是否可以直接在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