s_calc 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/calc +14 -6
  3. data/lib/calc/calc.rb +278 -148
  4. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 71e6238052352f288d04dd872eccba4f61fe316b2a350e9170f49068319ce534
4
- data.tar.gz: 28d214b0aa8762938797b309cd2718065e0de072c9207b94f223e9a0c805c282
3
+ metadata.gz: 3b8924787e8063de71591ef8d27a80409c83501541f3655579c0a8f752413591
4
+ data.tar.gz: d5c519b8a89625d79373d4ad746a32948a67d3b39371fa1e971b9e329fd5c9a9
5
5
  SHA512:
6
- metadata.gz: f25daea5118727a36f0e5a12d1c73c54d882f15e613345d7dd669143de68e7dc2c226c369eb977ab98b93439d218460135719334af16f2268ebc6487c7e0e0e2
7
- data.tar.gz: 21ee599c61b51656237c8056065460b67de6ccd546c9d68a584bda1b428656e43ca696ed2023a326fcf7a7b8bd88bfe003bcb358439afbe9128743fac02bec1c
6
+ metadata.gz: fe76534909fec3399535543882dd60b3cdb6125aa726be62d4cf514be0aaa34a10e2dbc0fa1b9949ab8efc98869b4612cf671a6cefef3cd4ffc15d41113f98a6
7
+ data.tar.gz: d4af52b54d205cc25611d8d49cb7bf893df18033c2b04d0a5e992c37a5de3753f8a0467903723f86c37ab009fd6f26a1e36dd069a86c0faf7828a94cb90744de
data/bin/calc CHANGED
@@ -11,8 +11,14 @@ end
11
11
  def usage_possible_calculation
12
12
  $stderr.print "Possible calculation:\n"
13
13
  $stderr.print " Arithmetic such as +, -, *, /, (, ), - (unary minus) and ** (power).\n"
14
- $stderr.print " Functions such as sqrt, sin, cos, tan, asin, acos, atan, exp, log and log10.\n"
14
+ $stderr.print " Functions such as sqrt, sin, cos, tan, asin, acos, atan, exp, ln, log,\n"
15
+ $stderr.print " abs, fact, floor, ceil and round\n"
15
16
  $stderr.print " Variables (any alphabetical word) and the special variable 'v' that is the former result.\n"
17
+ $stderr.print "Example:\n"
18
+ $stderr.print " sin(PI/2) #=> 1\n"
19
+ $stderr.print " ln(E) #=> 1\n"
20
+ $stderr.print " log(10) #=> 1\n"
21
+ $stderr.print " round(1.25, 1) #=> 1.3, round(1.5,0) #=> 2, round(-1.5,0) #=> -2\n"
16
22
  end
17
23
 
18
24
  calc = Calc.new
@@ -20,9 +26,10 @@ if ARGV[0] =~ /--help|-h/
20
26
  usage
21
27
  elsif ARGV.size == 1
22
28
  begin
23
- print "#{calc.run(ARGV[0])}\n"
29
+ a = calc.run(ARGV[0])
30
+ print "#{a == a.to_i ? a.to_i : a}\n"
24
31
  rescue StandardError => evar
25
- print "#{evar.message[1..-1]}\n" # remove the newline at the beginning of the message
32
+ print "#{evar.message}\n"
26
33
  end
27
34
  else
28
35
  while buf = Readline.readline("calc > ", true)
@@ -32,9 +39,10 @@ else
32
39
  usage_possible_calculation
33
40
  else
34
41
  begin
35
- print "#{calc.run(buf)}\n"
36
- rescue => evar
37
- print "#{evar.message[1..-1]}\n" # remove the newline at the beginning of the message
42
+ a = calc.run(buf)
43
+ print "#{a == a.to_i ? a.to_i : a}\n"
44
+ rescue StandardError =>evar
45
+ print "#{evar.message}\n"
38
46
  end
39
47
  end
40
48
  end
data/lib/calc/calc.rb CHANGED
@@ -12,7 +12,7 @@ include Math
12
12
 
13
13
  class Calc < Racc::Parser
14
14
 
15
- module_eval(<<'...end calc.y/module_eval...', 'calc.y', 45)
15
+ module_eval(<<'...end calc.y/module_eval...', 'calc.y', 50)
16
16
 
17
17
  def initialize
