class Keisan::AST::Builder

Public Class Methods

new(string: nil, parser: nil, components: nil) click to toggle source

Build from parser

# File lib/keisan/ast/builder.rb, line 5
def initialize(string: nil, parser: nil, components: nil)
  if [string, parser, components].select(&:nil?).size != 2
    raise Exceptions::InternalError.new("Require one of string, parser or components")
  end

  if !string.nil?
    @components = Parser.new(string: string).components
  elsif !parser.nil?
    @components = parser.components
  else
    @components = Array(components)
  end

  @lines = Util.array_split(@components) {|component|
    component.is_a?(Parsing::LineSeparator)
  }.reject(&:empty?)

  @line_builders = @lines.map {|line| LineBuilder.new(line)}

  if @line_builders.size == 1
    @node = @line_builders.first.ast
  else
    @node = MultiLine.new(@line_builders.map(&:ast))
  end
end

Public Instance Methods

ast() click to toggle source
# File lib/keisan/ast/builder.rb, line 35
def ast
  node
end
node() click to toggle source
# File lib/keisan/ast/builder.rb, line 31
def node
  @node
end