keisan 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +49 -1
  3. data/keisan.gemspec +1 -0
  4. data/lib/keisan.rb +30 -0
  5. data/lib/keisan/ast/assignment.rb +44 -17
  6. data/lib/keisan/ast/block.rb +60 -0
  7. data/lib/keisan/ast/boolean.rb +5 -5
  8. data/lib/keisan/ast/builder.rb +10 -207
  9. data/lib/keisan/ast/cell.rb +60 -0
  10. data/lib/keisan/ast/constant_literal.rb +9 -0
  11. data/lib/keisan/ast/exponent.rb +6 -6
  12. data/lib/keisan/ast/function.rb +12 -8
  13. data/lib/keisan/ast/indexing.rb +25 -15
  14. data/lib/keisan/ast/line_builder.rb +230 -0
  15. data/lib/keisan/ast/list.rb +28 -1
  16. data/lib/keisan/ast/literal.rb +0 -8
  17. data/lib/keisan/ast/logical_and.rb +1 -1
  18. data/lib/keisan/ast/logical_or.rb +1 -1
  19. data/lib/keisan/ast/multi_line.rb +28 -0
  20. data/lib/keisan/ast/node.rb +32 -24
  21. data/lib/keisan/ast/number.rb +31 -31
  22. data/lib/keisan/ast/operator.rb +12 -4
  23. data/lib/keisan/ast/parent.rb +4 -4
  24. data/lib/keisan/ast/plus.rb +10 -10
  25. data/lib/keisan/ast/string.rb +3 -3
  26. data/lib/keisan/ast/times.rb +8 -8
  27. data/lib/keisan/ast/unary_identity.rb +1 -1
  28. data/lib/keisan/ast/unary_inverse.rb +7 -7
  29. data/lib/keisan/ast/unary_minus.rb +5 -5
  30. data/lib/keisan/ast/unary_operator.rb +2 -2
  31. data/lib/keisan/ast/unary_plus.rb +2 -2
  32. data/lib/keisan/ast/variable.rb +26 -10
  33. data/lib/keisan/context.rb +5 -5
  34. data/lib/keisan/evaluator.rb +15 -8
  35. data/lib/keisan/function.rb +24 -6
  36. data/lib/keisan/functions/cbrt.rb +1 -1
  37. data/lib/keisan/functions/cos.rb +1 -1
  38. data/lib/keisan/functions/cosh.rb +1 -1
  39. data/lib/keisan/functions/cot.rb +1 -1
  40. data/lib/keisan/functions/coth.rb +1 -1
  41. data/lib/keisan/functions/csc.rb +1 -1
  42. data/lib/keisan/functions/csch.rb +1 -1
  43. data/lib/keisan/functions/default_registry.rb +53 -74
  44. data/lib/keisan/functions/diff.rb +18 -14
  45. data/lib/keisan/functions/erf.rb +15 -0
  46. data/lib/keisan/functions/exp.rb +1 -1
  47. data/lib/keisan/functions/expression_function.rb +15 -21
  48. data/lib/keisan/functions/filter.rb +13 -15
  49. data/lib/keisan/functions/if.rb +14 -20
  50. data/lib/keisan/functions/let.rb +36 -0
  51. data/lib/keisan/functions/map.rb +11 -13
  52. data/lib/keisan/functions/math_function.rb +2 -2
  53. data/lib/keisan/functions/proc_function.rb +10 -6
  54. data/lib/keisan/functions/rand.rb +2 -1
  55. data/lib/keisan/functions/range.rb +74 -0
  56. data/lib/keisan/functions/reduce.rb +12 -14
  57. data/lib/keisan/functions/registry.rb +7 -7
  58. data/lib/keisan/functions/replace.rb +8 -8
  59. data/lib/keisan/functions/sample.rb +2 -1
  60. data/lib/keisan/functions/sec.rb +1 -1
  61. data/lib/keisan/functions/sech.rb +1 -1
  62. data/lib/keisan/functions/sin.rb +1 -1
  63. data/lib/keisan/functions/sinh.rb +1 -1
  64. data/lib/keisan/functions/sqrt.rb +1 -1
  65. data/lib/keisan/functions/tan.rb +1 -1
  66. data/lib/keisan/functions/tanh.rb +1 -1
  67. data/lib/keisan/functions/while.rb +46 -0
  68. data/lib/keisan/parser.rb +121 -79
  69. data/lib/keisan/parsing/assignment.rb +1 -1
  70. data/lib/keisan/parsing/bitwise_and.rb +1 -1
  71. data/lib/keisan/parsing/bitwise_not.rb +1 -1
  72. data/lib/keisan/parsing/bitwise_not_not.rb +1 -1
  73. data/lib/keisan/parsing/bitwise_or.rb +1 -1
  74. data/lib/keisan/parsing/bitwise_xor.rb +1 -1
  75. data/lib/keisan/parsing/curly_group.rb +6 -0
  76. data/lib/keisan/parsing/divide.rb +1 -1
  77. data/lib/keisan/parsing/exponent.rb +1 -1
  78. data/lib/keisan/parsing/function.rb +1 -1
  79. data/lib/keisan/parsing/group.rb +1 -1
  80. data/lib/keisan/parsing/indexing.rb +1 -1
  81. data/lib/keisan/parsing/line_separator.rb +6 -0
  82. data/lib/keisan/parsing/logical_and.rb +1 -1
  83. data/lib/keisan/parsing/logical_equal.rb +1 -1
  84. data/lib/keisan/parsing/logical_greater_than.rb +1 -1
  85. data/lib/keisan/parsing/logical_greater_than_or_equal_to.rb +1 -1
  86. data/lib/keisan/parsing/logical_less_than.rb +1 -1
  87. data/lib/keisan/parsing/logical_less_than_or_equal_to.rb +1 -1
  88. data/lib/keisan/parsing/logical_not.rb +1 -1
  89. data/lib/keisan/parsing/logical_not_equal.rb +1 -1
  90. data/lib/keisan/parsing/logical_not_not.rb +1 -1
  91. data/lib/keisan/parsing/logical_or.rb +1 -1
  92. data/lib/keisan/parsing/minus.rb +1 -1
  93. data/lib/keisan/parsing/modulo.rb +1 -1
  94. data/lib/keisan/parsing/operator.rb +1 -1
  95. data/lib/keisan/parsing/plus.rb +1 -1
  96. data/lib/keisan/parsing/times.rb +1 -1
  97. data/lib/keisan/parsing/unary_minus.rb +1 -1
  98. data/lib/keisan/parsing/unary_operator.rb +1 -1
  99. data/lib/keisan/parsing/unary_plus.rb +1 -1
  100. data/lib/keisan/repl.rb +1 -1
  101. data/lib/keisan/tokenizer.rb +4 -9
  102. data/lib/keisan/tokens/group.rb +3 -1
  103. data/lib/keisan/tokens/line_separator.rb +11 -0
  104. data/lib/keisan/variables/default_registry.rb +0 -5
  105. data/lib/keisan/variables/registry.rb +7 -7
  106. data/lib/keisan/version.rb +1 -1
  107. metadata +27 -2
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class Assignment < Operator
4
4
  def node_class