18
18
  @table = {}
@@ -27,7 +27,7 @@ end
27
27
  def lex(s)
28
28
  ss = StringScanner.new(s)
29
29
  until ss.eos?
30
- if ss.scan(/sqrt|sin|cos|tan|asin|acos|atan|exp|log|sqrt|PI|E|v/)
30
+ if ss.scan(/sqrt|sin|cos|tan|asin|acos|atan|exp|ln|log|abs|fact|floor|ceil|round|PI|E|v/)
31
31
  @tokens << [ss[0].to_sym, ss[0]]
32
32
  elsif ss.scan(/[[:alpha:]]+/)
33
33
  @tokens << [:ID, ss[0]]
@@ -35,7 +35,7 @@ def lex(s)
35
35
  @tokens << [:NUM, ss[0].to_f]
36
36
  elsif ss.scan(/\*\*/)
37
37
  @tokens << [:POWER,ss[0]]
38
- elsif ss.scan(/[+\-*\/()=;]/)
38
+ elsif ss.scan(/[+\-*\/()=;,]/)
39
39
  @tokens << [ss[0],ss[0]]
40
40
  elsif ss.scan(/\s+/)
41
41
  # ignore spaces
@@ -50,130 +50,213 @@ def next_token
50
50
  @tokens.shift
51
51
  end
52
52
 
53
+ def fact(f)
54
+ n = f.to_i
55
+ raise ("No factorial for negative number.") if n < 0
56
+ raise ("The argument of fact must be less than 171.") if n >= 171
57
+ if n == 0 || n == 1
58
+ 1.0
59
+ else
60
+ (1..n).inject{|result, item| result*item}.to_f
61
+ end
62
+ end
63
+
53
64
  ...end calc.y/module_eval...
54
65
  ##### State transition tables begin ###
55
66
 
