minival_refi 0.0.1
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.
- data/lib/minival_refi/minival_grammar.treetop +159 -0
- data/lib/minival_refi.rb +48 -0
- metadata +96 -0
@@ -0,0 +1,159 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
grammar MinivalGrammar
|
4
|
+
|
5
|
+
rule val
|
6
|
+
spaces inner:val_inner spaces {
|
7
|
+
def content
|
8
|
+
return inner.content
|
9
|
+
end
|
10
|
+
def get_inner
|
11
|
+
return inner
|
12
|
+
end
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
rule spaces
|
17
|
+
' '*
|
18
|
+
end
|
19
|
+
|
20
|
+
rule val_inner
|
21
|
+
nil / ary / map / str / regex / sym / float / fixnum
|
22
|
+
end
|
23
|
+
|
24
|
+
rule nil
|
25
|
+
'nil' {
|
26
|
+
def content
|
27
|
+
return nil
|
28
|
+
end
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
rule ary
|
33
|
+
'[' spaces inner:(ary_inner)? ']' {
|
34
|
+
def content
|
35
|
+
return inner.content if inner.elements
|
36
|
+
return []
|
37
|
+
end
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
rule ary_inner
|
42
|
+
val more:(',' val)* {
|
43
|
+
def content
|
44
|
+
more.elements.inject([val.content]){|memo,e| memo << e.val.content}
|
45
|
+
end
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
rule map
|
50
|
+
'{' spaces inner:(map_inner)? '}' {
|
51
|
+
def content
|
52
|
+
return inner.content if inner.elements
|
53
|
+
return {}
|
54
|
+
end
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
rule map_inner
|
59
|
+
map_entry more:(',' map_entry)* {
|
60
|
+
def content
|
61
|
+
more.elements.inject(map_entry.content){|memo,e| memo.merge(e.map_entry.content)}
|
62
|
+
end
|
63
|
+
}
|
64
|
+
end
|
65
|
+
|
66
|
+
rule map_entry
|
67
|
+
|
68
|
+
key:val ( "=>" / ':' ) value:val {
|
69
|
+
def content
|
70
|
+
return {key.content => value.content}
|
71
|
+
end
|
72
|
+
}
|
73
|
+
end
|
74
|
+
|
75
|
+
rule str
|
76
|
+
'"' inner:(str_inner) '"' {
|
77
|
+
def content
|
78
|
+
return inner.content
|
79
|
+
end
|
80
|
+
}
|
81
|
+
end
|
82
|
+
|
83
|
+
rule str_inner
|
84
|
+
( ( ( "\\\\" )* "\\\"") / !'"' . )* {
|
85
|
+
def content
|
86
|
+
return text_value.unescape_c_str
|
87
|
+
end
|
88
|
+
}
|
89
|
+
end
|
90
|
+
|
91
|
+
rule regex
|
92
|
+
"/" inner:(regex_inner) "/" regex_options {
|
93
|
+
def content
|
94
|
+
return Regexp.new(inner.content,regex_options.content)
|
95
|
+
end
|
96
|
+
}
|
97
|
+
end
|
98
|
+
|
99
|
+
rule regex_inner
|
100
|
+
( ( ( "\\\\" )* "\\/" ) / !"/" . )* {
|
101
|
+
def content
|
102
|
+
return text_value
|
103
|
+
end
|
104
|
+
}
|
105
|
+
end
|
106
|
+
|
107
|
+
rule regex_options
|
108
|
+
[ixm]* {
|
109
|
+
def content
|
110
|
+
options = 0
|
111
|
+
if text_value.index 'i'
|
112
|
+
options += Regexp::IGNORECASE
|
113
|
+
end
|
114
|
+
if text_value.index 'x'
|
115
|
+
options += Regexp::EXTENDED
|
116
|
+
end
|
117
|
+
if text_value.index 'm'
|
118
|
+
options += Regexp::MULTILINE
|
119
|
+
end
|
120
|
+
return options
|
121
|
+
end
|
122
|
+
}
|
123
|
+
end
|
124
|
+
|
125
|
+
rule sym
|
126
|
+
':'? spaces inner:(sym_inner) {
|
127
|
+
def content
|
128
|
+
return inner.content
|
129
|
+
end
|
130
|
+
}
|
131
|
+
end
|
132
|
+
|
133
|
+
rule sym_inner
|
134
|
+
[a-zA-Z_] [a-zA-Z0-9_]* {
|
135
|
+
def content
|
136
|
+
return text_value.to_sym
|
137
|
+
end
|
138
|
+
}
|
139
|
+
end
|
140
|
+
|
141
|
+
rule fixnum
|
142
|
+
'-'? [0-9]+ {
|
143
|
+
def content
|
144
|
+
return text_value.to_i
|
145
|
+
end
|
146
|
+
}
|
147
|
+
end
|
148
|
+
|
149
|
+
rule float
|
150
|
+
'-'? [0-9]* '.' [0-9]+ {
|
151
|
+
def content
|
152
|
+
return text_value.to_f
|
153
|
+
end
|
154
|
+
}
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
158
|
+
|
159
|
+
|
data/lib/minival_refi.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'polyglot'
|
4
|
+
require 'treetop'
|
5
|
+
|
6
|
+
#mg_path = File.join(File.dirname(__FILE__),'/minival_grammar.treetop')
|
7
|
+
#Treetop.load(mg_path)
|
8
|
+
|
9
|
+
Treetop.load('minival_refi/minival_grammar.treetop'
|
10
|
+
|
11
|
+
#module Minival
|
12
|
+
|
13
|
+
# extending the MinivalGrammarParser a little
|
14
|
+
class MinivalGrammarParser
|
15
|
+
def get_errors
|
16
|
+
[failure_reason,failure_line,failure_column]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class Minival
|
21
|
+
#@@parser = MinivalGrammarParser.new
|
22
|
+
def initialize(minival_str)
|
23
|
+
@parser = MinivalGrammarParser.new
|
24
|
+
@parse_result = @parser.parse(minival_str)
|
25
|
+
@val = nil
|
26
|
+
end
|
27
|
+
def valid
|
28
|
+
return true if @parse_result
|
29
|
+
return false
|
30
|
+
end
|
31
|
+
def assert_valid
|
32
|
+
unless valid
|
33
|
+
report_errors
|
34
|
+
# TODO
|
35
|
+
#dperr 777,'Minival assert_valid failed'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
def report_errors
|
39
|
+
pp @parser.get_errors
|
40
|
+
end
|
41
|
+
def compute_val
|
42
|
+
@val = @parse_result.content
|
43
|
+
end
|
44
|
+
def get_value
|
45
|
+
return @val || compute_val
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
metadata
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: minival_refi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Robert Fey
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-07-21 00:00:00 +02:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: polyglot
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - "="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
- 3
|
31
|
+
- 1
|
32
|
+
version: 0.3.1
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: treetop
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - "="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
segments:
|
44
|
+
- 1
|
45
|
+
- 4
|
46
|
+
- 9
|
47
|
+
version: 1.4.9
|
48
|
+
type: :runtime
|
49
|
+
version_requirements: *id002
|
50
|
+
description: |-
|
51
|
+
supports: nil, string, integer, array, hash
|
52
|
+
the syntax is similar to to ruby
|
53
|
+
email: feyrob@gmail.com
|
54
|
+
executables: []
|
55
|
+
|
56
|
+
extensions: []
|
57
|
+
|
58
|
+
extra_rdoc_files: []
|
59
|
+
|
60
|
+
files:
|
61
|
+
- lib/minival_refi.rb
|
62
|
+
- lib/minival_refi/minival_grammar.treetop
|
63
|
+
has_rdoc: true
|
64
|
+
homepage: http://rubygems.org/gems/minival_refi
|
65
|
+
licenses: []
|
66
|
+
|
67
|
+
post_install_message:
|
68
|
+
rdoc_options: []
|
69
|
+
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
segments:
|
78
|
+
- 0
|
79
|
+
version: "0"
|
80
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
segments:
|
86
|
+
- 0
|
87
|
+
version: "0"
|
88
|
+
requirements: []
|
89
|
+
|
90
|
+
rubyforge_project: nowarning
|
91
|
+
rubygems_version: 1.3.7
|
92
|
+
signing_key:
|
93
|
+
specification_version: 3
|
94
|
+
summary: an eval-free parser for some data types (using Treetop)
|
95
|
+
test_files: []
|
96
|
+
|