Tôi có đoạn mã này có chứa báo giá camlp4.In OCaml AST dưới dạng Mã OCaml
let f_name = "my_func"
<:str_item< value $lid:f_name$ a = a * 2 >>
Sau khi chạy này thông qua camlp4of
, nó tạo ra này:
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")))))))
Câu hỏi của tôi là thế này, là có anyway để in mã ocaml tạo? Tôi nên sử dụng lệnh hoặc tùy chọn nào camlp4of
để hiển thị mã? Những gì tôi mong đợi để xem từ ví dụ trên là:
value my_func a = a * 2
Điều đó có thể? Lý do là vì tôi muốn thực hiện một số gỡ lỗi để xem mã ocaml được tạo ra trông như thế nào.
Chức năng 'Camlp4.PreCast.Printers.OCaml.print_implem' chỉ hoạt động trên' str_item'. Có bất kỳ máy in nào khác có thể in 'expr' không? –
Theo móc, chắc chắn, nhưng chúng không được hiển thị thông qua giao diện 'Máy in'. Điều gì về chỉ gói biểu thức của bạn như là một 'let _ =' str_item? Đối với các loại, bạn cũng có thể thực hiện 'loại foo = ', v.v. –
gasche