Module: Antelope::Grammar::Generation
- Included in:
- Antelope::Grammar
- Defined in:
- lib/antelope/grammar/generation.rb
Overview
Handles the generation of output for the grammar.
Instance Method Summary collapse
-
#find_generators(generators, options) ⇒ Array<Generator>
private
Find the corresponding generators.
-
#generate(options = {}, generators = :guess, modifiers = DEFAULT_MODIFIERS) ⇒ void
Generates the output.
Instance Method Details
#find_generators(generators, options) ⇒ Array<Generator> (private)
Find the corresponding generators. If the first argument
isn't :guess
, it returns the first argument. Otherwise,
it tries to "intelligently guess" by checking the type from
the options or the compiler. If it is unable to find the
type, it will raise a NoTypeError.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/antelope/grammar/generation.rb', line 58 def find_generators(generators, ) return generators unless generators == :guess generators = [Generator::Output] # command line precedence... type = [:type] || ['type'] || compiler..fetch(:type) generators << Generator.generators.fetch(type.to_s) generators rescue KeyError raise NoTypeError, "Undefined type #{type}" end |
#generate(options = {}, generators = :guess, modifiers = DEFAULT_MODIFIERS) ⇒ void
This method returns an undefined value.
Generates the output. First, it runs through every given modifier, and instintates it. It then calls every modifier, turns it into a hash, and passes that hash to each of the given generators.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/antelope/grammar/generation.rb', line 27 def generate( = {}, generators = :guess, modifiers = DEFAULT_MODIFIERS) mods = modifiers.map(&:last) .map { |x| x.new(self) } mods.each do |mod| puts "Running mod #{mod.class}..." if [:verbose] mod.call end hash = Hash[modifiers.map(&:first).zip(mods)] # This is when we'd generate find_generators(generators, ).each do |gen| puts "Running generator #{gen}..." if [:verbose] gen.new(self, hash).generate end end |