class BELParser::Parsers::Serializer

Defines an {AST::Processor::Mixin AST processor} that serializes all {AST::Node AST node} to a string.

Attributes

string[R]

Public Class Methods

new() click to toggle source
# File lib/bel_parser/parsers/serializer.rb, line 19
def initialize
  @string = ''
end

Public Instance Methods

on_annotation_definition(annotation_definition_node) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# File lib/bel_parser/parsers/serializer.rb, line 37
def on_blank_line(blank_line_node)
  @string << ''
end
on_comment_line(comment_line_node) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# File lib/bel_parser/parsers/serializer.rb, line 51
def on_domain(domain_node)
  process(domain_node.child)
end
on_function(function_node) click to toggle source
# 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) click to toggle source
# File lib/bel_parser/parsers/serializer.rb, line 61
def on_identifier(identifier_node)
  @string << identifier_node.string_literal
end
on_keyword(keyword_node) click to toggle source
# File lib/bel_parser/parsers/serializer.rb, line 65
def on_keyword(keyword_node)
  process(keyword_node.identifier)
end
on_list(list_node) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# File lib/bel_parser/parsers/serializer.rb, line 126
def on_relationship(relationship_node)
  @string << " #{relationship_node.string_literal} "
end
on_set(set_node) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# File lib/bel_parser/parsers/serializer.rb, line 158
def on_string(string_node)
  @string << %("#{string_node.string_value}")
end
on_subject(subject_node) click to toggle source
# File lib/bel_parser/parsers/serializer.rb, line 162
def on_subject(subject_node)
  process(subject_node.term)
end
on_term(term_node) click to toggle source

Called when visiting nodes of type term.

# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# File lib/bel_parser/parsers/serializer.rb, line 185
def on_value(value_node)
  process(value_node.children[0])
end