56
67
  racc_action_table = [
57
- 24, 25, 22, 23, 24, 25, 22, 23, 24, 25,
58
- 22, 23, 24, 25, 22, 23, 24, 25, 22, 23,
59
- 21, 48, 24, 25, 26, 59, 24, 25, 29, 60,
60
- 31, 32, 33, 61, 34, 35, 36, 62, 24, 25,
61
- 22, 23, 24, 25, 22, 23, 24, 25, 22, 23,
62
- 24, 25, 22, 23, 24, 25, 22, 23, 37, 63,
63
- 38, 39, 40, 64, 41, 29, 29, 65, nil, nil,
64
- nil, 66, nil, nil, nil, 67, 24, 25, 22, 23,
65
- nil, 4, 3, 7, 8, 9, 10, 11, 12, 13,
66
- 14, 15, 16, 17, 18, 19, 20, 68, 6, 4,
67
- 28, 7, 8, 9, 10, 11, 12, 13, 14, 15,
68
- 16, 17, 18, 19, 20, nil, 6, 4, 28, 7,
68
+ 29, 30, 27, 28, 29, 30, 27, 28, 29, 30,
69
+ 27, 28, 29, 30, 27, 28, 29, 30, 27, 28,
70
+ 29, 30, 27, 28, 29, 30, 26, 88, 29, 30,
71
+ 58, 31, 34, 36, 74, 37, 38, 39, 75, 40,
72
+ 41, 42, 76, 43, 44, 45, 77, 29, 30, 27,
73
+ 28, 29, 30, 27, 28, 29, 30, 27, 28, 29,
74
+ 30, 27, 28, 29, 30, 27, 28, 29, 30, 27,
75
+ 28, 46, 47, 78, 48, 49, 50, 79, 51, 34,
76
+ 34, 80, nil, nil, nil, 81, nil, nil, nil, 82,
77
+ nil, nil, nil, 83, 29, 30, 27, 28, 29, 30,
78
+ 27, 28, 29, 30, 27, 28, 29, 30, 27, 28,
79
+ 29, 30, 27, 28, 29, 30, 27, 28, nil, nil,
80
+ 84, nil, nil, nil, 85, nil, nil, nil, 86, nil,
81
+ nil, nil, 87, nil, nil, nil, 90, 4, 3, 7,
69
82
  8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
70
- 18, 19, 20, nil, 6, 4, 28, 7, 8, 9,
83
+ 18, 19, 20, 21, 22, 23, 24, 25, nil, 6,
84
+ 4, 33, 7, 8, 9, 10, 11, 12, 13, 14,
85
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
86
+ 25, nil, 6, 4, 33, 7, 8, 9, 10, 11,
87
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
88
+ 22, 23, 24, 25, nil, 6, 4, 33, 7, 8,
89
+ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
90
+ 19, 20, 21, 22, 23, 24, 25, nil, 6, 4,
91
+ 33, 7, 8, 9, 10, 11, 12, 13, 14, 15,
92
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
93
+ nil, 6, 4, 33, 7, 8, 9, 10, 11, 12,
94
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
95
+ 23, 24, 25, nil, 6, 4, 33, 7, 8, 9,
71
96
  10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
72
- 20, nil, 6, 4, 28, 7, 8, 9, 10, 11,
73
- 12, 13, 14, 15, 16, 17, 18, 19, 20, nil,
74
- 6, 4, 28, 7, 8, 9, 10, 11, 12, 13,
75
- 14, 15, 16, 17, 18, 19, 20, nil, 6, 4,
76
- 28, 7, 8, 9, 10, 11, 12, 13, 14, 15,
77
- 16, 17, 18, 19, 20, nil, 6, 4, 28, 7,
97
+ 20, 21, 22, 23, 24, 25, nil, 6, 4, 33,
98
+ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
99
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, nil,
100
+ 6, 4, 33, 7, 8, 9, 10, 11, 12, 13,
101
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
102
+ 24, 25, nil, 6, 4, 33, 7, 8, 9, 10,
103
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
104
+ 21, 22, 23, 24, 25, nil, 6, 4, 33, 7,
78
105
  8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
79
- 18, 19, 20, nil, 6, 4, 28, 7, 8, 9,
106
+ 18, 19, 20, 21, 22, 23, 24, 25, nil, 6,
107
+ 4, 33, 7, 8, 9, 10, 11, 12, 13, 14,
108
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
109
+ 25, nil, 6, 4, 33, 7, 8, 9, 10, 11,
110
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
111
+ 22, 23, 24, 25, nil, 6, 4, 33, 7, 8,
112
+ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
113
+ 19, 20, 21, 22, 23, 24, 25, nil, 6, 4,
114
+ 33, 7, 8, 9, 10, 11, 12, 13, 14, 15,
115
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
116
+ nil, 6, 4, 33, 7, 8, 9, 10, 11, 12,
117
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
118
+ 23, 24, 25, nil, 6, 4, 33, 7, 8, 9,
80
119
  10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
81
- 20, nil, 6, 4, 28, 7, 8, 9, 10, 11,
82
- 12, 13, 14, 15, 16, 17, 18, 19, 20, nil,
83
- 6, 4, 28, 7, 8, 9, 10, 11, 12, 13,
84
- 14, 15, 16, 17, 18, 19, 20, nil, 6, 4,
85
- 28, 7, 8, 9, 10, 11, 12, 13, 14, 15,
86
- 16, 17, 18, 19, 20, nil, 6, 4, 28, 7,
120
+ 20, 21, 22, 23, 24, 25, nil, 6, 4, 33,
121
+ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
122
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, nil,
123
+ 6, 4, 33, 7, 8, 9, 10, 11, 12, 13,
124
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
125
+ 24, 25, nil, 6, 4, 33, 7, 8, 9, 10,
126
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
127
+ 21, 22, 23, 24, 25, nil, 6, 4, 33, 7,
87
128
  8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
88
- 18, 19, 20, nil, 6, 4, 28, 7, 8, 9,
129
+ 18, 19, 20, 21, 22, 23, 24, 25, nil, 6,
130
+ 4, 33, 7, 8, 9, 10, 11, 12, 13, 14,
131
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
132
+ 25, nil, 6, 4, 33, 7, 8, 9, 10, 11,
133
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
134
+ 22, 23, 24, 25, nil, 6, 33, 7, 8, 9,
89
135
  10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
90
- 20, nil, 6, 4, 28, 7, 8, 9, 10, 11,
91
- 12, 13, 14, 15, 16, 17, 18, 19, 20, nil,
92
- 6, 4, 28, 7, 8, 9, 10, 11, 12, 13,
93
- 14, 15, 16, 17, 18, 19, 20, nil, 6, 4,
94
- 28, 7, 8, 9, 10, 11, 12, 13, 14, 15,
95
- 16, 17, 18, 19, 20, nil, 6, 28, 7, 8,
96
- 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
97
- 19, 20, nil, 6, 28, 7, 8, 9, 10, 11,
98
- 12, 13, 14, 15, 16, 17, 18, 19, 20, nil,
99
- 6, 24, 25, 22, 23, 24, 25, 22, 23 ]
136
+ 20, 21, 22, 23, 24, 25, nil, 6, 33, 7,
137
+ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
138
+ 18, 19, 20, 21, 22, 23, 24, 25, nil, 6,
139
+ 29, 30, 27, 28 ]
100
140
 
