Skip to main content

lex_syntax/
lib.rs

1//! M1: lexer, parser, syntax tree, pretty-printer for Lex.
2//!
3//! See spec ยง3 for the grammar.
4
5pub mod token;
6pub mod syntax;
7pub mod parser;
8pub mod printer;
9pub mod loader;
10
11pub use loader::{load_program, load_program_from_str, LoadError};
12pub use parser::{parse, ParseError};
13pub use printer::print_program;
14pub use syntax::*;
15pub use token::{lex, LexError, Token, TokenKind};
16
17/// Convenience: lex + parse a source string.
18pub fn parse_source(src: &str) -> Result<Program, SyntaxError> {
19    let toks = lex(src).map_err(SyntaxError::Lex)?;
20    parse(toks).map_err(SyntaxError::Parse)
21}
22
23#[derive(Debug, thiserror::Error)]
24pub enum SyntaxError {
25    #[error(transparent)]
26    Lex(#[from] LexError),
27    #[error(transparent)]
28    Parse(#[from] ParseError),
29}