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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d5613388e1c1d1ed16df6f3a7dffc7cda13942828766e128686657c1c79e516
4
- data.tar.gz: deea5d3e304c6b0a57e2f644d19fe403a48d4b0a97eaf939591de46a470267f8
3
+ metadata.gz: d53bf0cde1f5a7dddc33ca65f6d4dfcc5dab6991f5fdaca7ab79f1931501e074
4
+ data.tar.gz: 290860e904f20914a547a53bf91a958217e1c473493c450c2c02bdbfce9c9cec
5
5
  SHA512:
6
- metadata.gz: 81de49c8a02e3168dda1eea4fad57da817a925ccf1db0b259e3e286cedba9a446a7383a6cc42e6aa7c9843670f66b2ec81a213d28623cc3ad8443a7c2cd2878e
7
- data.tar.gz: b1ab700a996cab9d82f1bf3b42ea4569eebee10340a37a468c195fa6c2f2374a9fe886d51a618ea0753f7e202d220ff39b5de21ed105cc50158c205ff11f439f
6
+ metadata.gz: 43c527ea85102d0ccea36b4a86b707c26e173f35084cac6a4465f09e7ed105120fe03e8abaa0a51e6cd1042a794f4806ba127a5ceeed2fa4c5fc37a6abdeb8a5
7
+ data.tar.gz: 3dbc78b6bc4f1131b57a7e2e4931086f193ec32f053d30d1645e64bceb4d8e031e57e15913760c41b38fab279d5a1c004e92d25bfc877ebade3b9c91a7c6f277
@@ -0,0 +1,3 @@
1
+ Short|Long|`pop`s|`push`es|Description
2
+ ➤|output|`a`||Prints `a` to stdout
3
+ ^|pop|`a`||
@@ -8,10 +8,10 @@ module Ascode
8
8
  end
9
9
 
10
10
  def read_csv
11
- file = File.open('ascode/functions.csv', 'r')
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] }
@@ -9,12 +9,26 @@ module Ascode
9
9
  def run
10
10
  @ast.each do |action|
11
11
  name = action[:action]
12
- send(name)
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 @stack.pop
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
- name = (@fun.csv_data.each { |value| value[:short] == char })[0]
14
- data = {
15
- action: name[:long]
16
- # TODO: also add :what (when 'push')
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
- ast.push data
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
- ast
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
@@ -12,4 +12,4 @@ module Ascode
12
12
  end
13
13
 
14
14
  # Test
15
- Ascode.run('')
15
+ Ascode.run('Hello, world!➤')
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
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.csv
22
+ - lib/ascode/functions.md
23
23
  - lib/ascode/functions.rb
24
24
  - lib/ascode/interpreter.rb
25
25
  - lib/ascode/parser.rb
@@ -1,2 +0,0 @@
1
- short,long,pop,push,description
2
- ➤,output,`a`,,Prints `a` to stdout