use crate::sql::parser::ast::SqlExpression;
use crate::sql::parser::lexer::Token;
use tracing::{debug, trace};
pub mod arithmetic;
pub mod case;
pub mod comparison;
pub mod logical;
pub mod primary;
pub trait ExpressionParser {
fn current_token(&self) -> &Token;
fn advance(&mut self);
fn peek(&self) -> Option<&Token>;
fn is_at_end(&self) -> bool;
fn consume(&mut self, expected: Token) -> Result<(), String>;
fn parse_identifier(&mut self) -> Result<String, String>;
}
#[inline]
pub fn log_parse_decision(context: &str, token: &Token, decision: &str) {
debug!(
context = context,
token = ?token,
decision = decision,
"Parser decision point"
);
}
#[inline]
pub fn trace_parse_entry(function: &str, token: &Token) {
trace!(
function = function,
token = ?token,
"Entering parse function"
);
}
#[inline]
pub fn trace_parse_exit(function: &str, result: &Result<SqlExpression, String>) {
trace!(
function = function,
success = result.is_ok(),
"Exiting parse function"
);
}