101
141
  racc_action_check = [
102
- 30, 30, 30, 30, 49, 49, 49, 49, 50, 50,
103
- 50, 50, 51, 51, 51, 51, 52, 52, 52, 52,
104
- 1, 30, 42, 42, 3, 49, 43, 43, 5, 50,
105
- 10, 11, 12, 51, 13, 14, 15, 52, 53, 53,
106
- 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,
107
- 56, 56, 56, 56, 57, 57, 57, 57, 16, 53,
108
- 17, 18, 19, 54, 21, 27, 47, 55, nil, nil,
109
- nil, 56, nil, nil, nil, 57, 58, 58, 58, 58,
110
- nil, 0, 0, 0, 0, 0, 0, 0, 0, 0,
111
- 0, 0, 0, 0, 0, 0, 0, 58, 0, 6,
142
+ 73, 73, 73, 73, 35, 35, 35, 35, 59, 59,
143
+ 59, 59, 60, 60, 60, 60, 61, 61, 61, 61,
144
+ 62, 62, 62, 62, 52, 52, 1, 73, 53, 53,
145
+ 35, 3, 5, 10, 59, 11, 12, 13, 60, 14,
146
+ 15, 16, 61, 17, 18, 19, 62, 63, 63, 63,
147
+ 63, 64, 64, 64, 64, 65, 65, 65, 65, 66,
148
+ 66, 66, 66, 67, 67, 67, 67, 68, 68, 68,
149
+ 68, 20, 21, 63, 22, 23, 24, 64, 26, 32,
150
+ 57, 65, nil, nil, nil, 66, nil, nil, nil, 67,
151
+ nil, nil, nil, 68, 69, 69, 69, 69, 70, 70,
152
+ 70, 70, 71, 71, 71, 71, 72, 72, 72, 72,
153
+ 89, 89, 89, 89, 2, 2, 2, 2, nil, nil,
154
+ 69, nil, nil, nil, 70, nil, nil, nil, 71, nil,
155
+ nil, nil, 72, nil, nil, nil, 89, 0, 0, 0,
156
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
157
+ 0, 0, 0, 0, 0, 0, 0, 0, nil, 0,
158
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
112
159
  6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
113
- 6, 6, 6, 6, 6, nil, 6, 22, 22, 22,
114
- 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
115
- 22, 22, 22, nil, 22, 23, 23, 23, 23, 23,
116
- 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
117
- 23, nil, 23, 24, 24, 24, 24, 24, 24, 24,
118
- 24, 24, 24, 24, 24, 24, 24, 24, 24, nil,
119
- 24, 25, 25, 25, 25, 25, 25, 25, 25, 25,
120
- 25, 25, 25, 25, 25, 25, 25, nil, 25, 26,
121
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
122
- 26, 26, 26, 26, 26, nil, 26, 31, 31, 31,
160
+ 6, nil, 6, 27, 27, 27, 27, 27, 27, 27,
161
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
162
+ 27, 27, 27, 27, nil, 27, 28, 28, 28, 28,
163
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
164
+ 28, 28, 28, 28, 28, 28, 28, nil, 28, 29,
165
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
166
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
167
+ nil, 29, 30, 30, 30, 30, 30, 30, 30, 30,
168
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
169
+ 30, 30, 30, nil, 30, 31, 31, 31, 31, 31,
123
170
  31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
124
- 31, 31, 31, nil, 31, 32, 32, 32, 32, 32,
125
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
126
- 32, nil, 32, 33, 33, 33, 33, 33, 33, 33,
127
- 33, 33, 33, 33, 33, 33, 33, 33, 33, nil,
128
- 33, 34, 34, 34, 34, 34, 34, 34, 34, 34,
129
- 34, 34, 34, 34, 34, 34, 34, nil, 34, 35,
130
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
131
- 35, 35, 35, 35, 35, nil, 35, 36, 36, 36,
171
+ 31, 31, 31, 31, 31, 31, nil, 31, 36, 36,
132
172
  36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
133
- 36, 36, 36, nil, 36, 37, 37, 37, 37, 37,
173
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, nil,
174
+ 36, 37, 37, 37, 37, 37, 37, 37, 37, 37,
134
175
  37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
135
- 37, nil, 37, 38, 38, 38, 38, 38, 38, 38,
136
- 38, 38, 38, 38, 38, 38, 38, 38, 38, nil,
137
- 38, 39, 39, 39, 39, 39, 39, 39, 39, 39,
138
- 39, 39, 39, 39, 39, 39, 39, nil, 39, 40,
176
+ 37, 37, nil, 37, 38, 38, 38, 38, 38, 38,
177
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
178
+ 38, 38, 38, 38, 38, nil, 38, 39, 39, 39,
179
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
180
+ 39, 39, 39, 39, 39, 39, 39, 39, nil, 39,
139
181
  40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
140
- 40, 40, 40, 40, 40, nil, 40, 4, 4, 4,
182
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
183
+ 40, nil, 40, 41, 41, 41, 41, 41, 41, 41,
184
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
185
+ 41, 41, 41, 41, nil, 41, 42, 42, 42, 42,
186
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
187
+ 42, 42, 42, 42, 42, 42, 42, nil, 42, 43,
188
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
189
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
190
+ nil, 43, 44, 44, 44, 44, 44, 44, 44, 44,
191
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
192
+ 44, 44, 44, nil, 44, 45, 45, 45, 45, 45,
193
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
194
+ 45, 45, 45, 45, 45, 45, nil, 45, 46, 46,
195
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
196
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, nil,
197
+ 46, 47, 47, 47, 47, 47, 47, 47, 47, 47,
198
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
199
+ 47, 47, nil, 47, 48, 48, 48, 48, 48, 48,
200
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
201
+ 48, 48, 48, 48, 48, nil, 48, 49, 49, 49,
202
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
203
+ 49, 49, 49, 49, 49, 49, 49, 49, nil, 49,
204
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
205
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
206
+ 50, nil, 50, 88, 88, 88, 88, 88, 88, 88,
207
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
208
+ 88, 88, 88, 88, nil, 88, 4, 4, 4, 4,
141
209
  4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
142
- 4, 4, nil, 4, 29, 29, 29, 29, 29, 29,
143
- 29, 29, 29, 29, 29, 29, 29, 29, 29, nil,
144
- 29, 2, 2, 2, 2, 46, 46, 46, 46 ]
210
+ 4, 4, 4, 4, 4, 4, nil, 4, 34, 34,
211
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
212
+ 34, 34, 34, 34, 34, 34, 34, 34, nil, 34,
213
+ 56, 56, 56, 56 ]
145
214
 
