ascode 0.0.6 → 0.0.7

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: 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