package comby

  1. Overview
  2. Docs
On This Page
  1. Metasyntax
Legend:
Library
Module
Module type
Parameter
Class
Class type

Metasyntax

Defines the metasyntax recognized in templates and associates the metasyntax with the matching behavior of holes.

type hole_definition =
  1. | Delimited of string option * string option

A hole definition should comprise either a string prefix, suffix, or both which encloses an variable identifier. See example below.

type hole_syntax =
  1. | Hole of Hole.sort * hole_definition
  2. | Regex of string * char * string

Defines syntax definitions for holes. Zero or more Hole sorts, excluding Regex should have an associated hole_definition. The Regex hole must define a prefix, separator, and suffix. See example below.

type t = {
  1. syntax : hole_syntax list;
  2. identifier : char -> bool;
}

A metasyntax comprises:

  • identifier that's a function returning true for characters are allowed in identifiers. For example, to allow only contiguous capitalized letters as recognized identifiers within some hole syntax, use the function:

function | 'A' .. 'Z' | '_' -> true | _ -> false

  • syntax with one or more hole definitions. For example, the default metasyntax for the Everything hole is defined as:

Hole (Everything, Delimited (Some ":[", Some "]"))

A Regex hole must define a prefix, separator, and suffix. The current convention is taken to parse Regex holes as:

<prefix><identifier><separator><regular expression><suffix>

A separator is required to syntactically distinguish arbitrary identifier syntax from regular exressions. A suffix is required to syntactically distinguish when to stop parsing a regular expression and resume parsing the rest of the template.

module type S = sig ... end

A module signature for metasyntax to parameterize a matcher

val default_metasyntax : t

The default metasyntax. It is defined as:

let default_syntax = Hole (Everything, Delimited (Some ":[", Some "]")) ; Hole (Expression, Delimited (Some ":[", Some ":e]")) ; Hole (Alphanum, Delimited (Some ":[[", Some "]]")) ; Hole (Non_space, Delimited (Some ":[", Some ".]")) ; Hole (Line, Delimited (Some ":[", Some "\\n]")) ; Hole (Blank, Delimited (Some ":[ ", Some "]")) ; Regex (":[", '~', "]")

let default_identifier = function | 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' -> true | _ -> false

let default_metasyntax = syntax = default_syntax ; identifier = default_identifier

val create : t -> (module S)

create definition creates a metasyntax module from a definition

val default : (module S)

default returns the default metasyntax module

OCaml

Innovation. Community. Security.