问题标签 [camlp4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
816 浏览

ocaml - 使用 ppx 和扩展点在 OCaml 中为 DSL 编写解析器

最近在OCaml官方github上公布了Camlp4被替换为ppx rewriters and extension pointshttps://github.com/ocaml/camlp4):

在 4.01.0 版本之前,Camlp4 是官方 OCaml 发行版的一部分。从那时起,它已被更易于维护和学习的更简单系统所取代:ppx 重写器和扩展点。

我一直在Camlp4为 DSL 编写解析器(与 OCaml 分离的语法)。

所以,我想问一下这个ppx rewriters工具是否可以做同样的事情?

感谢您花时间阅读我的问题!

0 投票
1 回答
135 浏览

parsing - 如何在 OCaml 程序中使用 camlp4 将另一个 OCaml 程序解析为 AST?

我目前正在尝试将 OCaml 程序(具有相当标准/有限的语法)翻译成 Racket,并且我正在尝试查看是否有一种方法可以使用camlp4 对中间表示进行解析。我尝试使用 ocamlyacc 和 ocamllex 构建词法分析器和解析器,但考虑到语法可能有多大,它变得相当复杂。所以,我四处搜索,发现 camlp4 已经内置了其中的一些,但我似乎无法查找如何使用它来获取某些 OCaml 代码的 AST。任何文档/示例/想法?另外,如果您对如何更好地做到这一点有任何建议,那也很棒!谢谢。

0 投票
1 回答
13 浏览

camlp4 - camlp5 IFNDEF STRICT 与我的预期相反

HOL Light 有一些复杂的 camlp5 逻辑来改变 ocaml 的语法。我已经对其进行了修补,使其可以在 ocaml 4.04 和 6.17 下工作,但它只能在 camlp5 strict mode 下工作。我已将问题追溯到以下代码

据我所知,如果已定义,这应该执行第二个宏分支STRICT,而第一个 ifSTRICT未定义。我已经检查了camlp5r pa_macro.cmo -definedSTRICT是在我的机器上使用camlp5 严格模式定义的,而在我的机器上使用camlp5 过渡模式定义的。

不幸的是,第二个分支在两台机器上都进行了,就好像在两台机器STRICT上都定义了一样。更改IFNDEF STRICT THENIFNDEF BLAH THEN切换到第一个分支,就像在两个分支STRICT上都定义了一样。UNDEF STRICT;但是,在代码之前放置一个没有效果。

我很茫然,并且会喜欢任何关于可能发生的事情的建议,或者接下来要运行的实验。

0 投票
3 回答
201 浏览

comments - 词法分析器/过滤器评论

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

理想情况下,我正在寻找可以删除除评论之外的所有内容的东西,但反过来也很有用。

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

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

我想理想地获得:

它们之间的空格和是否存在(* *)大多无关紧要,但它应该保留各种评论。我的直接目的是能够将其过滤到拼写检查器中,但清理评论(即有一个只删除评论的过滤器)也很有用:我可以清理评论,然后使用它diff来获取已删除的内容。

0 投票
0 回答
60 浏览

ocaml - camlp5:如何嵌套反引号

我正在使用带有MLast模块的camlp5。我想知道嵌套深度大于 1 的反引号的语法。我将用一个模拟示例进行解释。假设我有

如何一口气定义f123?我只能做两部分

请注意内部反引号中的强制反斜杠。但是对于三个部分?以下都不起作用:

相应的错误消息是:

我在文档中找不到任何内容。

(PS 当然我知道在这个特定的例子中我可以省略内部的反引号/引号对。这是题外话;这是由于模拟示例中固有的过度简化。)

0 投票
0 回答
52 浏览

syntax - OCaml / Camlp4 - 重命名多态变体

有没有办法让 OCaml 程序中的所有多态变体在预处理时重命名为最多两个字符,当然保留它们的唯一性?所有程序模块的重命名也应该一致。

有人可以使用 Camlp4 + Hashtable 或类似方法勾勒出解决方案吗?

0 投票
0 回答
285 浏览

ocaml - utop 不再支持camlp4?

我想使用一个在 utop 中有一些 camlp4 扩展的包,但我得到:

这是 utop 版本 2.0.1 和 OCaml 4.05.0。

我用 opam 安装了 utop。有没有办法通过camlp4支持重建utop?

0 投票
1 回答
59 浏览

ocaml - js_of_ocaml Camlp4 类型定义中的解析错误

我正在尝试使用 js_of_ocaml构建这个程序。根据这个答案,我的makefile中有以下行

但是,当我尝试构建时,出现以下错误:

该文件的违规行是这样的:

我对 OCaml 还是很陌生,所以我不完全确定发生了什么。做什么的-syntax camlp4o?我可能需要更改源中的哪些内容以与 js_of_ocaml 兼容?

0 投票
1 回答
443 浏览

ocaml - OCaml 和预处理器在安装 tcoq 时出现版本不兼容错误

我正在尝试安装tcoq,但出现以下错误:

有人知道吗:

  1. 错误是什么意思?
  2. 如何解决?

我在网上看到相关帖子:

https://coq-club.inria.narkive.com/h4i0KOH0/problem-compiling-coq

但这并不是很有帮助。我做了:

正如他们所建议的那样,它似乎工作正常......

我确实这样做make clean了,但这没有帮助。


我刚刚意识到我跳过了安装的第 3 步,但如果它与问题相关或者我想用它做什么,我会知道:


我正在尝试安装游戏手柄,并且需要按照说明进行操作。特别是我运行了以下 3 个命令:


最新错误:

在阅读了那个错误之后,我奇迹般地想到打印两个ocaml和的版本camlp5

和:

很明显那是错误的,所以也许第一步是修复camlp5工作,4.05.0因为那是我需要的。


我尝试卸载camlp5但它拒绝了!

0 投票
1 回答
92 浏览

ocaml - 如何安装与 ocaml 4.05.0 版本兼容的 camlp5?

我试图按照此处所述安装 tcoq 和游戏手柄,但出现错误:

所以我发现我有错误的版本campl5

因为我需要的是4.05.0根据gamepadtcoq与 ocaml 兼容的那个。