Interfaces.NORMAL_PARSER
A normal parser parses a stream of tokens like a MINIMAL_PARSER
. In addition it can have a state and semantic errors.
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_ended p
is equivalent to not (needs_more p)
. has_ended p
signals that the parser has either succeeded or failed.
If it has succeeded the final value is available via final p
.
type item = token
In order to conform to the interface Fmlib_std.Interfaces.SINK
.
val needs_more : t -> bool
needs_more p
Does the parser p
need more tokens?
put tok p
Push token tok
into the parser p
.
Even if the parser has ended, more tokens can be pushed into the parser. The parser stores the token as lookahead token.
If the parser has already received the end of the token stream via put_end
, then all subsequent tokens are ignored.
val has_succeeded : t -> bool
has_succeeded p
Has the parser p
succeeded?
val has_ended : t -> bool
has_ended p
Has the parser p
ended parsing and either succeeded or failed?
has_ended p
is the same as not (needs_more p)
val has_consumed_end : t -> bool
Has the parser consumed the end of input?
final p
The final object constructed by the parser p
in case of success.
Precondition: has_succeeded p
val has_failed_syntax : t -> bool
has_failed_syntax p
Has the parser p
failed with a syntax error?
failed_expectations p
The failed expectations due to a syntax error.
Precondition: has_failed_syntax p
val has_failed_semantic : t -> bool
Has the parser failed because of a semantic error?
The semantic error encountered.
Precondition: A semantic error has occurred.