问题标签 [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.
ocaml - 使用 ppx 和扩展点在 OCaml 中为 DSL 编写解析器
最近在OCaml官方github上公布了Camlp4
被替换为ppx rewriters and extension points
(https://github.com/ocaml/camlp4):
在 4.01.0 版本之前,Camlp4 是官方 OCaml 发行版的一部分。从那时起,它已被更易于维护和学习的更简单系统所取代:ppx 重写器和扩展点。
我一直在Camlp4
为 DSL 编写解析器(与 OCaml 分离的语法)。
所以,我想问一下这个ppx rewriters
工具是否可以做同样的事情?
感谢您花时间阅读我的问题!
parsing - 如何在 OCaml 程序中使用 camlp4 将另一个 OCaml 程序解析为 AST?
我目前正在尝试将 OCaml 程序(具有相当标准/有限的语法)翻译成 Racket,并且我正在尝试查看是否有一种方法可以使用camlp4 对中间表示进行解析。我尝试使用 ocamlyacc 和 ocamllex 构建词法分析器和解析器,但考虑到语法可能有多大,它变得相当复杂。所以,我四处搜索,发现 camlp4 已经内置了其中的一些,但我似乎无法查找如何使用它来获取某些 OCaml 代码的 AST。任何文档/示例/想法?另外,如果您对如何更好地做到这一点有任何建议,那也很棒!谢谢。
camlp4 - camlp5 IFNDEF STRICT 与我的预期相反
HOL Light 有一些复杂的 camlp5 逻辑来改变 ocaml 的语法。我已经对其进行了修补,使其可以在 ocaml 4.04 和 6.17 下工作,但它只能在 camlp5 strict mode 下工作。我已将问题追溯到以下代码:
据我所知,如果已定义,这应该执行第二个宏分支STRICT
,而第一个 ifSTRICT
未定义。我已经检查了camlp5r pa_macro.cmo -defined
它STRICT
是在我的机器上使用camlp5 严格模式定义的,而在我的机器上使用camlp5 过渡模式定义的。
不幸的是,第二个分支在两台机器上都进行了,就好像在两台机器STRICT
上都定义了一样。更改IFNDEF STRICT THEN
为IFNDEF BLAH THEN
切换到第一个分支,就像在两个分支STRICT
上都定义了一样。UNDEF STRICT;
但是,在代码之前放置一个没有效果。
我很茫然,并且会喜欢任何关于可能发生的事情的建议,或者接下来要运行的实验。
comments - 词法分析器/过滤器评论
是否有允许过滤源文件中的注释的 OCaml 工具,类似于gcc -E
?
理想情况下,我正在寻找可以删除除评论之外的所有内容的东西,但反过来也很有用。
例如,如果有一种方法可以使用camlp4/campl5/ppx 来获取OCaml 注释(包括用单个星号定义的非OCamldoc 注释),我想知道。我在 Camlp4 的 AST 中寻找注释节点并没有取得多大成功(尽管我知道它必须存在,因为甚至存在与 Camlp4 修改它们的位置有关的错误)。
这是一个示例:在以下文件中:
我想理想地获得:
它们之间的空格和是否存在(* *)
大多无关紧要,但它应该保留各种评论。我的直接目的是能够将其过滤到拼写检查器中,但清理评论(即有一个只删除评论的过滤器)也很有用:我可以清理评论,然后使用它diff
来获取已删除的内容。
ocaml - camlp5:如何嵌套反引号
我正在使用带有MLast
模块的camlp5。我想知道嵌套深度大于 1 的反引号的语法。我将用一个模拟示例进行解释。假设我有
如何一口气定义f123
?我只能做两部分
请注意内部反引号中的强制反斜杠。但是对于三个部分?以下都不起作用:
相应的错误消息是:
我在文档中找不到任何内容。
(PS 当然我知道在这个特定的例子中我可以省略内部的反引号/引号对。这是题外话;这是由于模拟示例中固有的过度简化。)
syntax - OCaml / Camlp4 - 重命名多态变体
有没有办法让 OCaml 程序中的所有多态变体在预处理时重命名为最多两个字符,当然保留它们的唯一性?所有程序模块的重命名也应该一致。
有人可以使用 Camlp4 + Hashtable 或类似方法勾勒出解决方案吗?
ocaml - utop 不再支持camlp4?
我想使用一个在 utop 中有一些 camlp4 扩展的包,但我得到:
这是 utop 版本 2.0.1 和 OCaml 4.05.0。
我用 opam 安装了 utop。有没有办法通过camlp4支持重建utop?
ocaml - OCaml 和预处理器在安装 tcoq 时出现版本不兼容错误
我正在尝试安装tcoq,但出现以下错误:
有人知道吗:
- 错误是什么意思?
- 如何解决?
我在网上看到相关帖子:
https://coq-club.inria.narkive.com/h4i0KOH0/problem-compiling-coq
但这并不是很有帮助。我做了:
正如他们所建议的那样,它似乎工作正常......
我确实这样做make clean
了,但这没有帮助。
我刚刚意识到我跳过了安装的第 3 步,但如果它与问题相关或者我想用它做什么,我会知道:
我正在尝试安装游戏手柄,并且需要按照说明进行操作。特别是我运行了以下 3 个命令:
最新错误:
在阅读了那个错误之后,我奇迹般地想到打印两个ocaml
和的版本camlp5
:
和:
很明显那是错误的,所以也许第一步是修复camlp5
工作,4.05.0
因为那是我需要的。
我尝试卸载camlp5
但它拒绝了!