146
215
  racc_action_pointer = [
147
- 74, 20, 417, 1, 379, 26, 92, nil, nil, nil,
148
- 6, 7, 8, 10, 11, 12, 34, 36, 37, 38,
149
- nil, 64, 110, 128, 146, 164, 182, 63, nil, 396,
150
- -4, 200, 218, 236, 254, 272, 290, 308, 326, 344,
151
- 362, nil, 18, 22, nil, nil, 421, 64, nil, 0,
152
- 4, 8, 12, 34, 38, 42, 46, 50, 72, nil,
153
- nil, nil, nil, nil, nil, nil, nil, nil, nil ]
216
+ 130, 26, 110, 3, 658, 30, 153, nil, nil, nil,
217
+ 4, 6, 7, 8, 10, 11, 12, 14, 15, 16,
218
+ 42, 43, 45, 46, 47, nil, 78, 176, 199, 222,
219
+ 245, 268, 77, nil, 680, 0, 291, 314, 337, 360,
220
+ 383, 406, 429, 452, 475, 498, 521, 544, 567, 590,
221
+ 613, nil, 20, 24, nil, nil, 706, 78, nil, 4,
222
+ 8, 12, 16, 43, 47, 51, 55, 59, 63, 90,
223
+ 94, 98, 102, -4, nil, nil, nil, nil, nil, nil,
224
+ nil, nil, nil, nil, nil, nil, nil, nil, 636, 106,
225
+ nil ]
154
226
 
