Skip to main content

gollum_parser/
lib.rs

1//! `gollum-parser`
2#![warn(missing_docs)]
3
4#![doc = concat!("\n# Examples\n\n```rust\n", include_str!("../examples/parse_basics.rs"), "\n```\n")]
5
6mod error;
7pub mod lexer;
8pub(crate) mod parser;
9
10pub use error::Error;
11pub use gollum_ast::item::Item;
12pub use lexer::Token;
13
14/// Result type for `gollum-parser`
15pub type Result<T, E = Error> = std::result::Result<T, E>;
16
17/// Parse Gollum source text into a list of top-level items.
18pub fn parse(source: &str) -> Result<Vec<Item>> {
19    use logos::Logos;
20    let token_results: Vec<_> = lexer::Token::lexer(source).collect();
21    if token_results.iter().any(|r| r.is_err()) {
22        return Err(Error::LexError);
23    }
24    let tokens: Vec<_> = token_results.into_iter().map(|r| r.unwrap()).collect();
25    parser::parse_program(&tokens)
26}