[][src]Struct lemon_tree::LemonMintBuilder

pub struct LemonMintBuilder { /* fields omitted */ }

Builder class that will finally generate LemonMint. Call builder methods to supply parser rules and options - everything that you would normally put to Lemon's Y-grammar file. Or you can feed the Y-file itself (it's syntax is similar to Lemon's one).

Example

use lemon_mint::LemonMintBuilder;
use std::sync::Arc;

let fake_filename = Arc::new("source.y".to_string()); // will appear in error messages
let builder = LemonMintBuilder::new().load_y(&fake_filename, "%token_type {f64}\nUnit ::= NEW_LINE.".as_bytes()).unwrap();
let lemon = builder.try_into_lemon().unwrap();

Or:

use lemon_mint::LemonMintBuilder;
use std::sync::Arc;

let fake_filename = Arc::new("source.y".to_string()); // will appear in error messages
let builder = LemonMintBuilder::new()
	.set_token_type("f64".to_string()).unwrap()
	.add_rule(&fake_filename, 1, "Unit".to_string(), "NEW_LINE", "".to_string()).unwrap();
let lemon = builder.try_into_lemon().unwrap();

Implementations

impl LemonMintBuilder[src]

pub fn new() -> LemonMintBuilder[src]

Creates new builder

pub fn load_y_file(
    self,
    filename: &Arc<String>
) -> Result<LemonMintBuilder, LemonMintError>
[src]

Load a Y-grammar file. You can call this function several times to load grammar by parts, and you can call other builder methods to add/override settings.

pub fn load_y<R>(
    self,
    filename: &Arc<String>,
    input: R
) -> Result<LemonMintBuilder, LemonMintError> where
    R: Read
[src]

Like load_y_file(), but you give file contents as io::Read object.

Example

use lemon_mint::LemonMintBuilder;
use std::sync::Arc;

let fake_filename = Arc::new("source.y".to_string()); // will appear in error messages
let builder = LemonMintBuilder::new().load_y(&fake_filename, "%token_type {f64}\nUnit ::= NEW_LINE.".as_bytes()).unwrap();

pub fn set_start_symbol(
    self,
    filename: &Arc<String>,
    n_line: usize,
    value: String
) -> Result<LemonMintBuilder, LemonMintError>
[src]

Set the parser "%start_symbol".

pub fn set_token_type(
    self,
    value: String
) -> Result<LemonMintBuilder, LemonMintError>
[src]

Set the parser "%token_type".

pub fn set_default_type(
    self,
    value: String
) -> Result<LemonMintBuilder, LemonMintError>
[src]

Set the parser "%default_type".

pub fn set_trace_prompt(
    self,
    value: String
) -> Result<LemonMintBuilder, LemonMintError>
[src]

Enable trace, and set prompt that will be printed before each message.

pub fn set_extra_argument_type(
    self,
    value: String
) -> Result<LemonMintBuilder, LemonMintError>
[src]

Set the parser %extra_argument.

pub fn set_left(
    self,
    filename: &Arc<String>,
    n_line: usize,
    symbol_names: &str
) -> Result<LemonMintBuilder, LemonMintError>
[src]

Add the parser "%left NAME"

pub fn set_right(
    self,
    filename: &Arc<String>,
    n_line: usize,
    symbol_names: &str
) -> Result<LemonMintBuilder, LemonMintError>
[src]

Add the parser "%right NAME"

pub fn set_nonassoc(
    self,
    filename: &Arc<String>,
    n_line: usize,
    symbol_names: &str
) -> Result<LemonMintBuilder, LemonMintError>
[src]

Add the parser "%nonassoc NAME".

pub fn add_type(
    self,
    filename: &Arc<String>,
    n_line: usize,
    symbol_name: String,
    type_name: String
) -> Result<LemonMintBuilder, LemonMintError>
[src]

Add the parser "%type symbol_name {Type}".

pub fn add_fallback(
    self,
    filename: &Arc<String>,
    n_line: usize,
    fallback_to_symbol_name: String,
    symbol_names: &str
) -> Result<LemonMintBuilder, LemonMintError>
[src]

Add the parser "%fallback FB A B C".

pub fn add_rule(
    self,
    filename: &Arc<String>,
    n_line: usize,
    lhs_name: String,
    rhs_names_aliases: &str,
    code: String
) -> Result<LemonMintBuilder, LemonMintError>
[src]

Add parser rule like "a", "b(v_b) COMMA c(v_c)", "vec![v_b, v_c]"

pub fn add_code(self, code: String) -> Result<LemonMintBuilder, LemonMintError>[src]

Add the parser %code or %include

pub fn set_no_compress(
    self,
    new_no_compress: bool
) -> Result<LemonMintBuilder, LemonMintError>
[src]

Allows to disable finite-state machine tables compression. Don't do this.

pub fn set_no_resort(
    self,
    new_no_resort: bool
) -> Result<LemonMintBuilder, LemonMintError>
[src]

Disable resorting states. You don't need this functionality.

pub fn try_into_lemon(self) -> Result<LemonMint, LemonMintError>[src]

When you feed all the parser rules and options, call this method to finally build the parser finite-state machine transition tables. If there are problems with your grammar or if there are parser conflicts, this will return Err. If parser build succeeds this returns the parser representation as LemonMint object.

Trait Implementations

impl Debug for LemonMintBuilder[src]

impl TryFrom<LemonMintBuilder> for LemonMint[src]

type Error = LemonMintError

The type returned in the event of a conversion error.

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.