1#![no_std]
3#![forbid(unsafe_code)]
4#![warn(missing_docs)]
5
6extern crate alloc;
7
8mod def;
9pub mod filter;
10mod ops;
11pub mod path;
12pub mod string;
13pub mod test;
14
15mod convert;
16pub mod lex;
17pub mod parse;
18mod prec_climb;
19
20pub use def::{Arg, Call, Def, Main};
21pub use lex::Lexer;
22pub use ops::{MathOp, OrdOp};
23pub use parse::Parser;
24use path::Path;
25pub use string::Str;
26
27pub type Span = core::ops::Range<usize>;
29
30pub type Spanned<T> = (T, Span);
32
33pub fn parse<'s, T: Default, F>(s: &'s str, f: F) -> Option<T>
42where
43 F: for<'t> FnOnce(&mut Parser<'s, 't>) -> parse::Result<'s, 't, T>,
44{
45 Parser::new(&Lexer::new(s).lex().ok()?).parse(f).ok()
46}