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 +4 -4
- data/lib/ascode/functions.md +4 -0
- data/lib/ascode/interpreter.rb +24 -0
- data/lib/ascode/parser.rb +18 -8
- data/lib/ascode.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 124634fb2ecd5a5c2cbafe0f527302cc27970b12239e93689821c097c1c1e879
|
4
|
+
data.tar.gz: d6c5ccdd612d61be7dd083ee17af86a9fac925df85410a8a3b013e0eb2a89ca0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1679f6369afacb75a816358543a8559d674d662948a422ee89b6d9c745f03a0b4c4badf39b331ae99e24b923b0e9fafe760e1f1df038870739a890617afb28ec
|
7
|
+
data.tar.gz: 5c4bebec28a426d0f620c415168ee7e9b72f96763f048c71d6c4ddb3ec972c1b76a3cc145c5017f9bdc97d8d85d99650cda42bc75692ead7e40252e49dd8c00f
|
data/lib/ascode/functions.md
CHANGED
@@ -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`
|
data/lib/ascode/interpreter.rb
CHANGED
@@ -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 =~ /[
|
23
|
+
if char =~ /[\w.,:;!?]/
|
23
24
|
parse_push char
|
25
|
+
elsif char == ' '
|
26
|
+
add_push_buffer
|
24
27
|
else
|
25
|
-
|
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
|
-
|
43
|
-
|
44
|
-
|
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