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.



737
738
739
740
# File 'lib/modl/parser/parsed.rb', line 737

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

Instance Attribute Details

#subConditionListObject

Returns the value of attribute subConditionList.



735
736
737
# File 'lib/modl/parser/parsed.rb', line 735

def subConditionList
  @subConditionList
end

Instance Method Details

#enterModl_condition_test(ctx) ⇒ Object



761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
# File 'lib/modl/parser/parsed.rb', line 761

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



742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
# File 'lib/modl/parser/parsed.rb', line 742

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