main
Ziyang Hu 2 years ago
parent fa9066725b
commit bd2d61d91b

@ -59,7 +59,7 @@ pub enum Expr<'a> {
Const(Value<'a>), Const(Value<'a>),
} }
fn parse_expr_infix<'a>(lhs: Result<Expr<'a>, CozoError>, op: Pair<Rule>, rhs: Result<Expr<'a>, CozoError>) -> Result<Expr<'a>, CozoError> { fn build_expr_infix<'a>(lhs: Result<Expr<'a>, CozoError>, op: Pair<Rule>, rhs: Result<Expr<'a>, CozoError>) -> Result<Expr<'a>, CozoError> {
let lhs = lhs?; let lhs = lhs?;
let rhs = rhs?; let rhs = rhs?;
if let (Const(a), Const(b)) = (lhs, rhs) { if let (Const(a), Const(b)) = (lhs, rhs) {
@ -197,10 +197,10 @@ fn parse_s_quoted_string(pairs: Pairs<Rule>) -> Result<String, CozoError> {
Ok(ret) Ok(ret)
} }
fn parse_expr_primary(pair: Pair<Rule>) -> Result<Expr, CozoError> { fn build_expr_primary(pair: Pair<Rule>) -> Result<Expr, CozoError> {
match pair.as_rule() { match pair.as_rule() {
Rule::expr => parse_expr_primary(pair.into_inner().next().unwrap()), Rule::expr => build_expr_primary(pair.into_inner().next().unwrap()),
Rule::term => parse_expr_primary(pair.into_inner().next().unwrap()), Rule::term => build_expr_primary(pair.into_inner().next().unwrap()),
Rule::pos_int => Ok(Const(Value::Int(pair.as_str().replace('_', "").parse::<i64>()?))), Rule::pos_int => Ok(Const(Value::Int(pair.as_str().replace('_', "").parse::<i64>()?))),
Rule::hex_pos_int => Ok(Const(Value::Int(parse_int(pair.as_str(), 16)))), Rule::hex_pos_int => Ok(Const(Value::Int(parse_int(pair.as_str(), 16)))),
@ -218,13 +218,13 @@ fn parse_expr_primary(pair: Pair<Rule>) -> Result<Expr, CozoError> {
} }
} }
fn parse_expr(pair: Pair<Rule>) -> Result<Expr, CozoError> { fn build_expr(pair: Pair<Rule>) -> Result<Expr, CozoError> {
PREC_CLIMBER.climb(pair.into_inner(), parse_expr_primary, parse_expr_infix) PREC_CLIMBER.climb(pair.into_inner(), build_expr_primary, build_expr_infix)
} }
pub fn parse_expr_from_str(inp: &str) -> Result<Expr, CozoError> { pub fn parse_expr_from_str(inp: &str) -> Result<Expr, CozoError> {
let expr_tree = Parser::parse(Rule::expr, inp)?.next().unwrap(); let expr_tree = Parser::parse(Rule::expr, inp)?.next().unwrap();
parse_expr(expr_tree) build_expr(expr_tree)
} }
#[cfg(test)] #[cfg(test)]

Loading…
Cancel
Save