1pub mod parser;
2pub mod reader;
3pub mod tokenizer;
4
5
6use std::io;
7
8use parser::Parser;
9use reader::Reader;
10use tokenizer::Tokenizer;
11
12
13pub fn new<Stream>(name: String, stream: Stream)
14 -> Parser<Tokenizer<Reader<Stream>>>
15 where Stream: io::Read
16{
17 let reader = Reader::new(stream);
18 let tokenizer = Tokenizer::new(reader, name);
19 let parser = Parser::new(tokenizer);
20
21 parser
22}
23
24
25pub trait Stage {
26 type Item;
27 type Error;
28
29 fn next(&mut self) -> Result<Self::Item, Self::Error>;
30}
31
32impl<T> Stage for &'_ mut T where T: Stage {
33 type Item = T::Item;
34 type Error = T::Error;
35
36 fn next(&mut self) -> Result<Self::Item, Self::Error> {
37 <T as Stage>::next(self)
38 }
39}