rubasteme 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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