package atd

  1. Overview
  2. Docs
Parser for the ATD data format description language

Install

Dune Dependency

Authors

Maintainers

Sources

v1.12.0.tar.gz
sha256=3e81d562e74374b98c0f383c1ded46beb06d8416d2065645fd68d3b8b0238ddd
md5=f85f590714edcdd4b847aa242b6c5747

doc/atd/Atd_ast/index.html

Module Atd_astSource

Abstract syntax tree (AST) representing ATD data

A location in the source code.

Sourceexception Atd_error of string

Exception raised by functions of the atd library and indicating errors.

Sourcetype annot = annot_section list

An annotation, consisting of a sequence of sections. Atd_annot provides utilities for handling annotations.

Sourceand annot_section = string * (loc * annot_field list)

represents a single annotation within edgy brackets. <"foo" bar baz="123"> in ATD syntax translates to:

("foo", (loc1, [ ("bar", (loc2, None));
                 ("baz", (loc3, Some "123")) ] ))
Sourceand annot_field = string * (loc * string option)

An annotation field, i.e. a key with an optional value within an annotation.

Sourcetype full_module = module_head * module_body

Contents of an ATD file.

Sourceand module_head = loc * annot

The head of an ATD file is just a list of annotations.

Sourceand module_body = module_item list

The body of an ATD file is a list of type definitions. Type definitions are implicitely mutually recursive. They can be sorted based on dependencies using Atd_util.tsort.

Sourceand module_item = [
  1. | `Type of type_def
]

There is currently only one kind of module items, that is single type definitions.

Sourceand type_def = loc * (string * type_param * annot) * type_expr

A type definition.

Sourceand type_param = string list

List of type variables without the tick.

Sourceand type_expr = [
  1. | `Sum of loc * variant list * annot
  2. | `Record of loc * field list * annot
  3. | `Tuple of loc * cell list * annot
  4. | `List of loc * type_expr * annot
  5. | `Option of loc * type_expr * annot
  6. | `Nullable of loc * type_expr * annot
  7. | `Shared of loc * type_expr * annot
  8. | `Wrap of loc * type_expr * annot
  9. | `Name of loc * type_inst * annot
  10. | `Tvar of loc * string
]

A type expression is one of the following:

  • `Sum: a sum type (within square brackets)
  • `Record: a record type (within curly braces)
  • `Tuple: a tuple (within parentheses)
  • `List: a list type written list with its parameter e.g. int list
  • `Option: an option type written option with its parameter e.g. string option
  • `Nullable: adds a null value to a type. `Option should be preferred over `Nullable since it makes it possible to distinguish Some None from None.
  • `Shared: values for which sharing must be preserved. Such type expressions may not be parametrized. Values may only be shared if the source location of the type expression is the same.
  • `Wrap: optional wrapping of a type. For example, a timestamp represented as a string can be wrapped within a proper time type. In that case, the wrapper would parse the timestamp and convert it into the internal representation of its choice. Unwrapping would consist in converting it back to a string.
  • `Name: a type name other than list or option, including the predefined types unit, bool, int, float, string and abstract.
  • `Tvar: a type variable identifier without the tick
Sourceand type_inst = loc * string * type_expr list

A type name and its arguments

Sourceand variant = [
  1. | `Variant of loc * (string * annot) * type_expr option
  2. | `Inherit of loc * type_expr
]

A single variant or an inherit statement. `Inherit statements can be expanded into variants using Atd_inherit or at loading time using the inherit_variant option offered by the Atd_util functions.

Sourceand cell = loc * type_expr * annot

Tuple cell. Note that annotations placed before the type expression are supported and represented here, such as the third cell in (float * float * <ocaml default="0.0"> float).

Sourceand field_kind = [
  1. | `Required
  2. | `Optional
  3. | `With_default
]

Different kinds of record fields based on the

  • `Required: required field, e.g. id : string
  • `Optional: optional field without a default value, e.g. ?name : string option. The ATD type of the field value must be an option type.
  • `With_default: optional field with a default value, e.g. ~websites : string list. The default value may be implicit or specified explicitely using annotations. Each target language that cannot omit fields may have to specify the default in its own syntax.

Sample ATD file:

type level = [ Beginner | Advanced | Expert ]

type user = \{
  id : string;

  ?name : string option;
    (* Field may be omitted when no value is set, if permitted
       by the target language. *)

  ~websites : string list;
    (* Implicit default: empty list.
       Field may be omitted if the field value is
       equal to the default value and the
       target language permits it. *)

  ~level <ocaml default="`Beginner"> : level;
    (* Explicit default for `ocaml'.
       For instance there is no `json' annotation because
       the default for undefined `JSON' fields would be to omit them. *)
}
Sourceand field = [
  1. | `Field of loc * (string * field_kind * annot) * type_expr
  2. | `Inherit of loc * type_expr
]

A single record field or an inherit statement. `Inherit statements can be expanded into fields using Atd_inherit or at loading time using the inherit_fields option offered by the Atd_util functions.

Sourceval loc_of_type_expr : type_expr -> loc

Extract the source location of any type expression.

Sourceval set_type_expr_loc : loc -> type_expr -> type_expr

Replace the location of the given expression. This is a shallow substitution. Sub-expressions are not affected.

Sourceval string_of_loc : loc -> string

Convert a location into a human-readable string such as File "foo.atd", line 123, characters 40-45.

Sourceval error : string -> 'a

error s is a shorthand for raise (Atd_error s).

Sourceval error_at : loc -> string -> 'a

error_at loc s raises Atd_error s' where s' is the location followed by s.

Sourceval dummy_loc : loc

Dummy value for predefined constructs that are not associated with a useful source location. Should not show up in error messages.

Sourceval annot_of_type_expr : type_expr -> annot

Return the annotations associated with a type expression. Note that there can be annotations in a variety of places, not just after type expressions.

Sourceval map_annot : (annot -> annot) -> type_expr -> type_expr

Replacement of the annotations associated with a type expression. This is a shallow transformation. Sub-expressions are not affected.

Sourceval map_all_annot : (annot -> annot) -> full_module -> full_module

Replacement of all annotations occurring in an ATD module.

Sourceval fold : (type_expr -> 'a -> 'a) -> type_expr -> 'a -> 'a

Iteration and accumulation over each type_expr node within a given type_expr.

Sourceval extract_type_names : ?ignorable:string list -> type_expr -> string list

Extract all the type names occurring in a type expression under `Name, without duplicates.

  • parameter ignorable

    specifies a list of type names to exclude from the result

Sourceval is_parametrized : type_expr -> bool

Test whether a type expression contains type variables (`Tvar).

OCaml

Innovation. Community. Security.