citrus 2.3.4 → 2.3.5
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/CHANGES +12 -0
- data/README +3 -3
- data/Rakefile +1 -1
- data/benchmark/after.dat +192 -0
- data/benchmark/before.dat +192 -0
- data/examples/calc.citrus +13 -41
- data/examples/{calc.rb → calc_test.rb} +0 -0
- data/examples/calc_test.rbc +2268 -0
- data/examples/{ipaddress.rb → ipaddress_test.rb} +0 -0
- data/examples/ipaddress_test.rbc +515 -0
- data/examples/{ipv4address.rb → ipv4address_test.rb} +0 -0
- data/examples/ipv4address_test.rbc +1112 -0
- data/examples/{ipv6address.rb → ipv6address_test.rb} +0 -0
- data/examples/ipv6address_test.rbc +1195 -0
- data/lib/citrus.rb +26 -23
- data/lib/citrus/file.rb +8 -8
- data/lib/citrus/version.rb +1 -1
- data/test/_files/grammar3.citrus +8 -0
- data/test/alias_test.rbc +1491 -0
- data/test/and_predicate_test.rbc +1327 -0
- data/test/but_predicate_test.rbc +1398 -0
- data/test/choice_test.rbc +1278 -0
- data/test/extension_test.rbc +1121 -0
- data/test/file_test.rbc +21465 -0
- data/test/grammar_test.rbc +3490 -0
- data/test/helper.rbc +1046 -0
- data/test/input_test.rbc +1775 -0
- data/test/label_test.rbc +692 -0
- data/test/match_test.rbc +2415 -0
- data/test/memoized_input_test.rbc +1124 -0
- data/test/multibyte_test.rbc +1597 -0
- data/test/not_predicate_test.rbc +1327 -0
- data/test/parse_error_test.rbc +1253 -0
- data/test/repeat_test.rbc +3245 -0
- data/test/sequence_test.rbc +1534 -0
- data/test/string_terminal_test.rbc +1802 -0
- data/test/super_test.rbc +2083 -0
- data/test/terminal_test.rbc +1315 -0
- metadata +59 -25
data/CHANGES
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
= 2.3.5 / 2011-02-07
|
2
|
+
|
3
|
+
* Fixed a bug that prevented Match objects from being printed properly using
|
4
|
+
Kernel#puts (thanks joachimm).
|
5
|
+
|
6
|
+
* Fixed a bug that prevented using rules with names that begin with "end"
|
7
|
+
(thanks Mark Wilden).
|
8
|
+
|
9
|
+
* Citrus#require accepts relative file paths, in addition to absolute ones.
|
10
|
+
|
11
|
+
* Simplified/cleaned up some example files.
|
12
|
+
|
1
13
|
= 2.3.4 / 2011-01-17
|
2
14
|
|
3
15
|
* Added CHANGES file.
|
data/README
CHANGED
@@ -572,13 +572,13 @@ To install the [Vim](http://www.vim.org/) scripts, copy the files in
|
|
572
572
|
|
573
573
|
The project source directory contains several example scripts that demonstrate
|
574
574
|
how grammars are to be constructed and used. Each Citrus file in the examples
|
575
|
-
directory has an accompanying Ruby file
|
576
|
-
|
575
|
+
directory has an accompanying Ruby file that contains a suite of tests for that
|
576
|
+
particular file.
|
577
577
|
|
578
578
|
The best way to run any of these examples is to pass the name of the Ruby file
|
579
579
|
directly to the Ruby interpreter on the command line, e.g.:
|
580
580
|
|
581
|
-
$ ruby -Ilib examples/
|
581
|
+
$ ruby -Ilib examples/calc_test.rb
|
582
582
|
|
583
583
|
This particular invocation uses the `-I` flag to ensure that you are using the
|
584
584
|
version of Citrus that was bundled with that particular example file (i.e. the
|
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ task :default => :test
|
|
6
6
|
# TESTS #######################################################################
|
7
7
|
|
8
8
|
Rake::TestTask.new(:test) do |t|
|
9
|
-
t.test_files = FileList['test/*_test.rb'] + FileList['examples
|
9
|
+
t.test_files = FileList['test/*_test.rb'] + FileList['examples/*_test.rb']
|
10
10
|
end
|
11
11
|
|
12
12
|
# DOCS ########################################################################
|
data/benchmark/after.dat
ADDED
@@ -0,0 +1,192 @@
|
|
1
|
+
12 0
|
2
|
+
30 0
|
3
|
+
35 0
|
4
|
+
1749 10
|
5
|
+
1962 9
|
6
|
+
2383 9
|
7
|
+
3728 29
|
8
|
+
3919 30
|
9
|
+
3952 30
|
10
|
+
3995 30
|
11
|
+
4063 39
|
12
|
+
4325 30
|
13
|
+
4527 29
|
14
|
+
4570 40
|
15
|
+
4607 39
|
16
|
+
4654 29
|
17
|
+
4679 40
|
18
|
+
4774 39
|
19
|
+
4968 29
|
20
|
+
5059 39
|
21
|
+
5383 49
|
22
|
+
5915 40
|
23
|
+
6109 49
|
24
|
+
6122 49
|
25
|
+
6218 50
|
26
|
+
6332 49
|
27
|
+
6681 59
|
28
|
+
7440 60
|
29
|
+
7530 60
|
30
|
+
7605 60
|
31
|
+
8155 70
|
32
|
+
8402 60
|
33
|
+
8420 60
|
34
|
+
8617 70
|
35
|
+
8635 59
|
36
|
+
8841 70
|
37
|
+
8843 70
|
38
|
+
8852 80
|
39
|
+
9151 69
|
40
|
+
9271 80
|
41
|
+
9521 80
|
42
|
+
9525 69
|
43
|
+
9566 70
|
44
|
+
9584 79
|
45
|
+
9642 70
|
46
|
+
10138 80
|
47
|
+
10181 80
|
48
|
+
10225 80
|
49
|
+
10338 79
|
50
|
+
10449 80
|
51
|
+
10629 80
|
52
|
+
10763 89
|
53
|
+
10817 79
|
54
|
+
11059 80
|
55
|
+
11062 89
|
56
|
+
11215 89
|
57
|
+
11698 89
|
58
|
+
11891 89
|
59
|
+
11945 90
|
60
|
+
11956 89
|
61
|
+
12018 89
|
62
|
+
12053 89
|
63
|
+
12178 100
|
64
|
+
12283 89
|
65
|
+
12326 99
|
66
|
+
12430 99
|
67
|
+
12438 89
|
68
|
+
12572 89
|
69
|
+
12638 100
|
70
|
+
12687 90
|
71
|
+
12703 89
|
72
|
+
12896 99
|
73
|
+
12922 99
|
74
|
+
12996 100
|
75
|
+
13137 110
|
76
|
+
13211 99
|
77
|
+
13462 110
|
78
|
+
13477 109
|
79
|
+
13576 109
|
80
|
+
13577 109
|
81
|
+
13584 99
|
82
|
+
13605 119
|
83
|
+
13631 109
|
84
|
+
14216 109
|
85
|
+
14237 110
|
86
|
+
14260 109
|
87
|
+
14367 120
|
88
|
+
14371 109
|
89
|
+
14741 110
|
90
|
+
14893 129
|
91
|
+
14910 109
|
92
|
+
14917 109
|
93
|
+
14977 109
|
94
|
+
15049 120
|
95
|
+
15191 109
|
96
|
+
15382 120
|
97
|
+
15618 120
|
98
|
+
15623 120
|
99
|
+
15629 120
|
100
|
+
15856 120
|
101
|
+
16496 130
|
102
|
+
16512 130
|
103
|
+
16956 130
|
104
|
+
17074 130
|
105
|
+
17237 129
|
106
|
+
17371 140
|
107
|
+
17568 130
|
108
|
+
17945 139
|
109
|
+
18147 139
|
110
|
+
18343 139
|
111
|
+
18417 139
|
112
|
+
18823 140
|
113
|
+
18970 150
|
114
|
+
19285 150
|
115
|
+
19333 140
|
116
|
+
19500 150
|
117
|
+
19548 149
|
118
|
+
19634 149
|
119
|
+
19673 150
|
120
|
+
19689 160
|
121
|
+
19909 150
|
122
|
+
20054 149
|
123
|
+
20107 150
|
124
|
+
20248 160
|
125
|
+
20580 160
|
126
|
+
20744 160
|
127
|
+
20806 160
|
128
|
+
20954 160
|
129
|
+
21034 160
|
130
|
+
21187 160
|
131
|
+
21303 160
|
132
|
+
21450 160
|
133
|
+
21626 169
|
134
|
+
21931 169
|
135
|
+
21950 169
|
136
|
+
22359 169
|
137
|
+
22626 169
|
138
|
+
22638 169
|
139
|
+
22772 169
|
140
|
+
22885 169
|
141
|
+
22897 170
|
142
|
+
23114 179
|
143
|
+
23242 179
|
144
|
+
23428 180
|
145
|
+
23452 179
|
146
|
+
23495 189
|
147
|
+
23499 180
|
148
|
+
23558 190
|
149
|
+
23744 179
|
150
|
+
23881 180
|
151
|
+
23945 179
|
152
|
+
24361 189
|
153
|
+
24501 190
|
154
|
+
24642 189
|
155
|
+
24672 190
|
156
|
+
24694 190
|
157
|
+
24706 190
|
158
|
+
24931 199
|
159
|
+
25065 189
|
160
|
+
25140 189
|
161
|
+
25402 189
|
162
|
+
25702 199
|
163
|
+
25743 199
|
164
|
+
27139 210
|
165
|
+
27316 209
|
166
|
+
27333 210
|
167
|
+
27414 209
|
168
|
+
27771 220
|
169
|
+
27798 210
|
170
|
+
28583 230
|
171
|
+
28906 219
|
172
|
+
29025 230
|
173
|
+
29209 229
|
174
|
+
29272 219
|
175
|
+
29273 219
|
176
|
+
29359 229
|
177
|
+
29577 220
|
178
|
+
30886 240
|
179
|
+
31170 240
|
180
|
+
31593 240
|
181
|
+
32460 250
|
182
|
+
32486 250
|
183
|
+
32630 250
|
184
|
+
33010 259
|
185
|
+
33137 259
|
186
|
+
33142 250
|
187
|
+
33739 259
|
188
|
+
39880 309
|
189
|
+
39940 319
|
190
|
+
42952 320
|
191
|
+
43227 329
|
192
|
+
52855 420
|
@@ -0,0 +1,192 @@
|
|
1
|
+
12 1
|
2
|
+
30 0
|
3
|
+
35 0
|
4
|
+
1749 59
|
5
|
+
1962 30
|
6
|
+
2383 29
|
7
|
+
3728 50
|
8
|
+
3919 50
|
9
|
+
3952 60
|
10
|
+
3995 130
|
11
|
+
4063 49
|
12
|
+
4325 140
|
13
|
+
4527 109
|
14
|
+
4570 50
|
15
|
+
4607 60
|
16
|
+
4654 89
|
17
|
+
4679 80
|
18
|
+
4774 70
|
19
|
+
4968 80
|
20
|
+
5059 159
|
21
|
+
5383 60
|
22
|
+
5915 80
|
23
|
+
6109 119
|
24
|
+
6122 169
|
25
|
+
6218 69
|
26
|
+
6332 70
|
27
|
+
6681 90
|
28
|
+
7440 89
|
29
|
+
7530 129
|
30
|
+
7605 89
|
31
|
+
8155 159
|
32
|
+
8402 169
|
33
|
+
8420 179
|
34
|
+
8617 100
|
35
|
+
8635 119
|
36
|
+
8841 169
|
37
|
+
8843 169
|
38
|
+
8852 140
|
39
|
+
9151 220
|
40
|
+
9271 169
|
41
|
+
9521 199
|
42
|
+
9525 160
|
43
|
+
9566 120
|
44
|
+
9584 170
|
45
|
+
9642 120
|
46
|
+
10138 200
|
47
|
+
10181 119
|
48
|
+
10225 120
|
49
|
+
10338 149
|
50
|
+
10449 199
|
51
|
+
10629 150
|
52
|
+
10763 189
|
53
|
+
10817 199
|
54
|
+
11059 179
|
55
|
+
11062 179
|
56
|
+
11215 190
|
57
|
+
11698 180
|
58
|
+
11891 219
|
59
|
+
11945 209
|
60
|
+
11956 200
|
61
|
+
12018 170
|
62
|
+
12053 139
|
63
|
+
12178 249
|
64
|
+
12283 199
|
65
|
+
12326 170
|
66
|
+
12430 210
|
67
|
+
12438 180
|
68
|
+
12572 189
|
69
|
+
12638 220
|
70
|
+
12687 209
|
71
|
+
12703 170
|
72
|
+
12896 200
|
73
|
+
12922 229
|
74
|
+
12996 169
|
75
|
+
13137 220
|
76
|
+
13211 219
|
77
|
+
13462 289
|
78
|
+
13477 189
|
79
|
+
13576 220
|
80
|
+
13577 179
|
81
|
+
13584 269
|
82
|
+
13605 209
|
83
|
+
13631 219
|
84
|
+
14216 240
|
85
|
+
14237 190
|
86
|
+
14260 199
|
87
|
+
14367 210
|
88
|
+
14371 240
|
89
|
+
14741 289
|
90
|
+
14893 240
|
91
|
+
14910 189
|
92
|
+
14917 250
|
93
|
+
14977 289
|
94
|
+
15049 250
|
95
|
+
15191 209
|
96
|
+
15382 239
|
97
|
+
15618 269
|
98
|
+
15623 239
|
99
|
+
15629 260
|
100
|
+
15856 259
|
101
|
+
16496 310
|
102
|
+
16512 270
|
103
|
+
16956 279
|
104
|
+
17074 239
|
105
|
+
17237 259
|
106
|
+
17371 289
|
107
|
+
17568 350
|
108
|
+
17945 310
|
109
|
+
18147 250
|
110
|
+
18343 279
|
111
|
+
18417 300
|
112
|
+
18823 310
|
113
|
+
18970 290
|
114
|
+
19285 300
|
115
|
+
19333 299
|
116
|
+
19500 319
|
117
|
+
19548 299
|
118
|
+
19634 300
|
119
|
+
19673 309
|
120
|
+
19689 380
|
121
|
+
19909 310
|
122
|
+
20054 299
|
123
|
+
20107 349
|
124
|
+
20248 299
|
125
|
+
20580 300
|
126
|
+
20744 329
|
127
|
+
20806 340
|
128
|
+
20954 279
|
129
|
+
21034 320
|
130
|
+
21187 300
|
131
|
+
21303 280
|
132
|
+
21450 310
|
133
|
+
21626 339
|
134
|
+
21931 370
|
135
|
+
21950 320
|
136
|
+
22359 379
|
137
|
+
22626 320
|
138
|
+
22638 339
|
139
|
+
22772 359
|
140
|
+
22885 359
|
141
|
+
22897 330
|
142
|
+
23114 330
|
143
|
+
23242 329
|
144
|
+
23428 339
|
145
|
+
23452 339
|
146
|
+
23495 370
|
147
|
+
23499 360
|
148
|
+
23558 350
|
149
|
+
23744 359
|
150
|
+
23881 340
|
151
|
+
23945 320
|
152
|
+
24361 339
|
153
|
+
24501 339
|
154
|
+
24642 400
|
155
|
+
24672 340
|
156
|
+
24694 320
|
157
|
+
24706 349
|
158
|
+
24931 350
|
159
|
+
25065 380
|
160
|
+
25140 350
|
161
|
+
25402 379
|
162
|
+
25702 349
|
163
|
+
25743 429
|
164
|
+
27139 420
|
165
|
+
27316 520
|
166
|
+
27333 410
|
167
|
+
27414 370
|
168
|
+
27771 399
|
169
|
+
27798 410
|
170
|
+
28583 370
|
171
|
+
28906 409
|
172
|
+
29025 519
|
173
|
+
29209 390
|
174
|
+
29272 489
|
175
|
+
29273 449
|
176
|
+
29359 480
|
177
|
+
29577 470
|
178
|
+
30886 510
|
179
|
+
31170 469
|
180
|
+
31593 429
|
181
|
+
32460 519
|
182
|
+
32486 500
|
183
|
+
32630 480
|
184
|
+
33010 469
|
185
|
+
33137 489
|
186
|
+
33142 480
|
187
|
+
33739 560
|
188
|
+
39880 599
|
189
|
+
39940 609
|
190
|
+
42952 629
|
191
|
+
43227 620
|
192
|
+
52855 780
|
data/examples/calc.citrus
CHANGED
@@ -11,8 +11,8 @@ grammar Calc
|
|
11
11
|
end
|
12
12
|
|
13
13
|
rule additive
|
14
|
-
(factor
|
15
|
-
|
14
|
+
(factor operator:('+' | '-') space* term) {
|
15
|
+
factor.value.send(operator.to_s, term.value)
|
16
16
|
}
|
17
17
|
end
|
18
18
|
|
@@ -21,8 +21,8 @@ grammar Calc
|
|
21
21
|
end
|
22
22
|
|
23
23
|
rule multiplicative
|
24
|
-
(prefix
|
25
|
-
|
24
|
+
(prefix operator:('*' | '/' | '%') space* factor) {
|
25
|
+
prefix.value.send(operator.to_s, factor.value)
|
26
26
|
}
|
27
27
|
end
|
28
28
|
|
@@ -31,8 +31,10 @@ grammar Calc
|
|
31
31
|
end
|
32
32
|
|
33
33
|
rule prefixed
|
34
|
-
(
|
35
|
-
|
34
|
+
(operator:('-' | '+' | '~') space* prefix) {
|
35
|
+
s = operator.to_s
|
36
|
+
s += '@' unless s == '~' # Unary + and - require an @.
|
37
|
+
prefix.value.send(s)
|
36
38
|
}
|
37
39
|
end
|
38
40
|
|
@@ -41,8 +43,8 @@ grammar Calc
|
|
41
43
|
end
|
42
44
|
|
43
45
|
rule exponential
|
44
|
-
(primary
|
45
|
-
|
46
|
+
(primary operator:'**' space* prefix) {
|
47
|
+
primary.value.send(operator.to_s, prefix.value)
|
46
48
|
}
|
47
49
|
end
|
48
50
|
|
@@ -63,45 +65,15 @@ grammar Calc
|
|
63
65
|
end
|
64
66
|
|
65
67
|
rule float
|
66
|
-
(digits '.' digits space*) {
|
67
|
-
strip.to_f
|
68
|
-
}
|
68
|
+
(digits '.' digits space*) { to_f }
|
69
69
|
end
|
70
70
|
|
71
71
|
rule integer
|
72
|
-
(digits space*) {
|
73
|
-
strip.to_i
|
74
|
-
}
|
72
|
+
(digits space*) { to_i }
|
75
73
|
end
|
76
74
|
|
77
75
|
rule digits
|
78
|
-
# Numbers may contain underscores
|
79
|
-
[0-9]+ ('_' [0-9]+)*
|
80
|
-
end
|
81
|
-
|
82
|
-
rule additive_operator
|
83
|
-
(('+' | '-') space*) { |a, b|
|
84
|
-
a.send(strip, b)
|
85
|
-
}
|
86
|
-
end
|
87
|
-
|
88
|
-
rule multiplicative_operator
|
89
|
-
(('*' | '/' | '%') space*) { |a, b|
|
90
|
-
a.send(strip, b)
|
91
|
-
}
|
92
|
-
end
|
93
|
-
|
94
|
-
rule exponential_operator
|
95
|
-
('**' space*) { |a, b|
|
96
|
-
a ** b
|
97
|
-
}
|
98
|
-
end
|
99
|
-
|
100
|
-
rule unary_operator
|
101
|
-
(('~' | '+' | '-') space*) { |n|
|
102
|
-
# Unary + and - require an @.
|
103
|
-
n.send(strip == '~' ? strip : '%s@' % strip)
|
104
|
-
}
|
76
|
+
[0-9]+ ('_' [0-9]+)* # Numbers may contain underscores.
|
105
77
|
end
|
106
78
|
|
107
79
|
rule lparen '(' space* end
|