Sha256: 684b1a86ebbff535fa3a271aea83670fd47633886703ed885ff0ecb8069c8fce

Contents?: true

Size: 1.1 KB

Versions: 1

Compression:

Stored size: 1.1 KB

Contents

# encoding: utf-8

require "pp"

module Antelope
  module Generator

    # Generates an output file, mainly for debugging.  Included always
    # as a generator for a grammar.
    class Output < Base

      register_as "output"

      # Defines singleton method for every mod that the grammar passed
      # to the generator.
      #
      # @see Generator#initialize
      def initialize(*)
        super
        mods.each do |k, v|
          define_singleton_method (k) { v }
        end
      end

      def unused_symbols
        @_unused_symbols ||= begin
          used = grammar.all_productions.map(&:items).flatten.uniq
          all  = grammar.symbols.map do |s|
            if Symbol === s
              grammar.find_token(s)
            else
              s
            end
          end

          all - used - [grammar.find_token(:"$start")]
        end
      end

      # Actually performs the generation.  Uses the template in
      # output.erb, and generates the file `<file>.output`.
      #
      # @return [void]
      def generate
        template "output.erb", "#{file}.output"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
antelope-0.1.8 lib/antelope/generator/output.rb