155
227
  racc_action_default = [
156
- -26, -26, -1, -11, -26, -8, -26, -12, -13, -14,
157
- -26, -26, -26, -26, -26, -26, -26, -26, -26, -26,
158
- -25, -26, -26, -26, -26, -26, -26, -7, -11, -26,
159
- -26, -26, -26, -26, -26, -26, -26, -26, -26, -26,
160
- -26, 69, -3, -4, -5, -6, -2, -9, -10, -26,
161
- -26, -26, -26, -26, -26, -26, -26, -26, -26, -15,
162
- -16, -17, -18, -19, -20, -21, -22, -23, -24 ]
228
+ -31, -31, -1, -11, -31, -8, -31, -12, -13, -14,
229
+ -31, -31, -31, -31, -31, -31, -31, -31, -31, -31,
230
+ -31, -31, -31, -31, -31, -30, -31, -31, -31, -31,
231
+ -31, -31, -7, -11, -31, -31, -31, -31, -31, -31,
232
+ -31, -31, -31, -31, -31, -31, -31, -31, -31, -31,
233
+ -31, 91, -3, -4, -5, -6, -2, -9, -10, -31,
234
+ -31, -31, -31, -31, -31, -31, -31, -31, -31, -31,
235
+ -31, -31, -31, -31, -15, -16, -17, -18, -19, -20,
236
+ -21, -22, -23, -24, -25, -26, -27, -28, -31, -31,
237
+ -29 ]
163
238
 
164
239
  racc_goto_table = [
165
- 2, 1, 27, nil, nil, nil, 30, nil, nil, nil,
240
+ 2, 1, 32, nil, nil, nil, 35, nil, nil, nil,
241
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
242
+ nil, nil, nil, nil, nil, nil, nil, 52, 53, 54,
243
+ 55, 56, 57, nil, nil, nil, 59, 60, 61, 62,
244
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
245
+ 73, nil, nil, nil, nil, nil, nil, nil, nil, nil,
166
246
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
167
- nil, nil, 42, 43, 44, 45, 46, 47, nil, nil,
168
- nil, 49, 50, 51, 52, 53, 54, 55, 56, 57,
169
- 58 ]
247
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
248
+ nil, nil, nil, nil, nil, nil, nil, nil, 89 ]
170
249
 
171
250
  racc_goto_check = [
172
251
  2, 1, 3, nil, nil, nil, 2, nil, nil, nil,
173
252
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
174
- nil, nil, 2, 2, 2, 2, 2, 3, nil, nil,
175
- nil, 2, 2, 2, 2, 2, 2, 2, 2, 2,
176
- 2 ]
253
+ nil, nil, nil, nil, nil, nil, nil, 2, 2, 2,
254
+ 2, 2, 3, nil, nil, nil, 2, 2, 2, 2,
255
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
256
+ 2, nil, nil, nil, nil, nil, nil, nil, nil, nil,
257
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
258
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
259
+ nil, nil, nil, nil, nil, nil, nil, nil, 2 ]
177
260
 
178
261
  racc_goto_pointer = [
179
262
  nil, 1, 0, -2 ]
