alphalang 0.2.8 → 0.2.9

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: 3ab6d2758dc063b20d389b6933acbe56ab78fda4ba97f0520cc9cddb5b79701d
4
- data.tar.gz: f14a27f54b3ab0885484ecc800bd64954bb0bce0c4740a4c1ee7113d47606a3a
3
+ metadata.gz: fd90e0cc81ecac899602c5a173f188110fecd877428fcab72e8bc77076e75d00
4
+ data.tar.gz: 1b1e538edb038c95ccffcb50fb8f48f5081977701082164da879ab848af80edb
5
5
  SHA512:
6
- metadata.gz: ceddb38213e3e95d0156a12e0fdd5461cf7880d0c517603ca2117276f5f5db22630598afa6e8d0d66aa4865b3eacc947b09edc78f3660c20e9e2c07e4a633b5b
7
- data.tar.gz: 347feeb1bc8ec3fa97f4b1bbd529bb071894f604e9bd534749cd4ab198e83c20da0c02c0f3d4ba016d5e249937ccc3f9ee33235d538262bf3ae0279a705c60b3
6
+ metadata.gz: 95e31bbc359dc485d7e5e623164f2f3c636c68975e6c7bd1c83fcfe75c11cbe8b1fe6c4d35eeefae0bfcf7c0b668f673a8649cea39d9bfe6f7319d860947e87b
7
+ data.tar.gz: 15cd10c8ce16fea278f3d99f3c8caecf3e811249c6a1d933360433d22ca06c0816602555a1aa314ba720a00229e6401256520de7d664da884a98e1bff2e3d24e
data/bin/alphalang CHANGED
@@ -44,6 +44,10 @@ OptionParser.new do |opts|
44
44
  opts.on('--listlocale', 'Lists all keywords from a specific locale file from your locales directory.') do
45
45
  options[:listlocale] = true
46
46
  end
47
+
48
+ opts.on('--printtree', 'Lists all keywords from a specific locale file from your locales directory.') do
49
+ options[:printtree] = true
50
+ end
47
51
  end.parse!
48
52
 
49
53
  verbose_flag = options[:verbose]
@@ -54,6 +58,8 @@ create_locale_flag = options[:createlocale]
54
58
  delete_locale_flag = options[:deletelocale]
55
59
  list_locales_flag = options[:listlocales]
56
60
  list_locale_flag = options[:listlocale]
61
+ PRINT_TREE_FLAG = options[:printtree]
62
+ TREE_ARRAY = []
57
63
 
58
64
  if create_locale_flag
59
65
  require_relative '../lib/locale_creator'
data/lib/alpha.rb CHANGED
@@ -202,7 +202,9 @@ class LangParser
202
202
  def parse_file(filename)
203
203
  file = File.read(filename)
204
204
  root = @langParser.parse file
205
- root.evaluate
205
+ root = root.evaluate
206
+ puts TREE_ARRAY
207
+ root
206
208
  end
207
209
 
208
210
  def calc_test(str)
@@ -36,6 +36,10 @@ class BoolNode < Node
36
36
  @value = false if value == ScopeManager.false_value
37
37
  end
38
38
 
39
+ def to_s
40
+ @value.to_s
41
+ end
42
+
39
43
  def evaluate
40
44
  @value
41
45
  end
@@ -53,6 +57,10 @@ class AndNode < Node
53
57
  end
54
58
  end
55
59
 
60
+ def to_s
61
+ "#{@lhs} and #{@rhs}"
62
+ end
63
+
56
64
  def evaluate
57
65
  @lhs.evaluate && @rhs.evaluate
58
66
  end
@@ -68,6 +76,10 @@ class OrNode < Node
68
76
  end
69
77
  end
70
78
 
79
+ def to_s
80
+ "#{@lhs} or #{@rhs}"
81
+ end
82
+
71
83
  def evaluate
72
84
  @lhs.evaluate || @rhs.evaluate
73
85
  end
@@ -78,6 +90,10 @@ class NotNode < Node
78
90
  @node = node
79
91
  end
80
92
 
93
+ def to_s
94
+ "not #{@node}"
95
+ end
96
+
81
97
  def evaluate
82
98
  not @node.evaluate
83
99
  end
@@ -92,6 +108,10 @@ class CompareNode < Node
92
108
  @lhs, @op, @rhs = lhs, op, rhs
93
109
  end
94
110
 
111
+ def to_s
112
+ "#{@lhs} #{@op} #{@rhs}"
113
+ end
114
+
95
115
  def evaluate
96
116
  @value = @lhs.evaluate.send(@op, @rhs.evaluate)
97
117
  end
@@ -105,21 +125,13 @@ class BinaryOperationNode < Node
105
125
  @lhs, @op, @rhs = lhs, op, rhs
106
126
  end