5
- Keisan::AST::Assignment
5
+ AST::Assignment
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class BitwiseAnd < BitwiseOperator
4
4
  def node_class
5
- Keisan::AST::BitwiseAnd
5
+ AST::BitwiseAnd
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class BitwiseNot < UnaryOperator
4
4
  def node_class
5
- Keisan::AST::UnaryBitwiseNot
5
+ AST::UnaryBitwiseNot
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class BitwiseNotNot < UnaryOperator
4
4
  def node_class
5
- Keisan::AST::UnaryIdentity
5
+ AST::UnaryIdentity
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class BitwiseOr < BitwiseOperator
4
4
  def node_class
5
- Keisan::AST::BitwiseOr
5
+ AST::BitwiseOr
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class BitwiseXor < BitwiseOperator
4
4
  def node_class
5
- Keisan::AST::BitwiseXor
5
+ AST::BitwiseXor
6
6
  end
7
7
  end
8
8
  end
@@ -0,0 +1,6 @@
1
+ module Keisan
2
+ module Parsing
3
+ class CurlyGroup < Group
4
+ end
5
+ end
6
+ end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class Divide < ArithmeticOperator
4
4
  def node_class
5
- Keisan::AST::Times
5
+ AST::Times
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class Exponent < ArithmeticOperator
4
4
  def node_class
5
- Keisan::AST::Exponent
5
+ AST::Exponent
6
6
  end
7
7
  end
8
8
  end
@@ -5,7 +5,7 @@ module Keisan
5
5
 
6
6
  def initialize(name, arguments)
7
7
  @name = name
8
- @arguments = arguments
8
+ @arguments = Array.wrap(arguments)
9
9
  end
10
10
  end
11
11
  end
@@ -4,7 +4,7 @@ module Keisan
4
4
  attr_reader :components
5
5
 
6
6
  def initialize(sub_tokens)
7
- @components = Keisan::Parser.new(tokens: sub_tokens).components
7
+ @components = Parser.new(tokens: sub_tokens).components
8
8
  end
