module Hoe::Racc

def activate_racc_deps

def activate_racc_deps
  dependency 'racc', '~> 1.4.6', :development
end

def define_racc_tasks

def define_racc_tasks
  racc_files   = self.spec.files.find_all { |f| f =~ /\.y$/ }
  rex_files    = self.spec.files.find_all { |f| f =~ /\.rex$/ }
  parser_files = racc_files.map { |f| f.sub(/\.y$/, ".rb") }
  lexer_files  = rex_files.map  { |f| f.sub(/\.rex$/, ".rb") }
  self.clean_globs += parser_files
  self.clean_globs += lexer_files
  rule ".rb" => ".y" do |t|
    begin
      sh "racc #{racc_flags} -o #{t.name} #{t.source}"
    rescue
      abort "need racc, sudo gem install racc"
    end
  end
  rule ".rb" => ".rex" do |t|
    begin
      sh "rex #{rex_flags} -o #{t.name} #{t.source}"
    rescue
      abort "need rexical, sudo gem install rexical"
    end
  end
  task :isolate # stub task
  desc "build the parser" unless parser_files.empty?
  task :parser => :isolate
  desc "build the lexer" unless lexer_files.empty?
  task :lexer  => :isolate
  task :parser => parser_files
  task :lexer  => lexer_files
  racc_tasks.each do |t|
    task t => [:parser, :lexer]
  end
end

def initialize_racc

def initialize_racc
  self.racc_tasks = [:multi, :test, :check_manifest]
  # -v = verbose
  # -l = no-line-convert (they don't ever line up anyhow)
  self.racc_flags ||= "-v -l"
  self.rex_flags  ||= "--independent"
end