rpl 0.2.0 → 0.3.0

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