1#![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
14pub type Result<T, E = Error> = std::result::Result<T, E>;
16
17pub 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}