Class: BELParser::Parsers::Serializer

Inherits:
Object
  • Object
show all
Includes:
AST::Processor::Mixin
Defined in:
lib/bel_parser/parsers/serializer.rb

Overview

Defines an AST processor that serializes all AST node to a string.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from AST::Processor::Mixin

#handler_missing, #process, #process_all

Constructor Details

#initializeSerializer

Returns a new instance of Serializer.



19
20
21
# File 'lib/bel_parser/parsers/serializer.rb', line 19

def initialize
  @string = ''
end

Instance Attribute Details

#stringObject (readonly)

Returns the value of attribute string.



17
18
19
# File 'lib/bel_parser/parsers/serializer.rb', line 17

def string
  @string
end

Instance Method Details

#on_annotation_definition(annotation_definition_node) ⇒ Object



23
24
25
26
27
28
# File 'lib/bel_parser/parsers/serializer.rb', line 23

def on_annotation_definition(annotation_definition_node)
  @string << 'DEFINE ANNOTATION '
  process(annotation_definition_node.keyword)
  @string << ' AS '
  process(annotation_definition_node.domain)
end

#on_argument(argument_node) ⇒ Object



30
31
32
33
34
35
# File 'lib/bel_parser/parsers/serializer.rb', line 30

def on_argument(argument_node)
  @string << ', ' if @separate_by_comma

  process(argument_node.child)
  @separate_by_comma = true
end

#on_blank_line(blank_line_node) ⇒ Object



37
38
39
# File 'lib/bel_parser/parsers/serializer.rb', line 37

def on_blank_line(blank_line_node)
  @string << ''
end

#on_comment_line(comment_line_node) ⇒ Object



41
42
43
# File 'lib/bel_parser/parsers/serializer.rb', line 41

