Class: MODL::Parser::Parsed::ParsedValueConditional

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_condition_test, #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_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_condition_test, #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_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) ⇒ ParsedValueConditional

Returns a new instance of ParsedValueConditional.



1145
1146
1147
1148
1149
# File 'lib/modl/parser/parsed.rb', line 1145

def initialize(global)
  @global = global
  @conditionTests = []
  @valueConditionalReturns = []
end

Instance Attribute Details

#conditionTestsObject

Returns the value of attribute conditionTests.



1142
1143
1144
# File 'lib/modl/parser/parsed.rb', line 1142

def conditionTests
  @conditionTests
end

#valueConditionalReturnsObject

Returns the value of attribute valueConditionalReturns.



1143
1144
1145
# File 'lib/modl/parser/parsed.rb', line 1143

def valueConditionalReturns
  @valueConditionalReturns
end

Instance Method Details

#enterModl_value_conditional(ctx) ⇒ Object



1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
# File 'lib/modl/parser/parsed.rb', line 1159

def enterModl_value_conditional(ctx)
  i = 0
  ctx_modl_condition_test = ctx.modl_condition_test
  ctx_modl_value_conditional_return = ctx.modl_value_conditional_return

  while i < ctx_modl_condition_test.size
    condition_test = ParsedConditionTest.new @global
    ctx.modl_condition_test_i(i).enter_rule(condition_test)

    @conditionTests[i] = condition_test

    return if ctx.modl_value_conditional_return_i(i).nil?

    conditional_return = ParsedValueConditionalReturn.new @global

    ctx.modl_value_conditional_return_i(i).enter_rule(conditional_return)

    @valueConditionalReturns[i] = conditional_return

    if ctx_modl_value_conditional_return.size > ctx_modl_condition_test.size
      condition_test = ParsedConditionTest.new @global
      conditional_return = ParsedValueConditionalReturn.new @global
      ctx.modl_value_conditional_return_i(ctx_modl_value_conditional_return.size - 1).enter_rule(conditional_return)
      @conditionTests[i + 1] = condition_test
      @valueConditionalReturns[i + 1] = conditional_return
    end

    i += 1
  end
end

#extract_hashObject



1151
1152
1153
1154
1155
1156
1157
# File 'lib/modl/parser/parsed.rb', line 1151

def extract_hash
  result = @conditionTests[0].evaluate

  return result if @valueConditionalReturns.length == 0
  return @valueConditionalReturns[0].extract_hash if result
  return @valueConditionalReturns[1].extract_hash
end