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.
766 767 768 769 |
# File 'lib/modl/parser/parsed.rb', line 766 def initialize(global) @global = global @subConditionList = [] end |
Instance Attribute Details
#subConditionList ⇒ Object
Returns the value of attribute subConditionList.
764 765 766 |
# File 'lib/modl/parser/parsed.rb', line 764 def subConditionList @subConditionList end |
Instance Method Details
#enterModl_condition_test(ctx) ⇒ Object
790 791 792 793 794 795 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 |
# File 'lib/modl/parser/parsed.rb', line 790 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
771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 |
# File 'lib/modl/parser/parsed.rb', line 771 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 |