def on_comment_line(comment_line_node)
  @string << %(##{comment_line_node.children[0]})
end

#on_document_property(document_property_node) ⇒ Object



45
46
47
48
49
# File 'lib/bel_parser/parsers/serializer.rb', line 45

def on_document_property(document_property_node)
 name  = document_property_node.name.identifier.string_literal
 value = document_property_node.value.children[0].string_literal
 @string << %(SET DOCUMENT #{name} = #{value})
end

#on_domain(domain_node) ⇒ Object



51
52
53
# File 'lib/bel_parser/parsers/serializer.rb', line 51

def on_domain(domain_node)
  process(domain_node.child)
end

#on_function(function_node) ⇒ Object



55
56
57
58
59
# File 'lib/bel_parser/parsers/serializer.rb', line 55

def on_function(function_node)
  if function_node.identifier
    @string << function_node.identifier.string_literal
  end
end

#on_identifier(identifier_node) ⇒ Object



61
62
63
# File 'lib/bel_parser/parsers/serializer.rb', line 61

def on_identifier(identifier_node)
  @string << identifier_node.string_literal
end

#on_keyword(keyword_node) ⇒ Object



65
66
67
# File 'lib/bel_parser/parsers/serializer.rb', line 65

def on_keyword(keyword_node)
  process(keyword_node.identifier)
end

#on_list(list_node) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/bel_parser/parsers/serializer.rb', line 69

def on_list(list_node)
  items = list_node.list_items
  if !items || items.empty?
    @string << '{}'
  else
    @string << '{ '
    process(items[0])
    items[1..-1].each do |rest_item|
      @string << ', '
      process(rest_item)
    end
    @string << ' }'
  end
end

#on_list_item(list_item_node) ⇒ Object



84
85
86
# File 'lib/bel_parser/parsers/serializer.rb', line 84

def on_list_item(list_item_node)
  process(list_item_node.children[0])
end

#on_name(name_node) ⇒ Object



88
89
90
# File 'lib/bel_parser/parsers/serializer.rb', line 88

def on_name(name_node)
  process(name_node.identifier)
end

#on_namespace_definition(namespace_definition_node) ⇒ Object



92
93
94
95
96
97
# File 'lib/bel_parser/parsers/serializer.rb', line 92

def on_namespace_definition(namespace_definition_node)
  @string << 'DEFINE NAMESPACE '
  process(namespace_definition_node.keyword)
  @string << ' AS '
  process(namespace_definition_node.domain)
end

#on_nested_statement(nested_statement_node) ⇒ Object



99
100
101
# File 'lib/bel_parser/parsers/serializer.rb', line 99

def on_nested_statement(nested_statement_node)
  process(nested_statement_node.statement)
end

#on_object(object_node) ⇒ Object



103
104
105
# File 'lib/bel_parser/parsers/serializer.rb', line 103

def on_object(object_node)
  process(object_node.child)
end

#on_observed_term(observed_term_node) ⇒ Object



107
108
109
# File 'lib/bel_parser/parsers/serializer.rb', line 107

def on_observed_term(observed_term_node)
  process(observed_term_node.statement)
end

#on_parameter(param_node) ⇒ Object



111
112
113
114
# File 'lib/bel_parser/parsers/serializer.rb', line 111

def on_parameter(param_node)
  process(param_node.prefix)
  process(param_node.value)
end

#on_pattern(pattern_node) ⇒ Object



116
117
118
119
# File 'lib/bel_parser/parsers/serializer.rb', line 116

def on_pattern(pattern_node)
  @string << 'PATTERN '
  process(pattern_node.string)
end

#on_prefix(prefix_node) ⇒ Object



121
122
123
124
# File 'lib/bel_parser/parsers/serializer.rb', line 121

def on_prefix(prefix_node)
  prefix = prefix_node.identifier
  @string << "#{prefix.string_literal}:" unless prefix.nil?
end

#on_relationship(relationship_node) ⇒ Object



126
127
128
# File 'lib/bel_parser/parsers/serializer.rb', line 126

def on_relationship(relationship_node)
  @string << " #{relationship_node.string_literal} "
end

#on_set(set_node) ⇒ Object



130
131
132
133
134
135
# File 'lib/bel_parser/parsers/serializer.rb', line 130

def on_set(set_node)
  @string << 'SET '
  process(set_node.name)
  @string << ' = '
  process(set_node.value)
end

#on_simple_statement(simple_statement_node) ⇒ Object



137
138
139
# File 'lib/bel_parser/parsers/serializer.rb', line 137

def on_simple_statement(simple_statement_node)
  process(simple_statement_node.statement)
end

#on_statement(statement_node) ⇒ Object



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/bel_parser/parsers/serializer.rb', line 141

def on_statement(statement_node)
  process(statement_node.subject)

  return unless statement_node.relationship?
  process(statement_node.relationship)

  return unless statement_node.object?
  object_node = statement_node.object
  if object_node.statement?
    @string << '('
    process(object_node)
    @string << ')'
  else
    process(object_node)
  end
end

#on_string(string_node) ⇒ Object



158
159
160
# File 'lib/bel_parser/parsers/serializer.rb', line 158

def on_string(string_node)
  @string << %("#{string_node.string_value}")
end

#on_subject(subject_node) ⇒ Object



162
163
164
# File 'lib/bel_parser/parsers/serializer.rb', line 162

def on_subject(subject_node)
  process(subject_node.term)
end

#on_term(term_node) ⇒ Object

Called when visiting nodes of type term.



167
168
169
170
171
172
173
# File 'lib/bel_parser/parsers/serializer.rb', line 167

def on_term(term_node)
  @separate_by_comma = false
  process(term_node.function)
  @string << '('
  term_node.arguments.each { |arg| process(arg) }
  @string << ')'
end

#on_unset(unset_node) ⇒ Object



175
176
177
178
# File 'lib/bel_parser/parsers/serializer.rb', line 175

def on_unset(unset_node)
  @string << 'UNSET '
  process(unset_node.name)
end

#on_url(url_node) ⇒ Object



180
181
182
183
# File 'lib/bel_parser/parsers/serializer.rb', line 180

def on_url(url_node)
  @string << 'URL '
  process(url_node.string)
end

#on_value(value_node) ⇒ Object



185
186
187
# File 'lib/bel_parser/parsers/serializer.rb', line 185

def on_value(value_node)
  process(value_node.children[0])
end