基本上我写了一个小解析器,在解析器中,我定义了大量类型如下
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 完成后如何自动按下 "
angularjs - 关于Angular $q defer对象的问题
ruby-on-rails - 在 current_password 字段中设计更改验证消息
vb.net - MeasureText() - SizeF 到英寸
asp.net - 在 RDLC 报告 asp.net 中放置超链接