2

我有一些代码,其中包含menhir基于域的 特定 语言(逻辑)的解析器。为了我在调试时的理智,能够像这样直接在顶层键入这种语言(公式)的实例会很棒:

# f = << P(x,y) & x!=y >>

campl4/5我唯一的选择吗?如果是,我觉得文档相当吓人。是否有一个与我的用例足够接近并且我可以适应的示例/教程?(例如,引入新关键字的语法扩展似乎不相关)。谢谢!

4

2 回答 2

4

如果您愿意调用一个函数来进行解析,您可以使用ocamlmktop将您的解析器包含到顶层。然后,您可以使用#install_printer. 会话可能如下所示:

# let x = parse ()
<< type your expression here >>
# x : type = <<formatted version>>

我用过专门的打印机,它们对复杂的类型肯定有很大帮助。我从来没有开始使用ocamlmktop. 我总是用#loadand加载我的代码#use

这比掌握camlp4/5(恕我直言)容易得多。但也许它有点太粗糙了。

于 2012-07-15T17:39:38.503 回答
3

是的,您可以使用 camlp4,它会很好地工作(包括在顶层),但是不,它没有很好的文档记录,您将不得不应对它。

有关与您的用例相近的示例,请参阅 Camlp4 wiki 的Lambda 演算引用示例。

对于顶层,它将很容易工作。您可以在顶层动态加载“camlp4o.cmo”,然后是您的语法扩展,或者使用findlib来处理:从顶层,#use "topfind";;然后#camlp4o;;,然后#require "myfoo.syntax";;myfoo.syntax您为部署扩展而创建的 findlib 包的名称。

于 2012-07-15T23:52:11.610 回答