107
127
 
128
+ def to_s
129
+ "#{@lhs} #{@op} #{@rhs}"
130
+ end
131
+
108
132
  def evaluate
109
133
  if @rhs.evaluate.is_a?(ArrayNode) && @op == '+'
110
134
  return @value = @rhs.evaluate + @lhs.evaluate
111
- elsif @lhs.evaluate.is_a?(Array) && @op == '+'
112
- return @value = @lhs.evaluate.append(@rhs.evaluate)
113
- end
114
-
115
- if @rhs.evaluate.is_a?(ArrayNode) && @op == '-'
116
- return @value = @rhs.evaluate - @lhs.evaluate
117
- elsif @lhs.evaluate.is_a?(Array) && @op == '-'
118
- return @lhs.evaluate.reject { |v| v.evaluate == @rhs.evaluate }
119
- end
120
-
121
- if @rhs.evaluate.is_a?(ArrayNode) or @rhs.evaluate.is_a?(Array) and @lhs.evaluate.is_a?(Numeric)
122
- raise SyntaxError, "You can't subtract an array from a number! #{@lhs.evaluate} #{@op} #{@rhs.name}"
123
135
  end
124
136
 
125
137
  if @op == '/'
@@ -163,10 +175,12 @@ class ArrayNode < Node
163
175
 
164
176
  def +(value)
165
177
  @value.append(value)
178
+ self
166
179
  end
167
180
 
168
181
  def -(value)
169
- @value.reject { |v| v.evaluate == value }
182
+ @value = @value.reject { |v| v.evaluate == value }
183
+ self
170
184
  end
171
185
 
172
186
  def [](index)
@@ -1,5 +1,11 @@
1
1
  require_relative 'basenodes'
2
2
 
3
+ def set_up_scope_header
4
+ result = "<#{ScopeManager.scope_lvl}> "
5
+ result += '++--++--' * (ScopeManager.scope_lvl + 1) + ' '
6
+ result
7
+ end
8
+
3
9
  ###################### Variable Nodes
4
10
 
5
11
  class VariableCallNode < Node
@@ -9,8 +15,19 @@ class VariableCallNode < Node
9
15
  @name = name
10
16
  end
11
17
 
18
+ def create_tree_entry
19
+ result = set_up_scope_header
20
+ result += "Variable #{@name} is now #{@value}"
21
+ TREE_ARRAY << result unless TREE_ARRAY[-1] == result
22
+ end
23
+
24
+ def to_s
25
+ @name
26
+ end
27
+
12
28
  def evaluate
13
29
  @value = ScopeManager.lookup_var(@name)
30
+ create_tree_entry if PRINT_TREE_FLAG
14
31
  return @value
15
32
  end
16
33
  end
@@ -23,8 +40,19 @@ class VariableDecNode < Node
23
40
  @name = name
24
41
  end
25
42
 
43
+ def create_tree_entry
44
+ result = set_up_scope_header
45
+ result += "Variable #{@name} is now #{@value}"
46
+ TREE_ARRAY << result unless TREE_ARRAY[-1] == result
47
+ end
48
+
49
+ def to_s
50
+ "#{@name} = #{@value}"
51
+ end
52
+
26
53
  def evaluate
27
54
  ScopeManager.add_to_current_scope(name, @value)
55
+ create_tree_entry if PRINT_TREE_FLAG
28
56
  self
29
57
  end
30
58
  end
@@ -41,6 +69,7 @@ class ArrayCallNode < Node
41
69
  raise ArgumentError, "You are trying to access an out of bounds index. Here -> #{@value}[#{@index}]"
42
70
  end
43
71
  @value = arr[@index]
72
+ @value
44
73
  end
45
74
  end
46
75
 
@@ -53,8 +82,19 @@ class FunctionDecNode < Node
53
82
  @args = node.args
54
83
  end
55
84
 
85
+ def create_tree_entry
86
+ result = set_up_scope_header
87
+ result += "Function #{@name} declared"
88
+ TREE_ARRAY << result unless TREE_ARRAY[-1] == result
89
+ end
90
+
91
+ def to_s
92
+ "#{@name} = #{@value}"
93
+ end
94
+
56
95
  def evaluate
57
96
  ScopeManager.add_func_to_global_scope(@name, @value, @args)
97
+ create_tree_entry if PRINT_TREE_FLAG
58
98
  return nil
59
99
  end
60
100
  end
@@ -67,6 +107,20 @@ class FuncCallNode < Node
67
107
  @args = args
68
108
  end
69
109
 
110
+ def to_s
111
+ if @args == NilClass
112
+ "#{name}()"
113
+ else
114
+ "#{name}(#{@args})"
115
+ end
116
+ end
117
+
118
+ def create_tree_entry
119
+ result = set_up_scope_header
120
+ result += "Function #{@name} is called"
121
+ TREE_ARRAY << result unless TREE_ARRAY[-1] == result
122
+ end
123
+
70
124
  def evaluate
