Skip to main content

gollum_parser/
lib.rs

1//! `gollum-parser`
2#![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
11/// Result type for `gollum-parser`
12pub type Result<T, E = Error> = std::result::Result<T, E>;
13
14/// Parse Gollum source text into a list of top-level items.
15pub 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}