Class: MODL::Parser::Parsed
- Inherits:
-
MODLParserBaseListener
- Object
- Antlr4::Runtime::ParseTreeListener
- MODLParserListener
- MODLParserBaseListener
- MODL::Parser::Parsed
- Defined in:
- lib/modl/parser/parsed.rb
Overview
This class represents a MODL parse tree for a given MODL object. It tries to process the parse tree as it is generated as much as possible to save revisiting nodes unnecessarily.
Many of the method names are generated by ANTLR4 so are not ruby style.
Defined Under Namespace
Classes: ParsedArray, ParsedArrayConditional, ParsedArrayConditionalReturn, ParsedArrayItem, ParsedArrayValueItem, ParsedCondition, ParsedConditionGroup, ParsedConditionTest, ParsedFalse, ParsedMap, ParsedMapConditional, ParsedMapConditionalReturn, ParsedMapItem, ParsedNbArray, ParsedNull, ParsedNumber, ParsedPair, ParsedPrimitive, ParsedQuoted, ParsedString, ParsedStructure, ParsedTopLevelConditional, ParsedTopLevelConditionalReturn, ParsedTrue, ParsedValue, ParsedValueConditional, ParsedValueConditionalReturn, ParsedValueItem
Instance Attribute Summary collapse
-
#global ⇒ Object
Returns the value of attribute global.
-
#structures ⇒ Object
Returns the value of attribute structures.
Class Method Summary collapse
Instance Method Summary collapse
- #enterModl(ctx) ⇒ Object
-
#extract_hash ⇒ Object
Convert the parse tree to a simpler structure suitable for JSON.generate.
-
#initialize(global = nil) ⇒ Parsed
constructor
A new instance of Parsed.
Methods inherited from MODLParserBaseListener
#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, #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_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, #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 = nil) ⇒ Parsed
Returns a new instance of Parsed.
51 52 53 54 |
# File 'lib/modl/parser/parsed.rb', line 51 def initialize(global = nil) @global = global @structures = [] end |
Instance Attribute Details
#global ⇒ Object
Returns the value of attribute global.
49 50 51 |
# File 'lib/modl/parser/parsed.rb', line 49 def global @global end |
#structures ⇒ Object
Returns the value of attribute structures.
48 49 50 |
# File 'lib/modl/parser/parsed.rb', line 48 def structures @structures end |
Class Method Details
.additional_string_processing(text) ⇒ Object
72 73 74 75 76 77 78 79 |
# File 'lib/modl/parser/parsed.rb', line 72 def self.additional_string_processing(text) # Special case for a possibly empty graved string `` unless text.nil? match_data = /^`([^`]*)`$/.match text return match_data[1] if match_data&.length&.positive? end text end |
.handle_empty_array_item ⇒ Object
1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 |
# File 'lib/modl/parser/parsed.rb', line 1307 def self.handle_empty_array_item # Create something for the blank array item # # The problem is that we might not have any context to tell us what type we need to create # so this currently defaults to the nil value # # TODO : Is there a way to know the type to create or is nil always acceptable? array_item = ParsedArrayItem.new @global array_item.arrayValueItem = ParsedArrayValueItem.new @global array_item.arrayValueItem.primitive = ParsedPrimitive.new @global array_item.arrayValueItem.primitive.nilVal = ParsedNull.instance array_item end |
Instance Method Details
#enterModl(ctx) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/modl/parser/parsed.rb', line 56 def enterModl(ctx) @global = GlobalParseContext.new if @global.nil? ctx_modl_structure = ctx.modl_structure ctx_modl_structure.each do |str| structure = ParsedStructure.new @global str.enter_rule(structure) @structures << structure end @structures = @global.structures + @structures @global end |
#extract_hash ⇒ Object
Convert the parse tree to a simpler structure suitable for JSON.generate.
1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 |
# File 'lib/modl/parser/parsed.rb', line 1449 def extract_hash result = [] if @structures.length.positive? @structures.each do |s| value = s.extract_hash result << value unless value.nil? end else result = {} end case result.length when 0 return nil when 1 return result[0] end result end |