use crate::cnf::{Clause, Literal, CNF};
use crate::expression::Expression;
pub fn parse_dimacs(filename: &str) -> Expression {
let mut cnf = Expression::new();
let file = std::fs::read_to_string(filename).unwrap();
for line in file.lines() {
if line.starts_with('c') || line.is_empty() {
continue;
}
if line.starts_with('p') {
let mut parts = line.split_whitespace();
let _ = parts.next(); let _ = parts.next(); continue;
}
let mut clause = Clause::new();
for literal in line.split_whitespace() {
let value = literal.parse::<Literal>().unwrap();
if value == 0 {
break;
}
clause.insert_checked(value);
}
cnf.add_clause(clause);
}
cnf
}