Ich habe dieses Stück Code, der ein Zitat von camlp4 enthält.Drucken OCaml AST als OCaml Code
let f_name = "my_func"
<:str_item< value $lid:f_name$ a = a * 2 >>
Danach durch camlp4of
einsetzen, dies erzeugt:
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")))))))
Meine Frage ist, ist es trotzdem, den generierten Code ocaml zu drucken? Was camlp4of
Befehl oder Option sollte ich verwenden, um den Code anzuzeigen? Was ich von dem obigen Beispiel zu sehen erwarte ist:
value my_func a = a * 2
Ist das möglich? Der Grund ist, weil ich ein Debugging durchführen möchte, um zu sehen, wie der erzeugte OCAML-Code aussieht.
Die Funktion 'Camlp4.PreCast.Printers.OCaml.print_implem' arbeitet nur mit' str_item'. Gibt es noch andere Drucker, die Ausdrucke drucken können? –
Unter dem Haken, sicherlich, aber sie sind nicht über die 'Drucker'-Schnittstelle ausgesetzt. Wie wäre es, wenn Sie Ihren Ausdruck einfach als 'let _ =' str_item? Für Typen können Sie auch 'type foo = ' usw. eingeben. –
gasche