rubasteme 0.1.0 → 0.1.1
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/CHANGELOG.md +8 -0
- data/examples/mini_rus3 +26 -4
- data/examples/mini_sicp_scheme +2 -2
- data/lib/rubasteme/parser.rb +7 -6
- data/lib/rubasteme/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f983bac291b02cde63445a66509273604d6f64fabb7c833d24e7430f5605962d
|
4
|
+
data.tar.gz: 9a08587175a838efb7572f17185e22891d58dc68cf9dacfd497d2ef1dd06bca2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18df612e9ba4413f7e256e07e0227ac09a81db6926ff432d04d8e3c8742141479daa897e6f67e571b6e9c5d2e4ab93ab80eac30db0811a8dcd653c4b46d949c4
|
7
|
+
data.tar.gz: 5b89ff08b4e4567b441aa50d0000e8237ea631d8987e4f4fb8dbe09109ed25d6f168751d72088867da2f441c65febc787951426a6276165d688a85742b157572
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
- (nothing to record here)
|
3
3
|
|
4
|
+
## [0.1.1] - 2021-05-20
|
5
|
+
### Changed
|
6
|
+
- Change the timing to pass a lexer instance to a Parser object:
|
7
|
+
- 0.1.0: initialize Parser object,
|
8
|
+
- `Parser.new(lexer)`
|
9
|
+
- 0.1.1: call parser method.
|
10
|
+
- `parser = Parser.new; parser.parse(lexer)`
|
11
|
+
|
4
12
|
## [0.1.0] - 2021-05-20
|
5
13
|
- Initial release
|
data/examples/mini_rus3
CHANGED
@@ -47,9 +47,25 @@ class Evaluator
|
|
47
47
|
@env.receiver.instance_eval("def #{proc_name}(op1, op2); op1 #{op} op2; end")
|
48
48
|
}
|
49
49
|
@env.receiver.instance_eval {
|
50
|
+
def list(*objs)
|
51
|
+
objs
|
52
|
+
end
|
53
|
+
|
54
|
+
def append(*lists)
|
55
|
+
if lists.empty?
|
56
|
+
[]
|
57
|
+
else
|
58
|
+
lists[0] + append(*lists[1..-1])
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
50
62
|
def display(obj)
|
51
63
|
pp obj
|
52
64
|
end
|
65
|
+
|
66
|
+
def zero?(obj)
|
67
|
+
obj == 0
|
68
|
+
end
|
53
69
|
}
|
54
70
|
end
|
55
71
|
|
@@ -74,7 +90,7 @@ class Evaluator
|
|
74
90
|
def translate(ast_node)
|
75
91
|
case ast_node.type
|
76
92
|
when :ast_empty_list
|
77
|
-
|
93
|
+
"[]"
|
78
94
|
when :ast_boolean
|
79
95
|
(ast_node.literal[1] == "f") ? "false" : "true"
|
80
96
|
when :ast_identifier
|
@@ -82,7 +98,13 @@ class Evaluator
|
|
82
98
|
when :ast_string
|
83
99
|
ast_node.literal
|
84
100
|
when :ast_number
|
85
|
-
ast_node.literal
|
101
|
+
case ast_node.literal
|
102
|
+
when /([^\/]+)\/([^\/]+)/
|
103
|
+
md = Regexp.last_match
|
104
|
+
"Rational(#{md[1]}, #{md[2]})"
|
105
|
+
else
|
106
|
+
ast_node.literal
|
107
|
+
end
|
86
108
|
when :ast_procedure_call
|
87
109
|
translate_procedure_call(ast_node)
|
88
110
|
when :ast_lambda_expression
|
@@ -162,6 +184,7 @@ class Evaluator
|
|
162
184
|
|
163
185
|
end
|
164
186
|
|
187
|
+
parser = Rubasteme::Parser.new
|
165
188
|
evaluator = Evaluator.new
|
166
189
|
|
167
190
|
require "readline"
|
@@ -183,8 +206,7 @@ msg = loop {
|
|
183
206
|
end
|
184
207
|
|
185
208
|
lexer = Rbscmlex::Lexer.new(source, form: :token)
|
186
|
-
|
187
|
-
ast_program = parser.parse
|
209
|
+
ast_program = parser.parse(lexer)
|
188
210
|
|
189
211
|
result = evaluator.eval(ast_program)
|
190
212
|
|
data/examples/mini_sicp_scheme
CHANGED
@@ -25,6 +25,7 @@ module SicpScheme
|
|
25
25
|
|
26
26
|
def self.repl(prompt)
|
27
27
|
env = TOPLEVEL_ENV
|
28
|
+
parser = Rubasteme::Parser.new
|
28
29
|
evaluator = Evaluator.new
|
29
30
|
printer = Printer.new
|
30
31
|
|
@@ -44,8 +45,7 @@ module SicpScheme
|
|
44
45
|
end
|
45
46
|
|
46
47
|
lexer = Rbscmlex::Lexer.new(source, form: :token)
|
47
|
-
|
48
|
-
exp = parser.parse.to_a
|
48
|
+
exp = parser.parse(lexer).to_a
|
49
49
|
|
50
50
|
result = evaluator.eval(exp, env)
|
51
51
|
|
data/lib/rubasteme/parser.rb
CHANGED
@@ -2,18 +2,19 @@
|
|
2
2
|
|
3
3
|
module Rubasteme
|
4
4
|
|
5
|
-
def self.parser
|
6
|
-
Parser.new
|
5
|
+
def self.parser
|
6
|
+
Parser.new
|
7
7
|
end
|
8
8
|
|
9
9
|
class Parser
|
10
10
|
|
11
|
-
def initialize
|
12
|
-
@lexer =
|
11
|
+
def initialize
|
12
|
+
@lexer = nil
|
13
13
|
end
|
14
14
|
|
15
|
-
def parse
|
16
|
-
return [] if
|
15
|
+
def parse(lexer)
|
16
|
+
return [] if lexer.nil?
|
17
|
+
@lexer = lexer
|
17
18
|
parse_program
|
18
19
|
end
|
19
20
|
|
data/lib/rubasteme/version.rb
CHANGED