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
1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 |
# File 'lib/modl/parser/parsed.rb', line 1301 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.
1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 |
# File 'lib/modl/parser/parsed.rb', line 1443 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 |