Module: TokenizerHelper

Included in:
Tokenizer
Defined in:
lib/lisp/interpreter/tokenizer.rb

Overview

Tokenizer helper

Instance Method Summary collapse

Instance Method Details

#get_var(var) ⇒ Object



74
75
76
77
78
79
80
81
# File 'lib/lisp/interpreter/tokenizer.rb', line 74

def get_var(var)
  check = check_instance_var var
  return @procs[var.to_s] if check
  val = (predefined_method_caller [var])
  return val unless val.nil?
  valid = valid_var var
  valid ? var : (raise unbound_symbol_err var)
end

#init_do_not_calculate_fnObject



28
29
30
31
32
33
34
# File 'lib/lisp/interpreter/tokenizer.rb', line 28

def init_do_not_calculate_fn
  %w[
    foldl foldr map filter
    if apply numerator denominator
    lambda compose define
  ]
end

#init_functionsObject



36
37
38
39
40
41
42
43
44
# File 'lib/lisp/interpreter/tokenizer.rb', line 36

def init_functions
  {
    'string-downcase'  => 'strdowncase', 'string-upcase'  => 'strupcase',
    'string-contains?' => 'strcontains', 'string-length'  => 'strlen',
    'string->list'     => 'strlist',     'string-split'   => 'strsplit',
    'string-sufix?'    => 'strsufix',    'string-prefix?' => 'strprefix',
    'string-replace'   => 'strreplace',  'string-join'    => 'strjoin'
  }
end

#init_predefinedObject



46
47
48
49
50
51
52
53
# File 'lib/lisp/interpreter/tokenizer.rb', line 46

def init_predefined
  %w[
    define not equal? if quotient remainder modulo numerator denominator
    min max sub1 add1 abs string? substring null? cons null list car
    cdr list? pair? length reverse remove shuffle map foldl foldr filter
    member lambda apply compose
  ]
end

#init_reserved_fnObject



55
56
57
58
59
60
# File 'lib/lisp/interpreter/tokenizer.rb', line 55

def init_reserved_fn
  {
    'null' => '\'()',
    'ghci' => ''
  }
end

#initializeObject



14
15
16
17
18
19
20
21
22
# File 'lib/lisp/interpreter/tokenizer.rb', line 14

def initialize
  @other = []
  @procs = {}
  @do_not_calculate = init_do_not_calculate_fn
  @reserved = init_reserved_fn
  set_reserved_keywords
  @functions = init_functions
  init_predefined.each { |f| @functions[f] = f }
end

#resetObject



24
25
26
# File 'lib/lisp/interpreter/tokenizer.rb', line 24

def reset
  @other = []
end

#set_reserved_keywordsObject



62
63
64
65
66
# File 'lib/lisp/interpreter/tokenizer.rb', line 62

def set_reserved_keywords
  @reserved.each do |key, value|
    @procs[key.to_s] = value
  end
end

#set_var(var, value) ⇒ Object



68
69
70
71
72
# File 'lib/lisp/interpreter/tokenizer.rb', line 68

def set_var(var, value)
  valid = (valid_var value.to_s) || (value.is_a? Proc)
  raise 'Invalid parameter' unless valid || (value.is_a? Symbol)
  @procs[var] = value
end

#syntax_methodsObject



83
84
85
# File 'lib/lisp/interpreter/tokenizer.rb', line 83

def syntax_methods
  @functions
end