Sha256: 9db07c5374d5b631a7fa2bd2f5ba0d53a0f131d29503200a9770152dc59e6d28

Contents?: true

Size: 988 Bytes

Versions: 11

Compression:

Stored size: 988 Bytes

Contents

require_relative 'parsers/ast/node'

module BELParser
  # ASTFilter filters types of {BELParser::Parsers::AST::Node}.
  class ASTFilter
    def initialize(ast_enum, *types)
      @ast_enum = ast_enum
      @types    = types
    end

    def each
      if block_given?
        @ast_enum.each do |(line_number, line, ast_results)|
          selected = filter(ast_results)
          yield([line_number, line, selected]) unless selected.empty?
        end
      else
        enum_for(:each)
      end
    end

    def filter(ast_enum)
      ast_enum.select do |node|
        @types.include?(node.type)
      end
    end
  end
end

if __FILE__ == $PROGRAM_NAME
  require_relative 'ast_generator'

  types     = ARGV.map(&:to_sym)
  generator = BELParser::ASTGenerator.new($stdin)
  BELParser::ASTFilter.new(
    generator,
    *types
  ).each do |(line_number, line, results)|
    puts "#{line_number}: #{line}"
    results.each do |result_ast|
      puts result_ast.to_s(1)
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
bel_parser-1.0.0.alpha.28-java lib/bel_parser/ast_filter.rb
bel_parser-1.0.0.alpha.28 lib/bel_parser/ast_filter.rb
bel_parser-1.0.0.alpha.27-java lib/bel_parser/ast_filter.rb
bel_parser-1.0.0.alpha.27 lib/bel_parser/ast_filter.rb
bel_parser-1.0.0.alpha.26 lib/bel_parser/ast_filter.rb
bel_parser-1.0.0.alpha.25 lib/bel_parser/ast_filter.rb
bel_parser-1.0.0.alpha.24 lib/bel_parser/ast_filter.rb
bel_parser-1.0.0.alpha.23 lib/bel_parser/ast_filter.rb
bel_parser-1.0.0.alpha.22 lib/bel_parser/ast_filter.rb
bel_parser-1.0.0.alpha.21 lib/bel_parser/ast_filter.rb
bel_parser-1.0.0.alpha.20 lib/bel_parser/ast_filter.rb