问题标签 [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 - OCaml 中的“修改后的语法”是什么?
当人们提到 OCaml 中的“修订语法”时,他们的意思是这将成为该语言的新语法,还是只是在 CamlP4 中创建的替代语法?如果是前者,那么“修改后的语法”什么时候会成为 OCaml 的“官方语法”呢?
ocaml - 是否有可能获得 OCaml 程序的 AST?
我希望能够为给定的 OCaml 程序获取 AST(例如,我想遍历 AST 并生成代码的检测版本或进行某种转换)。是否有任何 OCaml 工具支持此功能?
preprocessor - OCaml 中的注解
标题可能有些误导,所以让我解释一下我想要实现的目标。
我正在编写一种具有大量运算符的编程语言,这些运算符可以处理具有不同行为的多种类型。实施正在发展,运营商正在改变/适应我在尝试时发现更有用的东西。
问题是如何保持语言文档、实现和语言的内联帮助(有一种 REPL)之间的一致性。
由于大多数行为是在大模式匹配块中定义的,我想知道是否有可能以某种方式(可能使用 Camlp4)注释代码,以便预处理运行可以提取列出的 txt 文件(或任何类似的 csv、html 等)所有运营商实施。
我的意思是,如果我有类似的东西
我想要类似的东西
其中注释中的信息(我使用注释语法只是为了使用某些东西,我真的从来没有使用过 OCaml 预处理器,所以我还不知道它是如何工作的)在我编译我的项目时被提取并保存在某个地方。
也许所要求的是不可能的,我必须单独使用与 ocaml 预处理器/编译器不同的东西单独处理源代码。
有什么线索吗?
编辑:我将举一个具体的例子来展示我想做的事情......
例如,加号指令以这种方式编译用我的语言编写的程序:
我希望能够用类似的东西注释这个模式匹配的每个子句
在某种程度上,我能够预处理我的源代码并构建一个包含所有已实现操作及其类型和描述的列表,这些操作仅取自注释。我不需要修改代码中的任何内容。这只是为了在一个地方保持一致性,而不必以单独的方式跟踪所有可用的指令(因为我也需要为文档和内联帮助索引它们)。
我想在不使用任何外部处理工具的情况下做到这一点,这就是为什么我问是否有东西能够在编译阶段处理评论或类似的东西。
提前致谢
sharepoint - CAML 查询抛出 SoapServerException
这是一个例外:
这是 CAML 代码:
当我没有指定任何过滤器时,代码有效......
compiler-construction - OCaml:仅从函数标识符返回函数
我正在编写一个程序,它解析用某种虚构语言编写的脚本并使用该脚本进行一些计算。这种语言有一个特殊的结构,用于调用 类型的外部 OCaml 函数'a -> bool
。所以,在我们可能拥有的语言中间
我希望解析器使用构造函数,例如
将该位解析为值
其中“foo”是用户必须在单独的 .ml 文件中提供的函数,解析器事先不知道该函数;只有定义了“foo”的 OCaml 文件的名称才会在运行时传递给解析器。因此,我需要定义一个 string-> 类型的函数,('a->bool)
它采用某个函数的名称并返回该函数。
我的问题是:
(1) 我假设代码的动态加载应该使用DynLink.loadfile。这是要走的路吗?
(2) 如何从函数“foo”的标识符中访问函数?(这会带我去camlp5吗?)
ocaml - 将camlp4和camlp5结合在ocamlopt的-pp字符串中?
我想为一个大型项目结合 BOLT、SEXP 和 ocamlViz。问题是,SEXP 和 BOLT 使用的是 CamlP4,而 ocamlviz 使用的是 camlp5。但是,对于 ocamlc/ocamlopt 的 -pp 参数,我怎样才能将调用组合到一个链中呢?
这是我对没有 ocamlviz 的实际项目的呼吁: ocamlopt.opt -c -I +dynlink -I +bolt -I +threads -I +lablgtk2 -I +extlib -I +pcre -I +netsys -I +netstring -I + json-wheel -I +num -I +nums -I +sexplib -I +zip -I +xml-light -I +xmlrpc-light -I +equeue -I +netclient -g -annot -p -thread -pp' camlp4o /usr/lib/ocaml/bolt/bolt_pp.cmo -logger '\''foo.native'\'' -level DEBUG -- -I /usr/lib/ocaml/sexplib -I /usr/lib/ocaml/类型转换 pa_type_conv.cmo pa_sexp_conv.cmo' -o foo.cmx foo.ml
ocaml - camlp4:没有可用的引号扩展器
该文件test.ml
仅包含一行:
然后我使用以下命令行将camlp4应用于该文件:
输出是:
我希望对文件进行预处理,并对报价进行适当扩展。我在这里忘记了什么?
syntax - 带有语法扩展的 OCaml 顶层
我一般不知道如何做到这一点,但为了清楚起见,我会特别询问一个实例:
Sexplib 对我来说看起来很有趣。我想玩弄它。我已经下载了它,安装得很好(我很确定,无论如何)等等。我想在顶层使用“with sexp”语法扩展。我该怎么做呢?我发现的所有使用它的示例都假设您已经知道如何制作顶层和/或使用语法扩展进行编译。
我最好的镜头是这样的:
当我运行这个顶层时,我可以open Sexplib
很好,但是当我尝试使用with sexp
语法扩展时,我得到一个语法错误。
ocaml - 不能在术语名称中使用反引号,因为 camlp5 (OCaml) 正在使用反引号
我正在使用 Yojson 库,使用的构造函数之一称为“Bool”(带有反引号)。我正在使用使用camlp5 的OCaml 源代码,以便对反引号包围的文本进行不同的解释(例如,将文本转换为OCaml 数据结构)。
我遇到的问题是,当 `Bool 出现在我的源代码中时,camlp5/OCaml 看到反引号并认为它是引号的开头,从而导致错误。如何确保这被解释为“Bool OCaml 术语”?有什么方法可以暂时关闭 campl5 的功能吗?我可以使用某种转义字符?
ocaml - 是否可以编写一个 camlp4 语法扩展,让您可以访问最后一个 let 绑定作为字符串?
我有一些这样的代码:
稍后,如果我想创建一个变量,我必须这样做:
我宁愿不必重复“完整”两次,而是想提出一些内省的方法来将名称作为字符串获取。我认为camlp4可以解决这个问题,但不知道从哪里开始。
所以最终我希望能够做类似的事情:
其中 :letname: 会将当前的 let 绑定填充为字符串来代替(在本例中为“full”)。(语法 :letname: 只是一个建议,其他不会与 OCaml 语法冲突的语法想法?)
像这样更简洁的语法可能更可取:
然后将扩展为:
这可能与camlp4有关吗?如果可以,我该怎么做?
(进一步考虑, :letname: 语法或类似的东西会更通用,在更多领域有用)