1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//! The parser and AST trees for *xlang*.

use lalrpop_util::{lalrpop_mod, ParseError, lexer::Token};

pub mod ast;
lalrpop_mod!(grammar);

/// Parses a single *xlang* expression.
pub fn parse_expr(input: &str) -> Result<ast::Expr<'_>, ParseError<usize, Token<'_>, &'static str>> {
    grammar::ExprParser::new().parse(input)
}

/// Parses some *xlang* source.
pub fn parse(input: &str) -> Result<Vec<ast::Expr<'_>>, ParseError<usize, Token<'_>, &'static str>> {
    grammar::ExprsParser::new().parse(input)
}