citrus 1.5.1 → 1.5.2
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/citrus.gemspec +5 -1
- data/lib/citrus.rb +3 -1
- data/lib/citrus/file.rb +4 -20
- data/test/grammar_test.rb +6 -0
- metadata +2 -7
data/citrus.gemspec
CHANGED
data/lib/citrus.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
#
|
5
5
|
# http://mjijackson.com/citrus
|
6
6
|
module Citrus
|
7
|
-
VERSION = [1, 5,
|
7
|
+
VERSION = [1, 5, 2]
|
8
8
|
|
9
9
|
Infinity = 1.0 / 0
|
10
10
|
|
@@ -982,5 +982,7 @@ class Object
|
|
982
982
|
def grammar(name, &block)
|
983
983
|
obj = respond_to?(:const_set) ? self : Object
|
984
984
|
obj.const_set(name, Citrus::Grammar.new(&block))
|
985
|
+
rescue NameError
|
986
|
+
raise ArgumentError, 'Invalid grammar name: %s' % name
|
985
987
|
end
|
986
988
|
end
|
data/lib/citrus/file.rb
CHANGED
@@ -10,45 +10,29 @@ module Citrus
|
|
10
10
|
|
11
11
|
rule :file do
|
12
12
|
all(:space, zero_or_more(any(:require, :grammar))) {
|
13
|
-
def requires
|
14
|
-
find(:require)
|
15
|
-
end
|
16
|
-
|
17
|
-
def grammars
|
18
|
-
find(:grammar)
|
19
|
-
end
|
20
|
-
|
21
13
|
def value
|
22
|
-
|
23
|
-
|
14
|
+
find(:require).each {|r| require r.value }
|
15
|
+
find(:grammar).map {|g| g.value }
|
24
16
|
end
|
25
17
|
}
|
26
18
|
end
|
27
19
|
|
28
20
|
rule :grammar do
|
29
21
|
all(:grammar_keyword, :module_name, :grammar_body, :end_keyword) {
|
30
|
-
def includes
|
31
|
-
find(:include)
|
32
|
-
end
|
33
|
-
|
34
22
|
def modules
|
35
|
-
|
23
|
+
find(:include).map {|inc| eval(inc.value, TOPLEVEL_BINDING) }
|
36
24
|
end
|
37
25
|
|
38
26
|
def root
|
39
27
|
find(:root).last
|
40
28
|
end
|
41
29
|
|
42
|
-
def rules
|
43
|
-
find(:rule)
|
44
|
-
end
|
45
|
-
|
46
30
|
def value
|
47
31
|
code = '%s = Citrus::Grammar.new' % module_name.value
|
48
32
|
grammar = eval(code, TOPLEVEL_BINDING)
|
49
33
|
modules.each {|mod| grammar.include(mod) }
|
50
34
|
grammar.root(root.value) if root
|
51
|
-
|
35
|
+
find(:rule).each {|r| grammar.rule(r.rule_name.value, r.value) }
|
52
36
|
grammar
|
53
37
|
end
|
54
38
|
}
|
data/test/grammar_test.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: citrus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 1
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 1
|
8
7
|
- 5
|
9
|
-
-
|
10
|
-
version: 1.5.
|
8
|
+
- 2
|
9
|
+
version: 1.5.2
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Michael Jackson
|
@@ -26,7 +25,6 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
28
|
segments:
|
31
29
|
- 0
|
32
30
|
version: "0"
|
@@ -40,7 +38,6 @@ dependencies:
|
|
40
38
|
requirements:
|
41
39
|
- - ">="
|
42
40
|
- !ruby/object:Gem::Version
|
43
|
-
hash: 3
|
44
41
|
segments:
|
45
42
|
- 0
|
46
43
|
version: "0"
|
@@ -118,7 +115,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
118
115
|
requirements:
|
119
116
|
- - ">="
|
120
117
|
- !ruby/object:Gem::Version
|
121
|
-
hash: 3
|
122
118
|
segments:
|
123
119
|
- 0
|
124
120
|
version: "0"
|
@@ -127,7 +123,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
123
|
requirements:
|
128
124
|
- - ">="
|
129
125
|
- !ruby/object:Gem::Version
|
130
|
-
hash: 3
|
131
126
|
segments:
|
132
127
|
- 0
|
133
128
|
version: "0"
|