Camlp4 Deprecation Warning: this tutorial describes technology that is considered obsolete. It’s been replaced by extensions points and ppx rewriters. Camlp4 is part of the standard OCaml distribution and Camlp5 is distributed The title of the tutorial says Camlp4 but that is because it was written prior to the. Many of the tutorials below need updating and tutorials on many new topics are Camlp4 Tutorial (by Jake Donham), to build syntax extensions for OCaml with.
|Published (Last):||9 August 2014|
|PDF File Size:||17.32 Mb|
|ePub File Size:||12.59 Mb|
|Price:||Free* [*Free Regsitration Required]|
The CamlP4 wiki has a page on quotationsand a page making an analogy between quotations and strings. It is often used to write syntax extensions to OCaml, like adding support for a notation for monads or for list comprehensions.
So a fork ensued: Jake Donham probably knows a tytorial more about this stuff than me, but sometimes he seems to be writing to people who already know about CamlP4, especially in the first few posts. Furthering the difficulties, it is now fragmented CamlP4 and CamlP5 and not very well documented.
Camlp4 includes a domain-specific language as it tktorial syntax extensions which ease the development of syntax extensions. This can be used for defining parsers or extending existing ones. The section about the Revised syntax in the latest official reference manual for the old CamlP4 version 3. The new CamlP4 wiki has useful stuff, although it is incomplete both as a tutorial and as a reference.
Besides that, there are always the sources.
Several libraries are provided which facilitate the specific manipulation of OCaml syntax trees. So as an example: As with most things in CamlP4, quotations are also customizable. De Rauglaudre maintains a separate backward-compatible version, which has been renamed Camlp5. The intention is to give the Big Picture, so that the details can be worked out later. I know this sounds confusing, as messing with quotations can often be, but in most cases it is easier to learn them by example.
CamlP4 itself is written in this syntax. The topics are presented in the best order IMO, of course for learning, under this assumption. For example, this piece of code: Camlp4 stands for Caml Preprocessor and Pretty-Printer and one of its most important applications is the definition of domain-specific extensions of the syntax of OCaml.
Any loaded module can extend a grammar defined in another module, and an extension can not only add new productions, but also change existing ones or even delete them. The ocaml beta announcement: Memoization consists in storing the results of previous computations in a table so that the actual computation of the function for each possible argument occurs at most once. Actually, although the old CamlP4 had an official reference manual and tutorial, the new CamlP4 has neither.
CamlP4 is generally used to generate OCaml code, one way or another. A good idea is to look at examples of simple syntax extensions. Since OCaml is a multi-paradigm language, with an interactive toplevel and a native code compiler, it can be used as a backend for any kind of original language.
To learn how to use quotations to generate OCaml AST nodes, you can look at this appendix from the same manual. Back to the Revised syntax: Or read the CamlP4 sources, in this case the OCaml parsers. Camlp4 Wiki The ocaml beta announcement: It provides a new keywordmemowhich can be used as a replacement for function and provides automatic memoization of functions with pattern matching.
However, this type is recursive as expected for an AST and trees for any non-trivial piece of code will be complicated to create as a value of the AST type. This page is experimental and user supported content. Given textual input, CamlP4 parses the input into an abstract syntax tree, which is then printed in some format.
This is basic in code generation: The output of the program is as follows, showing that the fac function factorial only computes products that were not computed previously:. This page was last edited on 18 Novemberat CamlP4 is mostly used as a metaprogramming tool for OCaml, but it can be used in many ways: From the point of view of syntax extensions for OCaml, CamlP4 parses OCaml code, most likely using an extended syntax, generates an AST that may be filtered, and then prints it.
It’s been replaced by extensions points and ppx rewriters Camlp4the OCaml “pre-processor pretty printer” is an advanced macro system which allows complex abstract syntax tree transformations on ocaml programs, tutoriial on other recursive decent cqmlp4. External Documents The semi-official documentation: The notion of concrete syntax refers to the format in which the tuotrial syntax is represented.
Camlp4 – Wikipedia
The relevant files are pointed later, in the section about parsers. Camlp4 underwent a major revision between the version included in ocaml 3. Daniel de Rauglaudre wrote the original CamlP4, which was available for OCaml since its early versions. The generated AST can be emitted by tutorixl pretty-printer, showing code in a readable format for humans.
The series of posts on CamlP4 over at Ambassador at the Computers is a good source, with some caveats. As I mentioned, this is not a tutorial vamlp4 CamlP4. They would all converge to an abstract syntax tree in a unique format that a compiler can handle.
Grammars and Extensible Parsers: