使用ppx和扩展点为OCaml中的DSL编写解析器

时间:2016-06-14 11:19:21

标签: ocaml camlp4 ppx

最近,在OCaml官方github上宣布 //call this line after crop it if(requestCode == Crop.REQUEST_CROP){ handleCrop(resultCode, data); } case PICK_FROM_FILE: mImageCaptureUri = data.getData(); beginCrop(mImageCaptureUri); break; private void beginCrop(Uri source) { Uri destination = Uri.fromFile(new File(getCacheDir(), "cropped")); Crop.of(source, destination).asSquare().start(this); } private void handleCrop(int resultCode, Intent result) { if (resultCode == RESULT_OK) { // mImage.setImageURI(Crop.getOutput(result)); Picasso.with(SettingsActivity.this).load(Crop.getOutput(result)).transform(new RoundTransform()).into(mImage); mImageCaptureUri=Crop.getOutput(result); getImageUri(mImageCaptureUri); //this method uri stored to sdcard } else if (resultCode == Crop.RESULT_ERROR) { Toast.makeText(this, Crop.getError(result).getMessage(), Toast.LENGTH_SHORT).show(); } } Camlp4https://github.com/ocaml/camlp4)取代:

  

Camlp4是官方OCaml发行版的一部分,直到其版本   4.01.0。从那以后,它被一个更简单的系统取代,更容易维护和学习:ppx重写器和扩展点。

我一直在使用ppx rewriters and extension points为DSL编写解析器(从OCaml中分离语法)。

那么,我想问一下Camlp4工具是否可以做同样的事情?

感谢您花时间阅读我的问题!

1 个答案:

答案 0 :(得分:7)

没有。 PPX专门用于扩展OCaml语言功能,保留其语法,可能使用属性和扩展点。它不提供像CamlP4这样的解析器生成器。如果您构建的语法与OCaml完全不同,请坚持使用P4。 PPX对你没有帮助。

CamlP4尚未停产。它成为OCaml编译器的独立工具:https://github.com/ocaml/camlp4您还应该能够使用opam install camlp4安装它。