1#![warn(missing_docs)]
3
4mod error;
5pub mod lexer;
6pub(crate) mod parser;
7
8pub use error::Error;
9pub use gollum_ast::item::Item;
10
11pub type Result<T, E = Error> = std::result::Result<T, E>;
13
14pub fn parse(source: &str) -> Result<Vec<Item>> {
16 use logos::Logos;
17 let token_results: Vec<_> = lexer::Token::lexer(source).collect();
18 if token_results.iter().any(|r| r.is_err()) {
19 return Err(Error::LexError);
20 }
21 let tokens: Vec<_> = token_results.into_iter().map(|r| r.unwrap()).collect();
22 parser::parse_program(&tokens)
23}