@@ -183,35 +266,40 @@ racc_goto_default = [
183
266
 
184
267
  racc_reduce_table = [
185
268
  0, 0, :racc_error,
186
- 1, 27, :_reduce_1,
187
- 3, 27, :_reduce_2,
188
- 3, 28, :_reduce_3,
189
- 3, 28, :_reduce_4,
190
- 3, 28, :_reduce_5,
191
- 3, 28, :_reduce_6,
192
- 2, 28, :_reduce_7,
193
- 1, 28, :_reduce_none,
194
- 3, 29, :_reduce_9,
195
- 3, 29, :_reduce_10,
196
- 1, 29, :_reduce_11,
197
- 1, 29, :_reduce_none,
198
- 1, 29, :_reduce_13,
199
- 1, 29, :_reduce_14,
200
- 4, 29, :_reduce_15,
201
- 4, 29, :_reduce_16,
202
- 4, 29, :_reduce_17,
203
- 4, 29, :_reduce_18,
204
- 4, 29, :_reduce_19,
205
- 4, 29, :_reduce_20,
206
- 4, 29, :_reduce_21,
207
- 4, 29, :_reduce_22,
208
- 4, 29, :_reduce_23,
209
- 4, 29, :_reduce_24,
210
- 1, 29, :_reduce_25 ]
211
-
212
- racc_reduce_n = 26
213
-
214
- racc_shift_n = 69
269
+ 1, 33, :_reduce_1,
270
+ 3, 33, :_reduce_2,
271
+ 3, 34, :_reduce_3,
272
+ 3, 34, :_reduce_4,
273
+ 3, 34, :_reduce_5,
274
+ 3, 34, :_reduce_6,
275
+ 2, 34, :_reduce_7,
276
+ 1, 34, :_reduce_none,
277
+ 3, 35, :_reduce_9,
278
+ 3, 35, :_reduce_10,
279
+ 1, 35, :_reduce_11,
280
+ 1, 35, :_reduce_none,
281
+ 1, 35, :_reduce_13,
282
+ 1, 35, :_reduce_14,
283
+ 4, 35, :_reduce_15,
284
+ 4, 35, :_reduce_16,
285
+ 4, 35, :_reduce_17,
286
+ 4, 35, :_reduce_18,
287
+ 4, 35, :_reduce_19,
288
+ 4, 35, :_reduce_20,
289
+ 4, 35, :_reduce_21,
290
+ 4, 35, :_reduce_22,
291
+ 4, 35, :_reduce_23,
292
+ 4, 35, :_reduce_24,
293
+ 4, 35, :_reduce_25,
294
+ 4, 35, :_reduce_26,
295
+ 4, 35, :_reduce_27,
296
+ 4, 35, :_reduce_28,
297
+ 6, 35, :_reduce_29,
298
+ 1, 35, :_reduce_30 ]
299
+
300
+ racc_reduce_n = 31
301
+
302
+ racc_shift_n = 91
215
303
 
216
304
  racc_token_table = {
217
305
  false => 0,
@@ -234,14 +322,20 @@ racc_token_table = {
234
322
  :acos => 17,
235
323
  :atan => 18,
236
324
  :exp => 19,
237
- :log => 20,
238
- :log10 => 21,
239
- :v => 22,
240
- "=" => 23,
241
- "(" => 24,
242
- ")" => 25 }
243
-
244
- racc_nt_base = 26
325
+ :ln => 20,
326
+ :log => 21,
327
+ :abs => 22,
328
+ :fact => 23,
329
+ :floor => 24,
330
+ :ceil => 25,
331
+ :round => 26,
332
+ :v => 27,
333
+ "=" => 28,
334
+ "(" => 29,
335
+ ")" => 30,
336
+ "," => 31 }
337
+
338
+ racc_nt_base = 32
245
339
 
246
340
  racc_use_result_var = false
247
341
 
