Make.Parsertype token = Located_token.ttype location = Beluga_syntax.Location.ttype 'a parser = 'a tinclude Support.Monad.MONAD with type 'a t := 'a tval return : 'a -> 'a treturn a injects a into the monadic type.
bind f a is the sequential composition of two actions, passing any value produced by a as argument to f.
compose g f is the Kleisli composition of f and g, passing the input to f, then binding the output to g.
( let* ) ma f is bind f ma. This is a binding operator, and it is used as let* a = ma in f a.
include Support.Functor.FUNCTOR with type 'a t := 'a tmap f is the function that maps values of t by f. The order of arguments is for use in function pipelines as fb = fa |> map (fun a -> (* ... *)).
( let+ ) ma f is map f a. This is a binding operator, and is used as let+ a = ma in f a
include Support.Apply.APPLY with type 'a t := 'a tap fa fab applies argument fa to fab under the abstract datatype t.
ap_first second first combines actions first and second but keeps only first. That is, ap_first second first = first. The order of arguments is for use in function pipelines as first = first |> ap_first second.
ap_second second first combines actions first and second but keeps only second. That is, ap_second second first = second. The order of arguments is for use in function pipelines as second = first |> ap_second second.
seq2 fa1 fa2 sequentially executes actions fa1 and fa2, and keeps their outputs under the abstract datatype t.
seq3 fa1 fa2 fa3 sequentially executes actions fa1, fa2 and fa3, and keeps their outputs under the abstract datatype t.
seq4 fa1 fa2 fa3 fa4 sequentially executes actions fa1, fa2, fa3 and fa4, and keeps their outputs under the abstract datatype t.
seq5 fa1 fa2 fa3 fa4 fa5 sequentially executes actions fa1, fa2, fa3, fa4 and fa5, and keeps their outputs under the abstract datatype t.
lift2 f ma1 ma2 sequentially executes actions ma1, ma2 and passes their outputs to f.
lift3 f ma1 ma2 ma3 sequentially executes actions ma1, ma2, ma3 and passes their outputs to f.
lift4 f ma1 ma2 ma3 ma4 sequentially executes actions ma1, ma2, ma3, ma4 and passes their outputs to f.
run p state is (state', result) where result is the output of parsing p using state.
This is only meant to be used internally, or when defining new parser combinators, since it does not prune the parser exception when result = Result.Error exn.
The end user of a parser should use run_exn.
run_exn p state is (state', parsed) where parsed is the object parsed from state using p. A pruned exception is raised if p fails.
catch p runs p and invokes the given handler to modify the outcome. Despite being called "catch", this parser is actually a kind of map, and is used to implement "low-level" parser transformations.
val fail : exn -> 'a tfail exn is the parser that always fails with exn.
val fail_at_location : Beluga_syntax.Location.t -> exn -> 'a tfail_at_location location exn is the parser that always fails with exn annotated with location.
val fail_at_next_location : exn -> 'a tfail_at_next_location exn is the parser that always fails with exn annotated with the next location in the input stream.
val fail_at_previous_location : exn -> 'a tfail_at_previous_location exn is the parser that always fails with exn annotated with the previous location in the input stream.
labelled label p is p' such that when p fails, p' annotates the exception with a label for error-reporting.
span p is the parser p' that additionally returns the source file location that spans the tokens consumed by p.
only p is the parser p' that expects p to succeed, then the end of input to be reached immediately after.
maybe p is the parser p' that may fail, in which case it returns Option.none.
many p is the parser p' that parses tokens following the EBNF grammar p*, meaning that it parses 0 or more occurrences of p.
val some : 'a t -> 'a Support.List1.t tsome p is the parser p' that parses tokens following the EBNF grammar p+, meaning that it parses 1 or more occurrences of p.
sep_by0 ~sep p is the parser p' that parses tokens following the EBNF grammar [p (sep p)*], meaning that it parses 0 or more occurrences of p separated by sep.
val sep_by1 : sep:unit t -> 'a t -> 'a Support.List1.t tsep_by1 ~sep p is the parser p' that parses tokens following the EBNF grammar p (sep p)+, meaning that it parses 1 or more occurrences of p separated by sep.
trying p is the parser p' that enables backtracking in the parser state if p fails, which signals that the erroneous state can be backtracked out of irrespective of the number of consumed tokens.
val choice : 'a t Support.List.t -> 'a tchoice ps is the parser p that sequentially tries the parsers in p.
For instance, choice [p1; p2] first runs p1. If it fails, p2 is run if one of the following is true.
p1 failed without consuming any input.p1 failed with backtracking enabled. Backtracking is enabled by the trying combinator.satisfy f is the basic parser p that performs an action based on whether the next token in the stream satisfies the predicate f. The parser is advanced only if the next token satisfies f. If the next token does not satisfy the predicate, then the error is annotated with the next token's location.
val eoi : unit teoi is the parser that expects the end of input to be reached. This is either the end of the input string, token stream, or file input channel.