我可以使用带扣的OCAML正则表达式吗?(特别是str.search_forward)



我正在将OCAML项目移植到推理中,但首先要扣除扣。我用

向项目目录播种
bsb init .

并通过 *.ml文件复制。用

编译
npm run build

给我错误:

[1/6]构建src/demo.cmj文件"/D/proglang/reason/SRC/DEMO.ML",第2行,字符7-17:错误:Unbound value str.regexp[2/6]构建src/lex.cmj文件"/d/proglang/reason/Src/lex.ml",第13行,字符26-44:错误:Unbound value str.search_forward

我的软件包。

 "devDependencies": {
    "bsb-native": "^4.0.7000"
  }

./node_modules/bsb-native/vendor/ocaml/lib/ocaml 包含文件 str.a str.cma str.cma str.cmi str.cmx str.cmx str.cmxs str.cmxs str.mli但是没有像str.ml这样的来源。另外,https://reasonml.github.io/api/str.html记录了我需要的功能,但是在定位JavaScript(node(时如何将它们链接到其中?

我可以同时使用JavaScript或本机目标,但是我想从OCAML语法升级到ReasonMl。如果您需要我的demo.ml,则是:

let qq=Str.regexp "/q/" and
() = Js.log "Hello, STR! BuckleScript"

Str模块所暴露的功能实际上是在C中实现的,因此不容易移植到JavaScript。任何JavaScript实现正则表达式的实现也可能比内置的JavaScript实现慢得多。

此外,为多个实现提供了一个共同的接口并不是微不足道的,因为正则表达实现在或多或少微妙的方式不同,并且彼此之间不完全兼容。尽管有名字,大多数人甚至都不是常规的。

关于如何完成JS和本机回调的常见界面进行了一些讨论,但是没有明显的解决方案,我不知道有任何结论。但是我认为,至少您必须实施一个只能接受正则语法的普通子集的解析器,然后再将其传递给基础的正则发动机才能再次解析,这显然会产生显着的性能影响实施并非谋生。

目前,您应该能够将Js.Re用于JavaScript Regexes和有条件的编译,以便使用Str或其他其他实现。

另一种替代方法可能是使用js of-ocaml将ocaml-re编译为JavaScript,然后使用external s与该编译。或在可能的情况下将项目移植到bsb,直接使用它。但是,这可能会大大增加代码捆绑包的大小,而且完成并不是特别简单。

相关内容

  • 没有找到相关文章

最新更新