是否有允许在源文件中过滤注释的OCaml工具,类似于gcc -E
理想情况下,我正在寻找的东西,将删除所有的东西,除了评论,但反过来也将是有用的。
例如,如果有一种方法可以使用camlp4 4/campl5/ppx来获取OCaml注释(包括用一个星号定义的非OCamldoc注释),我想知道。我在Camlp4 4‘’的AST中寻找注释节点还没有成功(尽管我知道它一定存在,因为甚至还有与Camlp4修改位置相关的bug)。
下面是一个示例:在以下文件中:
(*** three asterisks *)
let f () =
Format.printf "end"
let () =
(* one asterisk (* nested comment *) *)
Printf.printf "hello world\n";
(** two asterisks *)
f();
()我最理想的愿望是:
(*** three asterisks *)
(* one asterisk (* nested comment *) *)
(** two asterisks *)它们之间的空白和(* *)的存在或不存在基本上是无关的,但它应该保留所有类型的注释。我的直接目的是能够将其过滤到拼写检查器中,但清除注释(即只有一个只剥离注释的筛选器)也是有用的:我可以清理注释,然后使用diff获取已删除的注释。
发布于 2017-02-09 12:31:01
发布于 2017-02-03 19:03:21
您可以将奥卡姆多与使用文本表示形式转储注释的自定义生成器一起使用。
发布于 2017-02-06 11:59:42
我在camlp5上做了一些有趣的实验,尝试着为任何代码项打印漂亮的""。以下代码:
let ignore _ _ _ = ""
let rule f = Extfun.(extend f [Evar (),false, fun _ -> Some ignore])
let () =
Eprinter.extend Pcaml.pr_str_item None [ None, rule ];
Eprinter.extend Pcaml.pr_sig_item None [ None, rule ]将禁用任何str_item (即模块实现的toplevel项)或sig_item (模块接口的toplevel项)的漂亮打印,方法是使用输出任何str_item空字符串的catch-all rule来扩展相应的默认打印机。用
ocamlfind ocamlc -c -package camlp5 pr_comment.ml并把它当作
camlp5o pr_o.cmo path/to/pr_comment.cmo -o only_comment.ml my_file.mlhttps://stackoverflow.com/questions/42031070
复制相似问题