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.



1203
1204
1205
1206
1207
# File 'lib/modl/parser/parsed.rb', line 1203

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

Instance Attribute Details

#conditionTestsObject

Returns the value of attribute conditionTests.



1200
1201
1202
# File 'lib/modl/parser/parsed.rb', line 1200

def conditionTests
  @conditionTests
end

#valueConditionalReturnsObject

Returns the value of attribute valueConditionalReturns.



1201
1202
1203
# File 'lib/modl/parser/parsed.rb', line 1201

def valueConditionalReturns
  @valueConditionalReturns
end

Instance Method Details

#enterModl_value_conditional(ctx) ⇒ Object



1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
# File 'lib/modl/parser/parsed.rb', line 1215

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

    break 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
  @result = @conditionTests[0].evaluate
end

#extract_hashObject



1209
1210
1211
1212
1213
# File 'lib/modl/parser/parsed.rb', line 1209

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