问题标签 [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 回答
894 浏览

macos - 使 OPAM 在 MacOS X 下与系统编译器一起工作

我正在尝试在 MacOS 下进行非常基本的 OPAM 安装。使用 macports 我安装了以下软件包:

  1. 奥帕姆@1.2.0
  2. ocaml-findlib @1.5.5
  3. ocaml-camlp4 @4.02.0.1_1

当我这样做时opam init(不是以root身份,因为我只需要一个用户)。 opam switch显示我正在使用系统编译器:

system C system 系统编译器 (4.02.1)

然后我尝试通过 opam 安装“lwt”,它中途失败并出现错误:

这是我的opam list

我注意到它有自己的 ocamlfind,而不是系统一。也许这就是导致错误的原因:

我在通过 OPAM 安装 OCAML 编译器和 CAMLP 之前尝试过,在这种情况下它可以工作,但让我感到困扰的是我有两个相同版本的编译器安装。如果可能,我宁愿使用系统 OCAML 编译器和 CAMLP。

0 投票
1 回答
604 浏览

ocaml - 在utop中用camlp5替换camlp4

我正在使用需要camlp5的 OCaml 代码;但是,顶层(我使用的是utop)会自动加载更新的、不兼容的camlp4。这些是启动消息:

即时通讯使用.ocamlinit看起来像这样:

我安装camlp5opam它,它在我发出时出现ocamlfind list;该文件camlp5.cma也位于/home/<username>/.opam/4.02.1/lib/camlp5/camlp5.cma. 但是尝试加载camlp5ocamlp5r失败Unknown directive camlp5o

我如何utop知道camlp5以及如何替换camlp4camlp5默认预处理器?

提前谢谢了!

0 投票
1 回答
81 浏览

ocaml - 使用 Camlp4 解析一串通用量词和存在量词

我正在使用 Camlp4 解析一串量词,其中量化关键字和变量用逗号分隔。一个例子如下:

这里,existsforall是关键字,x,y,z,a,b,h,k是标识符。对应的记号是EXISTS和。FORALLIDENTIFIER of string

我的数据结构:

要解析上面的量词字符串,我的规则是:

但是,我的解析器总是抛出一个错误:

你知道如何解决这个问题吗?当它检测到关键字之后的元素时如何LIST1停止抛出错误?`COMMA

非常感谢!

(有关更多信息,如果我使用空格分隔受相同量化关键字影响的变量,例如exists x y z, forall a b, exists h k. 并删除规则SEP `COMMA中的one_kind_quantifiers,则解析器可以完美解析这个新字符串)。

============================

更新解决方案:

在 Igor (@ygrek) 的建议下,我可以通过不使用 LIST1 而是手动编写规则来解析字符串列表来编写预期的解析器。

请注意,解析字符串列表的规则是:

但不是:

编写规则的第二种方式与id_list使用LIST1. (所以我想这可能LIST1是实现的方式......)

0 投票
1 回答
197 浏览

preprocessor - 使用 ocamlbuild 和 camlp5 编译

我正在尝试制作一个我正在使用 ocamlbuild 编译的项目,以避免使用常规的 Makefile,我发现它稍微复杂一些。

具体来说,我有一个语法扩展文件(extend.ml),我需要先编译它。在常规的 Makefile 中会有一条规则:

然后,为了计算依赖关系,会有这样的规则:

当然,任何目标文件的创建都需要与上述类似的规则。


我的问题是,如何将这些规则/要求集成到一个 ocamlbuild 命令(如果可能)?

我尝试先编译extend.ml文件,然后使用以下命令:

但我认为它在任何方面都不是最佳的。

不幸的是,我不熟悉使用 ocamlbuild 作为编译工具,所以任何帮助将不胜感激。

0 投票
1 回答
192 浏览

ocaml - Camlp5(前Camlp4)如何解析表达式

据我在互联网上搜索可以弄清楚,看起来Camlp5(以前的Camlp4)使用递归下降解析器,而ocamlyacc基于LALR的解析器生成器。

在 LALR 解析器生成器中,优先级和关联性被映射到移位/减少冲突。我的问题是像 Camlp5 这样的递归下降解析器如何处理声明性运算符优先级?

它如何处理左递归调用?camlp5 (camlp4) 是否使用表驱动的运算符优先级方法:https ://en.wikipedia.org/wiki/Operator-precedence_parser

非常感谢任何有关 Camlp4 解析器内部工作的见解或链接。

0 投票
1 回答
57 浏览

ocaml - 如何查看由 camlp4 生成的代码

我正在使用语法扩展,想知道是否可以以某种方式输出生成的代码。

我宁愿避免将调试跟踪放在扩展中,因为我不是开发人员,对camlp4一无所知。

0 投票
2 回答
108 浏览

ocaml - 使用 Camlp4 的 OCaml 重载数字文字

我正在编写一个带有一些组合实用程序的小脚本。当我需要类似01不同类型的数字文字时,我使用_0and _1,但这种解决方案并不理想。是否可以使用 Camlp4 重新解释给定上下文中的数字文字或添加具有专用后缀的新型数字文字?

0 投票
1 回答
280 浏览

ocaml - 未绑定模块Camlp4

我知道这个网站上有类似的问题,但没有一个有助于解决我的问题。

我是 OCaml 的新手,正在使用以下关于使用 Camlp4 的教程https://github.com/ocaml/camlp4/wiki/OCaml_code_generation_tutorial

但是我在第一行得到一个错误: open Camlp4.PreCast 说“Unbound module Camlp4”

我在其中下载了 OCaml 有一个 camlp4.exe 文件,所以我认为它已安装。我在 Windows 8 和 Xubuntu 上都试过了

这是我传递给命令行以编译文件的输入: ocamlc -o test.exe test.ml 其中 test.ml 是包含错误行的文件

0 投票
1 回答
115 浏览

ocaml - How to compile using Camlp4?

I am testing out quotations in Camlp4. My tester.ml program is as follows:

I have tried compiling this in various ways, eg.

however the executable produced doesn't print out "done" as expected. How should I compile this file?

0 投票
1 回答
863 浏览

ocaml - 使兼容ocaml、camlp4、ppx、node、js_of_ocaml、ocamlbuild

安装npmand后node,编译 OCaml 文件时js_of_ocaml出现错误,因此我这样做了opam switch reinstall system

然后,我意识到ocamlfind不再工作了:

PS:node --versionv6.1.0npm --version3.8.6; ocaml -versionThe OCaml toplevel, version 4.03.0. js_of_ocaml --version2.7,但在之后opam swtich reinstall system,它给了-bash: /Users/softtimur/.opam/system/bin/js_of_ocaml: No such file or directory

有谁知道如何使所有这些软件包兼容?


早些时候:这是安装npmand之后node和之前的编译错误opam switch reinstall system

另一种方式也报错:


最初: 我最初的目标是编写和编译cubes.ml这样 1)它包装一个 OCaml 函数来制作一个可以在 Web 中调用的 JS 函数;2)OCaml函数和字节码可以在Linux下用命令行测试。

cubes.ml如下:

然后,ocamlfind ocamlc -package js_of_ocaml.ppx -linkpkg cubes.ml -o T应该生成T这样./T应该返回hello的。并且js_of_ocaml T -o cubes.js应该生成cubes.js这样的函数jsOneArgument可以cubes.js很好地被其他JS或HTML文件调用。

在我弄乱包裹之前,./T返回Unimplemented Javascript primitive caml_pure_js_expr!,这就是我安装的原因npmnode等等......