use self::ast_node::{ASTNode, TokenIter};
pub mod ast_debug;
pub mod ast_node;
#[derive(Debug)]
pub enum ParseError {
SyntaxError,
}
pub fn parse<RootToken: ASTNode<Token>, Token: Copy>(
tokens: &Vec<(Token, String)>,
) -> Result<RootToken, ParseError> {
let mut iter = TokenIter::create(&tokens);
let res = RootToken::parse(&mut iter).ok_or(ParseError::SyntaxError)?;
if iter.next().is_some() {
return Err(ParseError::SyntaxError);
}
Ok(res)
}