Library
Module
Module type
Parameter
Class
Class type
A parser is a consumer of tokens. At the end of consumption there is a result which is either a successfully parsed structure or a syntax or semantic error.
A parser p
is a sink of token. As long as it signals needs_more p
more token can be pushed into the parser via put_token p
or the input stream can be ended via put_end p
.
has_result p
is equivalent to not (needs_more p)
. has_result p
signals that the parser has either succeeded or failed.
If it has succeeded the final value is available via final p
.
There are two types of failure:
failed_expectations p
returns the list of failed expectations.failed_semantic p
returns the encountered semantic error.The function state
returns the user state.
The function lookaheads
returns a pair. The first part of the pair is an array of unprocessed lookahead token and the second part is a flag indicating if the endtoken has been received via put_end
.
type state = State.t
User state.
type final = Final.t
Type of the final object constructed in case of success.
type expect = string * Indent.expectation option
Type of a failed expectation.
type semantic = Semantic.t
Type a semantic error.
val needs_more : t -> bool
needs_more p
Does the parser p
need more token?
val has_result : t -> bool
has_result p
Has the parser p
ended parsing and either succeeded or failed?
has_result p
is the same as not (needs_more p)
val has_ended : t -> bool
val has_received_end : t -> bool
has_received_end p
Has the parser p
already received the end of token stream via put_end
?
put token p
Push token
into the parser p
.
Even if the parser has ended, more token can be pushed into the parser. The parser stores the token as lookahead token.
put_end p
Push and end token into the parser p
.
Precondition: not (has_received_end p)
run_on_stream str p
Run the parser p
on the stream of tokens str
.
val has_succeeded : t -> bool
has_succeeded p
Has the parser p
succeeded?
val has_failed_syntax : t -> bool
has_failed_syntax p
Has the parser p
failed with a syntax error?
val has_failed_semantic : t -> bool
has_failed_semantic p
Has the parser p
failed with a semantic error?
final p
The final object constructed by the parser p
in case of success.
Precondition: has_succeeded p
failed_expectations p
The failed expectations due to a syntax error.
Precondition: has_failed_syntax p
failed_semantic p
The failed semantic error.
Precondition: has_failed_semantic p
val has_lookahead : t -> bool
has_lookahead p
Are there any unconsumed lookahead token in the buffer or has the end token not yet been consumed?
lookaheads p
The lookahead token and and end flag of the parser p
.
The end flag indicates that the end token has already been received via put_end p
.
val position : t -> Position.t
position p
The current position in the input stream.
Can be called at any time.
val line : t -> int
line p
The current line in the input stream.
Can be called at any time.
val column : t -> int
column p
The current column in the input stream.
Can be called at any time.
val run_on_channel : in_channel -> t -> t
run_on_channel ic p
Run the parser p
on input channel ic
.