ocaml - 是否可以在 OCaml 中直接将 "type"作为字符串打印出来?

基本上我写了一个小解析器,在解析器中,我定义了大量类型如下

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*) 

有可能吗?谁能给我一些帮助?

最佳答案

您可以使用 deriving syntax extension

例如,您可以这样注释您的类型:

 type stackop = PUSH | POP deriving (Show, Enum)

然后你可以使用:

Show.show<stackop> some_stackop 

漂亮地打印一个 stackop 类型的值。

关于ocaml - 是否可以在 OCaml 中直接将 "type"作为字符串打印出来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23249975/

相关文章:

applescript - 如何使用 AppleScript 关闭 MS Office Ribbon

installation - NSIS:MUI_PAGE_INSTFILES 完成后如何自动按下 "

datomic - 将任意键/值条目与数据实体一起存储

angularjs - 关于Angular $q defer对象的问题

ruby-on-rails - 在 current_password 字段中设计更改验证消息

vb.net - MeasureText() - SizeF 到英寸

scala - 修复更高种类类型的类型推断

asp.net - 在 RDLC 报告 asp.net 中放置超链接

ember.js - 在 Github Pages 上的 Ember.js 中获取没有哈希的 url

azure - WAStorageEmulator.exe 启动失败