# File lib/hoe/racc.rb, line 54
  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