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