rpl 0.3.0 → 0.4.0
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.
- checksums.yaml +4 -4
- data/lib/rpl/core/program.rb +1 -1
- data/lib/rpl/interpreter.rb +39 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fabbce316a5c08423208383985c44621b20e0032499072ada99fe46aa24b7f9a
|
4
|
+
data.tar.gz: d1861c145f2647640cf5192fd376177a2565915e979a15cb46a34a7e340d6171
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2150ec4f68a633e83e1e17ce6508ad706e8e3a5cfe9e3683322f9e257d59ac6d37303d2ea87072f4479fe2b42189231748e3d294028a2fdfa6952ad8ae528aa3
|
7
|
+
data.tar.gz: 9e4b5766997db3b9825bd9d713e90a0494d3a007f3f4882bfe7f5eb5aed2e5b47281ee9d077e96915697f884e4a362aed3f652ce647e71b92cee1c4689e4212e
|
data/lib/rpl/core/program.rb
CHANGED
@@ -12,7 +12,7 @@ module RplLang
|
|
12
12
|
proc do
|
13
13
|
args = stack_extract( [:any] )
|
14
14
|
|
15
|
-
if %i[list
|
15
|
+
if %i[list numeric boolean].include?( args[0][:type] )
|
16
16
|
@stack << args[0] # these types evaluate to themselves
|
17
17
|
else
|
18
18
|
run( args[0][:value].to_s )
|
data/lib/rpl/interpreter.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'bigdecimal'
|
3
4
|
require 'bigdecimal/math'
|
5
|
+
require 'bigdecimal/util'
|
4
6
|
|
5
7
|
require 'rpl/dictionary'
|
6
8
|
|
@@ -41,6 +43,23 @@ class Interpreter
|
|
41
43
|
end
|
42
44
|
end
|
43
45
|
|
46
|
+
unless input.index("\n").nil?
|
47
|
+
input = input
|
48
|
+
.split("\n")
|
49
|
+
.map do |line|
|
50
|
+
comment_begin_index = line.index('#')
|
51
|
+
|
52
|
+
if comment_begin_index.nil?
|
53
|
+
line
|
54
|
+
elsif comment_begin_index == 0
|
55
|
+
''
|
56
|
+
else
|
57
|
+
line[0..(comment_begin_index - 1)]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
.join(' ')
|
61
|
+
end
|
62
|
+
|
44
63
|
splitted_input = input.split(' ')
|
45
64
|
|
46
65
|
# 2-passes:
|
@@ -112,20 +131,30 @@ class Interpreter
|
|
112
131
|
|
113
132
|
if %I[string name].include?( parsed_entry[:type] )
|
114
133
|
parsed_entry[:value] = parsed_entry[:value][1..-2]
|
115
|
-
elsif parsed_entry[:type]
|
134
|
+
elsif %I[program].include?( parsed_entry[:type] )
|
116
135
|
parsed_entry[:value] = parsed_entry[:value][2..-3]
|
117
|
-
elsif parsed_entry[:type]
|
136
|
+
elsif %I[list].include?( parsed_entry[:type] )
|
118
137
|
parsed_entry[:value] = parse( parsed_entry[:value][2..-3] )
|
119
|
-
elsif parsed_entry[:type]
|
120
|
-
parsed_entry[:
|
121
|
-
|
122
|
-
|
123
|
-
parsed_entry[:value]
|
124
|
-
|
125
|
-
|
126
|
-
|
138
|
+
elsif %I[numeric].include?( parsed_entry[:type] )
|
139
|
+
underscore_position = parsed_entry[:value].index('_')
|
140
|
+
|
141
|
+
if parsed_entry[:value][0] == '0' && ( ['b', 'o', 'x'].include?( parsed_entry[:value][1] ) || !underscore_position.nil? )
|
142
|
+
if parsed_entry[:value][1] == 'x'
|
143
|
+
parsed_entry[:base] = 16
|
144
|
+
elsif parsed_entry[:value][1] == 'b'
|
145
|
+
parsed_entry[:base] = 2
|
146
|
+
elsif parsed_entry[:value][1] == 'o'
|
147
|
+
parsed_entry[:base] = 8
|
148
|
+
parsed_entry[:value] = parsed_entry[:value][2..]
|
149
|
+
elsif !underscore_position.nil?
|
150
|
+
parsed_entry[:base] = parsed_entry[:value][1..(underscore_position - 1)].to_i
|
151
|
+
parsed_entry[:value] = parsed_entry[:value][(underscore_position + 1)..]
|
152
|
+
end
|
153
|
+
else
|
154
|
+
parsed_entry[:base] = 10
|
127
155
|
end
|
128
156
|
|
157
|
+
parsed_entry[:value] = parsed_entry[:value].to_i( parsed_entry[:base] ) unless parsed_entry[:base] == 10
|
129
158
|
parsed_entry[:value] = BigDecimal( parsed_entry[:value], @precision )
|
130
159
|
end
|
131
160
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rpl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gwenhael Le Moine
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-02-
|
11
|
+
date: 2022-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A language inspired by HP's RPL and https://github.com/louisrubet/rpn/
|
14
14
|
email: gwenhael@le-moine.org
|