rison 1.2.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/{COPYING.txt → License.txt} +2 -2
- data/README.md +40 -0
- data/Rakefile.rb +3 -79
- data/lib/rison/dump.rb +20 -29
- data/lib/rison/parslet_parser.rb +55 -0
- data/lib/rison/parslet_transform.rb +44 -0
- data/lib/rison.rb +8 -41
- data/rison.gemspec +13 -0
- data/spec/rison_dump_spec.rb +78 -0
- data/spec/rison_load_spec.rb +93 -0
- metadata +53 -53
- data/README.html +0 -57
- data/lib/rison/evaluator.rb +0 -172
- data/lib/rison/grammar.rb +0 -114
- data/lib/rison/lexer.rb +0 -33
- data/lib/rison/parser.rb +0 -360
- data/test/test_dump.rb +0 -70
- data/test/test_parser.rb +0 -106
data/README.html
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
<html>
|
2
|
-
<head>
|
3
|
-
<title>rison.rb</title>
|
4
|
-
<style type="text/css" media="screen">
|
5
|
-
html {
|
6
|
-
height: 100%; margin-bottom: 1px;
|
7
|
-
}
|
8
|
-
body {
|
9
|
-
margin: 0; padding: 30px;
|
10
|
-
}
|
11
|
-
h1, h2 {
|
12
|
-
font-family: garamond;
|
13
|
-
}
|
14
|
-
code {
|
15
|
-
font-family: "Panic Sans", "Bitstream Vera Sans Mono", Consolas, Monaco, monospace;
|
16
|
-
font-size: 11px;
|
17
|
-
}
|
18
|
-
</style>
|
19
|
-
</head>
|
20
|
-
<body>
|
21
|
-
|
22
|
-
|
23
|
-
<h1>rison<span style="color:#F99">.rb</span> <small>1.2.1</small></h1>
|
24
|
-
|
25
|
-
<p>A <a href="http://dhaka.rubyforge.org/">Dhaka</a>-based <a href="http://mjtemplate.org/examples/rison.html">Rison</a> parser.</p>
|
26
|
-
|
27
|
-
<h2>Installing</h2>
|
28
|
-
|
29
|
-
<p><tt>sudo gem install rison</tt> (or <a href="http://rubyforge.org/frs/?group_id=4896">download from RubyForge</a>)</p>
|
30
|
-
|
31
|
-
<h2>Examples</h2>
|
32
|
-
|
33
|
-
<pre><code> require 'rison'
|
34
|
-
|
35
|
-
|
36
|
-
Rison.load('!t') # => true
|
37
|
-
|
38
|
-
Rison.load('!(1,2,3)') # => [1, 2, 3]
|
39
|
-
|
40
|
-
Rison.load('(a:0)') # => {:a => 0}
|
41
|
-
|
42
|
-
Rison.load('abc def') # => Rison::ParseError: invalid Rison string: "abc def"
|
43
|
-
|
44
|
-
|
45
|
-
Rison.dump(true) # => '!t'
|
46
|
-
|
47
|
-
Rison.dump([1, 2, 3]) # => '!(1,2,3)'
|
48
|
-
|
49
|
-
Rison.dump({:a => 0}) # => '(a:0)'
|
50
|
-
|
51
|
-
Rison.dump(Array) # => ArgumentError: cannot serialize: Array
|
52
|
-
|
53
|
-
</code></pre>
|
54
|
-
|
55
|
-
|
56
|
-
</body>
|
57
|
-
</html>
|
data/lib/rison/evaluator.rb
DELETED
@@ -1,172 +0,0 @@
|
|
1
|
-
require 'rational'
|
2
|
-
require 'dhaka'
|
3
|
-
require 'rison/grammar'
|
4
|
-
|
5
|
-
module Rison
|
6
|
-
class Evaluator < Dhaka::Evaluator
|
7
|
-
|
8
|
-
self.grammar = Grammar
|
9
|
-
|
10
|
-
define_evaluation_rules do
|
11
|
-
|
12
|
-
for_empty_object do
|
13
|
-
{}
|
14
|
-
end
|
15
|
-
|
16
|
-
for_non_empty_object do
|
17
|
-
evaluate(child_nodes[1])
|
18
|
-
end
|
19
|
-
|
20
|
-
# for_member_pair
|
21
|
-
|
22
|
-
for_member_pairs do
|
23
|
-
evaluate(child_nodes[2]).merge(evaluate(child_nodes[0]))
|
24
|
-
end
|
25
|
-
|
26
|
-
for_pair_key_value do
|
27
|
-
{ evaluate(child_nodes[0]) => evaluate(child_nodes[2]) }
|
28
|
-
end
|
29
|
-
|
30
|
-
for_empty_array do
|
31
|
-
[]
|
32
|
-
end
|
33
|
-
|
34
|
-
for_non_empty_array do
|
35
|
-
evaluate(child_nodes[2])
|
36
|
-
end
|
37
|
-
|
38
|
-
for_element_value do
|
39
|
-
[ evaluate(child_nodes[0]) ]
|
40
|
-
end
|
41
|
-
|
42
|
-
for_element_values do
|
43
|
-
[ evaluate(child_nodes[0]) ] + evaluate(child_nodes[2])
|
44
|
-
end
|
45
|
-
|
46
|
-
# for_key_id do
|
47
|
-
|
48
|
-
# for_key_string do
|
49
|
-
|
50
|
-
# for_value_id do
|
51
|
-
|
52
|
-
# for_value_string
|
53
|
-
|
54
|
-
# for_value_number do
|
55
|
-
|
56
|
-
# for_value_object do
|
57
|
-
|
58
|
-
# for_value_array do
|
59
|
-
|
60
|
-
for_value_true do
|
61
|
-
true
|
62
|
-
end
|
63
|
-
|
64
|
-
for_value_false do
|
65
|
-
false
|
66
|
-
end
|
67
|
-
|
68
|
-
for_value_null do
|
69
|
-
nil
|
70
|
-
end
|
71
|
-
|
72
|
-
for_id_idstart do
|
73
|
-
evaluate(child_nodes[0]).to_sym
|
74
|
-
end
|
75
|
-
|
76
|
-
for_id_idstart_idchars do
|
77
|
-
(evaluate(child_nodes[0]) + evaluate(child_nodes[1])).to_sym
|
78
|
-
end
|
79
|
-
|
80
|
-
# for_idchars_idchar
|
81
|
-
|
82
|
-
for_idchars_idchars do
|
83
|
-
evaluate(child_nodes[0]) + evaluate(child_nodes[1])
|
84
|
-
end
|
85
|
-
|
86
|
-
for_idchars_int do
|
87
|
-
evaluate(child_nodes[0]).to_s
|
88
|
-
end
|
89
|
-
|
90
|
-
for_idchar_char do
|
91
|
-
child_nodes[0].token.value
|
92
|
-
end
|
93
|
-
|
94
|
-
# for_idchar_idstart
|
95
|
-
|
96
|
-
for_idstart_char do
|
97
|
-
child_nodes[0].token.value
|
98
|
-
end
|
99
|
-
|
100
|
-
for_empty_string do
|
101
|
-
''
|
102
|
-
end
|
103
|
-
|
104
|
-
for_non_empty_string do
|
105
|
-
evaluate(child_nodes[1]).inject { |s, c| s + c }
|
106
|
-
end
|
107
|
-
|
108
|
-
for_strchars_char do
|
109
|
-
[ evaluate(child_nodes[0]) ]
|
110
|
-
end
|
111
|
-
|
112
|
-
for_strchars_chars do
|
113
|
-
[ evaluate(child_nodes[0]) ] + evaluate(child_nodes[1])
|
114
|
-
end
|
115
|
-
|
116
|
-
for_strchar_char do
|
117
|
-
child_nodes[0].token.value
|
118
|
-
end
|
119
|
-
|
120
|
-
for_strchar_quoted_exclamation do
|
121
|
-
'!'
|
122
|
-
end
|
123
|
-
|
124
|
-
for_strchar_quoted_single_quote do
|
125
|
-
"'"
|
126
|
-
end
|
127
|
-
|
128
|
-
# for_strchar_idchar
|
129
|
-
|
130
|
-
for_strchar_num do
|
131
|
-
evaluate(child_nodes[0]).to_s
|
132
|
-
end
|
133
|
-
|
134
|
-
# for_number_int
|
135
|
-
|
136
|
-
for_number_int_frac do
|
137
|
-
evaluate(child_nodes[0]) + evaluate(child_nodes[1])
|
138
|
-
end
|
139
|
-
|
140
|
-
for_number_int_exp do
|
141
|
-
evaluate(child_nodes[0]) * evaluate(child_nodes[1])
|
142
|
-
end
|
143
|
-
|
144
|
-
for_number_int_frac_exp do
|
145
|
-
(evaluate(child_nodes[0]) + evaluate(child_nodes[1])) * evaluate(child_nodes[2])
|
146
|
-
end
|
147
|
-
|
148
|
-
for_integer_literal do
|
149
|
-
token = child_nodes[0].token.value
|
150
|
-
token =~ /^(-?)(\d+?)$/
|
151
|
-
|
152
|
-
$1.empty?? $2.to_i : - $2.to_i
|
153
|
-
end
|
154
|
-
|
155
|
-
for_frac_literal do
|
156
|
-
token = child_nodes[0].token.value
|
157
|
-
token =~ /^\.(\d+?)$/
|
158
|
-
|
159
|
-
Rational($1.to_i, 10 ** $1.length)
|
160
|
-
end
|
161
|
-
|
162
|
-
for_exponent_literal do
|
163
|
-
token = child_nodes[0].token.value
|
164
|
-
token =~ /^e(-?)(\d+?)$/
|
165
|
-
|
166
|
-
10 ** ($1.empty?? $2.to_i : - $2.to_i)
|
167
|
-
end
|
168
|
-
|
169
|
-
end
|
170
|
-
|
171
|
-
end
|
172
|
-
end
|
data/lib/rison/grammar.rb
DELETED
@@ -1,114 +0,0 @@
|
|
1
|
-
require 'dhaka'
|
2
|
-
|
3
|
-
module Rison
|
4
|
-
class Grammar < Dhaka::Grammar
|
5
|
-
|
6
|
-
for_symbol(Dhaka::START_SYMBOL_NAME) do
|
7
|
-
start %w| value |
|
8
|
-
end
|
9
|
-
|
10
|
-
for_symbol 'object' do
|
11
|
-
empty_object %w| ( ) |
|
12
|
-
non_empty_object %w| ( members ) |
|
13
|
-
end
|
14
|
-
|
15
|
-
for_symbol 'members' do
|
16
|
-
member_pair %w| pair |
|
17
|
-
member_pairs %w| pair , members |
|
18
|
-
end
|
19
|
-
|
20
|
-
for_symbol 'pair' do
|
21
|
-
pair_key_value %w| key : value |
|
22
|
-
end
|
23
|
-
|
24
|
-
for_symbol 'array' do
|
25
|
-
empty_array %w| ! ( ) |
|
26
|
-
non_empty_array %w| ! ( elements ) |
|
27
|
-
end
|
28
|
-
|
29
|
-
for_symbol 'elements' do
|
30
|
-
element_value %w| value |
|
31
|
-
element_values %w| value , elements |
|
32
|
-
end
|
33
|
-
|
34
|
-
for_symbol 'key' do
|
35
|
-
key_id %w| id |
|
36
|
-
key_string %w| string |
|
37
|
-
end
|
38
|
-
|
39
|
-
for_symbol 'value' do
|
40
|
-
value_id %w| id |
|
41
|
-
value_string %w| string |
|
42
|
-
value_number %w| number |
|
43
|
-
value_object %w| object |
|
44
|
-
value_array %w| array |
|
45
|
-
value_true %w| !t |
|
46
|
-
value_false %w| !f |
|
47
|
-
value_null %w| !n |
|
48
|
-
end
|
49
|
-
|
50
|
-
for_symbol 'id' do
|
51
|
-
id_idstart %w| idstart |
|
52
|
-
id_idstart_idchars %w| idstart idchars |
|
53
|
-
end
|
54
|
-
|
55
|
-
for_symbol 'idchars' do
|
56
|
-
idchars_idchar %w| idchar |
|
57
|
-
idchars_idchars %w| idchar idchars |
|
58
|
-
idchars_int %w| int |
|
59
|
-
end
|
60
|
-
|
61
|
-
for_symbol 'idchar' do
|
62
|
-
# any Unicode character not in '!:(),*@$
|
63
|
-
idchar_char %w| idchar_safe_token |
|
64
|
-
idchar_idstart %w| idstart |
|
65
|
-
end
|
66
|
-
|
67
|
-
for_symbol 'idstart' do
|
68
|
-
# any Unicode character not in -, digit, or idchar
|
69
|
-
idstart_char %w| idstart_safe_token |
|
70
|
-
end
|
71
|
-
|
72
|
-
for_symbol 'string' do
|
73
|
-
empty_string %w| ' ' |
|
74
|
-
non_empty_string %w| ' strchars ' |
|
75
|
-
end
|
76
|
-
|
77
|
-
for_symbol 'strchars' do
|
78
|
-
strchars_char %w| strchar |
|
79
|
-
strchars_chars %w| strchar strchars |
|
80
|
-
end
|
81
|
-
|
82
|
-
for_symbol 'strchar' do
|
83
|
-
# any Unicode character not in ' or !
|
84
|
-
# !!
|
85
|
-
# !'
|
86
|
-
strchar_char %w| char_token |
|
87
|
-
strchar_quoted_exclamation %w| !! |
|
88
|
-
strchar_quoted_single_quote %w| !' |
|
89
|
-
strchar_idchar %w| idchar |
|
90
|
-
strchar_num %w| number |
|
91
|
-
end
|
92
|
-
|
93
|
-
for_symbol 'number' do
|
94
|
-
number_int %w| int |
|
95
|
-
number_int_frac %w| int frac |
|
96
|
-
number_int_exp %w| int exp |
|
97
|
-
number_int_frac_exp %w| int frac exp |
|
98
|
-
end
|
99
|
-
|
100
|
-
for_symbol 'int' do
|
101
|
-
integer_literal %w| integer_token |
|
102
|
-
end
|
103
|
-
|
104
|
-
for_symbol 'frac' do
|
105
|
-
frac_literal %w| frac_token |
|
106
|
-
end
|
107
|
-
|
108
|
-
for_symbol 'exp' do
|
109
|
-
exponent_literal %w| exponent_token |
|
110
|
-
end
|
111
|
-
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
data/lib/rison/lexer.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'dhaka'
|
2
|
-
|
3
|
-
module Rison
|
4
|
-
class LexerSpec < Dhaka::LexerSpecification
|
5
|
-
|
6
|
-
[ ['!!', nil],
|
7
|
-
["!'", nil],
|
8
|
-
['!t', nil],
|
9
|
-
['!f', nil],
|
10
|
-
['!n', nil],
|
11
|
-
|
12
|
-
['\(', '('],
|
13
|
-
['\)', ')'],
|
14
|
-
['!', '!'],
|
15
|
-
|
16
|
-
[',', nil],
|
17
|
-
[':', nil],
|
18
|
-
["'", nil],
|
19
|
-
|
20
|
-
['e-?\d+', 'exponent_token'],
|
21
|
-
['\.\d+', 'frac_token'],
|
22
|
-
['-?\d+', 'integer_token'],
|
23
|
-
|
24
|
-
["[^\\-0-9'!:(),*@$ ]", 'idstart_safe_token'],
|
25
|
-
["[^'!:(),*@$ ]", 'idchar_safe_token'],
|
26
|
-
["[^'!]", 'char_token']
|
27
|
-
|
28
|
-
].each do |(pattern, token)|
|
29
|
-
for_pattern(pattern) { create_token(token || pattern) }
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
end
|