package comby

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

Module Matchers.MetasyntaxSource

Metasyntax

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

Sourcetype 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.

Sourcetype 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.

Sourcetype 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.

Sourcemodule type S = sig ... end

A module signature for metasyntax to parameterize a matcher

Sourceval 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

Sourceval create : t -> (module S)

create definition creates a metasyntax module from a definition

Sourceval default : (module S)

default returns the default metasyntax module

OCaml

Innovation. Community. Security.