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



86
87
88
89
90
91
92
93
# File 'lib/lisp/interpreter/tokenizer.rb', line 86

def get_var(var)
  check = check_instance_var var
  return instance_variable_get("@#{var}") if check
  val = (predefined_method_caller [var])
  return val unless val.nil?
  valid = valid_var var
  valid ? var : (raise 'Invalid data type')
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
45
# 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',
    'list-ref'         => 'listref',     'list-tail'      => 'listtail'
  }
end

#init_predefinedObject



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

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



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

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



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

def set_reserved_keywords
  @reserved.each do |key, value|
    instance_variable_set("@#{key}", value)
  end
end

#set_var(var, value) ⇒ Object



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

def set_var(var, value)
  raise 'Cannot predefine reserved keyword' if @reserved.key? var
  instance_variable_set("@#{var}", value)
end

#set_var_helper(var, value) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
# File 'lib/lisp/interpreter/tokenizer.rb', line 69

def set_var_helper(var, value)
  valid = (valid_var value.to_s) || (value.is_a? Proc)
  raise 'Invalid parameter' unless valid
  if value.is_a? Proc
    remove_instance_variable("@#{var}") if check_instance_var var
    @procs[var] = value if value.is_a? Proc
  else
    @procs.delete var
    set_var var, value
  end
end