71
125
  func = ScopeManager.lookup_func(@name)
72
126
 
@@ -95,6 +149,7 @@ class FuncCallNode < Node
95
149
  ScopeManager.scope_lvl = old_scope_lvl
96
150
  end
97
151
 
152
+ create_tree_entry if PRINT_TREE_FLAG
98
153
  return func_return_value
99
154
  end
100
155
  end
@@ -108,8 +163,20 @@ class IfNode < Node
108
163
  @argument, @node = argument, node
109
164
  end
110
165
 
166
+ def to_s
167
+ "If #{argument}"
168
+ end
169
+
170
+ def create_tree_entry
171
+ result = set_up_scope_header
172
+ result += "If statement #{@argument} is used"
173
+ TREE_ARRAY << result unless TREE_ARRAY[-1] == result
174
+ end
175
+
111
176
  def evaluate
112
177
  @value = @node.evaluate
178
+ create_tree_entry if PRINT_TREE_FLAG
179
+ @value
113
180
  end
114
181
  end
115
182
 
@@ -120,8 +187,20 @@ class ElseifNode < Node
120
187
  @argument, @node = argument, node
121
188
  end
122
189
 
190
+ def to_s
191
+ 'Else'
192
+ end
193
+
194
+ def create_tree_entry
195
+ result = set_up_scope_header
196
+ result += "Elseif statement is used. #{@argument}"
197
+ TREE_ARRAY << result unless TREE_ARRAY[-1] == result
198
+ end
199
+
123
200
  def evaluate
124
201
  @value = @node.evaluate
202
+ create_tree_entry if PRINT_TREE_FLAG
203
+ @value
125
204
  end
126
205
  end
127
206
 
@@ -133,8 +212,16 @@ class ElseNode < Node
133
212
  @argument = BoolNode.new(ScopeManager.true_value)
134
213
  end
135
214
 
215
+ def create_tree_entry
216
+ result = set_up_scope_header
217
+ result += "Else statement is used."
218
+ TREE_ARRAY << result unless TREE_ARRAY[-1] == result
219
+ end
220
+
136
221
  def evaluate
137
222
  @value = @node.evaluate
223
+ create_tree_entry if PRINT_TREE_FLAG
224
+ @value
138
225
  end
139
226
  end
140
227
 
@@ -163,10 +250,19 @@ class WhileLoopNode < Node
163
250
  super(statement)
164
251
  end
165
252
 
253
+ def create_tree_entry
254
+ result = set_up_scope_header
255
+ result += "While Loop ran with #{@counter} iterations."
256
+ TREE_ARRAY << result unless TREE_ARRAY[-1] == result
257
+ end
258
+
166
259
  def evaluate
260
+ @counter = 0
167
261
  while @condition.evaluate
168
262
  @value.evaluate
263
+ @counter += 1
169
264
  end
265
+ create_tree_entry if PRINT_TREE_FLAG
170
266
  self.class
171
267
  end
172
268
  end
@@ -180,16 +276,20 @@ class PrintNode
180
276
  @value = value
181
277
  end
182
278
 
279
+ def create_tree_entry
280
+ result = set_up_scope_header
281
+ result += "Printed #{@value}."
282
+ TREE_ARRAY << result unless TREE_ARRAY[-1] == result
283
+ end
284
+
183
285
  def evaluate
184
286
  if @value.evaluate.is_a?(ArrayNode)
185
287
  print "Array #{@value.name}: " unless TEST_UNIT_ACTIVE
186
288
  puts @value.evaluate unless TEST_UNIT_ACTIVE
187
- elsif @value.evaluate.is_a?(Array)
188
- print "Array #{@value.name}: " unless TEST_UNIT_ACTIVE
189
- puts @value.evaluate.join(', ') unless TEST_UNIT_ACTIVE
190
289
  else
191
290
  puts @value.evaluate unless TEST_UNIT_ACTIVE
192
291
  end
292
+ create_tree_entry if PRINT_TREE_FLAG
193
293
  self.class
194
294
  end
195
295
  end
@@ -199,8 +299,15 @@ class PauseNode < Node
199
299
  super(value)
200
300
  end
201
301
 
302
+ def create_tree_entry
303
+ result = set_up_scope_header
304
+ result += "Paused for #{@value} seconds."
305
+ TREE_ARRAY << result unless TREE_ARRAY[-1] == result
306
+ end
307
+
202
308
  def evaluate
203
309
  @value = 0 if @value.evaluate.negative?
310
+ create_tree_entry if PRINT_TREE_FLAG
204
311
  sleep @value.evaluate
205
312
  end
206
313
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alphalang
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - mattias, victor