class Tokenizer

Tokenizer class

Public Instance Methods

calc_input_val(arr) click to toggle source
# File lib/lisp/interpreter/tokenizer.rb, line 39
def calc_input_val(arr)
  get_raw = (arr.is_a? Array) && arr.size > 1 && arr[0..1].join != '\'('
  return get_raw_value arr unless get_raw
  m_name = predefined_method_caller arr
  return check_car_cdr arr if m_name.nil?
  call_predefined_method m_name, arr
end
call_predefined_method(m_name, arr) click to toggle source
# File lib/lisp/interpreter/tokenizer.rb, line 63
def call_predefined_method(m_name, arr)
  return special_check_proc m_name, arr if m_name.is_a? Proc
  if DO_NOT_CALCULATE_FUNCTIONS.include? m_name
    send m_name.to_s, arr[2..-2]
  elsif !m_name.nil?
    values = find_all_values arr[2..-2]
    validate_call_method m_name
    send m_name.to_s, values
  end
end
check_car_cdr(arr) click to toggle source
# File lib/lisp/interpreter/tokenizer.rb, line 33
def check_car_cdr(arr)
  result = arr[1].match(/c[ad]{2,}r/)
  raise no_procedure_build arr[1].to_s if result.nil?
  car_cdr_infinite arr
end
check_for_stl_function(arr) click to toggle source
# File lib/lisp/interpreter/tokenizer.rb, line 47
def check_for_stl_function(arr)
  idx = find_bracket_idx arr, 1
  func, = valid_function arr[1..idx]
  values = find_all_values arr[idx + 1..-2]
  return func.call(*values) if func.is_a? Proc
  calc_input_val ['(', func, *values, ')']
end
method_caller_checker(token, operations) click to toggle source
# File lib/lisp/interpreter/tokenizer.rb, line 82
def method_caller_checker(token, operations)
  !token.to_s.match(/[[:alpha:]]/).nil? || (operations.include? token.to_s)
end
predefined_method_caller(arr) click to toggle source
# File lib/lisp/interpreter/tokenizer.rb, line 86
def predefined_method_caller(arr)
  operations = ['+', '-', '/', '*', '<', '<=', '>', '>=']
  m_name =
    arr.each do |t|
      break t if t.is_a? Proc
      break t if method_caller_checker t, operations
      break t unless t.match(/[[:digit:]]/).nil?
    end
  predefined_method_caller_helper m_name, operations
end
predefined_method_caller_helper(m_name, operations) click to toggle source
# File lib/lisp/interpreter/tokenizer.rb, line 74
def predefined_method_caller_helper(m_name, operations)
  return m_name if m_name.is_a? Proc
  return @procs[m_name] if @procs.key? m_name
  return m_name if operations.include? m_name
  return @functions[m_name] if @functions.key? m_name
  m_name if @functions.value? m_name
end
special_check_proc(m_name, arr) click to toggle source
# File lib/lisp/interpreter/tokenizer.rb, line 55
def special_check_proc(m_name, arr)
  if arr[0..1].join == '(('
    check_for_stl_function arr
  else
    m_name.call(*arr[2..-2])
  end
end
syntax_methods() click to toggle source
# File lib/lisp/interpreter/tokenizer.rb, line 19
def syntax_methods
  @functions
end
tokenize(token) click to toggle source
# File lib/lisp/interpreter/tokenizer.rb, line 23
def tokenize(token)
  token.delete('')
  @other = token
  begin
    calc_input_val @other
  rescue SystemStackError, ZeroDivisionError, RuntimeError => e
    e.message
  end
end