У меня есть этот кусок кода, который содержит цитату camlp4.Печать OCaml AST как OCaml Код
let f_name = "my_func"
<:str_item< value $lid:f_name$ a = a * 2 >>
После запуска этого через camlp4of
, он производит это:
Ast.StExp (_loc,
(Ast.ExApp (_loc,
(Ast.ExApp (_loc, (Ast.ExId (_loc, (Ast.IdLid (_loc, "=")))),
(Ast.ExApp (_loc,
(Ast.ExApp (_loc,
(Ast.ExId (_loc, (Ast.IdLid (_loc, "value")))),
(Ast.ExId (_loc, (Ast.IdLid (_loc, f_name)))))),
(Ast.ExId (_loc, (Ast.IdLid (_loc, "a")))))))),
(Ast.ExApp (_loc,
(Ast.ExApp (_loc, (Ast.ExId (_loc, (Ast.IdLid (_loc, "*")))),
(Ast.ExId (_loc, (Ast.IdLid (_loc, "a")))))),
(Ast.ExInt (_loc, "2")))))))
Мой вопрос заключается в следующем, есть в любом случае, чтобы распечатать сгенерированный код OCaml? Какую команду camlp4of
или параметр следует использовать для показа кода? То, что я ожидаю увидеть из приведенного выше примера, следующее:
value my_func a = a * 2
Возможно ли это? Причина в том, что я хочу сделать некоторую отладку, чтобы посмотреть, как выглядит сгенерированный код ocaml.
Функция 'Camlp4.PreCast.Printers.OCaml.print_implem' работает только с' str_item'. Есть ли другие принтеры, которые могут печатать 'expr'? –
Под крюком, конечно, но они не отображаются через интерфейс «Принтеры». Как насчет того, чтобы обернуть ваше выражение как 'let _ =' str_item? Для типов вы также можете использовать 'type foo = ' и т. Д. –
gasche