ascode 0.0.4 → 0.0.5

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