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
# File 'lib/bel_parser/parsers/serializer.rb', line 55

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

#on_identifier(identifier_node) ⇒ Object



59
60
61
# File 'lib/bel_parser/parsers/serializer.rb', line 59

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

#on_keyword(keyword_node) ⇒ Object



63
64
65
# File 'lib/bel_parser/parsers/serializer.rb', line 63

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

#on_list(list_node) ⇒ Object



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

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



82
83
84
# File 'lib/bel_parser/parsers/serializer.rb', line 82

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

#on_name(name_node) ⇒ Object



86
87
88
# File 'lib/bel_parser/parsers/serializer.rb', line 86

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

#on_namespace_definition(namespace_definition_node) ⇒ Object



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

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



97
98
99
# File 'lib/bel_parser/parsers/serializer.rb', line 97

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

#on_object(object_node) ⇒ Object



101
102
103
# File 'lib/bel_parser/parsers/serializer.rb', line 101

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

#on_observed_term(observed_term_node) ⇒ Object



105
106
107
# File 'lib/bel_parser/parsers/serializer.rb', line 105

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

#on_parameter(param_node) ⇒ Object



109
110
111
112
# File 'lib/bel_parser/parsers/serializer.rb', line 109

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

#on_pattern(pattern_node) ⇒ Object



114
115
116
117
# File 'lib/bel_parser/parsers/serializer.rb', line 114

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

#on_prefix(prefix_node) ⇒ Object



119
120
121
122
# File 'lib/bel_parser/parsers/serializer.rb', line 119

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

#on_relationship(relationship_node) ⇒ Object



124
125
126
# File 'lib/bel_parser/parsers/serializer.rb', line 124

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

#on_set(set_node) ⇒ Object



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

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

#on_simple_statement(simple_statement_node) ⇒ Object



135
136
137
# File 'lib/bel_parser/parsers/serializer.rb', line 135

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

#on_statement(statement_node) ⇒ Object



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

def on_statement(statement_node)
  process(statement_node.subject)
  return if statement_node.object.child.nil?

  process(statement_node.relationship)
  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



154
155
156
# File 'lib/bel_parser/parsers/serializer.rb', line 154

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

#on_subject(subject_node) ⇒ Object



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

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

#on_term(term_node) ⇒ Object

Called when visiting nodes of type term.



163
164
165
166
167
168
169
# File 'lib/bel_parser/parsers/serializer.rb', line 163

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



171
172
173
174
# File 'lib/bel_parser/parsers/serializer.rb', line 171

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

#on_url(url_node) ⇒ Object



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

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

#on_value(value_node) ⇒ Object



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

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