首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lexer/注释筛选器

Lexer/注释筛选器
EN

Stack Overflow用户
提问于 2017-02-03 18:48:34
回答 3查看 277关注 0票数 1

是否有允许在源文件中过滤注释的OCaml工具,类似于gcc -E

理想情况下,我正在寻找的东西,将删除所有的东西,除了评论,但反过来也将是有用的。

例如,如果有一种方法可以使用camlp4 4/campl5/ppx来获取OCaml注释(包括用一个星号定义的非OCamldoc注释),我想知道。我在Camlp4 4‘’的AST中寻找注释节点还没有成功(尽管我知道它一定存在,因为甚至还有与Camlp4修改位置相关的bug)。

下面是一个示例:在以下文件中:

代码语言:javascript
复制
(*** three asterisks *)
let f () =
  Format.printf "end"

let () =
  (* one asterisk (* nested comment *) *)
  Printf.printf "hello world\n";
  (** two asterisks *)
  f();
  ()

我最理想的愿望是:

代码语言:javascript
复制
(*** three asterisks *)
(* one asterisk (* nested comment *) *)
(** two asterisks *)

它们之间的空白和(* *)的存在或不存在基本上是无关的,但它应该保留所有类型的注释。我的直接目的是能够将其过滤到拼写检查器中,但清除注释(即只有一个只剥离注释的筛选器)也是有用的:我可以清理注释,然后使用diff获取已删除的注释。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-09 12:31:01

好吧,现在有一个基于奥卡姆的词法器,它除去代码中的注释以外的所有内容,称为奥卡姆-评论-筛子。它基于ocamlwc中使用的简单的词法。

但是,这个工具是GPL许可的(因为它是从ocamlwc派生的,这是GPL许可的),所以不能在这里张贴。尽管如此,它确实满足了我的要求,所以在有人提出更好的方法之前,我会把它当作一个答案。

票数 0
EN

Stack Overflow用户

发布于 2017-02-03 19:03:21

您可以将奥卡姆多与使用文本表示形式转储注释的自定义生成器一起使用。

票数 1
EN

Stack Overflow用户

发布于 2017-02-06 11:59:42

我在camlp5上做了一些有趣的实验,尝试着为任何代码项打印漂亮的""。以下代码:

代码语言:javascript
复制
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来扩展相应的默认打印机。用

代码语言:javascript
复制
ocamlfind ocamlc -c -package camlp5 pr_comment.ml

并把它当作

代码语言:javascript
复制
camlp5o pr_o.cmo path/to/pr_comment.cmo -o only_comment.ml my_file.ml
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42031070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档