php-serialization 0.5.3 → 1.0.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 +7 -0
- data/.gitignore +14 -5
- data/.travis.yml +12 -0
- data/Gemfile +4 -0
- data/{LICENSE → LICENSE.txt} +3 -1
- data/README.md +31 -0
- data/Rakefile +5 -67
- data/bin/racc +16 -0
- data/bin/racc2y +16 -0
- data/bin/rake +16 -0
- data/bin/rspec +16 -0
- data/bin/y2racc +16 -0
- data/lib/php_serialization/serializer.rb +7 -7
- data/lib/php_serialization/tokenizer.rb +5 -5
- data/lib/php_serialization/unserializer.output +503 -0
- data/lib/php_serialization/unserializer.rb +67 -64
- data/lib/php_serialization/unserializer.y +39 -27
- data/lib/php_serialization/version.rb +3 -0
- data/ruby-php-serialization.gemspec +26 -0
- data/spec/functional/session_serialization_spec.rb +23 -0
- data/spec/unit/serializer_spec.rb +49 -0
- data/spec/unit/unserializer_spec.rb +67 -0
- metadata +100 -81
- data/.document +0 -5
- data/README.rdoc +0 -72
- data/VERSION +0 -1
- data/features/ruby_php_serialization.feature +0 -9
- data/features/step_definitions/ruby_php_serialization_steps.rb +0 -0
- data/features/support/env.rb +0 -4
- data/php-serialization.gemspec +0 -72
- data/spec/serialization_spec.rb +0 -49
- data/spec/session_serialization_spec.rb +0 -21
- data/spec/spec.opts +0 -3
- data/spec/spec_helper.rb +0 -9
- data/spec/unserialization_spec.rb +0 -51
checksums.yaml
ADDED
@@ -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
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/{LICENSE → LICENSE.txt}
RENAMED
data/README.md
ADDED
@@ -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
|
2
|
-
require 'rake'
|
1
|
+
require "bundler/gem_tasks"
|
3
2
|
|
4
|
-
|
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
|
-
|
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']
|
data/bin/racc
ADDED
@@ -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')
|
data/bin/racc2y
ADDED
@@ -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')
|
data/bin/rake
ADDED
@@ -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')
|
data/bin/rspec
ADDED
@@ -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')
|
data/bin/y2racc
ADDED
@@ -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.
|
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
|
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
|
+
|