9
9
  end
10
10
  end
@@ -7,7 +7,7 @@ module Keisan
7
7
  end
8
8
 
9
9
  def node_class
10
- Keisan::AST::Indexing
10
+ AST::Indexing
11
11
  end
12
12
  end
13
13
  end
@@ -0,0 +1,6 @@
1
+ module Keisan
2
+ module Parsing
3
+ class LineSeparator < Component
4
+ end
5
+ end
6
+ end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class LogicalAnd < LogicalOperator
4
4
  def node_class
5
- Keisan::AST::LogicalAnd
5
+ AST::LogicalAnd
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class LogicalEqual < LogicalOperator
4
4
  def node_class
5
- Keisan::AST::LogicalEqual
5
+ AST::LogicalEqual
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class LogicalGreaterThan < LogicalOperator
4
4
  def node_class
5
- Keisan::AST::LogicalGreaterThan
5
+ AST::LogicalGreaterThan
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class LogicalGreaterThanOrEqualTo < LogicalOperator
4
4
  def node_class
5
- Keisan::AST::LogicalGreaterThanOrEqualTo
5
+ AST::LogicalGreaterThanOrEqualTo
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class LogicalLessThan < LogicalOperator
4
4
  def node_class
5
- Keisan::AST::LogicalLessThan
5
+ AST::LogicalLessThan
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class LogicalLessThanOrEqualTo < LogicalOperator
4
4
  def node_class
5
- Keisan::AST::LogicalLessThanOrEqualTo
5
+ AST::LogicalLessThanOrEqualTo
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class LogicalNot < UnaryOperator
4
4
  def node_class
5
- Keisan::AST::UnaryLogicalNot
5
+ AST::UnaryLogicalNot
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class LogicalNotEqual < LogicalOperator
4
4
  def node_class
5
- Keisan::AST::LogicalNotEqual
5
+ AST::LogicalNotEqual
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class LogicalNotNot < UnaryOperator
4
4
  def node_class
5
- Keisan::AST::UnaryIdentity
5
+ AST::UnaryIdentity
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class LogicalOr < LogicalOperator
4
4
  def node_class
5
- Keisan::AST::LogicalOr
5
+ AST::LogicalOr
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class Minus < ArithmeticOperator
4
4
  def node_class
5
- Keisan::AST::Plus
5
+ AST::Plus
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class Modulo < ArithmeticOperator
4
4
  def node_class
5
- Keisan::AST::Modulo
5
+ AST::Modulo
6
6
  end
7
7
  end
8
8
  end
@@ -14,7 +14,7 @@ module Keisan
14
14
  end
15
15
 
16
16
  def node_class
17
- raise Keisan::Exceptions::NotImplementedError.new
17
+ raise Exceptions::NotImplementedError.new
18
18
  end
19
19
  end
20
20
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class Plus < ArithmeticOperator
4
4
  def node_class
5
- Keisan::AST::Plus
5
+ AST::Plus
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class Times < ArithmeticOperator
4
4
  def node_class
5
- Keisan::AST::Times
5
+ AST::Times
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class UnaryMinus < UnaryOperator
4
4
  def node_class
5
- Keisan::AST::UnaryMinus
5
+ AST::UnaryMinus
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class UnaryOperator < Operator
4
4
  def node_class
5
- raise Keisan::Exponent::NotImplementedError.new
5
+ raise Exponent::NotImplementedError.new
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Keisan
2
2
  module Parsing
3
3
  class UnaryPlus < UnaryOperator
4
4
  def node_class
5
- Keisan::AST::UnaryPlus
5
+ AST::UnaryPlus
6
6
  end
7
7
  end
8
8
  end
@@ -20,7 +20,7 @@ module Keisan
20
20
  end
21
21
 
22
22
  def reset
23
- @calculator = Keisan::Calculator.new
23
+ @calculator = Calculator.new
24
24
  end
25
25
 
26
26
  def start
@@ -12,7 +12,8 @@ module Keisan
12
12
  Tokens::BitwiseOperator,
13
13
  Tokens::Assignment,
14
14
  Tokens::Comma,
15
- Tokens::Dot
15
+ Tokens::Dot,
16
+ Tokens::LineSeparator
16
17
  ]
17
18
 
