php-serialization 0.5.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 878d053b35ff09699f75c0df1b04ec2dee1b8ce4
4
+ data.tar.gz: 0ffa397bc3c17f8f3804631c0aa3d8db17e2ea44
5
+ SHA512:
6
+ metadata.gz: 9bf6130c5a40dd1a550cd3b8b13a70a2845e2413369960812429408f5480913f5096caa0ba72a13bc3c557ec69911909cbd5feab86e4a572365731d4b31672c5
7
+ data.tar.gz: 96414fc84ef3115f2895ec54dd3e8449504dfa24ce90560478899c79ff33cccc7467917ac497d11342c6ee7869930dfda7c67031ceb721b61cdd5d69eb5ed3a6
data/.gitignore CHANGED
@@ -1,5 +1,14 @@
1
- *.sw?
2
- .DS_Store
3
- coverage
4
- rdoc
5
- pkg
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
@@ -0,0 +1,12 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - 2.1.6
7
+ - 2.2.2
8
+ - jruby-18mode
9
+ - jruby-19mode
10
+ - rbx-2
11
+ - ree
12
+ script: ./bin/rspec
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ruby-php-serialization.gemspec
4
+ gemspec
@@ -1,4 +1,6 @@
1
- Copyright (c) 2009 Rodrigo Kochenburger
1
+ Copyright (c) 2015 Rodrigo Kochenburger
2
+
3
+ MIT License
2
4
 
3
5
  Permission is hereby granted, free of charge, to any person obtaining
