class DpllSolver::Parsers::DimacsParser
Attributes
clauseset[RW]
file[RW]
num_clauses[RW]
num_vars[RW]
Public Class Methods
new(file_path)
click to toggle source
# File lib/dpll_solver/parsers/dimacs_parser.rb, line 5 def initialize(file_path) @file = file_path @clauseset = Set.new @num_clauses = 0 @num_vars = 0 parse end
Private Instance Methods
create_literal(num)
click to toggle source
# File lib/dpll_solver/parsers/dimacs_parser.rb, line 40 def create_literal(num) var = DpllSolver::Formulas::Variable.new("x#{num.to_i.abs}") DpllSolver::Formulas::Literal.new(var, num.to_i > 0) end
parse()
click to toggle source
# File lib/dpll_solver/parsers/dimacs_parser.rb, line 14 def parse begin lines = open(@file).readlines lines.each do |line| line = line.gsub("\n", "").strip.split next if line[0] == "c" if line[0] == "p" @num_vars = line[2].to_i @num_clauses = line[3].to_i else line.pop if line.count > 0 clause = DpllSolver::Formulas::Clause.new line.each do |num| clause.add(create_literal(num)) end @clauseset.add(clause) end end end rescue Exception => e puts e raise IOError, "Could not parse file #{@file}!" end end