ascode 0.0.4 → 0.0.5
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 +3 -0
- data/lib/ascode/functions.rb +2 -2
- data/lib/ascode/interpreter.rb +16 -2
- data/lib/ascode/parser.rb +36 -8
- data/lib/ascode.rb +1 -1
- metadata +2 -2
- data/lib/ascode/functions.csv +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d53bf0cde1f5a7dddc33ca65f6d4dfcc5dab6991f5fdaca7ab79f1931501e074
|
4
|
+
data.tar.gz: 290860e904f20914a547a53bf91a958217e1c473493c450c2c02bdbfce9c9cec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43c527ea85102d0ccea36b4a86b707c26e173f35084cac6a4465f09e7ed105120fe03e8abaa0a51e6cd1042a794f4806ba127a5ceeed2fa4c5fc37a6abdeb8a5
|
7
|
+
data.tar.gz: 3dbc78b6bc4f1131b57a7e2e4931086f193ec32f053d30d1645e64bceb4d8e031e57e15913760c41b38fab279d5a1c004e92d25bfc877ebade3b9c91a7c6f277
|
data/lib/ascode/functions.rb
CHANGED
@@ -8,10 +8,10 @@ module Ascode
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def read_csv
|
11
|
-
file = File.open('ascode/functions.
|
11
|
+
file = File.open('ascode/functions.md', 'r')
|
12
12
|
|
13
13
|
until (line = file.gets).nil?
|
14
|
-
src = line.strip.split('
|
14
|
+
src = line.strip.split('|')
|
15
15
|
data = { short: src[0], long: src[1],
|
16
16
|
pop: src[2], push: src[3],
|
17
17
|
desc: src[4] }
|
data/lib/ascode/interpreter.rb
CHANGED
@@ -9,12 +9,26 @@ module Ascode
|
|
9
9
|
def run
|
10
10
|
@ast.each do |action|
|
11
11
|
name = action[:action]
|
12
|
-
|
12
|
+
what = action[:what]
|
13
|
+
|
14
|
+
if name == 'push'
|
15
|
+
push what
|
16
|
+
else
|
17
|
+
send(name)
|
18
|
+
end
|
13
19
|
end
|
14
20
|
end
|
15
21
|
|
22
|
+
def push(what)
|
23
|
+
@stack.push what
|
24
|
+
end
|
25
|
+
|
26
|
+
def pop
|
27
|
+
@stack.pop
|
28
|
+
end
|
29
|
+
|
16
30
|
def output
|
17
|
-
puts
|
31
|
+
puts pop
|
18
32
|
end
|
19
33
|
end
|
20
34
|
end
|
data/lib/ascode/parser.rb
CHANGED
@@ -8,18 +8,46 @@ module Ascode
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def parse
|
11
|
-
ast = []
|
11
|
+
@ast = []
|
12
|
+
@push_buffer = false
|
13
|
+
|
12
14
|
@code.split('').to_enum.each do |char|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
parse_character char
|
16
|
+
end
|
17
|
+
|
18
|
+
@ast
|
19
|
+
end
|
20
|
+
|
21
|
+
def parse_character(char)
|
22
|
+
if char =~ /[a-zA-Z0-9 .,:;!?]/
|
23
|
+
parse_push char
|
24
|
+
else
|
25
|
+
if @push_buffer
|
26
|
+
add_action 'push', @push_buffer
|
27
|
+
@push_buffer = false
|
28
|
+
end
|
29
|
+
parse_function char
|
30
|
+
end
|
31
|
+
end
|
18
32
|
|
19
|
-
|
33
|
+
def parse_push(char)
|
34
|
+
if @push_buffer
|
35
|
+
@push_buffer += char
|
36
|
+
else
|
37
|
+
@push_buffer = char
|
20
38
|
end
|
39
|
+
end
|
40
|
+
|
41
|
+
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]
|
45
|
+
end
|
21
46
|
|
22
|
-
|
47
|
+
def add_action(name, what = nil)
|
48
|
+
data = { action: name }
|
49
|
+
data[:what] = what if what
|
50
|
+
@ast.push data
|
23
51
|
end
|
24
52
|
end
|
25
53
|
end
|
data/lib/ascode.rb
CHANGED
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.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Artem Varaksa
|
@@ -19,7 +19,7 @@ files:
|
|
19
19
|
- LICENSE.md
|
20
20
|
- README.md
|
21
21
|
- lib/ascode.rb
|
22
|
-
- lib/ascode/functions.
|
22
|
+
- lib/ascode/functions.md
|
23
23
|
- lib/ascode/functions.rb
|
24
24
|
- lib/ascode/interpreter.rb
|
25
25
|
- lib/ascode/parser.rb
|
data/lib/ascode/functions.csv
DELETED