Module: Hoe::Racc

### Home Classes Methods

### In Files

- lib/hoe/racc.rb

### Methods

- #activate_racc_deps
- #define_racc_tasks
- #initialize_racc

### Files

- History.rdoc
- Manifest.txt

### Class/Module Index

Quicksearch

- Hoe
- Hoe::Clean
- Hoe::Compiler
- Hoe::Debug
- Hoe::Deps
- Hoe::Flay
- Hoe::Flog
- Hoe::GemPreludeSucks
- Hoe::Gemcutter
- Hoe::Inline
- Hoe::Newb
- Hoe::Package
- Hoe::Publish
- Hoe::RCov
- Hoe::Racc
- Hoe::Rdoc
- Hoe::Signing
- Hoe::Test
- Rake
- Rake::Task
- Rake::TaskManager
- File
- Object
- String

No matching classes.

# Hoe::Racc

Racc plugin for hoe.

### Tasks Provided:

lexer | Generate lexers for all .rex files in your Manifest.txt.
parser | Generate parsers for all .y files in your Manifest.txt.
.y -> .rb rule | Generate a parser using racc.
.rex -> .rb rule | Generate a lexer using oedipus_lex.

### Attributes

oedipus_options[RW]

Optional: Defines what flags to use for oedipus_lex. default: "--independent"

racc_flags[RW]

Optional: Defines what flags to use for racc. default: "-v -l"

racc_tasks[RW]

Optional: Defines what tasks need to generate parsers/lexers first.

Defaults to [:multi, :test, :check_manifest]

If you have extra tasks that require your parser/lexer to be built, add their names here in your hoe spec. eg:

    racc_tasks << :debug

### Public Instance Methods

activate_racc_deps() click to toggle source

Activate the racc dependencies

    # File lib/hoe/racc.rb, line 52
    def activate_racc_deps
      dependency "racc", "~> 1.4.6", :development
    end

define_racc_tasks() click to toggle source

Define tasks for racc plugin

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

      # HACK: taken from oedipus_lex's .rake file to bypass isolate bootstrap
      rule ".rex.rb" => proc { |path| path.sub(/\.rb$/, "") } do |t|
        require "oedipus_lex"
        warn "Generating #{t.name} from #{t.source} from #{OedipusLex::VERSION}"
        oedipus = OedipusLex.new oedipus_options
        oedipus.parse_file t.source

        File.open t.name, "w" do |f|
          f.write oedipus.generate
        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

initialize_racc() click to toggle source

Initialize variables for racc plugin.

    # File lib/hoe/racc.rb, line 38
    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.oedipus_options ||= {
                                :do_parse => false,
                               }
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.