diff --git a/src/expr.rs b/src/expr.rs index fd05385..0c65af8 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -3,11 +3,11 @@ use miette::{miette, Context, Result}; use std::collections::HashMap; #[derive(Debug, Clone)] -pub enum Expr { - Literal(String), - Not(Box), - And(Vec), - Or(Vec), +pub enum Expr<'s> { + Literal(&'s str), + Not(Box>), + And(Vec>), + Or(Vec>), } #[derive(Debug)] @@ -88,11 +88,11 @@ impl<'s> Iterator for Tokanizer<'s> { } } -impl Expr { - fn parse_expr(tokanizer: &mut Tokanizer) -> Result { +impl<'s> Expr<'s> { + fn parse_expr(tokanizer: &mut Tokanizer<'s>) -> Result> { if let Some(token) = tokanizer.next().transpose()? { match token { - Token::Literal(l) => Ok(Expr::Literal(l.to_string())), + Token::Literal(l) => Ok(Expr::Literal(l)), Token::Not => Ok(Expr::Not(Box::new(Self::parse_expr(tokanizer)?))), Token::ParenOpen => { let first_expr = Self::parse_expr(tokanizer)?; @@ -157,7 +157,7 @@ impl Expr { } } - pub fn parse(input: &str) -> Result { + pub fn parse(input: &'s str) -> Result { let mut v = Vec::new(); for (i, line) in input.lines().enumerate() { let mut tokanizer = Tokanizer::new(line); @@ -275,7 +275,7 @@ impl Expr { } } - pub fn to_dpll_cnf(self) -> (Vec>, HashMap) { + pub fn to_dpll_cnf(self) -> (Vec>, HashMap<&'s str, Index>) { let mut map = HashMap::new(); let mut cnf = Vec::new();