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;
10pub use lexer::Token;
11
12pub type Result<T, E = Error> = std::result::Result<T, E>;
14
15pub fn parse(source: &str) -> Result<Vec<Item>> {
17 use logos::Logos;
18 let token_results: Vec<_> = lexer::Token::lexer(source).collect();
19 if token_results.iter().any(|r| r.is_err()) {
20 return Err(Error::LexError);
21 }
22 let tokens: Vec<_> = token_results.into_iter().map(|r| r.unwrap()).collect();
23 parser::parse_program(&tokens)
24}