@@ -282,12 +376,18 @@ Racc_token_to_s_table = [
282
376
  "acos",
283
377
  "atan",
284
378
  "exp",
379
+ "ln",
285
380
  "log",
286
- "log10",
381
+ "abs",
382
+ "fact",
383
+ "floor",
384
+ "ceil",
385
+ "round",
287
386
  "v",
288
387
  "\"=\"",
289
388
  "\"(\"",
290
389
  "\")\"",
390
+ "\",\"",
291
391
  "$start",
292
392
  "statement",
293
393
  "expression",
@@ -307,7 +407,7 @@ module_eval(<<'.,.,', 'calc.y', 11)
307
407
 
308
408
  module_eval(<<'.,.,', 'calc.y', 12)
309
409
  def _reduce_2(val, _values)
310
- @v = @table[val[0]] = val[2]
410
+ @v = @table[val[0].to_sym] = val[2]
311
411
  end
312
412
  .,.,
313
413
 
@@ -357,7 +457,7 @@ module_eval(<<'.,.,', 'calc.y', 20)
357
457
 
358
458
  module_eval(<<'.,.,', 'calc.y', 21)
359
459
  def _reduce_11(val, _values)
360
- if @table[val[0]] then @table[val[0]] else raise("#{val[0]} not found.") end
460
+ if @table[val[0].to_sym] then @table[val[0].to_sym] else raise("#{val[0]} not found.") end
361
461
  end
362
462
  .,.,
363
463
 
@@ -377,66 +477,96 @@ module_eval(<<'.,.,', 'calc.y', 24)
377
477
 
378
478
  module_eval(<<'.,.,', 'calc.y', 25)
379
479
  def _reduce_15(val, _values)
380
- sqrt(val[2] )
480
+ sqrt(val[2])
381
481
  end
382
482
  .,.,
383
483
 
384
484
  module_eval(<<'.,.,', 'calc.y', 26)
385
485
  def _reduce_16(val, _values)
386
- sin(val[2] )
486
+ sin(val[2])
387
487
  end
388
488
  .,.,
389
489
 
390
490
  module_eval(<<'.,.,', 'calc.y', 27)
391
491
  def _reduce_17(val, _values)
392
- cos(val[2] )
492
+ cos(val[2])
393
493
  end
394
494
  .,.,
395
495
 
396
496
  module_eval(<<'.,.,', 'calc.y', 28)
397
497
  def _reduce_18(val, _values)
398
- tan(val[2] )
498
+ tan(val[2])
399
499
  end
400
500
  .,.,
401
501
 
402
502
  module_eval(<<'.,.,', 'calc.y', 29)
403
503
  def _reduce_19(val, _values)
404
- asin(val[2] )
504
+ asin(val[2])
405
505
  end
406
506
  .,.,
407
507
 
408
508
  module_eval(<<'.,.,', 'calc.y', 30)
409
509
  def _reduce_20(val, _values)
410
- acos(val[2] )
510
+ acos(val[2])
411
511
  end
412
512
  .,.,
413
513
 
414
514
  module_eval(<<'.,.,', 'calc.y', 31)
415
515
  def _reduce_21(val, _values)
416
- atan(val[2] )
516
+ atan(val[2])
417
517
  end
418
518
  .,.,
419
519
 
420
520
  module_eval(<<'.,.,', 'calc.y', 32)
421
521
  def _reduce_22(val, _values)
422
- exp(val[2] )
522
+ exp(val[2])
423
523
  end
424
524
  .,.,
425
525
 
426
526
  module_eval(<<'.,.,', 'calc.y', 33)
427
527
  def _reduce_23(val, _values)
428
- log(val[2] )
528
+ log(val[2])
429
529
  end
430
530
  .,.,
431
531
 
432
532
  module_eval(<<'.,.,', 'calc.y', 34)
433
533
  def _reduce_24(val, _values)
434
- log10(val[2] )
534
+ log10(val[2])
435
535
  end
436
536
  .,.,
437
537
 
438
538
  module_eval(<<'.,.,', 'calc.y', 35)
439
539
  def _reduce_25(val, _values)
540
+ val[2].abs
541
+ end
542
+ .,.,
543
+
544
+ module_eval(<<'.,.,', 'calc.y', 36)
545
+ def _reduce_26(val, _values)
546
+ fact(val[2])
547
+ end
548
+ .,.,
549
+
550
+ module_eval(<<'.,.,', 'calc.y', 37)
551
+ def _reduce_27(val, _values)
552
+ val[2].floor.to_f
553
+ end
554
+ .,.,
555
+
556
+ module_eval(<<'.,.,', 'calc.y', 38)
557
+ def _reduce_28(val, _values)
558
+ val[2].ceil.to_f
559
+ end
560
+ .,.,
561
+
562
+ module_eval(<<'.,.,', 'calc.y', 39)
563
+ def _reduce_29(val, _values)
564
+ val[2].round(val[4]).to_f
565
+ end
566
+ .,.,
567
+
568
+ module_eval(<<'.,.,', 'calc.y', 40)
569
+ def _reduce_30(val, _values)
440
570
  @v
441
571
  end
442
572
  .,.,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: s_calc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toshio Sekiya
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-16 00:00:00.000000000 Z
11
+ date: 2023-10-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: CUI Scientific calculator
14
14
  email: lxboyjp@gmail.com
@@ -23,7 +23,8 @@ files:
23
23
  homepage: https://github.com/ToshioCP/calc
24
24
  licenses:
25
25
  - GPL-3.0
26
- metadata: {}
26
+ metadata:
27
+ documentation_uri: https://toshiocp.github.io/calc/
27
28
  post_install_message:
28
29
  rdoc_options: []
29
30
  require_paths: