use crateAst;
use crateParseError;
/// Parse an RSQL/FIQL filter string into an unvalidated AST.
///
/// Two-pass pipeline:
/// 1. `lexer::tokenize` — semantic scan → `Vec<Spanned>` (literals typed at lex time)
/// 2. `grammar::parse_tokens` — recursive descent on the token stream → `Ast`
///
/// On failure, returns `ParseError::At` with line, column, source snippet, and
/// a caret underline — ready to display directly to API consumers.