4
6
  a copy of this software and associated documentation files (the
@@ -0,0 +1,31 @@
1
+ # Ruby::Php::Serialization
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'php-serialization'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install php-serialization
20
+
21
+ ## Usage
22
+
23
+ TODO: Write usage instructions here
24
+
25
+ ## Contributing
26
+
27
+ 1. Fork it ( https://github.com/[my-github-username]/ruby-php-serialization/fork )
28
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
29
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
30
+ 4. Push to the branch (`git push origin my-new-feature`)
31
+ 5. Create a new Pull Request
data/Rakefile CHANGED
@@ -1,72 +1,10 @@
1
- require 'rubygems'
2
- require 'rake'
1
+ require "bundler/gem_tasks"
3
2
 
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "php-serialization"
8
- gem.summary = %Q{PHP's serialization implementation for ruby}
9
- gem.description = %Q{Pure Ruby implementation of php's methods: serialize() and unserializer()}
10
- gem.email = "divoxx@gmail.com"
11
- gem.homepage = "http://github.com/divoxx/ruby-php-serialization"
12
- gem.authors = ["Rodrigo Kochenburger"]
13
- gem.add_development_dependency "rspec"
14
- gem.add_development_dependency "cucumber"
15
- gem.add_dependency "racc"
16
-
17
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
18
- end
19
- Jeweler::GemcutterTasks.new
20
- rescue LoadError
21
- puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
22
- end
23
-
24
- require 'spec/rake/spectask'
25
- Spec::Rake::SpecTask.new(:spec) do |spec|
26
- spec.libs << 'lib' << 'spec'
27
- spec.spec_files = FileList['spec/**/*_spec.rb']
28
- spec.spec_opts = ["--options spec/spec.opts"]
29
- end
30
-
31
- Spec::Rake::SpecTask.new(:rcov) do |spec|
32
- spec.libs << 'lib' << 'spec'
33
- spec.pattern = 'spec/**/*_spec.rb'
34
- spec.rcov = true
35
- end
36
-
37
- task :spec => :check_dependencies
38
-
39
- begin
40
- require 'cucumber/rake/task'
41
- Cucumber::Rake::Task.new(:features)
42
-
43
- task :features => :check_dependencies
44
- rescue LoadError
45
- task :features do
46
- abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
47
- end
48
- end
49
-
50
- task :default => :spec
51
-
52
- require 'rake/rdoctask'
53
- Rake::RDocTask.new do |rdoc|
54
- if File.exist?('VERSION')
55
- version = File.read('VERSION')
56
- else
57
- version = ""
58
- end
59
-
60
- rdoc.rdoc_dir = 'rdoc'
61
- rdoc.title = "Ruby's PhpSerialization #{version}"
62
- rdoc.rdoc_files.include('README*')
63
- rdoc.rdoc_files.include('lib/**/*.rb')
64
- end
3
+ task default: [:compile]
65
4
 
5
+ desc "Compile all the necessary files, such as .y grammar files"
6
+ task compile: ['lib/php_serialization/unserializer.rb']
66
7
 
67
8
  file 'lib/php_serialization/unserializer.rb' => 'lib/php_serialization/unserializer.y' do |t|
68
- `racc -o #{t.name} #{t.prerequisites[0]}`
9
+ `./bin/racc -o #{t.name} #{t.prerequisites[0]}`
69
10
  end
70
-
71
- desc "Compile all the necessary files, such as .y grammar files"
72
- task :compile => ['lib/php_serialization/unserializer.rb']
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'racc' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('racc', 'racc')
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'racc2y' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('racc', 'racc2y')
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rake' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('rake', 'rake')
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rspec' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('rspec-core', 'rspec')
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'y2racc' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('racc', 'y2racc')
@@ -13,7 +13,7 @@ module PhpSerialization
13
13
  when Float then
14
14
  "d:#{object};"
15
15
  when String, Symbol then
16
- "s:#{object.to_s.length}:\"#{object}\";"
16
+ "s:#{object.to_s.bytesize}:\"#{object}\";"
17
17
  when Array then
18
18
  idx = -1
19
19
  items = object.map { |item| "#{run(idx += 1)}#{run(item)}" }.join
@@ -23,14 +23,14 @@ module PhpSerialization
23
23
  "a:#{object.length}:{#{items}}"
24
24
  else
25
25
  klass_name = object.class.name
26
-
26
+
27
27
  if klass_name =~ /^Struct::/ && php_klass = object.instance_variable_get("@_php_class")
28
28
  klass_name = php_klass
29
29
  end
30
-
31
- attributes = object.instance_variables.map { |var_name| "#{run(var_name.gsub(/^@/, ''))}#{run(object.instance_variable_get(var_name))}" }
32
- "O:#{klass_name.length}:\"#{klass_name}\":#{object.instance_variables.length}:{#{attributes}}"
30
+
31
+ attributes = object.instance_variables.sort.map { |var_name| "#{run(var_name.to_s.gsub(/^@/, ''))}#{run(object.instance_variable_get(var_name))}" }
32
+ "O:#{klass_name.length}:\"#{klass_name}\":#{object.instance_variables.length}:{#{attributes.join}}"
33
33
  end
34
- end
34
+ end
35
35
  end
36
- end
36
+ end
@@ -7,15 +7,15 @@ module PhpSerialization
7
7
  def each
8
8
  while !@string.empty?
9
9
  token = case @string
10
- when /\A[0-9]+(\.[0-9]+)?/m then yield([:NUMBER, $&])
11
- when /\A"([^"]*)"/m then yield([:STRING, $1])
10
+ when /\A-?[0-9]+(\.[0-9]+)?/m then yield([:NUMBER, $&])
11
+ when /\A"((?:(?:"(?![;:]))*|(?:[^"]))*)"(?=[:;])/m then yield([:STRING, $1])
12
12
  when /\A[^\s]/m then yield([$&, $&])
13
13
  end
14
-
14
+
15
15
  @string = $'
16
16
  end
17
-
17
+
18
18
  yield([false, '$'])
19
19
  end
20
20
  end
21
- end
21
+ end
@@ -0,0 +1,503 @@
1
+
2
+
3
+ -------- Grammar --------
4
+
5
+ rule 1 data: null ";"
6
+ rule 2 data: bool ";"
7
+ rule 3 data: integer ";"
8
+ rule 4 data: double ";"
9
+ rule 5 data: string ";"
10
+ rule 6 data: assoc_array
11
+ rule 7 data: object
12
+ rule 8 null: "N"
13
+ rule 9 bool: "b" ":" NUMBER
14
+ rule 10 integer: "i" ":" NUMBER
15
+ rule 11 double: "d" ":" NUMBER
16
+ rule 12 string: "s" ":" NUMBER ":" STRING
17
+ rule 13 object: "O" ":" NUMBER ":" STRING ":" NUMBER ":" "{" attribute_list "}"
18
+ rule 14 attribute_list: attribute_list attribute
19
+ rule 15 attribute_list:
20
+ rule 16 attribute: data data
21
+ rule 17 assoc_array: "a" ":" NUMBER ":" "{" attribute_list "}"
22
+
23
+ ------- Symbols -------
24
+
25
+ **Nonterminals, with rules where they appear
26
+
27
+ $start (15)
28
+ on right:
29
+ on left :
30
+ data (16)
31
+ on right: 16
32
+ on left : 1 2 3 4 5 6 7
33
+ null (17)
34
+ on right: 1
35
+ on left : 8
36
+ bool (18)
37
+ on right: 2
38
+ on left : 9
39
+ integer (19)
40
+ on right: 3
41
+ on left : 10
42
+ double (20)
43
+ on right: 4
44
+ on left : 11
45
+ string (21)
46
+ on right: 5
47
+ on left : 12
48
+ assoc_array (22)
49
+ on right: 6
50
+ on left : 17
51
+ object (23)
52
+ on right: 7
53
+ on left : 13
54
+ attribute_list (24)
55
+ on right: 13 14 17
56
+ on left : 14 15
57
+ attribute (25)
58
+ on right: 14
59
+ on left : 16
60
+
61
+ **Terminals, with rules where they appear
62
+
63
+ $end (0)
64
+ error (1)
65
+ ";" (2) 1 2 3 4 5
66
+ "N" (3) 8
67
+ "b" (4) 9
68
+ ":" (5) 9 10 11 12 13 17
69
+ NUMBER (6) 9 10 11 12 13 17
70
+ "i" (7) 10
71
+ "d" (8) 11
72
+ "s" (9) 12
73
+ STRING (10) 12 13
74
+ "O" (11) 13
75
+ "{" (12) 13 17
76
+ "}" (13) 13 17
77
+ "a" (14) 17
78
+
79
+ --------- State ---------
80
+
81
+ state 0
82
+
83
+
84
+ "N" shift, and go to state 9
85
+ "b" shift, and go to state 10
86
+ "i" shift, and go to state 11
87
+ "d" shift, and go to state 12
88
+ "s" shift, and go to state 13
89
+ "O" shift, and go to state 14
90
+ "a" shift, and go to state 15
91
+
92
+ data go to state 1
93
+ null go to state 2
94
+ bool go to state 3
95
+ integer go to state 4
96
+ double go to state 5
97
+ string go to state 6
98
+ assoc_array go to state 7
99
+ object go to state 8
100
+
101
+ state 1
102
+
103
+
104
+ $end shift, and go to state 16
105
+
106
+
107
+ state 2
108
+
109
+ 1) data : null _ ";"
110
+
111
+ ";" shift, and go to state 17
112
+
113
+
114
+ state 3
115
+
116
+ 2) data : bool _ ";"
117
+
118
+ ";" shift, and go to state 18
119
+
120
+
121
+ state 4
122
+
123
+ 3) data : integer _ ";"
124
+
125
+ ";" shift, and go to state 19
126
+
127
+
128
+ state 5
129
+
130
+ 4) data : double _ ";"
131
+
132
+ ";" shift, and go to state 20
133
+
134
+
135
+ state 6
136
+
137
+ 5) data : string _ ";"
138
+
139
+ ";" shift, and go to state 21
140
+
141
+
142
+ state 7
143
+
144
+ 6) data : assoc_array _
145
+
146
+ $default reduce using rule 6 (data)
147
+
148
+
149
+ state 8
150
+
151
+ 7) data : object _
152
+
153
+ $default reduce using rule 7 (data)
154
+
155
+
156
+ state 9
157
+
158
+ 8) null : "N" _
159
+
160
+ $default reduce using rule 8 (null)
161
+
162
+
163
+ state 10
164
+
165
+ 9) bool : "b" _ ":" NUMBER
166
+
167
+ ":" shift, and go to state 22
168
+
169
+
170
+ state 11
171
+
172
+ 10) integer : "i" _ ":" NUMBER
173
+
174
+ ":" shift, and go to state 23
175
+
176
+
177
+ state 12
178
+
179
+ 11) double : "d" _ ":" NUMBER
180
+
181
+ ":" shift, and go to state 24
182
+
183
+
184
+ state 13
185
+
186
+ 12) string : "s" _ ":" NUMBER ":" STRING
187
+
188
+ ":" shift, and go to state 25
189
+
190
+
191
+ state 14
192
+
193
+ 13) object : "O" _ ":" NUMBER ":" STRING ":" NUMBER ":" "{" attribute_list "}"
194
+
195
+ ":" shift, and go to state 26
196
+
197
+
198
+ state 15
199
+
200
+ 17) assoc_array : "a" _ ":" NUMBER ":" "{" attribute_list "}"
201
+
202
+ ":" shift, and go to state 27
203
+
204
+
205
+ state 16
206
+
207
+
208
+ $end shift, and go to state 28
209
+
210
+
211
+ state 17
212
+
213
+ 1) data : null ";" _
214
+
215
+ $default reduce using rule 1 (data)
216
+
217
+
218
+ state 18
219
+
220
+ 2) data : bool ";" _
221
+
222
+ $default reduce using rule 2 (data)
223
+
224
+
225
+ state 19
226
+
227
+ 3) data : integer ";" _
228
+
229
+ $default reduce using rule 3 (data)
230
+
231
+
232
+ state 20
233
+
234
+ 4) data : double ";" _
235
+
236
+ $default reduce using rule 4 (data)
237
+
238
+
239
+ state 21
240
+
241
+ 5) data : string ";" _
242
+
243
+ $default reduce using rule 5 (data)
244
+
245
+
246
+ state 22
247
+
248
+ 9) bool : "b" ":" _ NUMBER
249
+
250
+ NUMBER shift, and go to state 29
251
+
252
+
253
+ state 23
254
+
255
+ 10) integer : "i" ":" _ NUMBER
256
+
257
+ NUMBER shift, and go to state 30
258
+
259
+
260
+ state 24
261
+
262
+ 11) double : "d" ":" _ NUMBER
263
+
264
+ NUMBER shift, and go to state 31
265
+
266
+
267
+ state 25
268
+
269
+ 12) string : "s" ":" _ NUMBER ":" STRING
270
+
271
+ NUMBER shift, and go to state 32
272
+
273
+
274
+ state 26
275
+
276
+ 13) object : "O" ":" _ NUMBER ":" STRING ":" NUMBER ":" "{" attribute_list "}"
277
+
278
+ NUMBER shift, and go to state 33
279
+
280
+
281
+ state 27
282
+
283
+ 17) assoc_array : "a" ":" _ NUMBER ":" "{" attribute_list "}"
284
+
285
+ NUMBER shift, and go to state 34
286
+
287
+
288
+ state 28
289
+
290
+
291
+ $default accept
292
+
293
+
294
+ state 29
295
+
296
+ 9) bool : "b" ":" NUMBER _
297
+
298
+ $default reduce using rule 9 (bool)
299
+
300
+
301
+ state 30
302
+
303
+ 10) integer : "i" ":" NUMBER _
304
+
305
+ $default reduce using rule 10 (integer)
306
+
307
+
308
+ state 31
309
+
310
+ 11) double : "d" ":" NUMBER _
311
+
312
+ $default reduce using rule 11 (double)
313
+
314
+
315
+ state 32
316
+
317
+ 12) string : "s" ":" NUMBER _ ":" STRING
318
+
319
+ ":" shift, and go to state 35
320
+
321
+
322
+ state 33
323
+
324
+ 13) object : "O" ":" NUMBER _ ":" STRING ":" NUMBER ":" "{" attribute_list "}"
325
+
326
+ ":" shift, and go to state 36
327
+
328
+
329
+ state 34
330
+
331
+ 17) assoc_array : "a" ":" NUMBER _ ":" "{" attribute_list "}"
332
+
333
+ ":" shift, and go to state 37
334
+
335
+
336
+ state 35
337
+
338
+ 12) string : "s" ":" NUMBER ":" _ STRING
339
+
340
+ STRING shift, and go to state 38
341
+
342
+
343
+ state 36
344
+
345
+ 13) object : "O" ":" NUMBER ":" _ STRING ":" NUMBER ":" "{" attribute_list "}"
346
+
347
+ STRING shift, and go to state 39
348
+
349
+
350
+ state 37
351
+
352
+ 17) assoc_array : "a" ":" NUMBER ":" _ "{" attribute_list "}"
353
+
354
+ "{" shift, and go to state 40
355
+
356
+
357
+ state 38
358
+
359
+ 12) string : "s" ":" NUMBER ":" STRING _
360
+
361
+ $default reduce using rule 12 (string)
362
+
363
+
364
+ state 39
365
+
366
+ 13) object : "O" ":" NUMBER ":" STRING _ ":" NUMBER ":" "{" attribute_list "}"
367
+
368
+ ":" shift, and go to state 41
369
+
370
+
371
+ state 40
372
+
373
+ 17) assoc_array : "a" ":" NUMBER ":" "{" _ attribute_list "}"
374
+
375
+ $default reduce using rule 15 (attribute_list)
376
+
377
+ attribute_list go to state 42
378
+
379
+ state 41
380
+
381
+ 13) object : "O" ":" NUMBER ":" STRING ":" _ NUMBER ":" "{" attribute_list "}"
382
+
383
+ NUMBER shift, and go to state 43
384
+
385
+
386
+ state 42
387
+
388
+ 14) attribute_list : attribute_list _ attribute
389
+ 17) assoc_array : "a" ":" NUMBER ":" "{" attribute_list _ "}"
390
+
391
+ "N" shift, and go to state 9
392
+ "b" shift, and go to state 10
393
+ "i" shift, and go to state 11
394
+ "d" shift, and go to state 12
395
+ "s" shift, and go to state 13
396
+ "O" shift, and go to state 14
397
+ "}" shift, and go to state 46
398
+ "a" shift, and go to state 15
399
+
400
+ null go to state 2
401
+ bool go to state 3
402
+ integer go to state 4
403
+ double go to state 5
404
+ string go to state 6
405
+ assoc_array go to state 7
406
+ object go to state 8
407
+ attribute go to state 44
408
+ data go to state 45
409
+
410
+ state 43
411
+
412
+ 13) object : "O" ":" NUMBER ":" STRING ":" NUMBER _ ":" "{" attribute_list "}"
413
+
414
+ ":" shift, and go to state 47
415
+
416
+
417
+ state 44
418
+
419
+ 14) attribute_list : attribute_list attribute _
420
+
421
+ $default reduce using rule 14 (attribute_list)
422
+
423
+
424
+ state 45
425
+
426
+ 16) attribute : data _ data
427
+
428
+ "N" shift, and go to state 9
429
+ "b" shift, and go to state 10
430
+ "i" shift, and go to state 11
431
+ "d" shift, and go to state 12
432
+ "s" shift, and go to state 13
433
+ "O" shift, and go to state 14
434
+ "a" shift, and go to state 15
435
+
436
+ null go to state 2
437
+ bool go to state 3
438
+ integer go to state 4
439
+ double go to state 5
440
+ string go to state 6
441
+ assoc_array go to state 7
442
+ object go to state 8
443
+ data go to state 48
444
+
445
+ state 46
446
+
447
+ 17) assoc_array : "a" ":" NUMBER ":" "{" attribute_list "}" _
448
+
449
+ $default reduce using rule 17 (assoc_array)
450
+
451
+
452
+ state 47
453
+
454
+ 13) object : "O" ":" NUMBER ":" STRING ":" NUMBER ":" _ "{" attribute_list "}"
455
+
456
+ "{" shift, and go to state 49
457
+
458
+
459
+ state 48
460
+
461
+ 16) attribute : data data _
462
+
463
+ $default reduce using rule 16 (attribute)
464
+
465
+
466
+ state 49
467
+
468
+ 13) object : "O" ":" NUMBER ":" STRING ":" NUMBER ":" "{" _ attribute_list "}"
469
+
470
+ $default reduce using rule 15 (attribute_list)
471
+
472
+ attribute_list go to state 50
473
+
474
+ state 50
475
+
476
+ 13) object : "O" ":" NUMBER ":" STRING ":" NUMBER ":" "{" attribute_list _ "}"
477
+ 14) attribute_list : attribute_list _ attribute
478
+
479
+ "N" shift, and go to state 9
480
+ "b" shift, and go to state 10
481
+ "i" shift, and go to state 11
482
+ "d" shift, and go to state 12
483
+ "s" shift, and go to state 13
484
+ "O" shift, and go to state 14
485
+ "}" shift, and go to state 51
486
+ "a" shift, and go to state 15
487
+
488
+ null go to state 2
489
+ bool go to state 3
490
+ integer go to state 4
491
+ double go to state 5
492
+ string go to state 6
493
+ assoc_array go to state 7
494
+ object go to state 8
495
+ attribute go to state 44
496
+ data go to state 45
497
+
498
+ state 51
499
+
500
+ 13) object : "O" ":" NUMBER ":" STRING ":" NUMBER ":" "{" attribute_list "}" _
501
+
502
+ $default reduce using rule 13 (object)
503
+