首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Camlp4编译?

如何使用Camlp4编译?
EN

Stack Overflow用户
提问于 2016-03-11 00:13:59
回答 1查看 118关注 0票数 0

我正在用Camlp4测试报价。我的tester.ml程序如下:

代码语言:javascript
复制
open Camlp4.PreCast;;
let x = <:Cstm< x = 1 + 2 >>;;
let y = <:expr< let y = 1 + 2 >>;;
print_string "done";;

我试过用不同的方式来编纂这篇文章。

代码语言:javascript
复制
ocamlc -pp "camlp4of pa_extend.cmo -loc" -I +camlp4 tester.ml

但是,生成的可执行文件没有按预期打印“完成”。我应该如何编译这个文件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-11 02:13:05

camlp4 --help说:

代码语言:javascript
复制
-loc <name>      Name of the location variable (default: _loc).

您忘记了-loc的论点。您可以通过ocamlc-verbose选项检查这一结果。(-verbose非常方便地了解编译过程中到底发生了什么):

代码语言:javascript
复制
$ ocamlc -verbose -pp "camlp4of pa_extend.cmo -loc" -I +camlp4 tester.ml
+ camlp4of pa_extend.cmo -loc "tester.ml" > /blahblah//ocamlpp2f0635

输入文件名tester.ml不被视为文件名,而是被视为位置变量的名称。对于空输入,camlp4of输出一个空程序,并由ocamlc编译。这就是为什么最终的可执行文件什么也不做。

代码包含一个奇怪的引号Cstrmlet y = 1 + 2不是表达式而是结构项。以下是最近编译的代码之一:

代码语言:javascript
复制
(* compilable by ocamlc -pp "camlp4of pa_extend.cmo" -I +camlp4 tester.ml *)
open Camlp4.PreCast;;
let x _loc = <:expr< x = 1 + 2 >>;;
let y _loc = <:str_item< let y = 1 + 2 >>;;
print_string "done";;

您可以使用CamlP4选项以人类可读的形式检查-printer Camlp4OCamlPrinter的输出。这是使用CamlP4的另一项重要技术:

代码语言:javascript
复制
$ camlp4of pa_extend.cmo -printer Camlp4OCamlPrinter tester.ml
open Camlp4.PreCast

let x _loc =
  Ast.ExApp (_loc,
    (Ast.ExApp (_loc, (Ast.ExId (_loc, (Ast.IdLid (_loc, "=")))),
       (Ast.ExId (_loc, (Ast.IdLid (_loc, "x")))))),
    (Ast.ExApp (_loc,
       (Ast.ExApp (_loc, (Ast.ExId (_loc, (Ast.IdLid (_loc, "+")))),
          (Ast.ExInt (_loc, "1")))),
       (Ast.ExInt (_loc, "2")))))

let y _loc =
  Ast.StVal (_loc, Ast.ReNil,
    (Ast.BiEq (_loc, (Ast.PaId (_loc, (Ast.IdLid (_loc, "y")))),
       (Ast.ExApp (_loc,
          (Ast.ExApp (_loc, (Ast.ExId (_loc, (Ast.IdLid (_loc, "+")))),
             (Ast.ExInt (_loc, "1")))),
          (Ast.ExInt (_loc, "2")))))))

let _ = print_string "done"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35929895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档