elparser 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/elparser.rb +28 -4
- data/lib/elparser/version.rb +1 -1
- data/test/test-elparser.rb +22 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ccc0e2ca8395fd31246a39c426d3ecfd5ef3a4e2
|
4
|
+
data.tar.gz: 57825efa952f48a4e33dd31547cee6edcd8b4f13
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39b69fc3581352fe40065a432f053f1a4c0c26275b625ab1517e712f9e2b86e6a1502a486550bb28df8adcecfee02a533b8d9a5164417b9b987622c8f9be1629
|
7
|
+
data.tar.gz: 99985731bf3b9a5b9aa072629ada53d66a0cd402537f9f719857706c1be535fc5e94ca2b5ef2aaed77433bb22132833e9cbbf398ab29f04c98eb09254b45b6c1
|
data/lib/elparser.rb
CHANGED
@@ -216,6 +216,15 @@ module Elparser
|
|
216
216
|
end
|
217
217
|
end
|
218
218
|
|
219
|
+
class ParserError < StandardError
|
220
|
+
attr_reader :message, :pos, :sample
|
221
|
+
def initialize(message, pos, sample)
|
222
|
+
@message = message
|
223
|
+
@pos = pos
|
224
|
+
@sample = sample
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
219
228
|
# parser class for
|
220
229
|
class Parser
|
221
230
|
|
@@ -226,6 +235,10 @@ module Elparser
|
|
226
235
|
|
227
236
|
# parse s-expression string and return sexp objects.
|
228
237
|
def parse(str)
|
238
|
+
if str.nil? || str == ""
|
239
|
+
raise ParserError.new("Empty input",0,"")
|
240
|
+
end
|
241
|
+
|
229
242
|
s = StringScanner.new str
|
230
243
|
@tokens = []
|
231
244
|
|
@@ -237,10 +250,10 @@ module Elparser
|
|
237
250
|
s.scan(/\A[a-z\-.\/_:*+=$][a-z\-.\/_:$*+=0-9]*/i) ? (@tokens << [:SYMBOL, s.matched]) :
|
238
251
|
s.scan(/\A"(([^\\"]|\\.)*)"/) ? (@tokens << [:STRING, s.matched.slice(1...-1)]) :
|
239
252
|
s.scan(/\A./) ? (a = s.matched; @tokens << [a, a]) :
|
240
|
-
(raise "
|
253
|
+
(raise ParserError.new("Scanner error",s.pos,s.peek(5)))
|
241
254
|
end
|
242
|
-
@tokens.push [false, '
|
243
|
-
|
255
|
+
@tokens.push [false, 'END']
|
256
|
+
|
244
257
|
return do_parse.map do |i|
|
245
258
|
normalize(i)
|
246
259
|
end
|
@@ -280,6 +293,17 @@ module Elparser
|
|
280
293
|
return objs.map {|obj| _encode(obj).to_s }.join(sep)
|
281
294
|
end
|
282
295
|
|
296
|
+
class EncodingError < StandardError
|
297
|
+
attr_reader :message, :object
|
298
|
+
def initialize(message, object)
|
299
|
+
@message = message
|
300
|
+
@object = object
|
301
|
+
end
|
302
|
+
def to_s
|
303
|
+
@message
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
283
307
|
private
|
284
308
|
|
285
309
|
def self._encode(arg)
|
@@ -302,7 +326,7 @@ module Elparser
|
|
302
326
|
elsif c == FalseClass then
|
303
327
|
return SExpNil.new
|
304
328
|
end
|
305
|
-
raise "Can't encode object : #{arg}"
|
329
|
+
raise EncodingError.new("Can't encode object : #{arg}", arg)
|
306
330
|
end
|
307
331
|
|
308
332
|
def self._encode_array(arg)
|
data/lib/elparser/version.rb
CHANGED
data/test/test-elparser.rb
CHANGED
@@ -190,4 +190,26 @@ class TestElparser < Test::Unit::TestCase
|
|
190
190
|
|
191
191
|
end
|
192
192
|
|
193
|
+
sub_test_case "Error" do
|
194
|
+
|
195
|
+
test "Parser Error" do
|
196
|
+
assert_raise_message "Empty input" do
|
197
|
+
@parser.parse ""
|
198
|
+
end
|
199
|
+
assert_raise_message /\$end/ do
|
200
|
+
@parser.parse "("
|
201
|
+
end
|
202
|
+
assert_raise_message /parse error on value "\)"/ do
|
203
|
+
@parser.parse ")"
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
test "Encoding Error" do
|
208
|
+
assert_raise_message /Can\'t encode object/ do
|
209
|
+
Elparser.encode Class
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
end
|
214
|
+
|
193
215
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elparser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SAKURAI Masashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: racc
|