#![no_std]
#![forbid(unsafe_code)]
#![warn(missing_docs)]
extern crate alloc;
mod def;
pub mod filter;
mod ops;
pub mod path;
pub mod string;
pub mod test;
mod convert;
pub mod lex;
pub mod parse;
mod prec_climb;
pub use def::{Arg, Call, Def, Main};
pub use lex::Lexer;
pub use ops::{MathOp, OrdOp};
pub use parse::Parser;
use path::Path;
pub use string::Str;
pub type Span = core::ops::Range<usize>;
pub type Spanned<T> = (T, Span);
pub fn parse<'s, T: Default, F>(s: &'s str, f: F) -> Option<T>
where
F: for<'t> FnOnce(&mut Parser<'s, 't>) -> parse::Result<'s, 't, T>,
{
Parser::new(&Lexer::new(s).lex().ok()?).parse(f).ok()
}