OCaml的:从功能标识返回一个函数只

我写一个程序,它解析写一些虚构的语言脚本和使用该脚本做一些计算。 这种语言具有用于调用的类型的外部OCaml的功能的特定构建体'a -> bool 。 因此,在语言的中间,我们可具有

blah blah function (foo 45) blah blah

我想解析器使用构造函数,如

OCamlFunction of ('a -> bool) * 'a

解析该位为价值

OCamlFunction (foo,45)

其中,“foo”的是,用户将有一个单独的.ml文件以提供及该分析器不预先知道的函数; 其中“富”是指传递给在运行时分析器OCaml的文件的名称即可。 所以,我需要定义类型与字符串的函数> ('a->bool)这需要一些函数的名称,并返回的功能。

我的问题是:

(1)我假设的代码动态加载应该使用DynLink.loadfile。 这是要走的路?

(2)我如何获得其标识的认识功能“富”? (这会不会导致我camlp5?)

--------------解决方案-------------

你不能直接通过名字加载功能,OCaml中没有那种支持和loadfile功能只是运行的代码,它并没有提供姓名访问。

您需要支持某种功能注册的API中所使用的加载代码的主程序。 因此,加载的代码将执行类似

ParserEngine.register_function "foo" foo_impl

你可以使用Camlp {4,5}自动完成这个样板代码生成,或者你可以有一个register_functions调用了关联列表来最小化。

register_functions然后将存储在如哈希表或可变的关联列表,随时为您解析代码访问一些内部结构的功能。

另一种解决办法是放在一个引号整个脚本,并把每一个ocaml的价值在里面的antiquotation。 这可以用Camlp4做的例子,但有轻微的语法成本( << >>在你的代码中, $ $左右OCaml的值)。 那么脚本的解析将在编译时运行,所以OCaml的打字员本身可以检查OCaml的价值观,你也指有明确界定。 此外,你会得到更精细的控制类型。

分类:编译器建设 时间:2015-03-16 人气:2
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.143 (s). 10 q(s)