Class: MODL::Parser::Parsed::ParsedConditionTest
- Inherits:
-
MODLParserBaseListener
- Object
- Antlr4::Runtime::ParseTreeListener
- MODLParserListener
- MODLParserBaseListener
- MODL::Parser::Parsed::ParsedConditionTest
- Defined in:
- lib/modl/parser/parsed.rb
Overview
Class to represent a parsed grammar object
Instance Attribute Summary collapse
-
#subConditionList ⇒ Object
Returns the value of attribute subConditionList.
Instance Method Summary collapse
- #enterModl_condition_test(ctx) ⇒ Object
- #evaluate ⇒ Object
-
#initialize(global) ⇒ ParsedConditionTest
constructor
A new instance of ParsedConditionTest.
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
#subConditionList ⇒ Object
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 |
#evaluate ⇒ Object
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 |