Class: MODL::Parser::Parsed::ParsedConditionTest

Inherits:
MODLParserBaseListener show all
Defined in:
lib/modl/parser/parsed.rb

Overview

Class to represent a parsed grammar object

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from MODLParserBaseListener

#enterModl, #enterModl_array, #enterModl_array_conditional, #enterModl_array_conditional_return, #enterModl_array_item, #enterModl_array_value_item, #enterModl_condition, #enterModl_condition_group, #enterModl_map, #enterModl_map_conditional, #enterModl_map_conditional_return, #enterModl_map_item, #enterModl_nb_array, #enterModl_operator, #enterModl_pair, #enterModl_primitive, #enterModl_structure, #enterModl_top_level_conditional, #enterModl_top_level_conditional_return, #enterModl_value, #enterModl_value_conditional, #enterModl_value_conditional_return, #enterModl_value_item, #enter_every_rule, #exitModl, #exitModl_array, #exitModl_array_conditional, #exitModl_array_conditional_return, #exitModl_array_item, #exitModl_array_value_item, #exitModl_condition, #exitModl_condition_group, #exitModl_condition_test, #exitModl_map, #exitModl_map_conditional, #exitModl_map_conditional_return, #exitModl_map_item, #exitModl_nb_array, #exitModl_operator, #exitModl_pair, #exitModl_primitive, #exitModl_structure, #exitModl_top_level_conditional, #exitModl_top_level_conditional_return, #exitModl_value, #exitModl_value_conditional, #exitModl_value_conditional_return, #exitModl_value_item, #exit_every_rule, #visit_error_node, #visit_terminal

Methods inherited from MODLParserListener

#enterModl, #enterModl_array, #enterModl_array_conditional, #enterModl_array_conditional_return, #enterModl_array_item, #enterModl_array_value_item, #enterModl_condition, #enterModl_condition_group, #enterModl_map, #enterModl_map_conditional, #enterModl_map_conditional_return, #enterModl_map_item, #enterModl_nb_array, #enterModl_operator, #enterModl_pair, #enterModl_primitive, #enterModl_structure, #enterModl_top_level_conditional, #enterModl_top_level_conditional_return, #enterModl_value, #enterModl_value_conditional, #enterModl_value_conditional_return, #enterModl_value_item, #exitModl, #exitModl_array, #exitModl_array_conditional, #exitModl_array_conditional_return, #exitModl_array_item, #exitModl_array_value_item, #exitModl_condition, #exitModl_condition_group, #exitModl_condition_test, #exitModl_map, #exitModl_map_conditional, #exitModl_map_conditional_return, #exitModl_map_item, #exitModl_nb_array, #exitModl_operator, #exitModl_pair, #exitModl_primitive, #exitModl_structure, #exitModl_top_level_conditional, #exitModl_top_level_conditional_return, #exitModl_value, #exitModl_value_conditional, #exitModl_value_conditional_return, #exitModl_value_item

Constructor Details

#initialize(global) ⇒ ParsedConditionTest

Returns a new instance of ParsedConditionTest.



772
773
774
775
# File 'lib/modl/parser/parsed.rb', line 772

def initialize(global)
  @global = global
  @subConditionList = []
end

Instance Attribute Details

#subConditionListObject

Returns the value of attribute subConditionList.



770
771
772
# File 'lib/modl/parser/parsed.rb', line 770

def subConditionList
  @subConditionList
end

Instance Method Details

#enterModl_condition_test(ctx) ⇒ Object



796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
# File 'lib/modl/parser/parsed.rb', line 796

def enterModl_condition_test(ctx)
  ctx_children = ctx.children
  unless ctx_children.empty?
    last_operator = nil
    should_negate = false
    ctx_children.each do |child|
      if child.is_a? MODLParser::Modl_condition_groupContext
        condition_group = ParsedConditionGroup.new @global
        child.enter_rule(condition_group)

        p2 = OpenStruct.new
        p2.a = last_operator
        p2.b = should_negate

        p1 = OpenStruct.new
        p1.a = condition_group
        p1.b = p2

        @subConditionList << p1

        last_operator = nil
        should_negate = false
      elsif child.is_a? MODLParser::Modl_conditionContext
        condition = ParsedCondition.new @global
        child.enter_rule(condition)
        p2 = OpenStruct.new
        p2.a = last_operator
        p2.b = should_negate

        p1 = OpenStruct.new
        p1.a = condition
        p1.b = p2

        @subConditionList << p1

        last_operator = nil
        should_negate = false
      else
        if child.text == '!'
          should_negate = true
        else
          last_operator = child.text
        end
      end
    end
  end
end

#evaluateObject



777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
# File 'lib/modl/parser/parsed.rb', line 777

def evaluate
  result = false
  @subConditionList.each do |s|
    last_operator = s.b.a
    should_negate = s.b.b

    partial = s.a.evaluate
    case last_operator
    when '&'
      result &= should_negate ? !partial : partial
    when '|'
      result |= should_negate ? !partial : partial
    else
      result |= should_negate ? !partial : partial
    end
  end
  result
end