rpl 0.2.0 → 0.3.0

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: 4c0b6dde921b1be42f37aada134849b5a96f458243f261e14b4bc4d7b17175d3
4
- data.tar.gz: 0bac9ebecadaab0cc5ac023284dbad7a12d6e543e4b266b52cdcdd5815933e24
3
+ metadata.gz: 8f26f2f32e0e42c05a0ed59c2f21bb31433a5c2be29454cc17e7c5e1ee9bc2b1
4
+ data.tar.gz: ddb9ad1384954af38402126f5425654e1534b684f57271736bd64eace4cc987a
5
5
  SHA512:
6
- metadata.gz: 1c26e7c6146a97efd4dc45d7f2f93979156d459a47a7e3c6aa93b2ad4afac4f1fd40e5fcb67f5052e9a026dbb20109fae9dcd93cf5501e9e7d9f60ef469d41f7
7
- data.tar.gz: a282895d927482056affe83b864b985f8251e97e6b6e80eb742959cfa7adaf0901739e3f45fb0ba3cf8ce0cd3f4851b51671c8b6e454d377a5963f963a86304d
6
+ metadata.gz: 1d3ebfc6baa238fc2ad342f71c871399cbb37d4e8a87bbbbaf0173573947592ebeb62a2686a4a99ba07bf8860e97abb0615abce86450ffa328915cace9523658
7
+ data.tar.gz: ee1d985c2f136ef8eedd496b3c5a1c051f19f46aef118c2e308f2b5dbbe2cc5191555e714fc398c0c518c13e388e48d30db4d81751160bf0e8f6e1374dc17eae
@@ -12,7 +12,11 @@ module RplLang
12
12
  proc do
13
13
  args = stack_extract( [:any] )
14
14
 
15
- run( args[0][:value].to_s )
15
+ if %i[list string numeric boolean].include?( args[0][:type] )
16
+ @stack << args[0] # these types evaluate to themselves
17
+ else
18
+ run( args[0][:value].to_s )
19
+ end
16
20
  end )
17
21
  end
18
22
  end
@@ -47,6 +47,8 @@ class Interpreter
47
47
  # 1. regroup strings and programs
48
48
  opened_programs = 0
49
49
  closed_programs = 0
50
+ opened_lists = 0
51
+ closed_lists = 0
50
52
  string_delimiters = 0
51
53
  name_delimiters = 0
52
54
  regrouping = false
@@ -56,22 +58,33 @@ class Interpreter
56
58
  if elt[0] == '«'
57
59
  opened_programs += 1
58
60
  elt.gsub!( '«', '« ') if elt.length > 1 && elt[1] != ' '
61
+ elsif elt[0] == '{'
62
+ opened_lists += 1
63
+ elt.gsub!( '{', '{ ') if elt.length > 1 && elt[1] != ' '
64
+ elsif elt[0] == '"' && elt.length > 1
65
+ string_delimiters += 1
66
+ elsif elt[0] == "'" && elt.length > 1
67
+ name_delimiters += 1
59
68
  end
60
- string_delimiters += 1 if elt[0] == '"' && elt.length > 1
61
- name_delimiters += 1 if elt[0] == "'" && elt.length > 1
62
69
 
63
70
  elt = "#{regrouped_input.pop} #{elt}".strip if regrouping
64
71
 
65
72
  regrouped_input << elt
66
73
 
67
- if elt[-1] == '»'
74
+ case elt[-1]
75
+ when '»'
68
76
  closed_programs += 1
69
77
  elt.gsub!( '»', ' »') if elt.length > 1 && elt[-2] != ' '
78
+ when '}'
79
+ closed_lists += 1
80
+ elt.gsub!( '}', ' }') if elt.length > 1 && elt[-2] != ' '
81
+ when '"'
82
+ string_delimiters += 1
83
+ when "'"
84
+ name_delimiters += 1
70
85
  end
71
- string_delimiters += 1 if elt[-1] == '"'
72
- name_delimiters += 1 if elt[-1] == "'"
73
86
 
74
- regrouping = string_delimiters.odd? || name_delimiters.odd? || (opened_programs > closed_programs )
87
+ regrouping = string_delimiters.odd? || name_delimiters.odd? || (opened_programs > closed_programs ) || (opened_lists > closed_lists )
75
88
  end
76
89
 
77
90
  # 2. parse
@@ -83,6 +96,8 @@ class Interpreter
83
96
  parsed_entry[:type] = case elt[0]
84
97
  when '«'
85
98
  :program
99
+ when '{'
100
+ :list
86
101
  when '"'
87
102
  :string
88
103
  when "'"
@@ -99,6 +114,8 @@ class Interpreter
99
114
  parsed_entry[:value] = parsed_entry[:value][1..-2]
100
115
  elsif parsed_entry[:type] == :program
101
116
  parsed_entry[:value] = parsed_entry[:value][2..-3]
117
+ elsif parsed_entry[:type] == :list
118
+ parsed_entry[:value] = parse( parsed_entry[:value][2..-3] )
102
119
  elsif parsed_entry[:type] == :numeric
103
120
  parsed_entry[:base] = 10 # TODO: parse others possible bases 0x...
104
121
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rpl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gwenhael Le Moine
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-16 00:00:00.000000000 Z
11
+ date: 2022-02-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A language inspired by HP's RPL and https://github.com/louisrubet/rpn/
14
14
  email: gwenhael@le-moine.org