Sha256: 03a20d947350354681b10e91e050df58daf33b94f0a1f3463d3e07c62dec1cfa

Contents?: true

Size: 1.03 KB

Versions: 2

Compression:

Stored size: 1.03 KB

Contents

require_relative 'syntax'
require_relative 'semantics'

module BELParser
  module Language
    class ExpressionValidator
      def initialize(spec, namespaces)
        @spec                = spec
        @namespaces          = namespaces
        @syntax_functions    = Syntax.syntax_functions
        @semantics_functions = Semantics.semantics_functions
      end

      def validate(expression_node)
        results = syntax(expression_node)
        if results.empty?
          results << Syntax::Valid.new(expression_node, @spec)
          results.concat(semantics(expression_node))
        end
        results
      end

      private

      def syntax(expression_node)
        expression_node.traverse.flat_map do |node|
          @syntax_functions.map { |func| func.map(node, @spec, @namespaces) }
        end.compact
      end

      def semantics(expression_node)
        expression_node.traverse.flat_map do |node|
          @semantics_functions.map { |func| func.map(node, @spec, @namespaces) }
        end.compact
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bel_parser-1.0.0.alpha.7 lib/bel_parser/language/expression_validator.rb
bel_parser-1.0.0.alpha.6 lib/bel_parser/language/expression_validator.rb