ascode 0.0.6 → 0.0.7

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: 4fa250ec3800ca2f9a2a5dafe54b2f0f8180ce23d63225b6162d053898e60e20
4
- data.tar.gz: a4295c0b84b6c8777ac43d2a4526dcbd039608c983931690a4674b13d4c337a7
3
+ metadata.gz: 124634fb2ecd5a5c2cbafe0f527302cc27970b12239e93689821c097c1c1e879
4
+ data.tar.gz: d6c5ccdd612d61be7dd083ee17af86a9fac925df85410a8a3b013e0eb2a89ca0
5
5
  SHA512:
6
- metadata.gz: db04223ddfac0863026b734ddd96c8529ec3a7c4e6e29cda29e4e41e4791f0d7060f98d528a452c99c0206e99e320894486d5ff11f5b529377152e322bbe33a7
7
- data.tar.gz: 432b5b84fb171e19e54640a04f5e5f4abfcfc148503b20801b676158705cc1b4fb2ceac01a8db190d8f1c9ed28ef2bbdae8f7793a48928fd65e9cbcf1688cbef
6
+ metadata.gz: 1679f6369afacb75a816358543a8559d674d662948a422ee89b6d9c745f03a0b4c4badf39b331ae99e24b923b0e9fafe760e1f1df038870739a890617afb28ec
7
+ data.tar.gz: 5c4bebec28a426d0f620c415168ee7e9b72f96763f048c71d6c4ddb3ec972c1b76a3cc145c5017f9bdc97d8d85d99650cda42bc75692ead7e40252e49dd8c00f
@@ -2,3 +2,7 @@ Short|Long|`pop`s|`push`es|Description
2
2
  ---|---|---|---|---
3
3
  `➤`|`output`|`a`||Prints `a` to stdout
4
4
  `^`|`pop`|`a`||
5
+ `+`|`plus`|`a`, `b`|`c`|`c` = `a` + `b`
6
+ `-`|`minus`|`a`, `b`|`c`|`c` = `a` - `b`
7
+ `/`|`divide`|`a`, `b`|`c`|`c` = `a` / `b`
8
+ `*`|`multiply`|`a`, `b`|`c`|`c` = `a` * `b`
@@ -30,5 +30,29 @@ module Ascode
30
30
  def output
31
31
  puts pop
32
32
  end
33
+
34
+ def plus
35
+ a = pop
36
+ b = pop
37
+ push a + b
38
+ end
39
+
40
+ def minus
41
+ a = pop.to_f
42
+ b = pop.to_f
43
+ push a - b
44
+ end
45
+
46
+ def divide
47
+ a = pop.to_f
48
+ b = pop.to_f
49
+ push a / b
50
+ end
51
+
52
+ def multiply
53
+ a = pop.to_f
54
+ b = pop.to_f
55
+ push a * b
56
+ end
33
57
  end
34
58
  end
data/lib/ascode/parser.rb CHANGED
@@ -14,18 +14,18 @@ module Ascode
14
14
  @code.split('').to_enum.each do |char|
15
15
  parse_character char
16
16
  end
17
+ add_push_buffer
17
18
 
18
19
  @ast
19
20
  end
20
21
 
21
22
  def parse_character(char)
22
- if char =~ /[a-zA-Z0-9 .,:;!?]/
23
+ if char =~ /[\w.,:;!?]/
23
24
  parse_push char
25
+ elsif char == ' '
26
+ add_push_buffer
24
27
  else
25
- if @push_buffer
26
- add_action 'push', @push_buffer
27
- @push_buffer = false
28
- end
28
+ add_push_buffer
29
29
  parse_function char
30
30
  end
31
31
  end
@@ -38,10 +38,20 @@ module Ascode
38
38
  end
39
39
  end
40
40
 
41
+ def add_push_buffer
42
+ if @push_buffer
43
+ add_action 'push', @push_buffer
44
+ @push_buffer = false
45
+ end
46
+ end
47
+
41
48
  def parse_function(char)
42
- name = (@fun.csv_data.each { |value| value[:short] == char })[0]
43
- p '[Error] Unexpected identifier:' + char unless name
44
- add_action name[:long]
49
+ function = @fun.csv_data.to_enum.find do |value|
50
+ value[:short] == char
51
+ end
52
+
53
+ puts '[Error] Unexpected identifier: \'' + char + '\'' unless function
54
+ add_action function[:long]
45
55
  end
46
56
 
47
57
  def add_action(name, what = nil)
data/lib/ascode.rb CHANGED
@@ -12,4 +12,4 @@ module Ascode
12
12
  end
13
13
 
14
14
  # Test
15
- Ascode.run('Hello, world!➤')
15
+ Ascode.run('st Te+➤ 5 5*➤')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ascode
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artem Varaksa