Module: Antelope::Ace::Grammar::Generation
- Included in:
- Antelope::Ace::Grammar
- Defined in:
- lib/antelope/ace/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.
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/antelope/ace/grammar/generation.rb', line 59 def find_generators(generators, ) return generators unless generators == :guess generators = [Generator::Output] # command line precedence... type = [:type] || ["type"] || compiler..fetch(:type) generators += DEFAULT_GENERATORS.fetch(type) generators rescue KeyError => e 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.
32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/antelope/ace/grammar/generation.rb', line 32 def generate( = {}, generators = :guess, modifiers = DEFAULT_MODIFIERS) mods = modifiers.map(&:last). map { |x| x.new(self) } mods.map(&:call) hash = Hash[modifiers.map(&:first).zip(mods)] # This is when we'd generate find_generators(generators, ).each do |gen| gen.new(self, hash).generate end end |