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.
@@ -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
+
@@ -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
+