Sha256: 6f6903011b673d39ca3fa6b57850abc88e14b9cacc1545a4cb26d6b19457facc

Contents?: true

Size: 1.2 KB

Versions: 1

Compression:

Stored size: 1.2 KB

Contents

module DpllSolver
  module Parsers
    class DimacsParser
      attr_accessor :file, :num_vars, :num_clauses, :clauseset
      def initialize(file_path)
        @file = file_path
        @clauseset = Set.new
        @num_clauses = 0
        @num_vars = 0
        parse
      end

      private
      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

      def create_literal(num)
        var = DpllSolver::Formulas::Variable.new("x#{num.to_i.abs}")
        DpllSolver::Formulas::Literal.new(var, num.to_i > 0)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dpll_solver-0.0.1 lib/dpll_solver/parsers/dimacs_parser.rb