Camlp4


Camlp4 es un sistema de software para escribir analizadores sintácticos extensibles para lenguajes de programación. Proporciona un conjunto de bibliotecas OCaml que se utilizan para definir gramáticas, así como extensiones de sintaxis cargables de dichas gramáticas. Camlp4 son las siglas de Caml Preprocessor y Pretty-Printer y una de sus aplicaciones más importantes fue la definición de extensiones específicas de dominio de la sintaxis de OCaml .

Camlp4 fue parte de la distribución oficial OCaml que se desarrolla en el INRIA . Su autor original es Daniel de Rauglaudre. OCaml versión 3.10.0, lanzada en mayo de 2007, introdujo una versión significativamente modificada e incompatible con versiones anteriores de Camlp4. De Rauglaudre mantiene una versión independiente compatible con versiones anteriores, que ha sido rebautizada como Camlp5. Todos los ejemplos a continuación son para Camlp5 o la versión anterior de Camlp4 (versiones 3.09 y anteriores).

La versión 4.08, lanzada en el verano de 2019, [1] fue la última versión oficial de esta biblioteca. Actualmente está en desuso; [2] en su lugar, se recomienda utilizar las bibliotecas PPX (PreProcessor eXtensions) [3] [4] . [5]

Un preprocesador Camlp4 opera cargando una colección de módulos compilados que definen tanto un analizador como una bonita impresora : el analizador convierte un programa de entrada en una representación interna. Esta representación interna constituye el árbol de sintaxis abstracta (AST). Se puede generar en formato binario, por ejemplo, se puede pasar directamente a uno de los compiladores de OCaml , o se puede convertir nuevamente en un programa de texto sin cifrar. La noción de sintaxis concreta se refiere al formato en el que se representa la sintaxis abstracta .

Por ejemplo, la expresión OCaml (1 + 2) también se puede escribir ((+) 1 2) o (((+) 1) 2). La diferencia está solo en el nivel de la sintaxis concreta, ya que estas tres versiones son representaciones equivalentes del mismo árbol de sintaxis abstracta. Como demuestra la definición de una sintaxis revisada para OCaml, el mismo lenguaje de programación puede usar diferentes sintaxis concretas. Todos convergerían en un árbol de sintaxis abstracto en un formato único que un compilador puede manejar.

El árbol de sintaxis abstracta está en el centro de las extensiones de sintaxis, que de hecho son programas OCaml. Aunque la definición de gramáticas debe hacerse en OCaml, el analizador que se está definiendo o extendiendo no está necesariamente relacionado con OCaml, en cuyo caso el árbol de sintaxis que se está manipulando no es el de OCaml. Se proporcionan varias bibliotecas que facilitan la manipulación específica de árboles de sintaxis OCaml.