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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7318849fdcbcfd2daa359998f303bba5c27429bce2a36f06e9beddf05d26ba8a
4
- data.tar.gz: 0037b93486d56d45c125ec47aa5417de6f61dbb6519679154974ac039206a738
3
+ metadata.gz: f983bac291b02cde63445a66509273604d6f64fabb7c833d24e7430f5605962d
4
+ data.tar.gz: 9a08587175a838efb7572f17185e22891d58dc68cf9dacfd497d2ef1dd06bca2
5
5
  SHA512:
6
- metadata.gz: 10e44958db29f64d4b17e0db107756e8952393941b7305f9b32adf79b5f71ca18faa234d99cf24ceb5d6da6023e4855260998d16c50d105d002645d80231aa15
7
- data.tar.gz: 7abdcb827afb2cbbe428e1ac59167d98f21c07ab83046e212cd48af734cc4245f32de39f7b36741f46a740f8787e1b08c981f91dce62154070704140ff0f463c
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
- ast_node.literal
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
- parser = Rubasteme.parser(lexer)
187
- ast_program = parser.parse
209
+ ast_program = parser.parse(lexer)
188
210
 
189
211
  result = evaluator.eval(ast_program)
190
212
 
@@ -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
- parser = Rubasteme.parser(lexer)
48
- exp = parser.parse.to_a
48
+ exp = parser.parse(lexer).to_a
49
49
 
50
50
  result = evaluator.eval(exp, env)
51
51
 
@@ -2,18 +2,19 @@
2
2
 
3
3
  module Rubasteme
4
4
 
5
- def self.parser(lexer)
6
- Parser.new(lexer)
5
+ def self.parser
6
+ Parser.new
7
7
  end
8
8
 
9
9
  class Parser
10
10
 
11
- def initialize(lexer)
12
- @lexer = lexer
11
+ def initialize
12
+ @lexer = nil
13
13
  end
14
14
 
15
- def parse
16
- return [] if @lexer.nil?
15
+ def parse(lexer)
16
+ return [] if lexer.nil?
17
+ @lexer = lexer
17
18
  parse_program
18
19
  end
19
20
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rubasteme
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  RELEASE = "2021-05-20"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubasteme
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - mnbi