Crate menhir_runtime [] [src]

The Rust runtime for Menhir

All the parsers generated by Menhir with the --rust option (or using the menhir package from crates.io) use functions and types from this crate.

This documentation is a reference API of the runtime library. It might be useful to learn how to interact with the genarated parser from Rust code. To learn how to write grammars, see the Menhir manual. To learn how to use the generator to produce an executable Rust parser, see [the documentation of the menhir crate].

The runtime API

The runtime library in this crate implements a classic LR(1) automaton loop to interpret the parse tables generated from a grammar specification. This implementation is highly generic in order to hide implementation details in the generated code. The most notable elements are:

The lexer interface

Menhir parsers do not require a specially-recognized EOF token. The user is free to declare such a token in its specification but there is nothing special about it: Menhir parsers are able to automatically detect when they successfuly parsed recognized a start non-terminal without comsuming any extra lookahead token. This way, what remains of the input can be used with another invokation of the parser, or anything else.

To represent this fact, the runtime uses its own Lexer trait, which encodes an infinite stream of pairs of a token and its location.

trait Lexer {
    type Location;
    type Token;
    type Error;

    fn input(&mut self) -> Result<(Self::Location, Self::Token),
                                  Self::Error>;
}

Modules

internals

The internal representation of the LR engine.

lexing

The lexer interface.

Structs

ParserState

The state of the parser during the parsing process.

SyntaxError

An unrecoverable syntax error.

Enums

Error

A fatal (non-recoverable parsing error).

Traits

EntryPoint

The trait of the entry points of a grammar file.

LRErrors

Extension trait for parser that can provide detailed error messages.

LRParser

Trait describing a Menhir parser.