18
19
  TOKEN_REGEX = Regexp::new(
@@ -30,13 +31,11 @@ module Keisan
30
31
  def self.strip_whitespace_and_comments(expression)
31
32
  # Remove comments
32
33
  expression = expression.split("#").first || ""
33
-
34
- # Do not allow whitespace between variables, numbers, and the like; they must be joined by operators
35
- raise Keisan::Exceptions::TokenizingError.new if expression.gsub(Tokens::String.regex, "").match /\w\s+\w/
34
+ expression = expression.gsub(/\n/, ";")
36
35
 
37
36
  # Only strip whitespace outside of strings, e.g.
38
37
  # "1 + 2 + 'hello world'" => "1+2+'hello world'"
39
- expression.split(Keisan::Tokens::String.regex).map.with_index {|s,i| i.even? ? s.gsub(/\s+/, "") : s}.join
38
+ expression.split(Tokens::String.regex).map.with_index {|s,i| i.even? ? s.gsub(/\s+/, " ") : s}.join
40
39
  end
41
40
 
42
41
  private
@@ -51,10 +50,6 @@ module Keisan
51
50
  token_class = TOKEN_CLASSES[i].new(token_string)
52
51
  end
53
52
 
54
- unless tokenizing_check == @expression
55
- raise Keisan::Exceptions::TokenizingError.new("Expected \"#{@expression}\", tokenized \"#{tokenizing_check}\"")
56
- end
57
-
58
53
  tokens
59
54
  end
60
55
  end
@@ -1,7 +1,7 @@
1
1
  module Keisan
2
2
  module Tokens
3
3
  class Group < Token
4
- REGEX = /(\((?:[^\[\]\(\)]*\g<1>*)*\)|\[(?:[^\[\]\(\)]*\g<1>*)*\])/
4
+ REGEX = /(\((?:[^\[\]\(\)\{\}]*+\g<1>*+)*+\)|\[(?:[^\[\]\(\)\{\}]*+\g<1>*+)*+\]|\{(?:[^\[\]\(\)\{\}]*+\g<1>*+)*+\})/
5
5
 
6
6
  attr_reader :sub_tokens
7
7
 
@@ -21,6 +21,8 @@ module Keisan
21
21
  :round
22
22
  when "["
23
23
  :square
24
+ when "{"
25
+ :curly
24
26
  end
25
27
  end
26
28
  end
@@ -0,0 +1,11 @@
1
+ module Keisan
2
+ module Tokens
3
+ class LineSeparator < Token
4
+ REGEX = /([;\n]+)/
5
+
6
+ def self.regex
7
+ REGEX
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,11 +1,6 @@
1
1
  module Keisan
2
2
  module Variables
3
3
  class DefaultRegistry < Registry
4
- def initialize
5
- @hash = {}
6
- @parent = self.class.registry
7
- end
8
-
9
4
  VARIABLES = {
10
5
  "PI" => Math::PI,
11
6
  "E" => Math::E,
@@ -16,14 +16,14 @@ module Keisan
16
16
 
17
17
  def [](name)
18
18
  return @hash[name] if @hash.has_key?(name)
19
- raise Keisan::Exceptions::UndefinedVariableError.new if @shadowed.include?(name)
19
+ raise Exceptions::UndefinedVariableError.new if @shadowed.include?(name)
20
20
 
21
21
  if @parent && (parent_value = @parent[name])
22
22
  return parent_value
23
23
  end
24
24
 
25
25
  return default_registry[name] if @use_defaults && default_registry.has_name?(name)
26
- raise Keisan::Exceptions::UndefinedVariableError.new name
26
+ raise Exceptions::UndefinedVariableError.new name
27
27
  end
28
28
 
29
29
  def locals
@@ -32,19 +32,19 @@ module Keisan
32
32
 
33
33
  def has?(name)
34
34
  !self[name].nil?
35
- rescue Keisan::Exceptions::UndefinedVariableError
35
+ rescue Exceptions::UndefinedVariableError
36
36
  false
37
37
  end
38
38
 
39
39
  def register!(name, value, force: false)
40
40
  name = name.to_s
41
- name = name.name if name.is_a?(Keisan::AST::Variable)
41
+ name = name.name if name.is_a?(AST::Variable)
42
42
 
43
- raise Keisan::Exceptions::UnmodifiableError.new("Cannot modify frozen variables registry") if frozen?
43
+ raise Exceptions::UnmodifiableError.new("Cannot modify frozen variables registry") if frozen?
44
44
  if !force && @use_defaults && default_registry.has_name?(name)
45
- raise Keisan::Exceptions::UnmodifiableError.new("Cannot overwrite default variable")
45
+ raise Exceptions::UnmodifiableError.new("Cannot overwrite default variable")
46
46
  end
47
- self[name.to_s] = value.to_node
47
+ self[name.to_s] = AST::Cell.new(value.to_node)
48
48
  end
49
49
 
50
50
  protected
@@ -1,3 +1,3 @@
1
1
  module Keisan
2
- VERSION = "0.5.0"
2
+ VERSION = "0.6.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keisan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Locke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-14 00:00:00.000000000 Z
11
+ date: 2017-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 4.2.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: coveralls
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -120,12 +134,15 @@ files:
120
134
  - lib/keisan/ast/bitwise_operator.rb
121
135
  - lib/keisan/ast/bitwise_or.rb
122
136
  - lib/keisan/ast/bitwise_xor.rb
137
+ - lib/keisan/ast/block.rb
123
138
  - lib/keisan/ast/boolean.rb
124
139
  - lib/keisan/ast/builder.rb
140
+ - lib/keisan/ast/cell.rb
125
141
  - lib/keisan/ast/constant_literal.rb
126
142
  - lib/keisan/ast/exponent.rb
127
143
  - lib/keisan/ast/function.rb
128
144
  - lib/keisan/ast/indexing.rb
145
+ - lib/keisan/ast/line_builder.rb
129
146
  - lib/keisan/ast/list.rb
130
147
  - lib/keisan/ast/literal.rb
131
148
  - lib/keisan/ast/logical_and.rb
@@ -138,6 +155,7 @@ files:
138
155
  - lib/keisan/ast/logical_operator.rb
139
156
  - lib/keisan/ast/logical_or.rb
140
157
  - lib/keisan/ast/modulo.rb
158
+ - lib/keisan/ast/multi_line.rb
141
159
  - lib/keisan/ast/node.rb
142
160
  - lib/keisan/ast/null.rb
143
161
  - lib/keisan/ast/number.rb
@@ -170,16 +188,19 @@ files:
170
188
  - lib/keisan/functions/csch.rb
171
189
  - lib/keisan/functions/default_registry.rb
172
190
  - lib/keisan/functions/diff.rb
191
+ - lib/keisan/functions/erf.rb
173
192
  - lib/keisan/functions/exp.rb
174
193
  - lib/keisan/functions/expression_function.rb
175
194
  - lib/keisan/functions/filter.rb
176
195
  - lib/keisan/functions/if.rb
177
196
  - lib/keisan/functions/imag.rb
197
+ - lib/keisan/functions/let.rb
178
198
  - lib/keisan/functions/log.rb
179
199
  - lib/keisan/functions/map.rb
180
200
  - lib/keisan/functions/math_function.rb
181
201
  - lib/keisan/functions/proc_function.rb
182
202
  - lib/keisan/functions/rand.rb
203
+ - lib/keisan/functions/range.rb
183
204
  - lib/keisan/functions/real.rb
184
205
  - lib/keisan/functions/reduce.rb
185
206
  - lib/keisan/functions/registry.rb
@@ -192,6 +213,7 @@ files:
192
213
  - lib/keisan/functions/sqrt.rb
193
214
  - lib/keisan/functions/tan.rb
194
215
  - lib/keisan/functions/tanh.rb
216
+ - lib/keisan/functions/while.rb
195
217
  - lib/keisan/parser.rb
196
218
  - lib/keisan/parsing/argument.rb
197
219
  - lib/keisan/parsing/arithmetic_operator.rb
@@ -204,6 +226,7 @@ files:
204
226
  - lib/keisan/parsing/bitwise_xor.rb
205
227
  - lib/keisan/parsing/boolean.rb
206
228
  - lib/keisan/parsing/component.rb
229
+ - lib/keisan/parsing/curly_group.rb
207
230
  - lib/keisan/parsing/divide.rb
208
231
  - lib/keisan/parsing/dot.rb
209
232
  - lib/keisan/parsing/dot_operator.rb
@@ -213,6 +236,7 @@ files:
213
236
  - lib/keisan/parsing/function.rb
214
237
  - lib/keisan/parsing/group.rb
215
238
  - lib/keisan/parsing/indexing.rb
239
+ - lib/keisan/parsing/line_separator.rb
216
240
  - lib/keisan/parsing/list.rb
217
241
  - lib/keisan/parsing/logical_and.rb
218
242
  - lib/keisan/parsing/logical_equal.rb
@@ -249,6 +273,7 @@ files:
249
273
  - lib/keisan/tokens/comma.rb
250
274
  - lib/keisan/tokens/dot.rb
251
275
  - lib/keisan/tokens/group.rb
276
+ - lib/keisan/tokens/line_separator.rb
252
277
  - lib/keisan/tokens/logical_operator.rb
253
278
  - lib/keisan/tokens/null.rb
254
279
  - lib/keisan/tokens/number.rb