kari 0.1.0

An embeddable programming language, writting in and for Rust
Documentation
pub mod parser;
pub mod reader;
pub mod tokenizer;


use std::io;

use parser::Parser;
use reader::Reader;
use tokenizer::Tokenizer;


pub fn new<Stream>(name: String, stream: Stream)
    -> Parser<Tokenizer<Reader<Stream>>>
    where Stream: io::Read
{
    let reader    = Reader::new(stream);
    let tokenizer = Tokenizer::new(reader, name);
    let parser    = Parser::new(tokenizer);

    parser
}


pub trait Stage {
    type Item;
    type Error;

    fn next(&mut self) -> Result<Self::Item, Self::Error>;
}

impl<T> Stage for &'_ mut T where T: Stage {
    type Item  = T::Item;
    type Error = T::Error;

    fn next(&mut self) -> Result<Self::Item, Self::Error> {
        <T as Stage>::next(self)
    }
}