Class: MODL::Parser::Parsed::ParsedTopLevelConditional

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_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_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_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) ⇒ ParsedTopLevelConditional

Returns a new instance of ParsedTopLevelConditional.



988
989
990
991
992
# File 'lib/modl/parser/parsed.rb', line 988

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

Instance Attribute Details

#conditionTestsObject

Returns the value of attribute conditionTests.



985
986
987
# File 'lib/modl/parser/parsed.rb', line 985

def conditionTests
  @conditionTests
end

#topLevelConditionalReturnsObject

Returns the value of attribute topLevelConditionalReturns.



986
987
988
# File 'lib/modl/parser/parsed.rb', line 986

def topLevelConditionalReturns
  @topLevelConditionalReturns
end

Instance Method Details

#enterModl_top_level_conditional(ctx) ⇒ Object



1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
# File 'lib/modl/parser/parsed.rb', line 1017

def enterModl_top_level_conditional(ctx)
  @global.enter_condition
  i = 0
  modl_condition_test = ctx.modl_condition_test
  ctx_modl_top_level_conditional_return = ctx.modl_top_level_conditional_return

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

    conditional_return = ParsedTopLevelConditionalReturn.new @global
    ctx.modl_top_level_conditional_return_i(i).enter_rule(conditional_return)
    @conditionTests[i] = condition_test
    @topLevelConditionalReturns[i] = conditional_return
    i += 1
  end
  if ctx_modl_top_level_conditional_return.size > modl_condition_test.size
    conditional_return = ParsedTopLevelConditionalReturn.new @global
    ctx.modl_top_level_conditional_return_i(ctx_modl_top_level_conditional_return.size - 1).enter_rule(conditional_return)
    @topLevelConditionalReturns[i] = conditional_return
  end
  @global.exit_condition
end

#extract_hashObject



994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
# File 'lib/modl/parser/parsed.rb', line 994

def extract_hash
  @conditionTests.each_index do |i|
    next unless @conditionTests[i].evaluate

    item = @topLevelConditionalReturns[i]
    if item.structures[0].pair
      key = item.structures[0].pair.key
      key = Sutil.tail(key) if key[0] == '_'
      @global.pair(key, item.structures[0].pair)
    end
    return item.extract_hash
  end
  return unless @topLevelConditionalReturns.length > @conditionTests.length

  last_item = @topLevelConditionalReturns[-1]
  if last_item.structures[0].pair
    key = last_item.structures[0].pair.key
    key = Sutil.tail(key) if key[0] == '_'
    @global.pair(key, last_item.structures[0].pair)
  end
  last_item.extract_hash
end